forked from lix-project/lix
libexpr/nix2: Remove CR line endings
Change-Id: Ib4946c9975804e02ea7584e0c7373c82ed4961f9
This commit is contained in:
parent
dc3c4d9fbf
commit
51d9bdcc68
|
@ -15,9 +15,8 @@
|
|||
// meant to be language versions or have any other semantic meaning.
|
||||
|
||||
// NOTE
|
||||
// nix line endings are \n, \r\n, \r. the grammar does not use eol or
|
||||
// eolf rules in favor of reproducing the old flex lexer as faithfully as
|
||||
// possible, and deferring calculation of positions to downstream users.
|
||||
// nix line endings are \n, \r\n, *not* \r. Line endings in strings are
|
||||
// normalized to \n.
|
||||
|
||||
namespace nix::parser::grammar::v2 {
|
||||
|
||||
|
@ -157,9 +156,17 @@ struct floating : p::seq<
|
|||
p::must<p::not_at<_extend_as_path>>
|
||||
> {};
|
||||
|
||||
// LF or CRLF
|
||||
struct eol : p::sor<
|
||||
p8::one<'\n'>,
|
||||
p::seq<p8::one<'\r'>, p::must<p8::one<'\n'>>>
|
||||
> {};
|
||||
|
||||
// Spacing including comments
|
||||
struct sep : p::sor<
|
||||
p::plus<p8::one<' ', '\t', '\r', '\n'>>,
|
||||
p::seq<p8::one<'#'>, p::star<p8::not_one<'\r', '\n'>>>,
|
||||
p::plus<p8::one<' ', '\t', '\n'>>,
|
||||
eol,
|
||||
p::seq<p8::one<'#'>, p::until<eol>>,
|
||||
p::seq<p8::string<'/', '*'>, p::until<p8::string<'*', '/'>>>
|
||||
> {};
|
||||
|
||||
|
@ -180,7 +187,7 @@ struct expr;
|
|||
struct _string {
|
||||
template<typename... Inner>
|
||||
struct literal : semantic, p::seq<Inner...> {};
|
||||
struct cr_lf : semantic, p::seq<p8::one<'\r'>, p::opt<p8::one<'\n'>>> {};
|
||||
struct cr_lf : semantic, p::seq<p8::one<'\r'>, p::must<p8::one<'\n'>>> {};
|
||||
struct interpolation : semantic, p::seq<
|
||||
p8::string<'$', '{'>, seps,
|
||||
p::must<expr>, seps,
|
||||
|
|
|
@ -23,6 +23,7 @@ inline constexpr const char * error_message = nullptr;
|
|||
template<> inline constexpr auto error_message<__VA_ARGS__>
|
||||
|
||||
// These are used everywhere the are wrapped in `must<…>` when parsing fails (instead of the usual backtracking)
|
||||
error_message_for(p8::one<'\n'>) = "line endings must be LF or CRLF, found lone \\r";
|
||||
error_message_for(p8::one<'{'>) = "expecting '{'";
|
||||
error_message_for(p8::one<'}'>) = "expecting '}'";
|
||||
error_message_for(p8::one<'"'>) = "expecting '\"'";
|
||||
|
|
|
@ -205,6 +205,7 @@ constexpr std::array<ExperimentalFeatureDetails, numXpFeatures> xpFeatureDetails
|
|||
- Interpolation in identifiers needs to always be wrapped in $\{}; `"foo ${bar}"` is not a valid identifier anymore.
|
||||
- Removed ancient `let {` syntax. See also the `ancient-let` deprecated feature
|
||||
- All Nix code must now be fully valid UTF-8 text.
|
||||
- Line endings must be LF or CLRF, not CR.
|
||||
)",
|
||||
},
|
||||
{
|
||||
|
|
6
tests/functional/lang/parse-fail-eol-2-2.err.exp
Normal file
6
tests/functional/lang/parse-fail-eol-2-2.err.exp
Normal file
|
@ -0,0 +1,6 @@
|
|||
error: syntax error, line endings must be LF or CRLF, found lone \r
|
||||
at «stdin»:2:1:
|
||||
1| # foo
|
||||
2| invalid
|
||||
| ^
|
||||
3| # bar
|
1
tests/functional/lang/parse-fail-eol-2-2.flags
Normal file
1
tests/functional/lang/parse-fail-eol-2-2.flags
Normal file
|
@ -0,0 +1 @@
|
|||
--extra-experimental-features nix-lang2
|
1
tests/functional/lang/parse-fail-eol-2-2.nix
Symbolic link
1
tests/functional/lang/parse-fail-eol-2-2.nix
Symbolic link
|
@ -0,0 +1 @@
|
|||
parse-fail-eol-2.nix
|
Loading…
Reference in a new issue