diff --git a/src/Compiler/SyntaxTree/LexFilter.fs b/src/Compiler/SyntaxTree/LexFilter.fs index c90539ad3f8..1c5b635498d 100644 --- a/src/Compiler/SyntaxTree/LexFilter.fs +++ b/src/Compiler/SyntaxTree/LexFilter.fs @@ -49,7 +49,7 @@ type Context = | CtxtTypeDefns of Position // 'type =', not removed when we find the "=" | CtxtNamespaceHead of Position * token - | CtxtModuleHead of Position * token * LexingModuleAttributes + | CtxtModuleHead of Position * token * LexingModuleAttributes * isNested: bool | CtxtMemberHead of Position | CtxtMemberBody of Position // If bool is true then this is "whole file" @@ -68,7 +68,7 @@ type Context = member c.StartPos = match c with - | CtxtNamespaceHead (p, _) | CtxtModuleHead (p, _, _) | CtxtException p | CtxtModuleBody (p, _) | CtxtNamespaceBody p + | CtxtNamespaceHead (p, _) | CtxtModuleHead (p, _, _, _) | CtxtException p | CtxtModuleBody (p, _) | CtxtNamespaceBody p | CtxtLetDecl (_, p) | CtxtDo p | CtxtInterfaceHead p | CtxtTypeDefns p | CtxtParen (_, p) | CtxtMemberHead p | CtxtMemberBody p | CtxtWithAsLet p | CtxtWithAsAugment p @@ -1393,6 +1393,9 @@ type LexFilterImpl ( | CtxtSeqBlock(_, _, AddOneSidedBlockEnd) -> Some (ORIGHT_BLOCK_END(getLastTokenEndRange ())) + | CtxtModuleHead(isNested = true) -> + Some OBLOCKSEP + | _ -> None @@ -1598,11 +1601,11 @@ type LexFilterImpl ( // Otherwise it's a 'head' module declaration, so ignore it // Here prevToken is either 'module', 'rec', 'global' (invalid), '.', or ident, because we skip attribute tokens and access modifier tokens - | _, CtxtModuleHead (moduleTokenPos, prevToken, lexingModuleAttributes) :: rest -> + | _, CtxtModuleHead (moduleTokenPos, prevToken, lexingModuleAttributes, isNested) :: rest -> match prevToken, token with | _, GREATER_RBRACK when lexingModuleAttributes = LexingModuleAttributes && moduleTokenPos.Column < tokenStartPos.Column -> - replaceCtxt tokenTup (CtxtModuleHead (moduleTokenPos, prevToken, NotLexingModuleAttributes)) + replaceCtxt tokenTup (CtxtModuleHead (moduleTokenPos, prevToken, NotLexingModuleAttributes, isNested)) returnToken tokenLexbufState token | _ when lexingModuleAttributes = LexingModuleAttributes && moduleTokenPos.Column < tokenStartPos.Column -> @@ -1612,10 +1615,10 @@ type LexFilterImpl ( | MODULE, GLOBAL | (MODULE | REC | DOT), (REC | IDENT _) | IDENT _, DOT when moduleTokenPos.Column < tokenStartPos.Column -> - replaceCtxt tokenTup (CtxtModuleHead (moduleTokenPos, token, NotLexingModuleAttributes)) + replaceCtxt tokenTup (CtxtModuleHead (moduleTokenPos, token, NotLexingModuleAttributes, isNested)) returnToken tokenLexbufState token | MODULE, LBRACK_LESS when moduleTokenPos.Column < tokenStartPos.Column -> - replaceCtxt tokenTup (CtxtModuleHead (moduleTokenPos, prevToken, LexingModuleAttributes)) + replaceCtxt tokenTup (CtxtModuleHead (moduleTokenPos, prevToken, LexingModuleAttributes, isNested)) returnToken tokenLexbufState token | _, (EQUALS | COLON) -> if debug then dprintf "CtxtModuleHead: COLON/EQUALS, pushing CtxtModuleBody and CtxtSeqBlock\n" @@ -1643,7 +1646,7 @@ type LexFilterImpl ( // and we've encountered declarations below if debug then dprintf "CtxtModuleHead: not start of file, popping CtxtModuleHead\n" popCtxt() - reprocessWithoutBlockRule() + insertTokenFromPrevPosToCurrentPos OBLOCKSEP // Offside rule for SeqBlock. // f x @@ -1972,7 +1975,8 @@ type LexFilterImpl ( | MODULE, _ :: _ -> insertComingSoonTokens("MODULE", MODULE_COMING_SOON, MODULE_IS_HERE) if debug then dprintf "MODULE: entering CtxtModuleHead, awaiting EQUALS to go to CtxtSeqBlock (%a)\n" outputPos tokenStartPos - pushCtxt tokenTup (CtxtModuleHead (tokenStartPos, token, NotLexingModuleAttributes)) + let isNested = match offsideStack with | [ CtxtSeqBlock _ ] -> false | _ -> true + pushCtxt tokenTup (CtxtModuleHead (tokenStartPos, token, NotLexingModuleAttributes, isNested)) pool.Return tokenTup hwTokenFetch useBlockRule diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index e35eb962f6d..0509f867c73 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -521,6 +521,12 @@ moduleIntro: let mModule = rhs parseState 1 mModule, $4, $5.LongIdent, $3, $2 } + | moduleKeyword opt_attributes opt_access opt_rec OBLOCKSEP + { if not (isNil $2) then + parseState.LexBuffer.CheckLanguageFeatureAndRecover LanguageFeature.AttributesToRightOfModuleKeyword (rhs parseState 4) + let mModule = rhs parseState 1 + mModule, $4, [], $3, $2 } + /* The start of a namespace declaration */ namespaceIntro: diff --git a/tests/fsharp/typecheck/sigs/neg41.bsl b/tests/fsharp/typecheck/sigs/neg41.bsl index 18115064cc9..122351ab76c 100644 --- a/tests/fsharp/typecheck/sigs/neg41.bsl +++ b/tests/fsharp/typecheck/sigs/neg41.bsl @@ -1,2 +1,2 @@ -neg41.fs(3,1,3,5): parse error FS0010: Unexpected keyword 'type' in definition. Expected '=' or other token. +neg41.fs(2,20,3,1): parse error FS0010: Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/fsharp/typecheck/sigs/neg42.bsl b/tests/fsharp/typecheck/sigs/neg42.bsl index 3dec6d2329b..9f2bba6bf0d 100644 --- a/tests/fsharp/typecheck/sigs/neg42.bsl +++ b/tests/fsharp/typecheck/sigs/neg42.bsl @@ -1,2 +1,2 @@ -neg42.fsi(3,1,3,5): parse error FS0010: Unexpected keyword 'type' in signature file. Expected ':', '=' or other token. +neg42.fsi(2,20,3,1): parse error FS0010: Incomplete structured construct at or before this point in signature file. Expected ':', '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 03.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 03.fs new file mode 100644 index 00000000000..90d76105dbc --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 03.fs @@ -0,0 +1,5 @@ +module Module + +module A + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 03.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 03.fs.bsl new file mode 100644 index 00000000000..44ab73f81ad --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 03.fs.bsl @@ -0,0 +1,20 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 03.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, [], false, (3,0--3,8), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None }); + Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,9)-(5,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 04.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 04.fs new file mode 100644 index 00000000000..2f61714c416 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 04.fs @@ -0,0 +1,5 @@ +module Module + +module + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 04.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 04.fs.bsl new file mode 100644 index 00000000000..4208cc94225 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 04.fs.bsl @@ -0,0 +1,20 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 04.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--5,0)), false, [], false, (3,0--5,0), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None }); + Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,7)-(5,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 05.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 05.fs new file mode 100644 index 00000000000..3d3602d9735 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 05.fs @@ -0,0 +1,5 @@ +module Module + +module rec + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 05.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 05.fs.bsl new file mode 100644 index 00000000000..53b4a1f12df --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 05.fs.bsl @@ -0,0 +1,20 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 05.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--5,0)), true, [], false, (3,0--5,0), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None }); + Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,11)-(5,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 06.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 06.fs new file mode 100644 index 00000000000..20c697536eb --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 06.fs @@ -0,0 +1,5 @@ +module Module + +module rec A + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 06.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 06.fs.bsl new file mode 100644 index 00000000000..d6875779d2f --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 06.fs.bsl @@ -0,0 +1,20 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 06.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,12)), true, [], false, (3,0--3,12), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None }); + Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,13)-(5,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 07.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 07.fs new file mode 100644 index 00000000000..c37b1641337 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 07.fs @@ -0,0 +1,6 @@ +module Module + +module A = + module + +2 diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 07.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 07.fs.bsl new file mode 100644 index 00000000000..569bdfe5811 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 07.fs.bsl @@ -0,0 +1,27 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 07.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, + [NestedModule + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (4,4--6,0)), false, [], false, (4,4--6,0), + { ModuleKeyword = Some (4,4--4,10) + EqualsRange = None })], false, (3,0--6,0), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = Some (3,9--3,10) }); + Expr (Const (Int32 2, (6,0--6,1)), (6,0--6,1))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(6,0)-(6,1) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 08.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 08.fs new file mode 100644 index 00000000000..c73c8b4320b --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 08.fs @@ -0,0 +1,6 @@ +module Module + +module A = + module B + + 2 diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 08.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 08.fs.bsl new file mode 100644 index 00000000000..1b6fcc1a41c --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 08.fs.bsl @@ -0,0 +1,27 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 08.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, + [NestedModule + (SynComponentInfo + ([], None, [], [B], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (4,4--4,12)), false, [], false, (4,4--4,12), + { ModuleKeyword = Some (4,4--4,10) + EqualsRange = None }); + Expr (Const (Int32 2, (6,4--6,5)), (6,4--6,5))], false, + (3,0--6,5), { ModuleKeyword = Some (3,0--3,6) + EqualsRange = Some (3,9--3,10) })], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,13)-(6,4) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 09.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 09.fs new file mode 100644 index 00000000000..e5d48898ea2 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 09.fs @@ -0,0 +1,6 @@ +module Module + +module A = + module B = + + 2 diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 09.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 09.fs.bsl new file mode 100644 index 00000000000..ce79f7aba8d --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 09.fs.bsl @@ -0,0 +1,28 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 09.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, + [NestedModule + (SynComponentInfo + ([], None, [], [B], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (4,4--4,12)), false, [], false, (4,4--4,14), + { ModuleKeyword = Some (4,4--4,10) + EqualsRange = Some (4,13--4,14) }); + Expr (Const (Int32 2, (6,4--6,5)), (6,4--6,5))], false, + (3,0--6,5), { ModuleKeyword = Some (3,0--3,6) + EqualsRange = Some (3,9--3,10) })], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(6,4)-(6,5) parse error Possible incorrect indentation: this token is offside of context started at position (4:5). Try indenting this token further or using standard formatting conventions. +(6,4)-(6,5) parse error Incomplete structured construct at or before this point in definition diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 10.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 10.fs new file mode 100644 index 00000000000..136af483ef1 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 10.fs @@ -0,0 +1,6 @@ +module Module + +module A = + module + + 2 diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 10.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 10.fs.bsl new file mode 100644 index 00000000000..4605fc9a35d --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 10.fs.bsl @@ -0,0 +1,27 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 10.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, + [NestedModule + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (4,4--6,4)), false, [], false, (4,4--6,4), + { ModuleKeyword = Some (4,4--4,10) + EqualsRange = None }); + Expr (Const (Int32 2, (6,4--6,5)), (6,4--6,5))], false, + (3,0--6,5), { ModuleKeyword = Some (3,0--3,6) + EqualsRange = Some (3,9--3,10) })], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,11)-(6,4) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 11.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 11.fs new file mode 100644 index 00000000000..f1284331320 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 11.fs @@ -0,0 +1,5 @@ +module Module + +module + +A diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 11.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 11.fs.bsl new file mode 100644 index 00000000000..181836a8b7f --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 11.fs.bsl @@ -0,0 +1,19 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 11.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--5,0)), false, [], false, (3,0--5,0), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None }); Expr (Ident A, (5,0--5,1))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,7)-(5,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 12.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 12.fs new file mode 100644 index 00000000000..a2fe094f382 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 12.fs @@ -0,0 +1,3 @@ +module Module + +module diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 12.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 12.fs.bsl new file mode 100644 index 00000000000..eb79389bb5c --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 12.fs.bsl @@ -0,0 +1,19 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 12.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--4,0)), false, [], false, (3,0--4,0), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None })], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,0), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 13.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 13.fs new file mode 100644 index 00000000000..9d2084ebc72 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 13.fs @@ -0,0 +1,3 @@ +module Module + +module A diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 13.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 13.fs.bsl new file mode 100644 index 00000000000..c57a57743cb --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 13.fs.bsl @@ -0,0 +1,19 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 13.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, [], false, (3,0--3,8), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None })], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,8), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 14.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 14.fs new file mode 100644 index 00000000000..97b86766455 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 14.fs @@ -0,0 +1,3 @@ +module Module + +module A = diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 14.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 14.fs.bsl new file mode 100644 index 00000000000..8417322a575 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 14.fs.bsl @@ -0,0 +1,20 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 14.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, [], false, (3,0--3,10), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = Some (3,9--3,10) })], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,0) parse error Possible incorrect indentation: this token is offside of context started at position (3:1). Try indenting this token further or using standard formatting conventions. +(4,0)-(4,0) parse error Incomplete structured construct at or before this point in definition diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 15.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 15.fs new file mode 100644 index 00000000000..e8bc9fdc187 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 15.fs @@ -0,0 +1,3 @@ +namespace Ns + +module A = diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 15.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 15.fs.bsl new file mode 100644 index 00000000000..bb23f859ec8 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 15.fs.bsl @@ -0,0 +1,19 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 15.fs", false, + QualifiedNameOfFile Nested module 15, [], [], + [SynModuleOrNamespace + ([Ns], false, DeclaredNamespace, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, [], false, (3,0--3,10), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = Some (3,9--3,10) })], PreXmlDocEmpty, [], None, + (1,0--3,10), { LeadingKeyword = Namespace (1,0--1,9) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,0) parse error Possible incorrect indentation: this token is offside of context started at position (3:1). Try indenting this token further or using standard formatting conventions. +(4,0)-(4,0) parse error Incomplete structured construct at or before this point in definition diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 16.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 16.fs new file mode 100644 index 00000000000..7debb3295b5 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 16.fs @@ -0,0 +1,3 @@ +namespace Ns + +module A diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 16.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 16.fs.bsl new file mode 100644 index 00000000000..2ce127eef5d --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 16.fs.bsl @@ -0,0 +1,18 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 16.fs", false, + QualifiedNameOfFile Nested module 16, [], [], + [SynModuleOrNamespace + ([Ns], false, DeclaredNamespace, + [NestedModule + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--3,8)), false, [], false, (3,0--3,8), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None })], PreXmlDocEmpty, [], None, (1,0--3,8), + { LeadingKeyword = Namespace (1,0--1,9) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 17.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 17.fs new file mode 100644 index 00000000000..4baf660a9b5 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 17.fs @@ -0,0 +1,3 @@ +namespace Ns + +module diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 17.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 17.fs.bsl new file mode 100644 index 00000000000..4e5dd1a1914 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Nested module 17.fs.bsl @@ -0,0 +1,18 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Nested module 17.fs", false, + QualifiedNameOfFile Nested module 17, [], [], + [SynModuleOrNamespace + ([Ns], false, DeclaredNamespace, + [NestedModule + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, + None, (3,0--4,0)), false, [], false, (3,0--4,0), + { ModuleKeyword = Some (3,0--3,6) + EqualsRange = None })], PreXmlDocEmpty, [], None, (1,0--4,0), + { LeadingKeyword = Namespace (1,0--1,9) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,0) parse error Incomplete structured construct at or before this point in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleShouldBePresent.fs b/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleShouldBePresent.fs deleted file mode 100644 index 30cb557e092..00000000000 --- a/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleShouldBePresent.fs +++ /dev/null @@ -1,5 +0,0 @@ -module A.B - -module C - -let a = () \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleShouldBePresent.fs.bsl b/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleShouldBePresent.fs.bsl deleted file mode 100644 index 5ab8dedcebc..00000000000 --- a/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleShouldBePresent.fs.bsl +++ /dev/null @@ -1,31 +0,0 @@ -ImplFile - (ParsedImplFileInput - ("/root/NestedModule/IncompleteNestedModuleShouldBePresent.fs", false, - QualifiedNameOfFile A.B, [], [], - [SynModuleOrNamespace - ([A; B], false, NamedModule, - [NestedModule - (SynComponentInfo - ([], None, [], [C], - PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false, - None, (3,0--3,8)), false, [], false, (3,0--3,8), - { ModuleKeyword = Some (3,0--3,6) - EqualsRange = None }); - Let - (false, - [SynBinding - (None, Normal, false, false, [], - PreXmlDoc ((5,0), FSharp.Compiler.Xml.XmlDocCollector), - SynValData - (None, SynValInfo ([], SynArgInfo ([], false, None)), None), - Named (SynIdent (a, None), false, None, (5,4--5,5)), None, - Const (Unit, (5,8--5,10)), (5,4--5,5), Yes (5,0--5,10), - { LeadingKeyword = Let (5,0--5,3) - InlineKeyword = None - EqualsRange = Some (5,6--5,7) })], (5,0--5,10))], - PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, - (1,0--5,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true), - { ConditionalDirectives = [] - CodeComments = [] }, set [])) - -(5,0)-(5,3) parse error Unexpected keyword 'let' or 'use' in definition. Expected '=' or other token. diff --git a/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleSigShouldBePresent.fsi.bsl b/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleSigShouldBePresent.fsi.bsl index eafee5cf745..9c697d753d9 100644 --- a/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleSigShouldBePresent.fsi.bsl +++ b/tests/service/data/SyntaxTree/NestedModule/IncompleteNestedModuleSigShouldBePresent.fsi.bsl @@ -26,4 +26,4 @@ SigFile { ConditionalDirectives = [] CodeComments = [] }, set [])) -(5,0)-(5,3) parse error Unexpected keyword 'val' in signature file. Expected ':', '=' or other token. +(3,9)-(5,0) parse error Incomplete structured construct at or before this point in signature file. Expected ':', '=' or other token.