From 82c833dcbc3cb7effb119ad3e7bea070966d3320 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 15 Jun 2023 16:12:09 +0200 Subject: [PATCH 01/11] Parser: recover on unfinished 'type' declarations --- src/Compiler/Driver/CompilerDiagnostics.fs | 2 +- src/Compiler/SyntaxTree/LexFilter.fs | 5 +- src/Compiler/SyntaxTree/SyntaxTrivia.fs | 7 +++ src/Compiler/SyntaxTree/SyntaxTrivia.fsi | 8 +++- src/Compiler/pars.fsy | 6 ++- .../Try with - Missing expr 05.fs.bsl | 2 +- .../SyntaxTree/Expression/Typed 01.fs.bsl | 2 +- .../SyntaxTree/Expression/Typed 02.fs.bsl | 2 +- .../data/SyntaxTree/Member/Interface 06.fs | 6 +++ .../SyntaxTree/Member/Interface 06.fs.bsl | 39 +++++++++++++++ .../data/SyntaxTree/Member/Interface 07.fs | 6 +++ .../SyntaxTree/Member/Interface 07.fs.bsl | 47 +++++++++++++++++++ ...ShouldContainsTheRangeOfTheWithKeyword.fsi | 5 -- .../data/SyntaxTree/SignatureType/With 01.fsi | 4 ++ ...TheWithKeyword.fsi.bsl => With 01.fsi.bsl} | 30 ++++++------ tests/service/data/SyntaxTree/Type/And 01.fs | 7 +++ .../data/SyntaxTree/Type/And 01.fs.bsl | 45 ++++++++++++++++++ tests/service/data/SyntaxTree/Type/And 02.fs | 7 +++ .../data/SyntaxTree/Type/And 02.fs.bsl | 43 +++++++++++++++++ tests/service/data/SyntaxTree/Type/And 03.fs | 7 +++ .../data/SyntaxTree/Type/And 03.fs.bsl | 45 ++++++++++++++++++ tests/service/data/SyntaxTree/Type/And 04.fs | 5 ++ .../data/SyntaxTree/Type/And 04.fs.bsl | 33 +++++++++++++ tests/service/data/SyntaxTree/Type/And 05.fs | 5 ++ .../data/SyntaxTree/Type/And 05.fs.bsl | 31 ++++++++++++ tests/service/data/SyntaxTree/Type/And 06.fs | 5 ++ .../data/SyntaxTree/Type/And 06.fs.bsl | 34 ++++++++++++++ tests/service/data/SyntaxTree/Type/Type 01.fs | 5 ++ .../data/SyntaxTree/Type/Type 01.fs.bsl | 22 +++++++++ tests/service/data/SyntaxTree/Type/Type 02.fs | 5 ++ .../data/SyntaxTree/Type/Type 02.fs.bsl | 20 ++++++++ tests/service/data/SyntaxTree/Type/Type 03.fs | 5 ++ .../data/SyntaxTree/Type/Type 03.fs.bsl | 22 +++++++++ tests/service/data/SyntaxTree/Type/Type 04.fs | 5 ++ .../data/SyntaxTree/Type/Type 04.fs.bsl | 34 ++++++++++++++ tests/service/data/SyntaxTree/Type/With 01.fs | 6 +++ .../data/SyntaxTree/Type/With 01.fs.bsl | 43 +++++++++++++++++ tests/service/data/SyntaxTree/Type/With 02.fs | 6 +++ .../data/SyntaxTree/Type/With 02.fs.bsl | 22 +++++++++ tests/service/data/SyntaxTree/Type/With 03.fs | 5 ++ .../data/SyntaxTree/Type/With 03.fs.bsl | 22 +++++++++ 41 files changed, 632 insertions(+), 28 deletions(-) create mode 100644 tests/service/data/SyntaxTree/Member/Interface 06.fs create mode 100644 tests/service/data/SyntaxTree/Member/Interface 06.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Interface 07.fs create mode 100644 tests/service/data/SyntaxTree/Member/Interface 07.fs.bsl delete mode 100644 tests/service/data/SyntaxTree/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi create mode 100644 tests/service/data/SyntaxTree/SignatureType/With 01.fsi rename tests/service/data/SyntaxTree/SignatureType/{SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi.bsl => With 01.fsi.bsl} (56%) create mode 100644 tests/service/data/SyntaxTree/Type/And 01.fs create mode 100644 tests/service/data/SyntaxTree/Type/And 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/And 02.fs create mode 100644 tests/service/data/SyntaxTree/Type/And 02.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/And 03.fs create mode 100644 tests/service/data/SyntaxTree/Type/And 03.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/And 04.fs create mode 100644 tests/service/data/SyntaxTree/Type/And 04.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/And 05.fs create mode 100644 tests/service/data/SyntaxTree/Type/And 05.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/And 06.fs create mode 100644 tests/service/data/SyntaxTree/Type/And 06.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Type 01.fs create mode 100644 tests/service/data/SyntaxTree/Type/Type 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Type 02.fs create mode 100644 tests/service/data/SyntaxTree/Type/Type 02.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Type 03.fs create mode 100644 tests/service/data/SyntaxTree/Type/Type 03.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Type 04.fs create mode 100644 tests/service/data/SyntaxTree/Type/Type 04.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/With 01.fs create mode 100644 tests/service/data/SyntaxTree/Type/With 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/With 02.fs create mode 100644 tests/service/data/SyntaxTree/Type/With 02.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/With 03.fs create mode 100644 tests/service/data/SyntaxTree/Type/With 03.fs.bsl diff --git a/src/Compiler/Driver/CompilerDiagnostics.fs b/src/Compiler/Driver/CompilerDiagnostics.fs index 7e32d78911..3dbb92cdc7 100644 --- a/src/Compiler/Driver/CompilerDiagnostics.fs +++ b/src/Compiler/Driver/CompilerDiagnostics.fs @@ -1467,8 +1467,8 @@ type Exception with ctxt.ShiftTokens |> List.map Parser.tokenTagToTokenId |> List.filter (function + | EndOfStructuredConstructToken | Parser.TOKEN_error - | Parser.TOKEN_OBLOCKSEP | Parser.TOKEN_EOF -> false | _ -> true) |> List.map tokenIdToText diff --git a/src/Compiler/SyntaxTree/LexFilter.fs b/src/Compiler/SyntaxTree/LexFilter.fs index 1c5b635498..09bc37e0c5 100644 --- a/src/Compiler/SyntaxTree/LexFilter.fs +++ b/src/Compiler/SyntaxTree/LexFilter.fs @@ -751,6 +751,9 @@ type LexFilterImpl ( | CtxtSeqBlock(FirstInSeqBlock, _, _), (CtxtDo _ as limitCtxt) :: CtxtSeqBlock _ :: (CtxtTypeDefns _ | CtxtModuleBody _) :: _ -> PositionWithColumn(limitCtxt.StartPos, limitCtxt.StartCol + 1) + | CtxtSeqBlock(FirstInSeqBlock, _, _), CtxtWithAsAugment _ :: (CtxtTypeDefns _ as limitCtxt) :: _ -> + PositionWithColumn(limitCtxt.StartPos, limitCtxt.StartCol + 1) + | _, CtxtSeqBlock _ :: rest when not strict -> undentationLimit strict rest | _, CtxtParen _ :: rest when not strict -> undentationLimit strict rest @@ -2308,7 +2311,7 @@ type LexFilterImpl ( if debug then dprintf "WITH\n" if debug then dprintf "WITH --> NO MATCH, pushing CtxtWithAsAugment (type augmentation), stack = %A" stack pushCtxt tokenTup (CtxtWithAsAugment tokenStartPos) - pushCtxtSeqBlock tokenTup AddBlockEnd + tryPushCtxtSeqBlock tokenTup AddBlockEnd returnToken tokenLexbufState token | FUNCTION, _ -> diff --git a/src/Compiler/SyntaxTree/SyntaxTrivia.fs b/src/Compiler/SyntaxTree/SyntaxTrivia.fs index d5c459b33f..cbcb1b0425 100644 --- a/src/Compiler/SyntaxTree/SyntaxTrivia.fs +++ b/src/Compiler/SyntaxTree/SyntaxTrivia.fs @@ -135,6 +135,13 @@ type SynTypeDefnLeadingKeyword = | StaticType of staticRange: range * typeRange: range | Synthetic + member this.Range = + match this with + | SynTypeDefnLeadingKeyword.Type range + | SynTypeDefnLeadingKeyword.And range -> range + | SynTypeDefnLeadingKeyword.StaticType(staticRange, typeRange) -> Range.unionRanges staticRange typeRange + | SynTypeDefnLeadingKeyword.Synthetic -> failwith "Getting range from synthetic keyword" + [] type SynTypeDefnTrivia = { diff --git a/src/Compiler/SyntaxTree/SyntaxTrivia.fsi b/src/Compiler/SyntaxTree/SyntaxTrivia.fsi index 1f2d001cfd..fc28dc889b 100644 --- a/src/Compiler/SyntaxTree/SyntaxTrivia.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTrivia.fsi @@ -219,11 +219,17 @@ type SynPatListConsTrivia = [] type SynTypeDefnLeadingKeyword = | Type of range + | And of range - // Can happen in SynMemberDefn.NestedType or SynMemberSig.NestedType + + /// Can happen in SynMemberDefn.NestedType or SynMemberSig.NestedType | StaticType of staticRange: range * typeRange: range + + /// Produced during type checking, should not be used in actual parsed trees. | Synthetic + member Range: range + /// Represents additional information for SynTypeDefn [] type SynTypeDefnTrivia = diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 0509f867c7..25b299a4fb 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -1540,7 +1540,8 @@ typeNameInfo: | opt_attributes tyconNameAndTyparDecls opt_typeConstraints { let typars, lid, fixity, vis = $2 let xmlDoc = grabXmlDoc(parseState, $1, 1) - SynComponentInfo ($1, typars, $3, lid, xmlDoc, fixity, vis, rangeOfLid lid) } + let m = match lid with [] -> rhs parseState 2 | _ -> rangeOfLid lid + SynComponentInfo ($1, typars, $3, lid, xmlDoc, fixity, vis, m) } /* Part of a set of type definitions */ tyconDefnList: @@ -2317,6 +2318,9 @@ tyconNameAndTyparDecls: | opt_access path postfixTyparDecls { Some $3, $2.LongIdent, true, $1 } + | opt_access recover + { None, [], false, $1 } + prefixTyparDecls: | typar { SynTyparDecls.SinglePrefix(SynTyparDecl([], $1), rhs parseState 1) } diff --git a/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl b/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl index e55f5f0b2e..3c4c86cc48 100644 --- a/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl @@ -18,4 +18,4 @@ ImplFile CodeComments = [] }, set [])) (5,0)-(5,6) parse error Expecting expression -(5,0)-(5,6) parse error Unexpected keyword 'module' in definition. Expected incomplete structured construct at or before this point or other token. +(5,0)-(5,6) parse error Unexpected keyword 'module' in definition diff --git a/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl b/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl index 126033bd3a..93bcfc4706 100644 --- a/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl @@ -8,4 +8,4 @@ ImplFile { ConditionalDirectives = [] CodeComments = [] }, set [])) -(3,1)-(3,2) parse error Unexpected symbol ':' in definition. Expected incomplete structured construct at or before this point or other token. +(3,1)-(3,2) parse error Unexpected symbol ':' in definition diff --git a/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl b/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl index cfca239237..ef4a889ded 100644 --- a/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl @@ -8,4 +8,4 @@ ImplFile { ConditionalDirectives = [] CodeComments = [] }, set [])) -(3,1)-(3,2) parse error Unexpected symbol ':' in definition. Expected incomplete structured construct at or before this point or other token. +(3,1)-(3,2) parse error Unexpected symbol ':' in definition diff --git a/tests/service/data/SyntaxTree/Member/Interface 06.fs b/tests/service/data/SyntaxTree/Member/Interface 06.fs new file mode 100644 index 0000000000..4ce4520f6d --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Interface 06.fs @@ -0,0 +1,6 @@ +module Module + +type T = + interface I with + + let _ = () diff --git a/tests/service/data/SyntaxTree/Member/Interface 06.fs.bsl b/tests/service/data/SyntaxTree/Member/Interface 06.fs.bsl new file mode 100644 index 0000000000..4c32039760 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Interface 06.fs.bsl @@ -0,0 +1,39 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Interface 06.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel + (Unspecified, + [Interface + (LongIdent (SynLongIdent ([I], [], [None])), + Some (4,16--4,20), Some [], (4,4--4,20)); + LetBindings + ([SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((6,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, + SynValInfo ([], SynArgInfo ([], false, None)), + None), Wild (6,8--6,9), None, + Const (Unit, (6,12--6,14)), (6,8--6,9), + Yes (6,4--6,14), + { LeadingKeyword = Let (6,4--6,7) + InlineKeyword = None + EqualsRange = Some (6,10--6,11) })], false, false, + (6,4--6,14))], (4,4--6,14)), [], None, (3,5--6,14), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,14))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,14), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(6,4)-(6,14) 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. diff --git a/tests/service/data/SyntaxTree/Member/Interface 07.fs b/tests/service/data/SyntaxTree/Member/Interface 07.fs new file mode 100644 index 0000000000..c2b4518424 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Interface 07.fs @@ -0,0 +1,6 @@ +module Module + +type T = + interface I + + member this.P = 1 diff --git a/tests/service/data/SyntaxTree/Member/Interface 07.fs.bsl b/tests/service/data/SyntaxTree/Member/Interface 07.fs.bsl new file mode 100644 index 0000000000..66c618d8e4 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Interface 07.fs.bsl @@ -0,0 +1,47 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Interface 07.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel + (Unspecified, + [Interface + (LongIdent (SynLongIdent ([I], [], [None])), None, None, + (4,4--4,15)); + Member + (SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((6,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (Some { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = Member }, + SynValInfo + ([[SynArgInfo ([], false, None)]; []], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([this; P], [(6,15--6,16)], [None; None]), None, + None, Pats [], None, (6,11--6,17)), None, + Const (Int32 1, (6,20--6,21)), (6,11--6,17), + NoneAtInvisible, + { LeadingKeyword = Member (6,4--6,10) + InlineKeyword = None + EqualsRange = Some (6,18--6,19) }), (6,4--6,21))], + (4,4--6,21)), [], None, (3,5--6,21), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,21))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,21), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi b/tests/service/data/SyntaxTree/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi deleted file mode 100644 index 3cc5bebeac..0000000000 --- a/tests/service/data/SyntaxTree/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi +++ /dev/null @@ -1,5 +0,0 @@ - -namespace X - -type Foo with -member Meh : unit -> unit diff --git a/tests/service/data/SyntaxTree/SignatureType/With 01.fsi b/tests/service/data/SyntaxTree/SignatureType/With 01.fsi new file mode 100644 index 0000000000..53dbfa020f --- /dev/null +++ b/tests/service/data/SyntaxTree/SignatureType/With 01.fsi @@ -0,0 +1,4 @@ +namespace X + +type Foo with + member Meh: unit -> unit diff --git a/tests/service/data/SyntaxTree/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi.bsl b/tests/service/data/SyntaxTree/SignatureType/With 01.fsi.bsl similarity index 56% rename from tests/service/data/SyntaxTree/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi.bsl rename to tests/service/data/SyntaxTree/SignatureType/With 01.fsi.bsl index 6dca2c06d1..07be5d4277 100644 --- a/tests/service/data/SyntaxTree/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi.bsl +++ b/tests/service/data/SyntaxTree/SignatureType/With 01.fsi.bsl @@ -1,30 +1,28 @@ SigFile (ParsedSigFileInput - ("/root/SignatureType/SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword.fsi", - QualifiedNameOfFile SynTypeDefnSigShouldContainsTheRangeOfTheWithKeyword, - [], [], + ("/root/SignatureType/With 01.fsi", QualifiedNameOfFile With 01, [], [], [SynModuleOrNamespaceSig ([X], false, DeclaredNamespace, [Types ([SynTypeDefnSig (SynComponentInfo ([], None, [], [Foo], - PreXmlDoc ((4,0), FSharp.Compiler.Xml.XmlDocCollector), - false, None, (4,5--4,8)), - Simple (None (4,5--5,25), (4,5--5,25)), + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,8)), + Simple (None (3,5--4,28), (3,5--4,28)), [Member (SynValSig ([], SynIdent (Meh, None), SynValTyparDecls (None, true), Fun (LongIdent (SynLongIdent ([unit], [], [None])), LongIdent (SynLongIdent ([unit], [], [None])), - (5,13--5,25), { ArrowRange = (5,18--5,20) }), + (4,16--4,28), { ArrowRange = (4,21--4,23) }), SynValInfo ([[SynArgInfo ([], false, None)]], SynArgInfo ([], false, None)), false, false, - PreXmlDoc ((5,0), FSharp.Compiler.Xml.XmlDocCollector), - None, None, (5,0--5,25), - { LeadingKeyword = Member (5,0--5,6) + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, None, (4,4--4,28), + { LeadingKeyword = Member (4,4--4,10) InlineKeyword = None WithKeyword = None EqualsRange = None }), @@ -33,12 +31,12 @@ SigFile IsOverrideOrExplicitImpl = false IsFinal = false GetterOrSetterIsCompilerGenerated = false - MemberKind = Member }, (5,0--5,25), - { GetSetKeywords = None })], (4,5--5,25), - { LeadingKeyword = Type (4,0--4,4) + MemberKind = Member }, (4,4--4,28), + { GetSetKeywords = None })], (3,5--4,28), + { LeadingKeyword = Type (3,0--3,4) EqualsRange = None - WithKeyword = Some (4,9--4,13) })], (4,0--5,25))], - PreXmlDocEmpty, [], None, (2,0--5,25), - { LeadingKeyword = Namespace (2,0--2,9) })], + WithKeyword = Some (3,9--3,13) })], (3,0--4,28))], + PreXmlDocEmpty, [], None, (1,0--4,28), + { LeadingKeyword = Namespace (1,0--1,9) })], { ConditionalDirectives = [] CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Type/And 01.fs b/tests/service/data/SyntaxTree/Type/And 01.fs new file mode 100644 index 0000000000..326a708687 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 01.fs @@ -0,0 +1,7 @@ +module Module + +type A = int + +and + +and C = int diff --git a/tests/service/data/SyntaxTree/Type/And 01.fs.bsl b/tests/service/data/SyntaxTree/Type/And 01.fs.bsl new file mode 100644 index 0000000000..a9d16c9375 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 01.fs.bsl @@ -0,0 +1,45 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/And 01.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (3,9--3,12)), (3,9--3,12)), [], None, (3,5--3,12), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((7,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (7,0--7,3)), + Simple (None (7,0--7,3), (7,0--7,3)), [], None, (7,0--7,3), + { LeadingKeyword = And (5,0--5,3) + EqualsRange = None + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [C], + PreXmlDoc ((7,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (7,4--7,5)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (7,8--7,11)), (7,8--7,11)), [], None, (7,4--7,11), + { LeadingKeyword = And (7,0--7,3) + EqualsRange = Some (7,6--7,7) + WithKeyword = None })], (3,0--7,11))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--7,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(7,0)-(7,3) parse error Unexpected keyword 'and' in type name diff --git a/tests/service/data/SyntaxTree/Type/And 02.fs b/tests/service/data/SyntaxTree/Type/And 02.fs new file mode 100644 index 0000000000..8dc02b2e12 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 02.fs @@ -0,0 +1,7 @@ +module Module + +type A = int + +and B + +and C = int diff --git a/tests/service/data/SyntaxTree/Type/And 02.fs.bsl b/tests/service/data/SyntaxTree/Type/And 02.fs.bsl new file mode 100644 index 0000000000..9c68fa0b12 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 02.fs.bsl @@ -0,0 +1,43 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/And 02.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (3,9--3,12)), (3,9--3,12)), [], None, (3,5--3,12), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [B], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (5,4--5,5)), + Simple (None (5,4--5,5), (5,4--5,5)), [], None, (5,4--5,5), + { LeadingKeyword = And (5,0--5,3) + EqualsRange = None + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [C], + PreXmlDoc ((7,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (7,4--7,5)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (7,8--7,11)), (7,8--7,11)), [], None, (7,4--7,11), + { LeadingKeyword = And (7,0--7,3) + EqualsRange = Some (7,6--7,7) + WithKeyword = None })], (3,0--7,11))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--7,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Type/And 03.fs b/tests/service/data/SyntaxTree/Type/And 03.fs new file mode 100644 index 0000000000..f84250d999 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 03.fs @@ -0,0 +1,7 @@ +module Module + +type A = int + +and B = + +and C = int diff --git a/tests/service/data/SyntaxTree/Type/And 03.fs.bsl b/tests/service/data/SyntaxTree/Type/And 03.fs.bsl new file mode 100644 index 0000000000..bf2b92aa99 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 03.fs.bsl @@ -0,0 +1,45 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/And 03.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (3,9--3,12)), (3,9--3,12)), [], None, (3,5--3,12), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [B], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (5,4--5,5)), + ObjectModel (Unspecified, [], (7,0--7,0)), [], None, + (5,4--7,0), { LeadingKeyword = And (5,0--5,3) + EqualsRange = Some (5,6--5,7) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [C], + PreXmlDoc ((7,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (7,4--7,5)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (7,8--7,11)), (7,8--7,11)), [], None, (7,4--7,11), + { LeadingKeyword = And (7,0--7,3) + EqualsRange = Some (7,6--7,7) + WithKeyword = None })], (3,0--7,11))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--7,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,4)-(5,7) parse error A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. diff --git a/tests/service/data/SyntaxTree/Type/And 04.fs b/tests/service/data/SyntaxTree/Type/And 04.fs new file mode 100644 index 0000000000..043b7c9cfb --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 04.fs @@ -0,0 +1,5 @@ +module Module + +type A = int + +and diff --git a/tests/service/data/SyntaxTree/Type/And 04.fs.bsl b/tests/service/data/SyntaxTree/Type/And 04.fs.bsl new file mode 100644 index 0000000000..05c052ddda --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 04.fs.bsl @@ -0,0 +1,33 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/And 04.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (3,9--3,12)), (3,9--3,12)), [], None, (3,5--3,12), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((6,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (6,0--6,0)), + Simple (None (6,0--6,0), (6,0--6,0)), [], None, (6,0--6,0), + { LeadingKeyword = And (5,0--5,3) + EqualsRange = None + WithKeyword = None })], (3,0--6,0))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,0), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(6,0)-(6,0) parse error Incomplete structured construct at or before this point in type name diff --git a/tests/service/data/SyntaxTree/Type/And 05.fs b/tests/service/data/SyntaxTree/Type/And 05.fs new file mode 100644 index 0000000000..15482fe1d5 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 05.fs @@ -0,0 +1,5 @@ +module Module + +type A = int + +and B diff --git a/tests/service/data/SyntaxTree/Type/And 05.fs.bsl b/tests/service/data/SyntaxTree/Type/And 05.fs.bsl new file mode 100644 index 0000000000..60a23a89c1 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 05.fs.bsl @@ -0,0 +1,31 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/And 05.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (3,9--3,12)), (3,9--3,12)), [], None, (3,5--3,12), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [B], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (5,4--5,5)), + Simple (None (5,4--5,5), (5,4--5,5)), [], None, (5,4--5,5), + { LeadingKeyword = And (5,0--5,3) + EqualsRange = None + WithKeyword = None })], (3,0--5,5))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Type/And 06.fs b/tests/service/data/SyntaxTree/Type/And 06.fs new file mode 100644 index 0000000000..da0ed364da --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 06.fs @@ -0,0 +1,5 @@ +module Module + +type A = int + +and B = diff --git a/tests/service/data/SyntaxTree/Type/And 06.fs.bsl b/tests/service/data/SyntaxTree/Type/And 06.fs.bsl new file mode 100644 index 0000000000..6e0ad8564e --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/And 06.fs.bsl @@ -0,0 +1,34 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/And 06.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [A], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (3,9--3,12)), (3,9--3,12)), [], None, (3,5--3,12), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [B], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (5,4--5,5)), + ObjectModel (Unspecified, [], (5,6--5,6)), [], None, + (5,4--5,7), { LeadingKeyword = And (5,0--5,3) + EqualsRange = Some (5,6--5,7) + WithKeyword = None })], (3,0--5,7))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(6,0)-(6,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. +(5,4)-(5,7) parse error A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. diff --git a/tests/service/data/SyntaxTree/Type/Type 01.fs b/tests/service/data/SyntaxTree/Type/Type 01.fs new file mode 100644 index 0000000000..a690e4f1fc --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 01.fs @@ -0,0 +1,5 @@ +module Module + +type + +() diff --git a/tests/service/data/SyntaxTree/Type/Type 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Type 01.fs.bsl new file mode 100644 index 0000000000..f34d5eb126 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 01.fs.bsl @@ -0,0 +1,22 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Type 01.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--5,0)), + Simple (None (3,5--5,0), (3,5--5,0)), [], None, (3,5--5,0), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = None + WithKeyword = None })], (3,0--5,0)); + 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,5)-(5,0) parse error Incomplete structured construct at or before this point in type name diff --git a/tests/service/data/SyntaxTree/Type/Type 02.fs b/tests/service/data/SyntaxTree/Type/Type 02.fs new file mode 100644 index 0000000000..0a97d601ac --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 02.fs @@ -0,0 +1,5 @@ +module Module + +type T + +() diff --git a/tests/service/data/SyntaxTree/Type/Type 02.fs.bsl b/tests/service/data/SyntaxTree/Type/Type 02.fs.bsl new file mode 100644 index 0000000000..a670186b97 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 02.fs.bsl @@ -0,0 +1,20 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Type 02.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple (None (3,5--3,6), (3,5--3,6)), [], None, (3,5--3,6), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = None + WithKeyword = None })], (3,0--3,6)); + 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 [])) diff --git a/tests/service/data/SyntaxTree/Type/Type 03.fs b/tests/service/data/SyntaxTree/Type/Type 03.fs new file mode 100644 index 0000000000..55459fd3bd --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 03.fs @@ -0,0 +1,5 @@ +module Module + +type T = + +() diff --git a/tests/service/data/SyntaxTree/Type/Type 03.fs.bsl b/tests/service/data/SyntaxTree/Type/Type 03.fs.bsl new file mode 100644 index 0000000000..47258d8b72 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 03.fs.bsl @@ -0,0 +1,22 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Type 03.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel (Unspecified, [], (5,0--5,0)), [], None, + (3,5--5,0), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--5,0)); + 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,5)-(3,8) parse error A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. diff --git a/tests/service/data/SyntaxTree/Type/Type 04.fs b/tests/service/data/SyntaxTree/Type/Type 04.fs new file mode 100644 index 0000000000..bc8c7e735a --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 04.fs @@ -0,0 +1,5 @@ +module Module + +type T1 = + +type T2 = int diff --git a/tests/service/data/SyntaxTree/Type/Type 04.fs.bsl b/tests/service/data/SyntaxTree/Type/Type 04.fs.bsl new file mode 100644 index 0000000000..65fc392618 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 04.fs.bsl @@ -0,0 +1,34 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Type 04.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T1], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,7)), + ObjectModel (Unspecified, [], (5,0--5,0)), [], None, + (3,5--5,0), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,8--3,9) + WithKeyword = None })], (3,0--5,0)); + Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T2], + PreXmlDoc ((5,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (5,5--5,7)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (5,10--5,13)), (5,10--5,13)), [], None, (5,5--5,13), + { LeadingKeyword = Type (5,0--5,4) + EqualsRange = Some (5,8--5,9) + WithKeyword = None })], (5,0--5,13))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,13), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,5)-(3,9) parse error A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. diff --git a/tests/service/data/SyntaxTree/Type/With 01.fs b/tests/service/data/SyntaxTree/Type/With 01.fs new file mode 100644 index 0000000000..e373a89733 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 01.fs @@ -0,0 +1,6 @@ +module Module + +type T with + member this.P = 1 + +2 diff --git a/tests/service/data/SyntaxTree/Type/With 01.fs.bsl b/tests/service/data/SyntaxTree/Type/With 01.fs.bsl new file mode 100644 index 0000000000..7fd1e7479f --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 01.fs.bsl @@ -0,0 +1,43 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/With 01.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel (Augmentation (3,7--3,11), [], (3,5--4,21)), + [Member + (SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (Some { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = Member }, + SynValInfo + ([[SynArgInfo ([], false, None)]; []], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([this; P], [(4,15--4,16)], [None; None]), None, + None, Pats [], None, (4,11--4,17)), None, + Const (Int32 1, (4,20--4,21)), (4,11--4,17), + NoneAtInvisible, { LeadingKeyword = Member (4,4--4,10) + InlineKeyword = None + EqualsRange = Some (4,18--4,19) }), + (4,4--4,21))], None, (3,5--4,21), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = None + WithKeyword = None })], (3,0--4,21)); + 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 [])) diff --git a/tests/service/data/SyntaxTree/Type/With 02.fs b/tests/service/data/SyntaxTree/Type/With 02.fs new file mode 100644 index 0000000000..4e9672ca0d --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 02.fs @@ -0,0 +1,6 @@ +module Module + +type T with +member this.P = 1 + +2 diff --git a/tests/service/data/SyntaxTree/Type/With 02.fs.bsl b/tests/service/data/SyntaxTree/Type/With 02.fs.bsl new file mode 100644 index 0000000000..776368be98 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 02.fs.bsl @@ -0,0 +1,22 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/With 02.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel (Augmentation (3,7--3,11), [], (3,5--3,11)), [], + None, (3,5--3,11), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = None + WithKeyword = None })], (3,0--3,11))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,6) 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,6) parse error Unexpected keyword 'member' in definition diff --git a/tests/service/data/SyntaxTree/Type/With 03.fs b/tests/service/data/SyntaxTree/Type/With 03.fs new file mode 100644 index 0000000000..bff4bc46b2 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 03.fs @@ -0,0 +1,5 @@ +module Module + +type T with + +2 diff --git a/tests/service/data/SyntaxTree/Type/With 03.fs.bsl b/tests/service/data/SyntaxTree/Type/With 03.fs.bsl new file mode 100644 index 0000000000..aad1b365c1 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 03.fs.bsl @@ -0,0 +1,22 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/With 03.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel (Augmentation (3,7--3,11), [], (3,5--3,11)), [], + None, (3,5--3,11), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = None + WithKeyword = None })], (3,0--3,11)); + Expr (Const (Int32 2, (5,0--5,1)), (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 [])) + +(5,0)-(5,1) 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. From 22cfda20118a6aaa3d879fbc81a7000a5510cee1 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 15 Jun 2023 17:19:46 +0200 Subject: [PATCH 02/11] Fantomas --- src/Compiler/SyntaxTree/SyntaxTrivia.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compiler/SyntaxTree/SyntaxTrivia.fs b/src/Compiler/SyntaxTree/SyntaxTrivia.fs index cbcb1b0425..497c666f1d 100644 --- a/src/Compiler/SyntaxTree/SyntaxTrivia.fs +++ b/src/Compiler/SyntaxTree/SyntaxTrivia.fs @@ -139,7 +139,7 @@ type SynTypeDefnLeadingKeyword = match this with | SynTypeDefnLeadingKeyword.Type range | SynTypeDefnLeadingKeyword.And range -> range - | SynTypeDefnLeadingKeyword.StaticType(staticRange, typeRange) -> Range.unionRanges staticRange typeRange + | SynTypeDefnLeadingKeyword.StaticType (staticRange, typeRange) -> Range.unionRanges staticRange typeRange | SynTypeDefnLeadingKeyword.Synthetic -> failwith "Getting range from synthetic keyword" [] From 5f5d452558c6ac70cbd7250e95cdd7e1decfcaeb Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 10:50:29 +0200 Subject: [PATCH 03/11] Recover --- src/Compiler/pars.fsy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 25b299a4fb..46f9a1e7c7 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -1605,7 +1605,8 @@ tyconDefn: let mEquals = rhs parseState 7 // Gets the XML doc comments prior to the implicit constructor let xmlDoc = grabXmlDoc(parseState, $2, 2) - let memberCtorPattern = SynMemberDefn.ImplicitCtor(vis, $2, spats, Option.map snd az, xmlDoc, rangeOfLid lid, { AsKeyword = Option.map fst az }) + let m = match lid with [] -> rhs parseState 1 | _ -> rangeOfLid lid + let memberCtorPattern = SynMemberDefn.ImplicitCtor(vis, $2, spats, Option.map snd az, xmlDoc, m, { AsKeyword = Option.map fst az }) let tcDefRepr = match tcDefRepr with | SynTypeDefnRepr.ObjectModel (k, cspec, m) -> SynTypeDefnRepr.ObjectModel(k, memberCtorPattern :: cspec, m) From 10237d4907067d07ce67b1d0ebbfbbe6163576a2 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 10:50:47 +0200 Subject: [PATCH 04/11] Revert error text change --- src/Compiler/Driver/CompilerDiagnostics.fs | 2 +- .../SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl | 2 +- tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl | 2 +- tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl | 2 +- tests/service/data/SyntaxTree/Type/With 02.fs.bsl | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Compiler/Driver/CompilerDiagnostics.fs b/src/Compiler/Driver/CompilerDiagnostics.fs index 3dbb92cdc7..7e32d78911 100644 --- a/src/Compiler/Driver/CompilerDiagnostics.fs +++ b/src/Compiler/Driver/CompilerDiagnostics.fs @@ -1467,8 +1467,8 @@ type Exception with ctxt.ShiftTokens |> List.map Parser.tokenTagToTokenId |> List.filter (function - | EndOfStructuredConstructToken | Parser.TOKEN_error + | Parser.TOKEN_OBLOCKSEP | Parser.TOKEN_EOF -> false | _ -> true) |> List.map tokenIdToText diff --git a/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl b/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl index 3c4c86cc48..e55f5f0b2e 100644 --- a/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Try with - Missing expr 05.fs.bsl @@ -18,4 +18,4 @@ ImplFile CodeComments = [] }, set [])) (5,0)-(5,6) parse error Expecting expression -(5,0)-(5,6) parse error Unexpected keyword 'module' in definition +(5,0)-(5,6) parse error Unexpected keyword 'module' in definition. Expected incomplete structured construct at or before this point or other token. diff --git a/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl b/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl index 93bcfc4706..126033bd3a 100644 --- a/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Typed 01.fs.bsl @@ -8,4 +8,4 @@ ImplFile { ConditionalDirectives = [] CodeComments = [] }, set [])) -(3,1)-(3,2) parse error Unexpected symbol ':' in definition +(3,1)-(3,2) parse error Unexpected symbol ':' in definition. Expected incomplete structured construct at or before this point or other token. diff --git a/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl b/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl index ef4a889ded..cfca239237 100644 --- a/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Typed 02.fs.bsl @@ -8,4 +8,4 @@ ImplFile { ConditionalDirectives = [] CodeComments = [] }, set [])) -(3,1)-(3,2) parse error Unexpected symbol ':' in definition +(3,1)-(3,2) parse error Unexpected symbol ':' in definition. Expected incomplete structured construct at or before this point or other token. diff --git a/tests/service/data/SyntaxTree/Type/With 02.fs.bsl b/tests/service/data/SyntaxTree/Type/With 02.fs.bsl index 776368be98..c7dc64c6ac 100644 --- a/tests/service/data/SyntaxTree/Type/With 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/With 02.fs.bsl @@ -19,4 +19,4 @@ ImplFile CodeComments = [] }, set [])) (4,0)-(4,6) 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,6) parse error Unexpected keyword 'member' in definition +(4,0)-(4,6) parse error Unexpected keyword 'member' in definition. Expected incomplete structured construct at or before this point or other token. From 9bccc25511c7ac80c97c9117e4184ec091247ddb Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 10:53:34 +0200 Subject: [PATCH 05/11] Update baseline --- .../CompilerOptions/fsc/codepage/codepage.fs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs index 1ad955c4b9..5104768cff 100644 --- a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs +++ b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs @@ -202,5 +202,6 @@ Parameter name: codepage") |> shouldFail |> withDiagnostics [ (Error 10, Line 7, Col 10, Line 7, Col 11, "Unexpected character '�' in type name") + (Error 552, Line 7, Col 10, Line 8, Col 33, "Only class types may take value arguments") (Error 10, Line 9, Col 14, Line 9, Col 17, "Unexpected keyword 'end' in implementation file") ] From 04e91bf11f7062ae2a2152368c2c8cea8ead6001 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 11:41:05 +0200 Subject: [PATCH 06/11] Update test/baseline --- .../CompilerOptions/fsc/codepage/codepage.fs | 2 +- .../LexicalFiltering/OffsideExceptions/RelaxWhitespace2.fs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs index 5104768cff..c62bb9958a 100644 --- a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs +++ b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs @@ -203,5 +203,5 @@ Parameter name: codepage") |> withDiagnostics [ (Error 10, Line 7, Col 10, Line 7, Col 11, "Unexpected character '�' in type name") (Error 552, Line 7, Col 10, Line 8, Col 33, "Only class types may take value arguments") - (Error 10, Line 9, Col 14, Line 9, Col 17, "Unexpected keyword 'end' in implementation file") + (Error 10, Line 9, Col 14, Line 9, Col 17, "Unexpected keyword 'end' in implementation file. Expected incomplete structured construct at or before this point or other token.") ] diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/LexicalFiltering/OffsideExceptions/RelaxWhitespace2.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/LexicalFiltering/OffsideExceptions/RelaxWhitespace2.fs index 97f97e8331..c51548b18e 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/LexicalFiltering/OffsideExceptions/RelaxWhitespace2.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/LexicalFiltering/OffsideExceptions/RelaxWhitespace2.fs @@ -3568,7 +3568,7 @@ and ^a > () = member inline __.X = () with - static member inline Y = () + static member inline Y = () type TypeWithALongName< ^a when ^a:(static member(+):'a * 'a -> 'a ) From 12dd475050eb9aa1b7d00850fa91d49e32a8ecad Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 12:10:34 +0200 Subject: [PATCH 07/11] Update surface area --- .../FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl | 2 ++ ...Sharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl index a9c06dc161..5ba81eb678 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl @@ -9814,6 +9814,8 @@ FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTr FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword+StaticType FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword+Tags FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword+Type +FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.Text.Range Range +FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.Text.Range get_Range() FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: Int32 Tag FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: Int32 get_Tag() FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: System.String ToString() diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl index 1736be3d13..d464f63b50 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl @@ -9814,6 +9814,8 @@ FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTr FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword+StaticType FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword+Tags FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword+Type +FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.Text.Range Range +FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: FSharp.Compiler.Text.Range get_Range() FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: Int32 Tag FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: Int32 get_Tag() FSharp.Compiler.SyntaxTrivia.SynTypeDefnLeadingKeyword: System.String ToString() From 6050b2edc08ab90951d6788dfed61016e089642a Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 13:51:32 +0200 Subject: [PATCH 08/11] Fix checker --- src/Compiler/Checking/CheckDeclarations.fs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Compiler/Checking/CheckDeclarations.fs b/src/Compiler/Checking/CheckDeclarations.fs index d4c15029ff..a37c39a7d4 100644 --- a/src/Compiler/Checking/CheckDeclarations.fs +++ b/src/Compiler/Checking/CheckDeclarations.fs @@ -2556,8 +2556,9 @@ module EstablishTypeDefinitionCores = | SynModuleDecl.Types (typeSpecs, _) -> for SynTypeDefn(typeInfo=SynComponentInfo(typeParams=synTypars; longId=ids); typeRepr=trepr) in typeSpecs do if TyparsAllHaveMeasureDeclEarlyCheck cenv env synTypars then - match trepr with - | SynTypeDefnRepr.ObjectModel(kind=SynTypeDefnKind.Augmentation _) -> () + match trepr, ids with + | SynTypeDefnRepr.ObjectModel(kind=SynTypeDefnKind.Augmentation _), _ -> () + | _, [] -> () | _ -> yield (List.last ids).idText | _ -> () ] |> set @@ -4831,7 +4832,8 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem let defn = TMDefRec(true, [], [decl], binds |> List.map ModuleOrNamespaceBinding.Binding, m) return ([defn], [], []), env, env - | SynModuleDecl.Types (typeDefs, m) -> + | SynModuleDecl.Types (typeDefs, m) -> + let typeDefs = typeDefs |> List.filter (function (SynTypeDefn(typeInfo = SynComponentInfo(longId = []))) -> false | _ -> true) let scopem = unionRanges m scopem let mutRecDefns = typeDefs |> List.map MutRecShape.Tycon let mutRecDefnsChecked, envAfter = TcDeclarations.TcMutRecDefinitions cenv env parent typeNames tpenv m scopem None mutRecDefns false From 22062da6112b46bd1e84b4fb69986131b6118622 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 13:52:02 +0200 Subject: [PATCH 09/11] Convert test to syntax tree --- tests/service/data/SyntaxTree/Type/Type 05.fs | 5 ++ .../data/SyntaxTree/Type/Type 05.fs.bsl | 33 +++++++++++++ tests/service/data/SyntaxTree/Type/Type 06.fs | 3 ++ .../data/SyntaxTree/Type/Type 06.fs.bsl | 23 ++++++++++ tests/service/data/SyntaxTree/Type/Type 07.fs | 4 ++ .../data/SyntaxTree/Type/Type 07.fs.bsl | 46 +++++++++++++++++++ .../DocumentDiagnosticAnalyzerTests.fs | 10 ---- 7 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 tests/service/data/SyntaxTree/Type/Type 05.fs create mode 100644 tests/service/data/SyntaxTree/Type/Type 05.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Type 06.fs create mode 100644 tests/service/data/SyntaxTree/Type/Type 06.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Type 07.fs create mode 100644 tests/service/data/SyntaxTree/Type/Type 07.fs.bsl diff --git a/tests/service/data/SyntaxTree/Type/Type 05.fs b/tests/service/data/SyntaxTree/Type/Type 05.fs new file mode 100644 index 0000000000..4452d73a2d --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 05.fs @@ -0,0 +1,5 @@ +module Module + +type T1 = + +and T2 = int diff --git a/tests/service/data/SyntaxTree/Type/Type 05.fs.bsl b/tests/service/data/SyntaxTree/Type/Type 05.fs.bsl new file mode 100644 index 0000000000..d5de1801c1 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 05.fs.bsl @@ -0,0 +1,33 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Type 05.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T1], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,7)), + ObjectModel (Unspecified, [], (5,0--5,0)), [], None, + (3,5--5,0), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,8--3,9) + WithKeyword = None }); + SynTypeDefn + (SynComponentInfo + ([], None, [], [T2], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (5,4--5,6)), + Simple + (TypeAbbrev + (Ok, LongIdent (SynLongIdent ([int], [], [None])), + (5,9--5,12)), (5,9--5,12)), [], None, (5,4--5,12), + { LeadingKeyword = And (5,0--5,3) + EqualsRange = Some (5,7--5,8) + WithKeyword = None })], (3,0--5,12))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,12), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,5)-(3,9) parse error A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. diff --git a/tests/service/data/SyntaxTree/Type/Type 06.fs b/tests/service/data/SyntaxTree/Type/Type 06.fs new file mode 100644 index 0000000000..b407fcafca --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 06.fs @@ -0,0 +1,3 @@ +module Module + +type = diff --git a/tests/service/data/SyntaxTree/Type/Type 06.fs.bsl b/tests/service/data/SyntaxTree/Type/Type 06.fs.bsl new file mode 100644 index 0000000000..c113ea3c20 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 06.fs.bsl @@ -0,0 +1,23 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Type 06.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel (Unspecified, [], (3,5--3,5)), [], None, + (3,5--3,6), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,5--3,6) + WithKeyword = None })], (3,0--3,6))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,6), { 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. +(3,5)-(3,6) parse error Unexpected symbol '=' in type name +(3,5)-(3,6) parse error A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. diff --git a/tests/service/data/SyntaxTree/Type/Type 07.fs b/tests/service/data/SyntaxTree/Type/Type 07.fs new file mode 100644 index 0000000000..eec4f4c7d5 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 07.fs @@ -0,0 +1,4 @@ +module Module + +type = + member this.P = 1 diff --git a/tests/service/data/SyntaxTree/Type/Type 07.fs.bsl b/tests/service/data/SyntaxTree/Type/Type 07.fs.bsl new file mode 100644 index 0000000000..0eb812102a --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Type 07.fs.bsl @@ -0,0 +1,46 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Type 07.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + ObjectModel + (Unspecified, + [Member + (SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (Some { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = Member }, + SynValInfo + ([[SynArgInfo ([], false, None)]; []], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([this; P], [(4,15--4,16)], [None; None]), None, + None, Pats [], None, (4,11--4,17)), None, + Const (Int32 1, (4,20--4,21)), (4,11--4,17), + NoneAtInvisible, + { LeadingKeyword = Member (4,4--4,10) + InlineKeyword = None + EqualsRange = Some (4,18--4,19) }), (4,4--4,21))], + (4,4--4,21)), [], None, (3,5--4,21), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,5--3,6) + WithKeyword = None })], (3,0--4,21))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,21), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,5)-(3,6) parse error Unexpected symbol '=' in type name diff --git a/vsintegration/tests/FSharp.Editor.Tests/DocumentDiagnosticAnalyzerTests.fs b/vsintegration/tests/FSharp.Editor.Tests/DocumentDiagnosticAnalyzerTests.fs index ed6b6091e7..8f8dbd3718 100644 --- a/vsintegration/tests/FSharp.Editor.Tests/DocumentDiagnosticAnalyzerTests.fs +++ b/vsintegration/tests/FSharp.Editor.Tests/DocumentDiagnosticAnalyzerTests.fs @@ -129,16 +129,6 @@ let b = expectedMessage = "Incomplete structured construct at or before this point in binding" ) - [] - member public this.Error_Type_WithoutName() = - this.VerifyErrorBetweenMarkers( - fileContents = - """ -type (*start*)=(*end*) - """, - expectedMessage = "Unexpected symbol '=' in type name" - ) - [] member public this.AbstractClasses_Constructors_PositiveTests_1() = this.VerifyNoErrors( From 898cd80f80e2bdb7e24a0893005698bdf132c941 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 14:45:47 +0200 Subject: [PATCH 10/11] Update baseline --- tests/fsharp/typecheck/sigs/neg29.bsl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/fsharp/typecheck/sigs/neg29.bsl b/tests/fsharp/typecheck/sigs/neg29.bsl index 435b720355..dd2d49ffda 100644 --- a/tests/fsharp/typecheck/sigs/neg29.bsl +++ b/tests/fsharp/typecheck/sigs/neg29.bsl @@ -2,3 +2,7 @@ neg29.fs(5,19,6,16): parse error FS0010: Incomplete structured construct at or before this point in type name. Expected '>' or other token. neg29.fs(9,1,9,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file + +neg29.fs(6,19,6,20): parse error FS0010: Unexpected symbol '(' in expression + +neg29.fs(6,18,6,19): parse error FS3156: Unexpected token '>' or incomplete expression From 91c6d485029b04b17a9618ae31f82da4aeca8f81 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 16 Jun 2023 15:41:48 +0200 Subject: [PATCH 11/11] More test updates --- .../Language/OpenTypeDeclarationTests.fs | 4 +- tests/service/data/SyntaxTree/Type/With 04.fs | 8 +++ .../data/SyntaxTree/Type/With 04.fs.bsl | 50 +++++++++++++++++++ tests/service/data/SyntaxTree/Type/With 05.fs | 8 +++ .../data/SyntaxTree/Type/With 05.fs.bsl | 29 +++++++++++ 5 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 tests/service/data/SyntaxTree/Type/With 04.fs create mode 100644 tests/service/data/SyntaxTree/Type/With 04.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/With 05.fs create mode 100644 tests/service/data/SyntaxTree/Type/With 05.fs.bsl diff --git a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs index a222d190dc..162b75d94a 100644 --- a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs +++ b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs @@ -978,7 +978,7 @@ module Test = | UCase1 | UCase2 with - static member M() = () + static member M() = () open type Test.TestUnion @@ -1004,7 +1004,7 @@ module Test = | UCase1 of 'T | UCase2 with - static member M() = () + static member M() = () open type Test.TestUnion diff --git a/tests/service/data/SyntaxTree/Type/With 04.fs b/tests/service/data/SyntaxTree/Type/With 04.fs new file mode 100644 index 0000000000..11ef568645 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 04.fs @@ -0,0 +1,8 @@ +module Module + +type U = + | A with + + member this.P = 1 + +2 diff --git a/tests/service/data/SyntaxTree/Type/With 04.fs.bsl b/tests/service/data/SyntaxTree/Type/With 04.fs.bsl new file mode 100644 index 0000000000..99ddf67442 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 04.fs.bsl @@ -0,0 +1,50 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/With 04.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), Fields [], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,7), { BarRange = Some (4,4--4,5) })], + (4,4--4,7)), (4,4--4,7)), + [Member + (SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((6,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (Some { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = Member }, + SynValInfo + ([[SynArgInfo ([], false, None)]; []], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([this; P], [(6,15--6,16)], [None; None]), None, + None, Pats [], None, (6,11--6,17)), None, + Const (Int32 1, (6,20--6,21)), (6,11--6,17), + NoneAtInvisible, { LeadingKeyword = Member (6,4--6,10) + InlineKeyword = None + EqualsRange = Some (6,18--6,19) }), + (6,4--6,21))], None, (3,5--6,21), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = Some (4,8--4,12) })], (3,0--6,21)); + Expr (Const (Int32 2, (8,0--8,1)), (8,0--8,1))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--8,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Type/With 05.fs b/tests/service/data/SyntaxTree/Type/With 05.fs new file mode 100644 index 0000000000..584f973625 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 05.fs @@ -0,0 +1,8 @@ +module Module + +type U = + | A with + +member this.P = 1 + +2 diff --git a/tests/service/data/SyntaxTree/Type/With 05.fs.bsl b/tests/service/data/SyntaxTree/Type/With 05.fs.bsl new file mode 100644 index 0000000000..fd2c9b7ae7 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/With 05.fs.bsl @@ -0,0 +1,29 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/With 05.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), Fields [], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,7), { BarRange = Some (4,4--4,5) })], + (4,4--4,7)), (4,4--4,7)), [], None, (3,5--4,7), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = Some (4,8--4,12) })], (3,0--4,7))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(6,0)-(6,6) 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. +(6,0)-(6,6) parse error Unexpected keyword 'member' in definition. Expected incomplete structured construct at or before this point or other token.