From c353a3332b9e60c825cab8d71c7a90aa6422af8e Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 15 Jun 2023 04:20:11 -0700 Subject: [PATCH 1/2] Fix14779 (#15384) * FSI Sometimes gets confused by tabs * also fix 15258 --- vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs b/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs index 53432cd843..7160e0608d 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs @@ -551,11 +551,13 @@ type internal FsiToolWindow() as this = { hide()} #silentCd @"{dir}";; {if dbgBreak then "#dbgbreak" else ""} -#{topLine} @"{filename}" +# {topLine} @"{filename}" {text.ToString()} -#1 "stdin" +;; +# 1 "stdin" { show()};; """ + executeTextNoHistory filename interaction let sendSelectionToFSI action = From 11f0f70a058f3a01b2f976d99d6914ff8be1b378 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 15 Jun 2023 13:25:31 +0200 Subject: [PATCH 2/2] Parser: recover on unfinished simple 'member' declarations (#15102) * Parser: recover on unfinished simple 'member' declarations --- src/Compiler/Driver/CompilerDiagnostics.fs | 1 + src/Compiler/FSComp.txt | 1 + src/Compiler/SyntaxTree/SyntaxTree.fs | 7 +- src/Compiler/SyntaxTree/SyntaxTree.fsi | 5 +- src/Compiler/SyntaxTree/SyntaxTrivia.fs | 4 +- src/Compiler/SyntaxTree/SyntaxTrivia.fsi | 1 + src/Compiler/pars.fsy | 75 +++++++++++- src/Compiler/xlf/FSComp.txt.cs.xlf | 5 + src/Compiler/xlf/FSComp.txt.de.xlf | 5 + src/Compiler/xlf/FSComp.txt.es.xlf | 5 + src/Compiler/xlf/FSComp.txt.fr.xlf | 5 + src/Compiler/xlf/FSComp.txt.it.xlf | 5 + src/Compiler/xlf/FSComp.txt.ja.xlf | 5 + src/Compiler/xlf/FSComp.txt.ko.xlf | 5 + src/Compiler/xlf/FSComp.txt.pl.xlf | 5 + src/Compiler/xlf/FSComp.txt.pt-BR.xlf | 5 + src/Compiler/xlf/FSComp.txt.ru.xlf | 5 + src/Compiler/xlf/FSComp.txt.tr.xlf | 5 + src/Compiler/xlf/FSComp.txt.zh-Hans.xlf | 5 + src/Compiler/xlf/FSComp.txt.zh-Hant.xlf | 5 + ...ervice.SurfaceArea.netstandard20.debug.bsl | 9 ++ ...vice.SurfaceArea.netstandard20.release.bsl | 9 ++ .../Member/Member - Attributes 01.fs | 6 + .../Member/Member - Attributes 01.fs.bsl | 113 +++++++++++++++++ .../data/SyntaxTree/Member/Member 01.fs | 6 + .../data/SyntaxTree/Member/Member 01.fs.bsl | 112 +++++++++++++++++ .../data/SyntaxTree/Member/Member 02.fs | 6 + .../data/SyntaxTree/Member/Member 02.fs.bsl | 112 +++++++++++++++++ .../data/SyntaxTree/Member/Member 03.fs | 6 + .../data/SyntaxTree/Member/Member 03.fs.bsl | 113 +++++++++++++++++ .../data/SyntaxTree/Member/Member 04.fs | 6 + .../data/SyntaxTree/Member/Member 04.fs.bsl | 113 +++++++++++++++++ .../data/SyntaxTree/Member/Member 05.fs | 6 + .../data/SyntaxTree/Member/Member 05.fs.bsl | 115 ++++++++++++++++++ .../data/SyntaxTree/Member/Member 06.fs | 6 + .../data/SyntaxTree/Member/Member 06.fs.bsl | 111 +++++++++++++++++ .../data/SyntaxTree/Member/Member 07.fs | 6 + .../data/SyntaxTree/Member/Member 07.fs.bsl | 111 +++++++++++++++++ .../data/SyntaxTree/Member/Member 08.fs | 4 + .../data/SyntaxTree/Member/Member 08.fs.bsl | 75 ++++++++++++ .../data/SyntaxTree/Member/Static 01.fs | 7 ++ .../data/SyntaxTree/Member/Static 01.fs.bsl | 55 +++++++++ .../data/SyntaxTree/Member/Static 02.fs | 6 + .../data/SyntaxTree/Member/Static 02.fs.bsl | 111 +++++++++++++++++ .../data/SyntaxTree/Member/Static 03.fs | 6 + .../data/SyntaxTree/Member/Static 03.fs.bsl | 112 +++++++++++++++++ 46 files changed, 1494 insertions(+), 7 deletions(-) create mode 100644 tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 01.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 02.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 02.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 03.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 03.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 04.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 04.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 05.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 05.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 06.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 06.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 07.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 07.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Member 08.fs create mode 100644 tests/service/data/SyntaxTree/Member/Member 08.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Static 01.fs create mode 100644 tests/service/data/SyntaxTree/Member/Static 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Static 02.fs create mode 100644 tests/service/data/SyntaxTree/Member/Static 02.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Member/Static 03.fs create mode 100644 tests/service/data/SyntaxTree/Member/Static 03.fs.bsl diff --git a/src/Compiler/Driver/CompilerDiagnostics.fs b/src/Compiler/Driver/CompilerDiagnostics.fs index d0c83a20a5..7e32d78911 100644 --- a/src/Compiler/Driver/CompilerDiagnostics.fs +++ b/src/Compiler/Driver/CompilerDiagnostics.fs @@ -1468,6 +1468,7 @@ type Exception with |> List.map Parser.tokenTagToTokenId |> List.filter (function | Parser.TOKEN_error + | Parser.TOKEN_OBLOCKSEP | Parser.TOKEN_EOF -> false | _ -> true) |> List.map tokenIdToText diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index 9fbb189a5b..6aa808c45a 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -1697,3 +1697,4 @@ featureEscapeBracesInFormattableString,"Escapes curly braces before calling Form 3565,parsExpectingType,"Expecting type" featureInformationalObjInferenceDiagnostic,"Diagnostic 3559 (warn when obj inferred) at informational level, off by default" 3566,tcMultipleRecdTypeChoice,"Multiple type matches were found:\n%s\nThe type '%s' was used. Due to the overlapping field names\n%s\nconsider using type annotations or change the order of open statements." +3567,parsMissingMemberBody,"Expecting member body" \ No newline at end of file diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fs b/src/Compiler/SyntaxTree/SyntaxTree.fs index eb8c30d2c0..e9eb8bdfac 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fs +++ b/src/Compiler/SyntaxTree/SyntaxTree.fs @@ -1331,7 +1331,12 @@ type SynArgInfo = type SynValTyparDecls = SynValTyparDecls of typars: SynTyparDecls option * canInfer: bool [] -type SynReturnInfo = SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range +type SynReturnInfo = + | SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range + + member this.Range = + match this with + | SynReturnInfo (range = m) -> m [] type SynExceptionDefnRepr = diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fsi b/src/Compiler/SyntaxTree/SyntaxTree.fsi index 5c35a2e2c8..d7f01cd488 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTree.fsi @@ -1503,7 +1503,10 @@ type SynValTyparDecls = SynValTyparDecls of typars: SynTyparDecls option * canIn /// Represents the syntactic elements associated with the "return" of a function or method. [] -type SynReturnInfo = SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range +type SynReturnInfo = + | SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range + + member Range: range /// Represents the right hand side of an exception declaration 'exception E = ... ' [] diff --git a/src/Compiler/SyntaxTree/SyntaxTrivia.fs b/src/Compiler/SyntaxTree/SyntaxTrivia.fs index 84b431093a..d5c459b33f 100644 --- a/src/Compiler/SyntaxTree/SyntaxTrivia.fs +++ b/src/Compiler/SyntaxTree/SyntaxTrivia.fs @@ -179,6 +179,7 @@ type SynLeadingKeyword = | OverrideVal of overrideRange: range * valRange: range | Abstract of abstractRange: range | AbstractMember of abstractRange: range * memberRange: range + | Static of staticRange: range | StaticMember of staticRange: range * memberRange: range | StaticMemberVal of staticRange: range * memberRange: range * valRange: range | StaticAbstract of staticRange: range * abstractRange: range @@ -206,7 +207,8 @@ type SynLeadingKeyword = | Default m | Val m | New m - | Do m -> m + | Do m + | Static m -> m | LetRec (m1, m2) | UseRec (m1, m2) | AbstractMember (m1, m2) diff --git a/src/Compiler/SyntaxTree/SyntaxTrivia.fsi b/src/Compiler/SyntaxTree/SyntaxTrivia.fsi index 4119d06fca..1f2d001cfd 100644 --- a/src/Compiler/SyntaxTree/SyntaxTrivia.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTrivia.fsi @@ -271,6 +271,7 @@ type SynLeadingKeyword = | OverrideVal of overrideRange: range * valRange: range | Abstract of abstractRange: range | AbstractMember of abstractRange: range * memberRange: range + | Static of staticRange: range | StaticMember of staticRange: range * memberRange: range | StaticMemberVal of staticRange: range * memberRange: range * valRange: range | StaticAbstract of staticRange: range * abstractRange: range diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 076627536d..8a472afd18 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -1499,16 +1499,24 @@ memberFlags: | STATIC MEMBER { let mStatic = rhs parseState 1 let mMember = rhs parseState 2 - StaticMemberFlags, (SynLeadingKeyword.StaticMember(mStatic, mMember)) } + StaticMemberFlags, SynLeadingKeyword.StaticMember(mStatic, mMember) } + + | STATIC + { let mStatic = rhs parseState 1 + // todo: it should be possible to make it work better for both `abstract` and `member` in the type checker + StaticMemberFlags, SynLeadingKeyword.Static(mStatic) } + | MEMBER { let mMember = rhs parseState 1 - NonVirtualMemberFlags, (SynLeadingKeyword.Member mMember) } + NonVirtualMemberFlags, SynLeadingKeyword.Member mMember } + | OVERRIDE { let mOverride = rhs parseState 1 - OverrideMemberFlags, (SynLeadingKeyword.Override mOverride) } + OverrideMemberFlags, SynLeadingKeyword.Override mOverride } + | DEFAULT { let mDefault = rhs parseState 1 - OverrideMemberFlags, (SynLeadingKeyword.Default mDefault) } + OverrideMemberFlags, SynLeadingKeyword.Default mDefault } /* The name of a type in a signature or implementation, possibly with type parameters and constraints */ typeNameInfo: @@ -1783,6 +1791,45 @@ memberCore: let memberRange = unionRanges rangeStart mRhs |> unionRangeWithXmlDoc xmlDoc [ SynMemberDefn.Member(binding, memberRange) ]) } + | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints OBLOCKSEP + { let optReturnType = $3 + let bindingPat, mBindLhs = $2 + let mEnd = + match optReturnType with + | Some(_, ty) -> ty.Range.EndRange + | _ -> bindingPat.Range.EndRange + let expr = arbExpr ("memberCore1", mEnd) + errorR (Error(FSComp.SR.parsMissingMemberBody(), rhs parseState 4)) + + fun vis flagsBuilderAndLeadingKeyword attrs rangeStart -> + let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart) + let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword + let memberFlags = memFlagsBuilder SynMemberKind.Member + let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; InlineKeyword = $1; EqualsRange = None } + let binding = mkSynBinding (xmlDoc, bindingPat) (vis, (Option.isSome $1), false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, mEnd, [], attrs, Some memberFlags, trivia) + let memberRange = unionRanges rangeStart mEnd |> unionRangeWithXmlDoc xmlDoc + [ SynMemberDefn.Member (binding, memberRange) ] } + + | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints recover + { let optReturnType = $3 + let bindingPat, mBindLhs = $2 + let mEnd = + match optReturnType with + | Some(_, ty) -> ty.Range.EndRange + | _ -> bindingPat.Range.EndRange + let expr = arbExpr ("memberCore2", mEnd) + + fun vis flagsBuilderAndLeadingKeyword attrs rangeStart -> + let xmlDoc = grabXmlDocAtRangeStart(parseState, attrs, rangeStart) + let memFlagsBuilder, leadingKeyword = flagsBuilderAndLeadingKeyword + let memberFlags = memFlagsBuilder SynMemberKind.Member + let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + let trivia: SynBindingTrivia = { LeadingKeyword = leadingKeyword; InlineKeyword = $1; EqualsRange = None } + let binding = mkSynBinding (xmlDoc, bindingPat) (vis, (Option.isSome $1), false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, mEnd, [], attrs, Some memberFlags, trivia) + let memberRange = unionRanges rangeStart mEnd |> unionRangeWithXmlDoc xmlDoc + [ SynMemberDefn.Member (binding, memberRange) ] } + /* Properties with explicit get/set, also indexer properties */ | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet { let mWith, (classDefnMemberGetSetElements, mAnd) = $4 @@ -1846,6 +1893,26 @@ classDefnMember: let flags = $3 $4 $2 flags $1 rangeStart } + | opt_attributes opt_access memberFlags recover + { let rangeStart = rhs parseState 1 + if Option.isSome $2 then + errorR (Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) + let memFlagsBuilder, leadingKeyword = $3 + let flags = Some(memFlagsBuilder SynMemberKind.Member) + let xmlDoc = grabXmlDocAtRangeStart (parseState, $1, rangeStart) + let trivia = { LeadingKeyword = leadingKeyword; InlineKeyword = None; EqualsRange = None } + let mMember = rhs parseState 3 + let mEnd = mMember.EndRange + let bindingPat = patFromParseError (SynPat.Wild(mEnd)) + let expr = arbExpr ("classDefnMember1", mEnd) + let mWhole = rhs2 parseState 1 3 + let binding = + mkSynBinding + (xmlDoc, bindingPat) + ($2, (Option.isSome $2), false, mWhole, DebugPointAtBinding.NoneAtInvisible, None, expr, mEnd, [], $1, flags, trivia) + + [SynMemberDefn.Member(binding, mWhole)] } + | opt_attributes opt_access interfaceMember appType opt_interfaceImplDefn { if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesAreNotPermittedOnInterfaceImplementations(), rhs parseState 1)) if Option.isSome $2 then errorR(Error(FSComp.SR.parsInterfacesHaveSameVisibilityAsEnclosingType(), rhs parseState 3)) diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index 7a5e3eb576..6e2ca9b523 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -822,6 +822,11 @@ Neúplný výraz operátoru (například^b) nebo volání kvalifikovaného typu (příklad: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 0b160bf595..c7a067332b 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -822,6 +822,11 @@ Unvollständiger Operatorausdruck (Beispiel: a^b) oder qualifizierter Typaufruf (Beispiel: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index 39363fc73e..6cdfce98c0 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -822,6 +822,11 @@ Expresión de operador incompleta (ejemplo, a^b) o invocación de tipo calificada (ejemplo: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index 7b4d5fd330..f5cc4b1a8f 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -822,6 +822,11 @@ Expression d’opérateur incomplète (exemple a^b) ou appel de type qualifié (exemple : ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index 454e90b507..e4a1a9a2d4 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -822,6 +822,11 @@ Espressione operatore incompleta (ad esempio a^b) o chiamata di tipo qualificato (ad esempio: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index 3eabcd55f9..0508471758 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -822,6 +822,11 @@ 不完全な演算子式 (例 a^b) または修飾型の呼び出し (例: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index 2a83010b57..e98bb588ac 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -822,6 +822,11 @@ 불완전한 연산자 식(예: a^b) 또는 정규화된 형식 호출(예: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index b4014e4954..bf8459b7db 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -822,6 +822,11 @@ Niekompletne wyrażenie operatora (na przykład a^b) lub wywołanie typu kwalifikowanego (przykład: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index 86f6151fae..0deccc83bd 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -822,6 +822,11 @@ Expressão de operador incompleta (exemplo a^b) ou invocação de tipo qualificado (exemplo: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index e5b6a87be6..82806d6d1b 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -822,6 +822,11 @@ Неполное выражение оператора (например, a^b) или вызов квалифицированного типа (например, ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 0761e71e25..c106b39622 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -822,6 +822,11 @@ Eksik işleç ifadesi (örnek a^b) veya tam tür çağrısı (örnek: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index a0d8593a5c..c2911c4696 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -822,6 +822,11 @@ 运算符表达式不完整(示例: a^b)或限定类型调用(示例: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index cbb928c67b..a495354d5b 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -822,6 +822,11 @@ 不完整的運算子運算式 (範例 a^b) 或限定類型調用 (範例: ^T.Name) + + Expecting member body + Expecting member body + + Missing union case name Missing union case name 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 ffc2dba9d4..a9c06dc161 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 @@ -8172,6 +8172,8 @@ FSharp.Compiler.Syntax.SynRationalConst: Int32 Tag FSharp.Compiler.Syntax.SynRationalConst: Int32 get_Tag() FSharp.Compiler.Syntax.SynRationalConst: System.String ToString() FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Syntax.SynReturnInfo NewSynReturnInfo(System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range get_Range() FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynReturnInfo: Int32 Tag @@ -9493,6 +9495,8 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range get_valRange() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range overrideRange FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Static: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Static: FSharp.Compiler.Text.Range staticRange FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range abstractRange FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range get_abstractRange() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range get_staticRange() @@ -9545,6 +9549,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 MemberVal FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 New FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Override FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 OverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Static FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticAbstract FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticAbstractMember FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticDo @@ -9579,6 +9584,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsMemberVal FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsNew FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsOverride FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsOverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStatic FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticAbstract FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticAbstractMember FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticDo @@ -9605,6 +9611,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsMemberVal() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsNew() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsOverride() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsOverrideVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStatic() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticAbstract() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticAbstractMember() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticDo() @@ -9631,6 +9638,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.Syn FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewNew(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewOverride(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewOverrideVal(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStatic(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticAbstract(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticAbstractMember(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticDo(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) @@ -9658,6 +9666,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.Syn FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+New FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Override FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Static FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticDo 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 98811959ee..1736be3d13 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 @@ -8172,6 +8172,8 @@ FSharp.Compiler.Syntax.SynRationalConst: Int32 Tag FSharp.Compiler.Syntax.SynRationalConst: Int32 get_Tag() FSharp.Compiler.Syntax.SynRationalConst: System.String ToString() FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Syntax.SynReturnInfo NewSynReturnInfo(System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range get_Range() FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynReturnInfo: Int32 Tag @@ -9493,6 +9495,8 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range get_valRange() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range overrideRange FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal: FSharp.Compiler.Text.Range valRange +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Static: FSharp.Compiler.Text.Range get_staticRange() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Static: FSharp.Compiler.Text.Range staticRange FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range abstractRange FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range get_abstractRange() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract: FSharp.Compiler.Text.Range get_staticRange() @@ -9545,6 +9549,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 MemberVal FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 New FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Override FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 OverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 Static FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticAbstract FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticAbstractMember FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Tags: Int32 StaticDo @@ -9579,6 +9584,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsMemberVal FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsNew FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsOverride FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsOverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStatic FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticAbstract FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticAbstractMember FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean IsStaticDo @@ -9605,6 +9611,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsMemberVal() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsNew() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsOverride() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsOverrideVal() +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStatic() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticAbstract() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticAbstractMember() FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: Boolean get_IsStaticDo() @@ -9631,6 +9638,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.Syn FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewNew(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewOverride(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewOverrideVal(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStatic(FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticAbstract(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticAbstractMember(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword NewStaticDo(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) @@ -9658,6 +9666,7 @@ FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.Syn FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+New FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Override FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+OverrideVal +FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+Static FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstract FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticAbstractMember FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword: FSharp.Compiler.SyntaxTrivia.SynLeadingKeyword+StaticDo diff --git a/tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs b/tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs new file mode 100644 index 0000000000..342cc7c4ef --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs.bsl b/tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs.bsl new file mode 100644 index 0000000000..168769ff76 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member - Attributes 01.fs.bsl @@ -0,0 +1,113 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member - Attributes 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 + (Unspecified, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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), + FromParseError (Wild (5,16--5,16), (5,16--5,16)), + None, + ArbitraryAfterError + ("classDefnMember1", (5,16--5,16)), (5,4--5,16), + NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = None }), (5,4--5,16)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,17)-(6,4) parse error Incomplete structured construct at or before this point in member definition diff --git a/tests/service/data/SyntaxTree/Member/Member 01.fs b/tests/service/data/SyntaxTree/Member/Member 01.fs new file mode 100644 index 0000000000..342cc7c4ef --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 01.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member 01.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 01.fs.bsl new file mode 100644 index 0000000000..e5ce844b09 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 01.fs.bsl @@ -0,0 +1,112 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 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 + (Unspecified, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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), + FromParseError (Wild (5,16--5,16), (5,16--5,16)), + None, + ArbitraryAfterError + ("classDefnMember1", (5,16--5,16)), (5,4--5,16), + NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = None }), (5,4--5,16)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,17)-(6,4) parse error Incomplete structured construct at or before this point in member definition diff --git a/tests/service/data/SyntaxTree/Member/Member 02.fs b/tests/service/data/SyntaxTree/Member/Member 02.fs new file mode 100644 index 0000000000..4bcae7d643 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 02.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member this + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member 02.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 02.fs.bsl new file mode 100644 index 0000000000..dc24f73a05 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 02.fs.bsl @@ -0,0 +1,112 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 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 + (Unspecified, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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), + Named + (SynIdent (this, None), false, None, (5,17--5,21)), + None, + ArbitraryAfterError ("memberCore1", (5,21--5,21)), + (5,4--5,21), NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = None }), (5,4--5,21)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,22)-(6,4) parse error Expecting member body diff --git a/tests/service/data/SyntaxTree/Member/Member 03.fs b/tests/service/data/SyntaxTree/Member/Member 03.fs new file mode 100644 index 0000000000..5bc3d8cf07 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 03.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member this. + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member 03.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 03.fs.bsl new file mode 100644 index 0000000000..8e25d86627 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 03.fs.bsl @@ -0,0 +1,113 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 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, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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), + Named + (SynIdent (this, None), false, None, (5,17--5,21)), + None, + ArbitraryAfterError ("memberCore1", (5,21--5,21)), + (5,4--6,4), NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = None }), (5,4--5,21)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,23)-(6,4) parse error Incomplete structured construct at or before this point in member definition. Expected identifier, '(', '(*)' or other token. +(5,23)-(6,4) parse error Expecting member body diff --git a/tests/service/data/SyntaxTree/Member/Member 04.fs b/tests/service/data/SyntaxTree/Member/Member 04.fs new file mode 100644 index 0000000000..23fdecc3cb --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 04.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member this.P2 + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member 04.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 04.fs.bsl new file mode 100644 index 0000000000..c4bfa610f4 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 04.fs.bsl @@ -0,0 +1,113 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 04.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, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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; P2], [(5,21--5,22)], [None; None]), + None, None, Pats [], None, (5,17--5,24)), None, + ArbitraryAfterError ("memberCore1", (5,24--5,24)), + (5,4--5,24), NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = None }), (5,4--5,24)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,25)-(6,4) parse error Expecting member body diff --git a/tests/service/data/SyntaxTree/Member/Member 05.fs b/tests/service/data/SyntaxTree/Member/Member 05.fs new file mode 100644 index 0000000000..dcc7c865a4 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 05.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member this.P2 = + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member 05.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 05.fs.bsl new file mode 100644 index 0000000000..4e52c4c63b --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 05.fs.bsl @@ -0,0 +1,115 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 05.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, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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; P2], [(5,21--5,22)], [None; None]), + None, None, Pats [], None, (5,17--5,24)), None, + ArbitraryAfterError + ("typedSequentialExprBlock1", (5,26--5,26)), + (5,4--5,24), NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = Some (5,25--5,26) }), (5,4--5,26)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(6,4)-(6,6) parse error Possible incorrect indentation: this token is offside of context started at position (5:11). Try indenting this token further or using standard formatting conventions. +(6,4)-(6,6) parse error Expecting expression diff --git a/tests/service/data/SyntaxTree/Member/Member 06.fs b/tests/service/data/SyntaxTree/Member/Member 06.fs new file mode 100644 index 0000000000..a6a7675255 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 06.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member this.P2 = 2 + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member 06.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 06.fs.bsl new file mode 100644 index 0000000000..d249dd2cc2 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 06.fs.bsl @@ -0,0 +1,111 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 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, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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; P2], [(5,21--5,22)], [None; None]), + None, None, Pats [], None, (5,17--5,24)), None, + Const (Int32 2, (5,27--5,28)), (5,4--5,24), + NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = Some (5,25--5,26) }), (5,4--5,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Member/Member 07.fs b/tests/service/data/SyntaxTree/Member/Member 07.fs new file mode 100644 index 0000000000..7ec3fc8700 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 07.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] member this. = 2 + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Member 07.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 07.fs.bsl new file mode 100644 index 0000000000..15e6eadb03 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 07.fs.bsl @@ -0,0 +1,111 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 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, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,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), + Named + (SynIdent (this, None), false, None, (5,17--5,21)), + None, Const (Int32 2, (5,25--5,26)), (5,4--5,24), + NoneAtInvisible, + { LeadingKeyword = Member (5,10--5,16) + InlineKeyword = None + EqualsRange = Some (5,23--5,24) }), (5,4--5,26)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,23)-(5,24) parse error Unexpected symbol '=' in member definition. Expected identifier, '(', '(*)' or other token. diff --git a/tests/service/data/SyntaxTree/Member/Member 08.fs b/tests/service/data/SyntaxTree/Member/Member 08.fs new file mode 100644 index 0000000000..c7f73757a0 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 08.fs @@ -0,0 +1,4 @@ +module Module + +type INumericNorm<'T,'Measure> = interface INumeric<'T> + member Norm : 'T -> 'Measure diff --git a/tests/service/data/SyntaxTree/Member/Member 08.fs.bsl b/tests/service/data/SyntaxTree/Member/Member 08.fs.bsl new file mode 100644 index 0000000000..92a358d24d --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Member 08.fs.bsl @@ -0,0 +1,75 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Member 08.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], + Some + (PostfixList + ([SynTyparDecl ([], SynTypar (T, None, false)); + SynTyparDecl ([], SynTypar (Measure, None, false))], + [], (3,17--3,30))), [], [INumericNorm], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + true, None, (3,5--3,17)), + ObjectModel + (Unspecified, + [Interface + (App + (LongIdent (SynLongIdent ([INumeric], [], [None])), + Some (3,52--3,53), + [Var (SynTypar (T, None, false), (3,53--3,55))], [], + Some (3,55--3,56), false, (3,44--3,56)), None, None, + (3,34--3,56)); + Member + (SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((4,35), 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 ([Norm], [], [None]), None, None, + Pats [], None, (4,42--4,46)), + Some + (SynBindingReturnInfo + (Fun + (Var + (SynTypar (T, None, false), (4,49--4,51)), + Var + (SynTypar (Measure, None, false), + (4,55--4,63)), (4,49--4,63), + { ArrowRange = (4,52--4,54) }), + (4,49--4,63), [], + { ColonRange = Some (4,47--4,48) })), + Typed + (ArbitraryAfterError ("memberCore2", (4,63--4,63)), + Fun + (Var (SynTypar (T, None, false), (4,49--4,51)), + Var + (SynTypar (Measure, None, false), + (4,55--4,63)), (4,49--4,63), + { ArrowRange = (4,52--4,54) }), (4,63--4,63)), + (4,42--4,46), NoneAtInvisible, + { LeadingKeyword = Member (4,35--4,41) + InlineKeyword = None + EqualsRange = None }), (4,35--4,63))], + (3,34--4,63)), [], None, (3,5--4,63), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,32--3,33) + WithKeyword = None })], (3,0--4,63))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,63), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,0)-(5,0) parse error Incomplete structured construct at or before this point in member definition. Expected 'with', '=' or other token. diff --git a/tests/service/data/SyntaxTree/Member/Static 01.fs b/tests/service/data/SyntaxTree/Member/Static 01.fs new file mode 100644 index 0000000000..57dc7d8fcf --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Static 01.fs @@ -0,0 +1,7 @@ +module Module + +type T = + + static + + do () diff --git a/tests/service/data/SyntaxTree/Member/Static 01.fs.bsl b/tests/service/data/SyntaxTree/Member/Static 01.fs.bsl new file mode 100644 index 0000000000..7c47ccf95e --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Static 01.fs.bsl @@ -0,0 +1,55 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Static 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 + (Unspecified, + [Member + (SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (Some { IsInstance = false + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = Member }, + SynValInfo ([[]], SynArgInfo ([], false, None)), + None), + FromParseError (Wild (5,10--5,10), (5,10--5,10)), + None, + ArbitraryAfterError + ("classDefnMember1", (5,10--5,10)), (5,4--5,10), + NoneAtInvisible, + { LeadingKeyword = Static (5,4--5,10) + InlineKeyword = None + EqualsRange = None }), (5,4--5,10)); + LetBindings + ([SynBinding + (None, Do, false, false, [], PreXmlDocEmpty, + SynValData + (None, + SynValInfo ([], SynArgInfo ([], false, None)), + None), Const (Unit, (7,4--7,9)), None, + Const (Unit, (7,7--7,9)), (7,4--7,9), NoneAtDo, + { LeadingKeyword = Do (7,4--7,6) + InlineKeyword = None + EqualsRange = None })], false, false, (7,4--7,9))], + (5,4--7,9)), [], None, (3,5--7,9), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--7,9))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--7,9), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,11)-(7,4) parse error Incomplete structured construct at or before this point in member definition diff --git a/tests/service/data/SyntaxTree/Member/Static 02.fs b/tests/service/data/SyntaxTree/Member/Static 02.fs new file mode 100644 index 0000000000..759d87dd25 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Static 02.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] static + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Static 02.fs.bsl b/tests/service/data/SyntaxTree/Member/Static 02.fs.bsl new file mode 100644 index 0000000000..ecf86c4e1f --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Static 02.fs.bsl @@ -0,0 +1,111 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Static 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 + (Unspecified, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (Some { IsInstance = false + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = Member }, + SynValInfo ([[]], SynArgInfo ([], false, None)), + None), + FromParseError (Wild (5,16--5,16), (5,16--5,16)), + None, + ArbitraryAfterError + ("classDefnMember1", (5,16--5,16)), (5,4--5,16), + NoneAtInvisible, + { LeadingKeyword = Static (5,10--5,16) + InlineKeyword = None + EqualsRange = None }), (5,4--5,16)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,17)-(6,4) parse error Incomplete structured construct at or before this point in member definition diff --git a/tests/service/data/SyntaxTree/Member/Static 03.fs b/tests/service/data/SyntaxTree/Member/Static 03.fs new file mode 100644 index 0000000000..2c012c43ce --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Static 03.fs @@ -0,0 +1,6 @@ +module Module + +type T = + [] member this.P1 = 1 + [] static member + [] member this.P3 = 3 diff --git a/tests/service/data/SyntaxTree/Member/Static 03.fs.bsl b/tests/service/data/SyntaxTree/Member/Static 03.fs.bsl new file mode 100644 index 0000000000..70d5eb3aba --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/Static 03.fs.bsl @@ -0,0 +1,112 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/Static 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, + [Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([A], [], [None]) + ArgExpr = Const (Unit, (4,6--4,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (4,6--4,7) }] + Range = (4,4--4,9) }], + 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; P1], [(4,21--4,22)], [None; None]), + None, None, Pats [], None, (4,17--4,24)), None, + Const (Int32 1, (4,27--4,28)), (4,4--4,24), + NoneAtInvisible, + { LeadingKeyword = Member (4,10--4,16) + InlineKeyword = None + EqualsRange = Some (4,25--4,26) }), (4,4--4,28)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([B], [], [None]) + ArgExpr = Const (Unit, (5,6--5,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (5,6--5,7) }] + Range = (5,4--5,9) }], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (Some { IsInstance = false + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = Member }, + SynValInfo ([[]], SynArgInfo ([], false, None)), + None), + FromParseError (Wild (5,23--5,23), (5,23--5,23)), + None, + ArbitraryAfterError + ("classDefnMember1", (5,23--5,23)), (5,4--5,23), + NoneAtInvisible, + { LeadingKeyword = + StaticMember ((5,10--5,16), (5,17--5,23)) + InlineKeyword = None + EqualsRange = None }), (5,4--5,23)); + Member + (SynBinding + (None, Normal, false, false, + [{ Attributes = + [{ TypeName = SynLongIdent ([C], [], [None]) + ArgExpr = Const (Unit, (6,6--6,7)) + Target = None + AppliesToGetterAndSetter = false + Range = (6,6--6,7) }] + Range = (6,4--6,9) }], + 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; P3], [(6,21--6,22)], [None; None]), + None, None, Pats [], None, (6,17--6,24)), None, + Const (Int32 3, (6,27--6,28)), (6,4--6,24), + NoneAtInvisible, + { LeadingKeyword = Member (6,10--6,16) + InlineKeyword = None + EqualsRange = Some (6,25--6,26) }), (6,4--6,28))], + (4,4--6,28)), [], None, (3,5--6,28), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--6,28))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--6,28), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,24)-(6,4) parse error Incomplete structured construct at or before this point in member definition