mirror of
https://github.com/NixOS/nix.git
synced 2025-11-11 21:16:02 +01:00
Add warn-short-path-literals setting
Add a new setting to warn about path literals that don't start with "." or "/". When enabled, expressions like `foo/bar` will emit a warning suggesting to use `./foo/bar` instead. A functional test is included. The setting defaults to false for backward compatibility but could eventually default to true in the future. Closes: #13374 Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
This commit is contained in:
parent
47f5e5fbef
commit
6d46dc9f6a
4 changed files with 80 additions and 0 deletions
|
|
@ -327,6 +327,21 @@ struct EvalSettings : Config
|
|||
|
||||
This option can be enabled by setting `NIX_ABORT_ON_WARN=1` in the environment.
|
||||
)"};
|
||||
|
||||
Setting<bool> warnShortPathLiterals{
|
||||
this,
|
||||
false,
|
||||
"warn-short-path-literals",
|
||||
R"(
|
||||
If set to true, the Nix evaluator will warn when encountering relative path literals
|
||||
that don't start with `./` or `../`.
|
||||
|
||||
For example, with this setting enabled, `foo/bar` would emit a warning
|
||||
suggesting to use `./foo/bar` instead.
|
||||
|
||||
This is useful for improving code readability and making path literals
|
||||
more explicit.
|
||||
)"};
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -365,6 +365,15 @@ string_parts_interpolated
|
|||
path_start
|
||||
: PATH {
|
||||
std::string_view literal({$1.p, $1.l});
|
||||
|
||||
/* check for short path literals */
|
||||
if (state->settings.warnShortPathLiterals && literal.front() != '/' && literal.front() != '.') {
|
||||
logWarning({
|
||||
.msg = HintFmt("relative path literal '%s' should be prefixed with '.' for clarity: './%s'. (" ANSI_BOLD "warn-short-path-literals" ANSI_NORMAL " = true)", literal, literal),
|
||||
.pos = state->positions[CUR_POS]
|
||||
});
|
||||
}
|
||||
|
||||
Path path(absPath(literal, state->basePath.path.abs()));
|
||||
/* add back in the trailing '/' to the first segment */
|
||||
if (literal.size() > 1 && literal.back() == '/')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue