JustDummies

Juste des dummies, mais redoutablement efficaces.

Sections de la documentation

JD026 : EmptyRelativeUri

PropriétéValeur
CatégorieContraintes (JustDummies.Constraints)
Sévérité🟡 Avertissement
Activée par défautOui

La chaîne décrit la référence vide, ce qu’aucune URI ne peut être : une URI relative à exactement zéro segment de chemin, sans requête, sans fragment et sans racine se rend comme la chaîne vide.

Non conforme

Any.Uri().Relative().WithPathSegments(0)            // JD026 : plus rien à rendre

Conforme

Any.Uri().Relative().WithPathSegments(0).WithQuery()      // "?page=2"
Any.Uri().Relative().WithPathSegments(0).WithFragment()   // "#top"
Any.Uri().Relative().Rooted().WithPathSegments(0)         // "/"
Any.Uri().Relative().WithPathSegments(1)                  // "orders"

N’importe laquelle des quatre suffit : la référence a seulement besoin de quelque chose à rendre.

Pourquoi celle-ci mérite une règle

La bibliothèque le signale déjà — mais seulement à Generate(). C’est le seul membre de la famille des contraintes dont l’échec atterrit au moment de l’act plutôt que sur la ligne d’arrange, parce que la vacuité ne se décide qu’une fois les composants tirés :

AnyGenerationException: A relative URI with exactly 0 path segments and no query,
fragment or root is empty, which is not a valid URI reference. Add a query, a
fragment, Rooted(), or a positive segment count.

Le message est clair ; la pile ne l’est pas. Elle désigne le code sous test, à plusieurs cadres de la déclaration fautive — et, quand la chaîne vit dans une fixture partagée, dans un test qui ne parle jamais d’URI. Ramener le signalement au moment de la compilation est tout l’intérêt de la règle.

Ce qui n’est pas signalé

  • Une famille non relative. Web(), WebSocket() et Ftp() portent une autorité : un chemin de zéro segment se rend quand même en / et la référence reste valide.
  • Un nombre de segments qui n’est pas une constante de compilation.

Lire la source, ou la corriger là-bas ouvre un nouvel onglet· Repris depuis lib-v1.0.0-preview.6