From 04e19c84f8f05643f6b3a852d402f163a44af525 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 27 Oct 2023 20:15:40 +0200 Subject: [PATCH] Lexer: report missing error on `~` --- src/Compiler/lex.fsl | 4 +++- .../Expression/Unary - Reserved 01.fs | 3 +++ .../Expression/Unary - Reserved 01.fs.bsl | 17 +++++++++++++++++ .../Expression/Unary - Reserved 02.fs | 3 +++ .../Expression/Unary - Reserved 02.fs.bsl | 19 +++++++++++++++++++ 5 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs create mode 100644 tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs create mode 100644 tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs.bsl diff --git a/src/Compiler/lex.fsl b/src/Compiler/lex.fsl index b3ddfad4a13..995f3fe09c0 100644 --- a/src/Compiler/lex.fsl +++ b/src/Compiler/lex.fsl @@ -939,7 +939,9 @@ rule token (args: LexArgs) (skip: bool) = parse | "-" { MINUS } - | "~" { RESERVED } + | "~" + { errorR (Error(FSComp.SR.lexInvalidIdentifier(), lexbuf.LexemeRange)) + RESERVED } | ignored_op_char* '*' '*' op_char* { checkExprOp lexbuf; INFIX_STAR_STAR_OP(lexeme lexbuf) } diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs new file mode 100644 index 00000000000..474693d2043 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs @@ -0,0 +1,3 @@ +module Module + +~x diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs.bsl b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs.bsl new file mode 100644 index 00000000000..0ef183357aa --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs.bsl @@ -0,0 +1,17 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Unary - Reserved 01.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Expr + (App + (NonAtomic, false, + ArbitraryAfterError ("unfinished identifier", (3,0--3,1)), + Ident x, (3,0--3,2)), (3,0--3,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,1) parse error This is not a valid identifier diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs new file mode 100644 index 00000000000..e848e499d1d --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs @@ -0,0 +1,3 @@ +module Module + +x ~ y diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs.bsl b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs.bsl new file mode 100644 index 00000000000..d246acbd5b9 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs.bsl @@ -0,0 +1,19 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Unary - Reserved 02.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Expr + (App + (NonAtomic, false, + App + (NonAtomic, false, Ident x, + ArbitraryAfterError ("unfinished identifier", (3,2--3,3)), + (3,0--3,3)), Ident y, (3,0--3,5)), (3,0--3,5))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,2)-(3,3) parse error This is not a valid identifier