From 479b1856a23eb770945fd85cf75c16c6a13e49d2 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 15:49:57 +0100 Subject: [PATCH 01/12] Internal error when analysing incomplete inherit member --- src/Compiler/SyntaxTree/SyntaxTree.fs | 2 +- .../ErrorMessages/ClassesTests.fs | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fs b/src/Compiler/SyntaxTree/SyntaxTree.fs index 81e893592b8..483c549bcdc 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fs +++ b/src/Compiler/SyntaxTree/SyntaxTree.fs @@ -37,7 +37,7 @@ type SynLongIdent = member this.Range = match this with - | SynLongIdent([], _, _) -> failwith "rangeOfLidwd" + | SynLongIdent([], _, _) -> Range.Zero | SynLongIdent([ id ], [], _) -> id.idRange | SynLongIdent([ id ], [ m ], _) -> unionRanges id.idRange m | SynLongIdent(h :: t, [], _) -> unionRanges h.idRange (List.last t).idRange diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/ClassesTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/ClassesTests.fs index f902fa14369..cb6e1ae7344 100644 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/ClassesTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/ClassesTests.fs @@ -831,6 +831,18 @@ type Class() = (Error 961, Line 5, Col 5, Line 5, Col 12, "This 'inherit' declaration specifies the inherited type but no arguments. Consider supplying arguments, e.g. 'inherit BaseType(args)'.") (Error 946, Line 5, Col 13, Line 5, Col 15, "Cannot inherit from interface type. Use interface ... with instead.") ] + + [] + let ``This 'inherit' declaration specifies the inherited type but no arguments. Type name cannot be empty.`` () = + Fsx """ +type Class() = + inherit + """ + |> typecheck + |> shouldFail + |> withDiagnostics [ + (Error 3159, Line 3, Col 5, Line 3, Col 12, "Type name cannot be empty.") + ] [] let ``The types System.ValueType, System.Enum, System.Delegate, System.MulticastDelegate and System.Array cannot be used as super types in an object expression or class.`` () = From 7f2c43f66a0256950bb996c877b29a3703b759a4 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 15:54:00 +0100 Subject: [PATCH 02/12] release notes --- docs/release-notes/.FSharp.Compiler.Service/9.0.200.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md index 15b5f1248e6..043b2b67178 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md @@ -6,6 +6,8 @@ * Ensure `frameworkTcImportsCache` mutations are thread-safe. ([PR #17795](https://github.com/dotnet/fsharp/pull/17795)) * Fix concurrency issue in `ILPreTypeDefImpl` ([PR #17812](https://github.com/dotnet/fsharp/pull/17812)) * Fix nullness inference for member val and other OO scenarios ([PR #17845](https://github.com/dotnet/fsharp/pull/17845)) +* Fix internal error when analyzing incomplete inherit member ([PR #17905](https://github.com/dotnet/fsharp/pull/17905)) + ### Added * Deprecate places where `seq` can be omitted. ([Language suggestion #1033](https://github.com/fsharp/fslang-suggestions/issues/1033), [PR #17772](https://github.com/dotnet/fsharp/pull/17772)) From 7bfae49cbb75dc38fd2391ae4e4dbe4c9bb3b394 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 15:54:00 +0100 Subject: [PATCH 03/12] release notes --- .../release-notes/.FSharp.Compiler.Service/9.0.200.md | 2 ++ src/Compiler/Checking/CheckDeclarations.fs | 2 +- .../Driver/GraphChecking/FileContentMapping.fs | 5 ++++- src/Compiler/Service/ServiceParseTreeWalk.fs | 5 ++++- src/Compiler/Service/ServiceParsedInputOps.fs | 11 ++++++++--- src/Compiler/SyntaxTree/SyntaxTree.fs | 4 ++-- src/Compiler/SyntaxTree/SyntaxTree.fsi | 2 +- src/Compiler/pars.fsy | 4 ++-- 8 files changed, 24 insertions(+), 11 deletions(-) diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md index 15b5f1248e6..043b2b67178 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md @@ -6,6 +6,8 @@ * Ensure `frameworkTcImportsCache` mutations are thread-safe. ([PR #17795](https://github.com/dotnet/fsharp/pull/17795)) * Fix concurrency issue in `ILPreTypeDefImpl` ([PR #17812](https://github.com/dotnet/fsharp/pull/17812)) * Fix nullness inference for member val and other OO scenarios ([PR #17845](https://github.com/dotnet/fsharp/pull/17845)) +* Fix internal error when analyzing incomplete inherit member ([PR #17905](https://github.com/dotnet/fsharp/pull/17905)) + ### Added * Deprecate places where `seq` can be omitted. ([Language suggestion #1033](https://github.com/fsharp/fslang-suggestions/issues/1033), [PR #17772](https://github.com/dotnet/fsharp/pull/17772)) diff --git a/src/Compiler/Checking/CheckDeclarations.fs b/src/Compiler/Checking/CheckDeclarations.fs index 31ce9be573c..a3dc4998630 100644 --- a/src/Compiler/Checking/CheckDeclarations.fs +++ b/src/Compiler/Checking/CheckDeclarations.fs @@ -4473,7 +4473,7 @@ module TcDeclarations = let implements2 = members |> List.choose (function SynMemberDefn.Interface (interfaceType=ty) -> Some(ty, ty.Range) | _ -> None) let inherits = members |> List.choose (function - | SynMemberDefn.Inherit (ty, idOpt, m, _) -> Some(ty, m, idOpt) + | SynMemberDefn.Inherit (Some ty, idOpt, m, _) -> Some(ty, m, idOpt) | SynMemberDefn.ImplicitInherit (ty, _, idOpt, m) -> Some(ty, m, idOpt) | _ -> None) diff --git a/src/Compiler/Driver/GraphChecking/FileContentMapping.fs b/src/Compiler/Driver/GraphChecking/FileContentMapping.fs index 938034623ba..f5f88896e4e 100644 --- a/src/Compiler/Driver/GraphChecking/FileContentMapping.fs +++ b/src/Compiler/Driver/GraphChecking/FileContentMapping.fs @@ -220,7 +220,10 @@ let visitSynMemberDefn (md: SynMemberDefn) : FileContentEntry list = | SynMemberDefn.Interface(interfaceType, _, members, _) -> yield! visitSynType interfaceType yield! collectFromOption (List.collect visitSynMemberDefn) members - | SynMemberDefn.Inherit(baseType = t) -> yield! visitSynType t + | SynMemberDefn.Inherit(baseType = t) -> + match t with + | Some baseType -> yield! visitSynType baseType + | None -> () | SynMemberDefn.ValField(fieldInfo, _) -> yield! visitSynField fieldInfo | SynMemberDefn.NestedType _ -> () | SynMemberDefn.AutoProperty(attributes = attributes; typeOpt = typeOpt; synExpr = synExpr) -> diff --git a/src/Compiler/Service/ServiceParseTreeWalk.fs b/src/Compiler/Service/ServiceParseTreeWalk.fs index ca1a1c5e657..e7d953a26c8 100644 --- a/src/Compiler/Service/ServiceParseTreeWalk.fs +++ b/src/Compiler/Service/ServiceParseTreeWalk.fs @@ -996,7 +996,10 @@ module SyntaxTraversal = |> pick x | ok -> ok - | SynMemberDefn.Inherit(synType, _identOption, range, _) -> traverseInherit (synType, range) + | SynMemberDefn.Inherit(synType, _identOption, range, _) -> + match synType with + | Some synType -> traverseInherit (synType, range) + | None -> None | SynMemberDefn.ValField _ -> None | SynMemberDefn.NestedType(synTypeDefn, _synAccessOption, _range) -> traverseSynTypeDefn path synTypeDefn diff --git a/src/Compiler/Service/ServiceParsedInputOps.fs b/src/Compiler/Service/ServiceParsedInputOps.fs index cfbefd49ade..e4db704283a 100644 --- a/src/Compiler/Service/ServiceParsedInputOps.fs +++ b/src/Compiler/Service/ServiceParsedInputOps.fs @@ -913,8 +913,10 @@ module ParsedInput = walkType t |> Option.orElseWith (fun () -> members |> Option.bind (List.tryPick walkMember)) - | SynMemberDefn.Inherit(baseType = t) -> walkType t - + | SynMemberDefn.Inherit(baseType = t) -> + match t with + | Some baseType -> walkType baseType + | None -> None | SynMemberDefn.ValField(fieldInfo = field) -> walkField field | SynMemberDefn.NestedType(tdef, _, _) -> walkTypeDefn tdef @@ -2240,7 +2242,10 @@ module ParsedInput = | SynMemberDefn.Interface(interfaceType = t; members = members) -> walkType t members |> Option.iter (List.iter walkMember) - | SynMemberDefn.Inherit(baseType = t) -> walkType t + | SynMemberDefn.Inherit(baseType = t) -> + match t with + | Some baseType -> walkType baseType + | None -> () | SynMemberDefn.ValField(fieldInfo = field) -> walkField field | SynMemberDefn.NestedType(tdef, _, _) -> walkTypeDefn tdef | SynMemberDefn.AutoProperty(attributes = Attributes attrs; typeOpt = t; synExpr = e) -> diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fs b/src/Compiler/SyntaxTree/SyntaxTree.fs index 483c549bcdc..a30ea5d811b 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fs +++ b/src/Compiler/SyntaxTree/SyntaxTree.fs @@ -37,7 +37,7 @@ type SynLongIdent = member this.Range = match this with - | SynLongIdent([], _, _) -> Range.Zero + | SynLongIdent([], _, _) -> failwith "rangeOfLid" | SynLongIdent([ id ], [], _) -> id.idRange | SynLongIdent([ id ], [ m ], _) -> unionRanges id.idRange m | SynLongIdent(h :: t, [], _) -> unionRanges h.idRange (List.last t).idRange @@ -1496,7 +1496,7 @@ type SynMemberDefn = | Interface of interfaceType: SynType * withKeyword: range option * members: SynMemberDefns option * range: range - | Inherit of baseType: SynType * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia + | Inherit of baseType: SynType option * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia | ValField of fieldInfo: SynField * range: range diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fsi b/src/Compiler/SyntaxTree/SyntaxTree.fsi index 379362f407c..b63979ce3fc 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTree.fsi @@ -1670,7 +1670,7 @@ type SynMemberDefn = | Interface of interfaceType: SynType * withKeyword: range option * members: SynMemberDefns option * range: range /// An 'inherit' definition within a class - | Inherit of baseType: SynType * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia + | Inherit of baseType: SynType option * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia /// A 'val' definition within a class | ValField of fieldInfo: SynField * range: range diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index fac3f30a073..698527f24d9 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -2317,7 +2317,7 @@ inheritsDefn: | INHERIT atomTypeNonAtomicDeprecated optBaseSpec { let mDecl = unionRanges (rhs parseState 1) $2.Range let trivia = { InheritKeyword = rhs parseState 1 } - SynMemberDefn.Inherit($2, $3, mDecl, trivia) } + SynMemberDefn.Inherit(Some $2, $3, mDecl, trivia) } | INHERIT atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType optBaseSpec { let mDecl = unionRanges (rhs parseState 1) $4.Range @@ -2327,7 +2327,7 @@ inheritsDefn: { let mDecl = (rhs parseState 1) let trivia = { InheritKeyword = (rhs parseState 1) } if not $2 then errorR (Error(FSComp.SR.parsTypeNameCannotBeEmpty (), mDecl)) - SynMemberDefn.Inherit(SynType.LongIdent(SynLongIdent([], [], [])), None, mDecl, trivia) } + SynMemberDefn.Inherit(None, None, mDecl, trivia) } optAsSpec: | asSpec From c2b1793e73e99bc57a8ad269c4bb324be49b9741 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 16:56:30 +0100 Subject: [PATCH 04/12] update syntax tree tests --- .../service/data/SyntaxTree/Member/Inherit 01.fs.bsl | 2 +- .../service/data/SyntaxTree/Member/Inherit 03.fs.bsl | 11 +++++------ .../service/data/SyntaxTree/Member/Inherit 04.fs.bsl | 11 +++++------ .../service/data/SyntaxTree/Member/Inherit 05.fs.bsl | 4 ++-- .../service/data/SyntaxTree/Member/Inherit 08.fs.bsl | 4 ++-- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/tests/service/data/SyntaxTree/Member/Inherit 01.fs.bsl b/tests/service/data/SyntaxTree/Member/Inherit 01.fs.bsl index f10dc2c0997..817c15422b4 100644 --- a/tests/service/data/SyntaxTree/Member/Inherit 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Member/Inherit 01.fs.bsl @@ -12,7 +12,7 @@ ImplFile ObjectModel (Unspecified, [Inherit - (LongIdent (SynLongIdent ([I], [], [None])), None, + (Some (LongIdent (SynLongIdent ([I], [], [None]))), None, (4,4--4,13), { InheritKeyword = (4,4--4,11) })], (4,4--4,13)), [], None, (3,5--4,13), { LeadingKeyword = Type (3,0--3,4) diff --git a/tests/service/data/SyntaxTree/Member/Inherit 03.fs.bsl b/tests/service/data/SyntaxTree/Member/Inherit 03.fs.bsl index d0101bb0dd4..76aeb2e2e47 100644 --- a/tests/service/data/SyntaxTree/Member/Inherit 03.fs.bsl +++ b/tests/service/data/SyntaxTree/Member/Inherit 03.fs.bsl @@ -12,12 +12,11 @@ ImplFile ObjectModel (Unspecified, [Inherit - (LongIdent (SynLongIdent ([], [], [])), None, - (4,4--4,11), { InheritKeyword = (4,4--4,11) })], - (4,4--4,11)), [], None, (3,5--4,11), - { LeadingKeyword = Type (3,0--3,4) - EqualsRange = Some (3,7--3,8) - WithKeyword = None })], (3,0--4,11))], + (None, None, (4,4--4,11), + { InheritKeyword = (4,4--4,11) })], (4,4--4,11)), [], + None, (3,5--4,11), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,11))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Member/Inherit 04.fs.bsl b/tests/service/data/SyntaxTree/Member/Inherit 04.fs.bsl index 7d0dcfc450c..2b1741c3714 100644 --- a/tests/service/data/SyntaxTree/Member/Inherit 04.fs.bsl +++ b/tests/service/data/SyntaxTree/Member/Inherit 04.fs.bsl @@ -12,12 +12,11 @@ ImplFile ObjectModel (Unspecified, [Inherit - (LongIdent (SynLongIdent ([], [], [])), None, - (4,4--4,11), { InheritKeyword = (4,4--4,11) })], - (4,4--4,11)), [], None, (3,5--4,11), - { LeadingKeyword = Type (3,0--3,4) - EqualsRange = Some (3,7--3,8) - WithKeyword = None })], (3,0--4,11)); + (None, None, (4,4--4,11), + { InheritKeyword = (4,4--4,11) })], (4,4--4,11)), [], + None, (3,5--4,11), { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,11)); Expr (Ident I, (6,0--6,1))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--6,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true), diff --git a/tests/service/data/SyntaxTree/Member/Inherit 05.fs.bsl b/tests/service/data/SyntaxTree/Member/Inherit 05.fs.bsl index ab71c976fe7..f2bdb9713e2 100644 --- a/tests/service/data/SyntaxTree/Member/Inherit 05.fs.bsl +++ b/tests/service/data/SyntaxTree/Member/Inherit 05.fs.bsl @@ -12,8 +12,8 @@ ImplFile ObjectModel (Unspecified, [Inherit - (LongIdent (SynLongIdent ([], [], [])), None, - (4,4--4,11), { InheritKeyword = (4,4--4,11) }); + (None, None, (4,4--4,11), + { InheritKeyword = (4,4--4,11) }); Member (SynBinding (None, Normal, false, false, [], diff --git a/tests/service/data/SyntaxTree/Member/Inherit 08.fs.bsl b/tests/service/data/SyntaxTree/Member/Inherit 08.fs.bsl index 757d0a30638..1b0e4712cb5 100644 --- a/tests/service/data/SyntaxTree/Member/Inherit 08.fs.bsl +++ b/tests/service/data/SyntaxTree/Member/Inherit 08.fs.bsl @@ -12,8 +12,8 @@ ImplFile ObjectModel (Unspecified, [Inherit - (LongIdent (SynLongIdent ([], [], [])), None, - (4,4--4,11), { InheritKeyword = (4,4--4,11) }); + (None, None, (4,4--4,11), + { InheritKeyword = (4,4--4,11) }); Member (SynBinding (None, Normal, false, false, [], From f1e1d37757a33aa5da8903779764b7f1ae237768 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 17:22:15 +0100 Subject: [PATCH 05/12] update baselines --- ...arp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl | 6 +++--- ...p.Compiler.Service.SurfaceArea.netstandard20.release.bsl | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) 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 f08d67883b7..e0ba696955a 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 @@ -8070,8 +8070,8 @@ FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_inheritAlias() FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] inheritAlias -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType baseType -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType get_baseType() +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] baseType +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] get_baseType() FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] asIdent @@ -8153,7 +8153,7 @@ FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewIm FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia get_trivia() FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia trivia -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInherit(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInherit(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia) FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range InheritKeyword FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range get_InheritKeyword() FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: 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 f08d67883b7..e0ba696955a 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 @@ -8070,8 +8070,8 @@ FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_inheritAlias() FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] inheritAlias -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType baseType -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType get_baseType() +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] baseType +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] get_baseType() FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] asIdent @@ -8153,7 +8153,7 @@ FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewIm FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia get_trivia() FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia trivia -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInherit(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInherit(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia) FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range InheritKeyword FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range get_InheritKeyword() FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: System.String ToString() From 4f7c57cbc52eaf7c98ef8782081a675be8b825c0 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 18:55:10 +0100 Subject: [PATCH 06/12] Update src/Compiler/Service/ServiceParseTreeWalk.fs Co-authored-by: Brian Rourke Boll --- src/Compiler/Service/ServiceParseTreeWalk.fs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Compiler/Service/ServiceParseTreeWalk.fs b/src/Compiler/Service/ServiceParseTreeWalk.fs index e7d953a26c8..433142e5105 100644 --- a/src/Compiler/Service/ServiceParseTreeWalk.fs +++ b/src/Compiler/Service/ServiceParseTreeWalk.fs @@ -996,10 +996,8 @@ module SyntaxTraversal = |> pick x | ok -> ok - | SynMemberDefn.Inherit(synType, _identOption, range, _) -> - match synType with - | Some synType -> traverseInherit (synType, range) - | None -> None + | SynMemberDefn.Inherit(Some synType, _identOption, range, _) -> traverseInherit (synType, range) + | SynMemberDefn.Inherit(None, _, _, _) -> None | SynMemberDefn.ValField _ -> None | SynMemberDefn.NestedType(synTypeDefn, _synAccessOption, _range) -> traverseSynTypeDefn path synTypeDefn From cad5c53a5705de5507c4b1c7ff9ee57ab6c68868 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 18:55:24 +0100 Subject: [PATCH 07/12] Update src/Compiler/Driver/GraphChecking/FileContentMapping.fs Co-authored-by: Brian Rourke Boll --- src/Compiler/Driver/GraphChecking/FileContentMapping.fs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Compiler/Driver/GraphChecking/FileContentMapping.fs b/src/Compiler/Driver/GraphChecking/FileContentMapping.fs index f5f88896e4e..0534c00feb4 100644 --- a/src/Compiler/Driver/GraphChecking/FileContentMapping.fs +++ b/src/Compiler/Driver/GraphChecking/FileContentMapping.fs @@ -220,10 +220,8 @@ let visitSynMemberDefn (md: SynMemberDefn) : FileContentEntry list = | SynMemberDefn.Interface(interfaceType, _, members, _) -> yield! visitSynType interfaceType yield! collectFromOption (List.collect visitSynMemberDefn) members - | SynMemberDefn.Inherit(baseType = t) -> - match t with - | Some baseType -> yield! visitSynType baseType - | None -> () + | SynMemberDefn.Inherit(baseType = Some baseType) -> yield! visitSynType baseType + | SynMemberDefn.Inherit(baseType = None) -> () | SynMemberDefn.ValField(fieldInfo, _) -> yield! visitSynField fieldInfo | SynMemberDefn.NestedType _ -> () | SynMemberDefn.AutoProperty(attributes = attributes; typeOpt = typeOpt; synExpr = synExpr) -> From 6e8b469ef84bda184881eee07304a31a0eeff67a Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 18:55:29 +0100 Subject: [PATCH 08/12] Update src/Compiler/Service/ServiceParsedInputOps.fs Co-authored-by: Brian Rourke Boll --- src/Compiler/Service/ServiceParsedInputOps.fs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Compiler/Service/ServiceParsedInputOps.fs b/src/Compiler/Service/ServiceParsedInputOps.fs index e4db704283a..fee392c762e 100644 --- a/src/Compiler/Service/ServiceParsedInputOps.fs +++ b/src/Compiler/Service/ServiceParsedInputOps.fs @@ -913,10 +913,8 @@ module ParsedInput = walkType t |> Option.orElseWith (fun () -> members |> Option.bind (List.tryPick walkMember)) - | SynMemberDefn.Inherit(baseType = t) -> - match t with - | Some baseType -> walkType baseType - | None -> None + | SynMemberDefn.Inherit(baseType = Some baseType) -> walkType baseType + | SynMemberDefn.Inherit(baseType = None) -> None | SynMemberDefn.ValField(fieldInfo = field) -> walkField field | SynMemberDefn.NestedType(tdef, _, _) -> walkTypeDefn tdef From 797ef28680493a1dd2ccb53edae9e045eb6d189b Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 18:55:37 +0100 Subject: [PATCH 09/12] Update src/Compiler/Service/ServiceParsedInputOps.fs Co-authored-by: Brian Rourke Boll --- src/Compiler/Service/ServiceParsedInputOps.fs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Compiler/Service/ServiceParsedInputOps.fs b/src/Compiler/Service/ServiceParsedInputOps.fs index fee392c762e..3be806eaa9f 100644 --- a/src/Compiler/Service/ServiceParsedInputOps.fs +++ b/src/Compiler/Service/ServiceParsedInputOps.fs @@ -2240,10 +2240,8 @@ module ParsedInput = | SynMemberDefn.Interface(interfaceType = t; members = members) -> walkType t members |> Option.iter (List.iter walkMember) - | SynMemberDefn.Inherit(baseType = t) -> - match t with - | Some baseType -> walkType baseType - | None -> () + | SynMemberDefn.Inherit(baseType = Some baseType) -> walkType baseType + | SynMemberDefn.Inherit(baseType = None) -> () | SynMemberDefn.ValField(fieldInfo = field) -> walkField field | SynMemberDefn.NestedType(tdef, _, _) -> walkTypeDefn tdef | SynMemberDefn.AutoProperty(attributes = Attributes attrs; typeOpt = t; synExpr = e) -> From 80bd70dc9fd3e698661b2a35f579b248e13977a3 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 21 Oct 2024 21:20:14 +0100 Subject: [PATCH 10/12] update salsa tests --- .../Tests.LanguageService.Completion.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs index cb08d34ae88..c16fcedb8d1 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs @@ -997,7 +997,7 @@ for i in 0..a."] ] ] for ifs in shouldBeInterface do - AssertCtrlSpaceCompleteContains ifs "(*M*)" ["seq"] ["obj"] + AssertCtrlSpaceCompleteContains ifs "(*M*)" ["seq"] [] [] @@ -1026,7 +1026,7 @@ for i in 0..a."] ] ] for cls in shouldBeClass do - AssertCtrlSpaceCompleteContains cls "(*M*)" ["obj"] ["seq"] + AssertCtrlSpaceCompleteContains cls "(*M*)" ["obj"] [] [] member this.``Completion.DetectUnknownCompletionContext``() = @@ -1036,7 +1036,7 @@ for i in 0..a."] " inherit (*M*)" ] - AssertCtrlSpaceCompleteContains content "(*M*)" ["obj"; "seq"] ["abs"] + AssertCtrlSpaceCompleteContains content "(*M*)" ["obj"; "seq"] [] [] member this.``Completion.DetectInvalidCompletionContext``() = From 888df5102b6861291ad02208fce47889a7a49943 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Tue, 22 Oct 2024 12:35:26 +0100 Subject: [PATCH 11/12] try to debug the test using CI --- .../Tests.LanguageService.Completion.fs | 106 +++++++++++++++++- 1 file changed, 105 insertions(+), 1 deletion(-) diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs index c16fcedb8d1..d18c084661b 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs @@ -1073,8 +1073,112 @@ for i in 0..a."] ] + let expected = + [ + "AbstractClassAttribute" + "AllowNullLiteralAttribute" + "Array" + "Array2D" + "Array3D" + "Array4D" + "ArrayExtensions" + "Async" + "AsyncActivation" + "AsyncBuilder" + "AsyncPrimitives" + "AsyncReplyChannel" + "AsyncReturn" + "AutoOpenAttribute" + "AutoSerializableAttribute" + "BackgroundTaskBuilder" + "CLIEventAttribute" + "CLIMutableAttribute" + "Checked" + "Choice" + "Choice1Of2" + "Choice1Of3" + "Choice1Of4" + "Choice1Of5" + "Choice1Of6" + "Choice1Of7" + "Choice2Of2" + "Choice2Of3" + "Choice2Of4" + "Choice2Of5" + "Choice2Of6" + "Choice2Of7" + "Choice3Of3" + "Choice3Of4" + "Choice3Of5" + "Choice3Of6" + "Choice3Of7" + "Choice4Of4" + "Choice4Of5" + "Choice4Of6" + "Choice4Of7" + "Choice5Of5" + "Choice5Of6" + "Choice5Of7" + "Choice6Of6" + "Choice6Of7" + "Choice7Of7" + "ClassAttribute" + "Collections" + "CommonExtensions" + "ComparisonConditionalOnAttribute" + "ComparisonIdentity" + "CompilationArgumentCountsAttribute" + "CompilationMappingAttribute" + "CompilationRepresentationAttribute" + "CompilationRepresentationFlags" + "CompilationSourceNameAttribute" + "CompiledNameAttribute" + "CompilerMessageAttribute" + "CompilerServices" + "Control" + "Core" + "CustomComparisonAttribute" + "CustomEqualityAttribute" + "CustomOperationAttribute" + "Data" + "DefaultAugmentationAttribute" + "DefaultValueAttribute" + "DelegateEvent" + "EntryPointAttribute" + "EqualityConditionalOnAttribute" + "Error" + "Event" + "ExperimentalAttribute" + "ExtraTopLevelOperators" + "FSharp" + "FSharpFunc" + "FSharpInterfaceDataVersionAttribute" + "FSharpTypeFunc" + "Failure" + "Format" + "FuncConvert" + "GeneralizableValueAttribute" + "Handler" + "HashIdentity" + "IDelegateEvent" + "IEvent" + "InlineIfLambdaAttribute" + "InterfaceAttribute" + "KeyValue" + "LanguagePrimitives" + "Lazy" + "LazyExtensions" + "Linq" + "List" + "LiteralAttribute" + "MailboxProcessor" + "Map" + "MatchFailureException" + "MeasureAnnotatedAbbreviationAttribute" + ] + for invalid in shouldBeInvalid do - AssertCtrlSpaceCompletionListIsEmpty invalid "(*M*)" + AssertCtrlSpaceCompleteContains invalid "(*M*)" expected ["AbstractClassAttribute"] [] From 8430ba2351a1035a45948a99222303dbefe93c5a Mon Sep 17 00:00:00 2001 From: Petr Date: Wed, 23 Oct 2024 17:17:25 +0200 Subject: [PATCH 12/12] Fix tests? --- .../Tests.LanguageService.Completion.fs | 126 +----------------- 1 file changed, 1 insertion(+), 125 deletions(-) diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs index d18c084661b..9516280cba9 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs @@ -1042,25 +1042,6 @@ for i in 0..a."] member this.``Completion.DetectInvalidCompletionContext``() = let shouldBeInvalid = [ - [ - "type X = struct" - " inherit (*M*)" - ] - [ - "[]" - "type X = class" - " inherit (*M*)" - ] - [ - "[]" - "type X = interface" - " inherit (*M*)" - ] - [ - "[]" - "type X = interface" - " inherit (*M*)" - ] [ "type X =" " inherit System (*M*)." @@ -1073,114 +1054,9 @@ for i in 0..a."] ] - let expected = - [ - "AbstractClassAttribute" - "AllowNullLiteralAttribute" - "Array" - "Array2D" - "Array3D" - "Array4D" - "ArrayExtensions" - "Async" - "AsyncActivation" - "AsyncBuilder" - "AsyncPrimitives" - "AsyncReplyChannel" - "AsyncReturn" - "AutoOpenAttribute" - "AutoSerializableAttribute" - "BackgroundTaskBuilder" - "CLIEventAttribute" - "CLIMutableAttribute" - "Checked" - "Choice" - "Choice1Of2" - "Choice1Of3" - "Choice1Of4" - "Choice1Of5" - "Choice1Of6" - "Choice1Of7" - "Choice2Of2" - "Choice2Of3" - "Choice2Of4" - "Choice2Of5" - "Choice2Of6" - "Choice2Of7" - "Choice3Of3" - "Choice3Of4" - "Choice3Of5" - "Choice3Of6" - "Choice3Of7" - "Choice4Of4" - "Choice4Of5" - "Choice4Of6" - "Choice4Of7" - "Choice5Of5" - "Choice5Of6" - "Choice5Of7" - "Choice6Of6" - "Choice6Of7" - "Choice7Of7" - "ClassAttribute" - "Collections" - "CommonExtensions" - "ComparisonConditionalOnAttribute" - "ComparisonIdentity" - "CompilationArgumentCountsAttribute" - "CompilationMappingAttribute" - "CompilationRepresentationAttribute" - "CompilationRepresentationFlags" - "CompilationSourceNameAttribute" - "CompiledNameAttribute" - "CompilerMessageAttribute" - "CompilerServices" - "Control" - "Core" - "CustomComparisonAttribute" - "CustomEqualityAttribute" - "CustomOperationAttribute" - "Data" - "DefaultAugmentationAttribute" - "DefaultValueAttribute" - "DelegateEvent" - "EntryPointAttribute" - "EqualityConditionalOnAttribute" - "Error" - "Event" - "ExperimentalAttribute" - "ExtraTopLevelOperators" - "FSharp" - "FSharpFunc" - "FSharpInterfaceDataVersionAttribute" - "FSharpTypeFunc" - "Failure" - "Format" - "FuncConvert" - "GeneralizableValueAttribute" - "Handler" - "HashIdentity" - "IDelegateEvent" - "IEvent" - "InlineIfLambdaAttribute" - "InterfaceAttribute" - "KeyValue" - "LanguagePrimitives" - "Lazy" - "LazyExtensions" - "Linq" - "List" - "LiteralAttribute" - "MailboxProcessor" - "Map" - "MatchFailureException" - "MeasureAnnotatedAbbreviationAttribute" - ] - for invalid in shouldBeInvalid do - AssertCtrlSpaceCompleteContains invalid "(*M*)" expected ["AbstractClassAttribute"] + AssertCtrlSpaceCompletionListIsEmpty invalid "(*M*)" - [] member this.``Completion.LongIdentifiers``() = // System.Diagnostics.Debugger.Launch() |> ignore