diff --git a/DEVGUIDE.md b/DEVGUIDE.md index 8983169580..8e043b4dd5 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -147,6 +147,12 @@ If you are on a Mac, you can run this command from the root of the repository: sh build.sh -c Release ``` +Or if you are on Linux: + +```shell +./build.sh -c Release +``` + ## Updating baselines in tests Some tests use "baseline" (.bsl) files. There is sometimes a way to update these baselines en-masse in your local build, diff --git a/README.md b/README.md index f9f4bbcd7b..be1f103e9e 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,21 @@ Even if you find a single-character typo, we're happy to take the change! Althou ## Per-build NuGet packages -Per-build [versions](https://dev.azure.com/dnceng/public/_packaging?_a=package&feed=dotnet-tools&view=versions&package=FSharp.Compiler.Service&protocolType=NuGet) of our NuGet packages are available via this URL: `https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json` +### 7.0.40x series + +[FSharp.Compiler.Service 43.7.400-preview](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet7/NuGet/FSharp.Compiler.Service/versions/) + +```xml + +``` + +### 8.0.10x series + +[FSharp.Compiler.Service 43.8.100-preview](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet8/NuGet/FSharp.Compiler.Service/versions/) + +```xml + +``` ## Branches 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 diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index 6aa808c45a..6bcea07ddc 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -421,7 +421,7 @@ parsAttributesMustComeBeforeVal,"Attributes should be placed before 'val'" 555,parsGetAndOrSetRequired,"'get' and/or 'set' required" 556,parsTypeAnnotationsOnGetSet,"Type annotations on property getters and setters must be given after the 'get()' or 'set(v)', e.g. 'with get() : string = ...'" 557,parsGetterMustHaveAtLeastOneArgument,"A getter property is expected to be a function, e.g. 'get() = ...' or 'get(index) = ...'" -558,parsMultipleAccessibilitiesForGetSet,"Multiple accessibilities given for property getter or setter" +558,parsMultipleAccessibilitiesForGetSet,"When the visibility for a property is specified, setting the visibility of the set or get method is not allowed." 559,parsSetSyntax,"Property setters must be defined using 'set value = ', 'set idx value = ' or 'set (idx1,...,idxN) value = ... '" 560,parsInterfacesHaveSameVisibilityAsEnclosingType,"Interfaces always have the same visibility as the enclosing type" 561,parsAccessibilityModsIllegalForAbstract,"Accessibility modifiers are not allowed on this member. Abstract slots always have the same visibility as the enclosing type." @@ -1519,7 +1519,7 @@ notAFunctionButMaybeDeclaration,"This value is not a function and cannot be appl 3302,packageManagementRequiresVFive,"The 'package management' feature requires language version 5.0 or above" 3303,fromEndSlicingRequiresVFive,"The 'from the end slicing' feature requires language version 'preview'." 3304,poundiNotSupportedByRegisteredDependencyManagers,"#i is not supported by the registered PackageManagers" -3343,tcRequireMergeSourcesOrBindN,"The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '%s' method or appropriate 'MergeSource' and 'Bind' methods" +3343,tcRequireMergeSourcesOrBindN,"The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '%s' method or appropriate 'MergeSources' and 'Bind' methods" 3344,tcAndBangNotSupported,"This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature." 3345,tcInvalidUseBangBindingNoAndBangs,"use! may not be combined with and!" 3350,chkFeatureNotLanguageSupported,"Feature '%s' is not available in F# %s. Please use language version %s or greater." 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..497c666f1d 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..da62e142c2 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -527,6 +527,11 @@ moduleIntro: let mModule = rhs parseState 1 mModule, $4, [], $3, $2 } + | moduleKeyword opt_attributes opt_access opt_rec recover + { if not (isNil $2) then + parseState.LexBuffer.CheckLanguageFeatureAndRecover LanguageFeature.AttributesToRightOfModuleKeyword (rhs parseState 4) + let mModule = rhs parseState 1 + mModule, $4, [], $3, $2 } /* The start of a namespace declaration */ namespaceIntro: @@ -534,6 +539,10 @@ namespaceIntro: { let mNamespace = rhs parseState 1 mNamespace, $2, $3.LongIdent, grabXmlDoc(parseState, [], 1) } + | NAMESPACE opt_rec recover + { let mNamespace = rhs parseState 1 + mNamespace, $2, [], grabXmlDoc(parseState, [], 1) } + /* The contents of a signature file */ fileNamespaceSpecs: @@ -1138,8 +1147,8 @@ fileModuleImpl: | moduleDefnsOrExprPossiblyEmptyOrBlock { let m = (rhs parseState 1) (fun (mNamespaceOpt, isRec, path, xml) -> - match path with - | [] -> ParsedImplFileFragment.AnonModule($1, m) + match path, mNamespaceOpt with + | [], None -> ParsedImplFileFragment.AnonModule($1, m) | _ -> let lastDeclRange = List.tryLast $1 |> Option.map (fun decl -> decl.Range) |> Option.defaultValue (rhs parseState 1) let m = mkRange lastDeclRange.FileName (lhs parseState).Start lastDeclRange.End @@ -1540,7 +1549,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: @@ -1604,7 +1614,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) @@ -2317,6 +2328,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/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index b0eb54ce4c..0f19339511 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - Konstrukt let! ... and! ... se dá použít jen v případě, že tvůrce výpočetních výrazů definuje buď metodu {0}, nebo vhodné metody MergeSource a Bind. + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + Konstrukt let! ... and! ... se dá použít jen v případě, že tvůrce výpočetních výrazů definuje buď metodu {0}, nebo vhodné metody MergeSource a Bind. @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Zadali jste víc dostupností pro metodu getter nebo setter vlastnosti. + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Zadali jste víc dostupností pro metodu getter nebo setter vlastnosti. diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 9935b7db26..ea4855ac07 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - Das Konstrukt "let! ... and! ..." kann nur verwendet werden, wenn der Berechnungsausdrucks-Generator entweder eine {0}-Methode oder geeignete MergeSource- und Bind-Methoden definiert. + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + Das Konstrukt "let! ... and! ..." kann nur verwendet werden, wenn der Berechnungsausdrucks-Generator entweder eine {0}-Methode oder geeignete MergeSource- und Bind-Methoden definiert. @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Für den Getter oder Setter der Eigenschaft wurden mehrere Zugriffsebenen angegeben. + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Für den Getter oder Setter der Eigenschaft wurden mehrere Zugriffsebenen angegeben. diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index 67e0355dee..5c35f12bd3 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - La construcción "let! ... and! ..." solo se puede usar si el generador de expresiones de cálculo define un método "{0}" o bien los métodos "MergeSource" y "Bind" adecuados. + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + La construcción "let! ... and! ..." solo se puede usar si el generador de expresiones de cálculo define un método "{0}" o bien los métodos "MergeSource" y "Bind" adecuados. @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Se proporcionaron varias accesibilidades para un captador o establecedor de propiedad. + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Se proporcionaron varias accesibilidades para un captador o establecedor de propiedad. diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index ae7c4be656..68ea4e0a5f 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - La construction 'let! ... and! ...' peut uniquement être utilisée si le générateur d'expressions de calcul définit une méthode '{0}' ou les méthodes 'MergeSource' et 'Bind' appropriées + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + La construction 'let! ... and! ...' peut uniquement être utilisée si le générateur d'expressions de calcul définit une méthode '{0}' ou les méthodes 'MergeSource' et 'Bind' appropriées @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Plusieurs accessibilités fournies pour la méthode getter ou setter de la propriété + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Plusieurs accessibilités fournies pour la méthode getter ou setter de la propriété diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index ddcfc8a297..41125e7644 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - È possibile usare il costrutto 'let! ... and! ...' solo se il generatore di espressioni di calcolo definisce un metodo '{0}' o metodi 'MergeSource' e 'Bind' appropriati + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + È possibile usare il costrutto 'let! ... and! ...' solo se il generatore di espressioni di calcolo definisce un metodo '{0}' o metodi 'MergeSource' e 'Bind' appropriati @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Sono state assegnate più accessibilità per il getter o il setter della proprietà + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Sono state assegnate più accessibilità per il getter o il setter della proprietà diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index 75bbaa877e..3a04711e3d 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - 'let! ... and! ...' コンストラクトは、コンピュテーション式ビルダーが '{0}' メソッドまたは適切な 'MergeSource' および 'Bind' メソッドのいずれかを定義している場合にのみ使用できます + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + 'let! ... and! ...' コンストラクトは、コンピュテーション式ビルダーが '{0}' メソッドまたは適切な 'MergeSource' および 'Bind' メソッドのいずれかを定義している場合にのみ使用できます @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - プロパティのゲッターまたはセッターに指定されたアクセシビリティが複数あります + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + プロパティのゲッターまたはセッターに指定されたアクセシビリティが複数あります diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index 1dd82ad862..9b1aef419f 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - 'let! ... and! ...' 구문은 계산 식 작성기에서 '{0}' 메서드 또는 적절한 'MergeSource' 및 'Bind' 메서드를 정의한 경우에만 사용할 수 있습니다. + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + 'let! ... and! ...' 구문은 계산 식 작성기에서 '{0}' 메서드 또는 적절한 'MergeSource' 및 'Bind' 메서드를 정의한 경우에만 사용할 수 있습니다. @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - 속성 getter 또는 setter에 대해 여러 액세스 가능성이 지정되었습니다. + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + 속성 getter 또는 setter에 대해 여러 액세스 가능성이 지정되었습니다. diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index f3802f2a0a..ec1a302e95 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - Konstrukcji „let! ... and! ...” można użyć tylko wtedy, gdy konstruktor wyrażeń obliczeniowych definiuje metodę „{0}” lub odpowiednie metody „MergeSource” i „Bind” + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + Konstrukcji „let! ... and! ...” można użyć tylko wtedy, gdy konstruktor wyrażeń obliczeniowych definiuje metodę „{0}” lub odpowiednie metody „MergeSource” i „Bind” @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Podano wiele dostępności dla metody ustawiającej lub metody pobierającej właściwość + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Podano wiele dostępności dla metody ustawiającej lub metody pobierającej właściwość diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index 186afced8e..c875dabd6a 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - O constructo 'let! ... and! ...' só pode ser usado se o construtor de expressões de computação definir um método '{0}' ou um método 'MergeSource' ou 'Bind' apropriado + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + O constructo 'let! ... and! ...' só pode ser usado se o construtor de expressões de computação definir um método '{0}' ou um método 'MergeSource' ou 'Bind' apropriado @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Acessibilidades múltiplas fornecidas para getter ou setter de propriedade + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Acessibilidades múltiplas fornecidas para getter ou setter de propriedade diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index 3ac2f32a96..b7ae9790eb 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - Конструкцию "let! ... and! ..." можно использовать только в том случае, если построитель выражений с вычислениями определяет либо метод "{0}", либо соответствующие методы "MergeSource" и "Bind" + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + Конструкцию "let! ... and! ..." можно использовать только в том случае, если построитель выражений с вычислениями определяет либо метод "{0}", либо соответствующие методы "MergeSource" и "Bind" @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Задано несколько модификаторов доступности для метода получения или задания свойства + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Задано несколько модификаторов доступности для метода получения или задания свойства diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 99e8aafd95..d3609d35fd 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - 'let! ... and! ...' yapısı, yalnızca hesaplama ifadesi oluşturucu bir '{0}' metodunu ya da uygun 'MergeSource' ve 'Bind' metotlarını tanımlarsa kullanılabilir + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + 'let! ... and! ...' yapısı, yalnızca hesaplama ifadesi oluşturucu bir '{0}' metodunu ya da uygun 'MergeSource' ve 'Bind' metotlarını tanımlarsa kullanılabilir @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - Özellik alıcı veya ayarlayıcı için birden çok erişilebilirlik verildi + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + Özellik alıcı veya ayarlayıcı için birden çok erişilebilirlik verildi diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index b0c759c26e..9d700a9f7c 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - 仅当计算表达式生成器定义了 "{0}" 方法或适当的 "MergeSource" 和 "Bind" 方法时,才可以使用 "let! ... and! ..." 构造 + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + 仅当计算表达式生成器定义了 "{0}" 方法或适当的 "MergeSource" 和 "Bind" 方法时,才可以使用 "let! ... and! ..." 构造 @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - 为属性 Getter 或 Setter 给定了多个可访问性 + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + 为属性 Getter 或 Setter 给定了多个可访问性 diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index b4f245109d..08dce83131 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -1153,8 +1153,8 @@ - The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSource' and 'Bind' methods - 只有在計算運算式產生器定義 '{0}' 方法或正確的 'MergeSource' 和 'Bind' 方法時,才可使用 'let! ... and! ...' 建構 + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods + 只有在計算運算式產生器定義 '{0}' 方法或正確的 'MergeSource' 和 'Bind' 方法時,才可使用 'let! ... and! ...' 建構 @@ -3283,8 +3283,8 @@ - Multiple accessibilities given for property getter or setter - 為屬性 getter 或 setter 指定了多個存取範圍 + When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. + 為屬性 getter 或 setter 指定了多個存取範圍 diff --git a/src/FSharp.Build/FSharp.Build.fsproj b/src/FSharp.Build/FSharp.Build.fsproj index 0b477a0c38..f8fbc7138e 100644 --- a/src/FSharp.Build/FSharp.Build.fsproj +++ b/src/FSharp.Build/FSharp.Build.fsproj @@ -10,7 +10,7 @@ $(NoWarn);75 true $(DefineConstants);LOCALIZATION_FSBUILD - NU1701;FS0075 + $(NoWarn);NU1701;FS0075 true 7.0 Debug;Release;Proto;ReleaseCompressed diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/codepage/codepage.fs index 1ad955c4b9..c62bb9958a 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 10, Line 9, Col 14, Line 9, Col 17, "Unexpected keyword 'end' in implementation file") + (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. Expected incomplete structured construct at or before this point or other token.") ] diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/AccessibilityAnnotations/OnTypeMembers/OnTypeMembers.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/AccessibilityAnnotations/OnTypeMembers/OnTypeMembers.fs index b59132ae14..0fbbe44a90 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/AccessibilityAnnotations/OnTypeMembers/OnTypeMembers.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/AccessibilityAnnotations/OnTypeMembers/OnTypeMembers.fs @@ -85,8 +85,8 @@ module AccessibilityAnnotations_OnTypeMembers = |> withDiagnostics [ (Error 10, Line 15, Col 49, Line 15, Col 50, "Unexpected symbol ')' in pattern") (Error 1244, Line 15, Col 48, Line 15, Col 50, "Attempted to parse this as an operator name, but failed") - (Error 558, Line 16, Col 36, Line 16, Col 50, "Multiple accessibilities given for property getter or setter") - (Error 558, Line 19, Col 35, Line 19, Col 56, "Multiple accessibilities given for property getter or setter") + (Error 558, Line 16, Col 36, Line 16, Col 50, "When the visibility for a property is specified, setting the visibility of the set or get method is not allowed.") + (Error 558, Line 19, Col 35, Line 19, Col 56, "When the visibility for a property is specified, setting the visibility of the set or get method is not allowed.") (Error 10, Line 20, Col 49, Line 20, Col 50, "Unexpected identifier in pattern") (Error 1244, Line 20, Col 48, Line 20, Col 57, "Attempted to parse this as an operator name, but failed") (Error 10, Line 23, Col 36, Line 23, Col 42, "Unexpected keyword 'public' in member definition") 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 ) 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() diff --git a/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs b/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs index c398a4f329..09b64c6cb7 100644 --- a/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs +++ b/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs @@ -583,7 +583,7 @@ let _ = return x + y } """ - [|(FSharpDiagnosticSeverity.Error, 3343, (6, 9, 6, 25), "The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a 'Bind2' method or appropriate 'MergeSource' and 'Bind' methods")|] + [|(FSharpDiagnosticSeverity.Error, 3343, (6, 9, 6, 25), "The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a 'Bind2' method or appropriate 'MergeSources' and 'Bind' methods")|] [] let ``AndBang Negative TraceApplicative missing Bind and BindReturn`` () = 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/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 diff --git a/tests/service/data/SyntaxTree/Member/GetSetMember 01.fs b/tests/service/data/SyntaxTree/Member/GetSetMember 01.fs new file mode 100644 index 0000000000..9e8c571bc4 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/GetSetMember 01.fs @@ -0,0 +1,5 @@ +module Foo + +type Foo() = + member f.X with internal get (key1, key2) = true and private set (key1, key2) value = () + member internal f.Y with get (key1, key2) = true and private set (key1, key2) value = () diff --git a/tests/service/data/SyntaxTree/Member/GetSetMember 01.fs.bsl b/tests/service/data/SyntaxTree/Member/GetSetMember 01.fs.bsl new file mode 100644 index 0000000000..3d88c0ff50 --- /dev/null +++ b/tests/service/data/SyntaxTree/Member/GetSetMember 01.fs.bsl @@ -0,0 +1,208 @@ +ImplFile + (ParsedImplFileInput + ("/root/Member/GetSetMember 01.fs", false, QualifiedNameOfFile Foo, [], [], + [SynModuleOrNamespace + ([Foo], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [Foo], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,8)), + ObjectModel + (Unspecified, + [ImplicitCtor + (None, [], SimplePats ([], [], (3,8--3,10)), None, + PreXmlDoc ((3,8), FSharp.Compiler.Xml.XmlDocCollector), + (3,5--3,8), { AsKeyword = None }); + GetSetMember + (Some + (SynBinding + (None, Normal, false, false, [], + PreXmlMerge + (PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), PreXmlDocEmpty), + SynValData + (Some + { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = PropertyGet }, + SynValInfo + ([[SynArgInfo ([], false, None)]; + [SynArgInfo ([], false, Some key1); + SynArgInfo ([], false, Some key2)]], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([f; X], [(4,12--4,13)], [None; None]), + Some get, None, + Pats + [Paren + (Tuple + (false, + [Named + (SynIdent (key1, None), false, + None, (4,34--4,38)); + Named + (SynIdent (key2, None), false, + None, (4,40--4,44))], + [(4,38--4,39)], (4,34--4,44)), + (4,33--4,45))], + Some (Internal (4,20--4,28)), (4,20--4,45)), + None, Const (Bool true, (4,48--4,52)), + (4,20--4,45), NoneAtInvisible, + { LeadingKeyword = Member (4,4--4,10) + InlineKeyword = None + EqualsRange = Some (4,46--4,47) })), + Some + (SynBinding + (None, Normal, false, false, [], + PreXmlMerge + (PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), PreXmlDocEmpty), + SynValData + (Some + { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = PropertySet }, + SynValInfo + ([[SynArgInfo ([], false, None)]; + [SynArgInfo ([], false, Some key1); + SynArgInfo ([], false, Some key2); + SynArgInfo ([], false, Some value)]], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([f; X], [(4,12--4,13)], [None; None]), + Some set, None, + Pats + [Tuple + (false, + [Named + (SynIdent (key1, None), false, None, + (4,70--4,74)); + Named + (SynIdent (key2, None), false, None, + (4,76--4,80)); + Named + (SynIdent (value, None), false, None, + (4,82--4,87))], [(4,74--4,75)], + (4,69--4,87))], + Some (Private (4,57--4,64)), (4,57--4,87)), + None, Const (Unit, (4,90--4,92)), (4,57--4,87), + NoneAtInvisible, + { LeadingKeyword = Member (4,4--4,10) + InlineKeyword = None + EqualsRange = Some (4,88--4,89) })), + (4,4--4,92), { InlineKeyword = None + WithKeyword = (4,15--4,19) + GetKeyword = Some (4,29--4,32) + AndKeyword = Some (4,53--4,56) + SetKeyword = Some (4,65--4,68) }); + GetSetMember + (Some + (SynBinding + (None, Normal, false, false, [], + PreXmlMerge + (PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), PreXmlDocEmpty), + SynValData + (Some + { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = PropertyGet }, + SynValInfo + ([[SynArgInfo ([], false, None)]; + [SynArgInfo ([], false, Some key1); + SynArgInfo ([], false, Some key2)]], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([f; Y], [(5,21--5,22)], [None; None]), + Some get, None, + Pats + [Paren + (Tuple + (false, + [Named + (SynIdent (key1, None), false, + None, (5,34--5,38)); + Named + (SynIdent (key2, None), false, + None, (5,40--5,44))], + [(5,38--5,39)], (5,34--5,44)), + (5,33--5,45))], + Some (Internal (5,11--5,19)), (5,29--5,45)), + None, Const (Bool true, (5,48--5,52)), + (5,29--5,45), NoneAtInvisible, + { LeadingKeyword = Member (5,4--5,10) + InlineKeyword = None + EqualsRange = Some (5,46--5,47) })), + Some + (SynBinding + (None, Normal, false, false, [], + PreXmlMerge + (PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), PreXmlDocEmpty), + SynValData + (Some + { IsInstance = true + IsDispatchSlot = false + IsOverrideOrExplicitImpl = false + IsFinal = false + GetterOrSetterIsCompilerGenerated = false + MemberKind = PropertySet }, + SynValInfo + ([[SynArgInfo ([], false, None)]; + [SynArgInfo ([], false, Some key1); + SynArgInfo ([], false, Some key2); + SynArgInfo ([], false, Some value)]], + SynArgInfo ([], false, None)), None), + LongIdent + (SynLongIdent + ([f; Y], [(5,21--5,22)], [None; None]), + Some set, None, + Pats + [Tuple + (false, + [Named + (SynIdent (key1, None), false, None, + (5,70--5,74)); + Named + (SynIdent (key2, None), false, None, + (5,76--5,80)); + Named + (SynIdent (value, None), false, None, + (5,82--5,87))], [(5,74--5,75)], + (5,69--5,87))], + Some (Private (5,57--5,64)), (5,57--5,87)), + None, Const (Unit, (5,90--5,92)), (5,57--5,87), + NoneAtInvisible, + { LeadingKeyword = Member (5,4--5,10) + InlineKeyword = None + EqualsRange = Some (5,88--5,89) })), + (5,4--5,92), { InlineKeyword = None + WithKeyword = (5,24--5,28) + GetKeyword = Some (5,29--5,32) + AndKeyword = Some (5,53--5,56) + SetKeyword = Some (5,65--5,68) })], + (4,4--5,92)), [], + Some + (ImplicitCtor + (None, [], SimplePats ([], [], (3,8--3,10)), None, + PreXmlDoc ((3,8), FSharp.Compiler.Xml.XmlDocCollector), + (3,5--3,8), { AsKeyword = None })), (3,5--5,92), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,11--3,12) + WithKeyword = None })], (3,0--5,92))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,92), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,57)-(5,87) parse error When the visibility for a property is specified, setting the visibility of the set or get method is not allowed. 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/ModuleOrNamespace/Anon module 01.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 01.fs new file mode 100644 index 0000000000..6a452c185a --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 01.fs @@ -0,0 +1 @@ +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 01.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 01.fs.bsl new file mode 100644 index 0000000000..11fc84ec74 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 01.fs.bsl @@ -0,0 +1,12 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Anon module 01.fs", false, + QualifiedNameOfFile Anon module 01, [], [], + [SynModuleOrNamespace + ([Anon module 01], false, AnonModule, + [Expr (Const (Unit, (1,0--1,2)), (1,0--1,2))], PreXmlDocEmpty, [], + None, (1,0--1,2), { LeadingKeyword = None })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(1,0)-(1,2) parse warning The declarations in this file will be placed in an implicit module 'Anon module 01' based on the file name 'Anon module 01.fs'. However this is not a valid F# identifier, so the contents will not be accessible from other files. Consider renaming the file or adding a 'module' or 'namespace' declaration at the top of the file. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 02.fsx b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 02.fsx new file mode 100644 index 0000000000..6a452c185a --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 02.fsx @@ -0,0 +1 @@ +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 02.fsx.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 02.fsx.bsl new file mode 100644 index 0000000000..448d9bae96 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Anon module 02.fsx.bsl @@ -0,0 +1,10 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Anon module 02.fsx", true, + QualifiedNameOfFile Anon module 02$fsx, [], [], + [SynModuleOrNamespace + ([Anon module 02], false, AnonModule, + [Expr (Const (Unit, (1,0--1,2)), (1,0--1,2))], PreXmlDocEmpty, [], + None, (1,0--1,2), { LeadingKeyword = None })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 05.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 05.fs new file mode 100644 index 0000000000..9053e9990a --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 05.fs @@ -0,0 +1,3 @@ +module A. + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 05.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 05.fs.bsl new file mode 100644 index 0000000000..6f4c8c701d --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 05.fs.bsl @@ -0,0 +1,12 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Module 05.fs", false, QualifiedNameOfFile A, [], + [], + [SynModuleOrNamespace + ([A], false, NamedModule, [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,1) parse error Unexpected start of structured construct in definition diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 06.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 06.fs new file mode 100644 index 0000000000..1fd0e50bfe --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 06.fs @@ -0,0 +1,3 @@ +module + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 06.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 06.fs.bsl new file mode 100644 index 0000000000..ec0cd02e4c --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 06.fs.bsl @@ -0,0 +1,12 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Module 06.fs", false, QualifiedNameOfFile , [], + [], + [SynModuleOrNamespace + ([], false, NamedModule, [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,1) parse error Unexpected start of structured construct in definition. Expected identifier, 'global' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 07.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 07.fs new file mode 100644 index 0000000000..2b59158a73 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 07.fs @@ -0,0 +1,3 @@ +module rec + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 07.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 07.fs.bsl new file mode 100644 index 0000000000..b52a7bcdbf --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Module 07.fs.bsl @@ -0,0 +1,12 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Module 07.fs", false, QualifiedNameOfFile , [], + [], + [SynModuleOrNamespace + ([], true, NamedModule, [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,1) parse error Unexpected start of structured construct in definition. Expected identifier, 'global' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 01.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 01.fs new file mode 100644 index 0000000000..ec0afe0579 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 01.fs @@ -0,0 +1,7 @@ +namespace Ns1 + +() + +namespace Ns2.Nested + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 01.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 01.fs.bsl new file mode 100644 index 0000000000..d4bb61b979 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 01.fs.bsl @@ -0,0 +1,14 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 01.fs", false, + QualifiedNameOfFile Namespace 01, [], [], + [SynModuleOrNamespace + ([Ns1], false, DeclaredNamespace, + [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], PreXmlDocEmpty, [], + None, (1,0--3,2), { LeadingKeyword = Namespace (1,0--1,9) }); + SynModuleOrNamespace + ([Ns2; Nested], false, DeclaredNamespace, + [Expr (Const (Unit, (7,0--7,2)), (7,0--7,2))], PreXmlDocEmpty, [], + None, (5,0--7,2), { LeadingKeyword = Namespace (5,0--5,9) })], + (true, true), { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 02.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 02.fs new file mode 100644 index 0000000000..8bd14088ef --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 02.fs @@ -0,0 +1,7 @@ +namespace Ns1 + +() + +namespace + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 02.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 02.fs.bsl new file mode 100644 index 0000000000..1e5985485f --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 02.fs.bsl @@ -0,0 +1,16 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 02.fs", false, + QualifiedNameOfFile Namespace 02, [], [], + [SynModuleOrNamespace + ([Ns1], false, DeclaredNamespace, + [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], PreXmlDocEmpty, [], + None, (1,0--3,2), { LeadingKeyword = Namespace (1,0--1,9) }); + SynModuleOrNamespace + ([], false, DeclaredNamespace, + [Expr (Const (Unit, (7,0--7,2)), (7,0--7,2))], PreXmlDocEmpty, [], + None, (5,0--7,2), { LeadingKeyword = Namespace (5,0--5,9) })], + (true, true), { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(7,0)-(7,1) parse error Unexpected start of structured construct in implementation file. Expected identifier, 'global' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 03.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 03.fs new file mode 100644 index 0000000000..a0296f7213 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 03.fs @@ -0,0 +1,7 @@ +namespace Ns1 + +() + +namespace Ns2. + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 03.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 03.fs.bsl new file mode 100644 index 0000000000..c822d41e48 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 03.fs.bsl @@ -0,0 +1,16 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 03.fs", false, + QualifiedNameOfFile Namespace 03, [], [], + [SynModuleOrNamespace + ([Ns1], false, DeclaredNamespace, + [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], PreXmlDocEmpty, [], + None, (1,0--3,2), { LeadingKeyword = Namespace (1,0--1,9) }); + SynModuleOrNamespace + ([Ns2], false, DeclaredNamespace, + [Expr (Const (Unit, (7,0--7,2)), (7,0--7,2))], PreXmlDocEmpty, [], + None, (5,0--7,2), { LeadingKeyword = Namespace (5,0--5,9) })], + (true, true), { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(7,0)-(7,1) parse error Unexpected start of structured construct in implementation file diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 04.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 04.fs new file mode 100644 index 0000000000..e530ec3a65 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 04.fs @@ -0,0 +1,7 @@ +namespace Ns1 + +() + +namespace rec + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 04.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 04.fs.bsl new file mode 100644 index 0000000000..e012c095c2 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 04.fs.bsl @@ -0,0 +1,16 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 04.fs", false, + QualifiedNameOfFile Namespace 04, [], [], + [SynModuleOrNamespace + ([Ns1], false, DeclaredNamespace, + [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], PreXmlDocEmpty, [], + None, (1,0--3,2), { LeadingKeyword = Namespace (1,0--1,9) }); + SynModuleOrNamespace + ([], true, DeclaredNamespace, + [Expr (Const (Unit, (7,0--7,2)), (7,0--7,2))], PreXmlDocEmpty, [], + None, (5,0--7,2), { LeadingKeyword = Namespace (5,0--5,9) })], + (true, true), { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(7,0)-(7,1) parse error Unexpected start of structured construct in implementation file. Expected identifier, 'global' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 05.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 05.fs new file mode 100644 index 0000000000..f6907897f6 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 05.fs @@ -0,0 +1 @@ +namespace diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 05.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 05.fs.bsl new file mode 100644 index 0000000000..a41e32b658 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 05.fs.bsl @@ -0,0 +1,9 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 05.fs", false, + QualifiedNameOfFile Namespace 05, [], [], + [SynModuleOrNamespace + ([], false, DeclaredNamespace, [], PreXmlDocEmpty, [], None, (1,0--2,0), + { LeadingKeyword = Namespace (1,0--1,9) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 06.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 06.fs new file mode 100644 index 0000000000..e46c3d5e0e --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 06.fs @@ -0,0 +1,3 @@ +namespace + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 06.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 06.fs.bsl new file mode 100644 index 0000000000..06fd680486 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 06.fs.bsl @@ -0,0 +1,12 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 06.fs", false, + QualifiedNameOfFile Namespace 06, [], [], + [SynModuleOrNamespace + ([], false, DeclaredNamespace, + [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], PreXmlDocEmpty, [], + None, (1,0--3,2), { LeadingKeyword = Namespace (1,0--1,9) })], + (true, true), { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,1) parse error Unexpected start of structured construct in implementation file. Expected identifier, 'global' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 07.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 07.fs new file mode 100644 index 0000000000..deec48716d --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 07.fs @@ -0,0 +1,3 @@ +namespace + +type T = int diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 07.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 07.fs.bsl new file mode 100644 index 0000000000..904371c96d --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 07.fs.bsl @@ -0,0 +1,24 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 07.fs", false, + QualifiedNameOfFile Namespace 07, [], [], + [SynModuleOrNamespace + ([], false, DeclaredNamespace, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [T], + 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 })], (3,0--3,12))], PreXmlDocEmpty, [], + None, (1,0--3,12), { LeadingKeyword = Namespace (1,0--1,9) })], + (true, true), { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,4) parse error Unexpected start of structured construct in implementation file. Expected identifier, 'global' or other token. diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 08.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 08.fs new file mode 100644 index 0000000000..f01fc466be --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 08.fs @@ -0,0 +1 @@ +namespace rec diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 08.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 08.fs.bsl new file mode 100644 index 0000000000..3598403885 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 08.fs.bsl @@ -0,0 +1,9 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 08.fs", false, + QualifiedNameOfFile Namespace 08, [], [], + [SynModuleOrNamespace + ([], true, DeclaredNamespace, [], PreXmlDocEmpty, [], None, (1,0--2,0), + { LeadingKeyword = Namespace (1,0--1,9) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 09.fs b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 09.fs new file mode 100644 index 0000000000..fd6ffe6cf5 --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 09.fs @@ -0,0 +1,7 @@ +namespace + +() + +namespace Ns2 + +() diff --git a/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 09.fs.bsl b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 09.fs.bsl new file mode 100644 index 0000000000..c6f1e667ff --- /dev/null +++ b/tests/service/data/SyntaxTree/ModuleOrNamespace/Namespace 09.fs.bsl @@ -0,0 +1,16 @@ +ImplFile + (ParsedImplFileInput + ("/root/ModuleOrNamespace/Namespace 09.fs", false, + QualifiedNameOfFile Namespace 09, [], [], + [SynModuleOrNamespace + ([], false, DeclaredNamespace, + [Expr (Const (Unit, (3,0--3,2)), (3,0--3,2))], PreXmlDocEmpty, [], + None, (1,0--3,2), { LeadingKeyword = Namespace (1,0--1,9) }); + SynModuleOrNamespace + ([Ns2], false, DeclaredNamespace, + [Expr (Const (Unit, (7,0--7,2)), (7,0--7,2))], PreXmlDocEmpty, [], + None, (5,0--7,2), { LeadingKeyword = Namespace (5,0--5,9) })], + (true, true), { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,1) parse error Unexpected start of structured construct in implementation file. Expected identifier, 'global' or other token. 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/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/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..c7dc64c6ac --- /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. Expected incomplete structured construct at or before this point or other token. 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. 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. 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(