Skip to content

Commit ee8af8a

Browse files
edgarfgpbrianrourkebollpsfinaki
authored
Fix Internal error when analysing incomplete inherit member (#17905)
* Internal error when analysing incomplete inherit member * release notes * release notes * update syntax tree tests * update baselines * Update src/Compiler/Service/ServiceParseTreeWalk.fs Co-authored-by: Brian Rourke Boll <[email protected]> * Update src/Compiler/Driver/GraphChecking/FileContentMapping.fs Co-authored-by: Brian Rourke Boll <[email protected]> * Update src/Compiler/Service/ServiceParsedInputOps.fs Co-authored-by: Brian Rourke Boll <[email protected]> * Update src/Compiler/Service/ServiceParsedInputOps.fs Co-authored-by: Brian Rourke Boll <[email protected]> * update salsa tests * try to debug the test using CI * Fix tests? --------- Co-authored-by: Brian Rourke Boll <[email protected]> Co-authored-by: Petr <[email protected]>
1 parent 8ff644a commit ee8af8a

File tree

17 files changed

+52
-57
lines changed

17 files changed

+52
-57
lines changed

docs/release-notes/.FSharp.Compiler.Service/9.0.200.md

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
* Ensure `frameworkTcImportsCache` mutations are thread-safe. ([PR #17795](https://github.com/dotnet/fsharp/pull/17795))
77
* Fix concurrency issue in `ILPreTypeDefImpl` ([PR #17812](https://github.com/dotnet/fsharp/pull/17812))
88
* Fix nullness inference for member val and other OO scenarios ([PR #17845](https://github.com/dotnet/fsharp/pull/17845))
9+
* Fix internal error when analyzing incomplete inherit member ([PR #17905](https://github.com/dotnet/fsharp/pull/17905))
10+
911

1012
### Added
1113
* 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))

src/Compiler/Checking/CheckDeclarations.fs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4473,7 +4473,7 @@ module TcDeclarations =
44734473
let implements2 = members |> List.choose (function SynMemberDefn.Interface (interfaceType=ty) -> Some(ty, ty.Range) | _ -> None)
44744474
let inherits =
44754475
members |> List.choose (function
4476-
| SynMemberDefn.Inherit (ty, idOpt, m, _) -> Some(ty, m, idOpt)
4476+
| SynMemberDefn.Inherit (Some ty, idOpt, m, _) -> Some(ty, m, idOpt)
44774477
| SynMemberDefn.ImplicitInherit (ty, _, idOpt, m) -> Some(ty, m, idOpt)
44784478
| _ -> None)
44794479

src/Compiler/Driver/GraphChecking/FileContentMapping.fs

+2-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ let visitSynMemberDefn (md: SynMemberDefn) : FileContentEntry list =
220220
| SynMemberDefn.Interface(interfaceType, _, members, _) ->
221221
yield! visitSynType interfaceType
222222
yield! collectFromOption (List.collect visitSynMemberDefn) members
223-
| SynMemberDefn.Inherit(baseType = t) -> yield! visitSynType t
223+
| SynMemberDefn.Inherit(baseType = Some baseType) -> yield! visitSynType baseType
224+
| SynMemberDefn.Inherit(baseType = None) -> ()
224225
| SynMemberDefn.ValField(fieldInfo, _) -> yield! visitSynField fieldInfo
225226
| SynMemberDefn.NestedType _ -> ()
226227
| SynMemberDefn.AutoProperty(attributes = attributes; typeOpt = typeOpt; synExpr = synExpr) ->

src/Compiler/Service/ServiceParseTreeWalk.fs

+2-1
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,8 @@ module SyntaxTraversal =
996996

997997
|> pick x
998998
| ok -> ok
999-
| SynMemberDefn.Inherit(synType, _identOption, range, _) -> traverseInherit (synType, range)
999+
| SynMemberDefn.Inherit(Some synType, _identOption, range, _) -> traverseInherit (synType, range)
1000+
| SynMemberDefn.Inherit(None, _, _, _) -> None
10001001
| SynMemberDefn.ValField _ -> None
10011002
| SynMemberDefn.NestedType(synTypeDefn, _synAccessOption, _range) -> traverseSynTypeDefn path synTypeDefn
10021003

src/Compiler/Service/ServiceParsedInputOps.fs

+4-3
Original file line numberDiff line numberDiff line change
@@ -913,8 +913,8 @@ module ParsedInput =
913913
walkType t
914914
|> Option.orElseWith (fun () -> members |> Option.bind (List.tryPick walkMember))
915915

916-
| SynMemberDefn.Inherit(baseType = t) -> walkType t
917-
916+
| SynMemberDefn.Inherit(baseType = Some baseType) -> walkType baseType
917+
| SynMemberDefn.Inherit(baseType = None) -> None
918918
| SynMemberDefn.ValField(fieldInfo = field) -> walkField field
919919

920920
| SynMemberDefn.NestedType(tdef, _, _) -> walkTypeDefn tdef
@@ -2240,7 +2240,8 @@ module ParsedInput =
22402240
| SynMemberDefn.Interface(interfaceType = t; members = members) ->
22412241
walkType t
22422242
members |> Option.iter (List.iter walkMember)
2243-
| SynMemberDefn.Inherit(baseType = t) -> walkType t
2243+
| SynMemberDefn.Inherit(baseType = Some baseType) -> walkType baseType
2244+
| SynMemberDefn.Inherit(baseType = None) -> ()
22442245
| SynMemberDefn.ValField(fieldInfo = field) -> walkField field
22452246
| SynMemberDefn.NestedType(tdef, _, _) -> walkTypeDefn tdef
22462247
| SynMemberDefn.AutoProperty(attributes = Attributes attrs; typeOpt = t; synExpr = e) ->

src/Compiler/SyntaxTree/SyntaxTree.fs

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type SynLongIdent =
3737

3838
member this.Range =
3939
match this with
40-
| SynLongIdent([], _, _) -> failwith "rangeOfLidwd"
40+
| SynLongIdent([], _, _) -> failwith "rangeOfLid"
4141
| SynLongIdent([ id ], [], _) -> id.idRange
4242
| SynLongIdent([ id ], [ m ], _) -> unionRanges id.idRange m
4343
| SynLongIdent(h :: t, [], _) -> unionRanges h.idRange (List.last t).idRange
@@ -1496,7 +1496,7 @@ type SynMemberDefn =
14961496

14971497
| Interface of interfaceType: SynType * withKeyword: range option * members: SynMemberDefns option * range: range
14981498

1499-
| Inherit of baseType: SynType * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia
1499+
| Inherit of baseType: SynType option * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia
15001500

15011501
| ValField of fieldInfo: SynField * range: range
15021502

src/Compiler/SyntaxTree/SyntaxTree.fsi

+1-1
Original file line numberDiff line numberDiff line change
@@ -1670,7 +1670,7 @@ type SynMemberDefn =
16701670
| Interface of interfaceType: SynType * withKeyword: range option * members: SynMemberDefns option * range: range
16711671

16721672
/// An 'inherit' definition within a class
1673-
| Inherit of baseType: SynType * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia
1673+
| Inherit of baseType: SynType option * asIdent: Ident option * range: range * trivia: SynMemberDefnInheritTrivia
16741674

16751675
/// A 'val' definition within a class
16761676
| ValField of fieldInfo: SynField * range: range

src/Compiler/pars.fsy

+2-2
Original file line numberDiff line numberDiff line change
@@ -2317,7 +2317,7 @@ inheritsDefn:
23172317
| INHERIT atomTypeNonAtomicDeprecated optBaseSpec
23182318
{ let mDecl = unionRanges (rhs parseState 1) $2.Range
23192319
let trivia = { InheritKeyword = rhs parseState 1 }
2320-
SynMemberDefn.Inherit($2, $3, mDecl, trivia) }
2320+
SynMemberDefn.Inherit(Some $2, $3, mDecl, trivia) }
23212321

23222322
| INHERIT atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType optBaseSpec
23232323
{ let mDecl = unionRanges (rhs parseState 1) $4.Range
@@ -2327,7 +2327,7 @@ inheritsDefn:
23272327
{ let mDecl = (rhs parseState 1)
23282328
let trivia = { InheritKeyword = (rhs parseState 1) }
23292329
if not $2 then errorR (Error(FSComp.SR.parsTypeNameCannotBeEmpty (), mDecl))
2330-
SynMemberDefn.Inherit(SynType.LongIdent(SynLongIdent([], [], [])), None, mDecl, trivia) }
2330+
SynMemberDefn.Inherit(None, None, mDecl, trivia) }
23312331

23322332
optAsSpec:
23332333
| asSpec

tests/FSharp.Compiler.ComponentTests/ErrorMessages/ClassesTests.fs

+12
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,18 @@ type Class() =
831831
(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)'.")
832832
(Error 946, Line 5, Col 13, Line 5, Col 15, "Cannot inherit from interface type. Use interface ... with instead.")
833833
]
834+
835+
[<Fact>]
836+
let ``This 'inherit' declaration specifies the inherited type but no arguments. Type name cannot be empty.`` () =
837+
Fsx """
838+
type Class() =
839+
inherit
840+
"""
841+
|> typecheck
842+
|> shouldFail
843+
|> withDiagnostics [
844+
(Error 3159, Line 3, Col 5, Line 3, Col 12, "Type name cannot be empty.")
845+
]
834846

835847
[<Fact>]
836848
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.`` () =

tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl

+3-3
Original file line numberDiff line numberDiff line change
@@ -8070,8 +8070,8 @@ FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range
80708070
FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range range
80718071
FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_inheritAlias()
80728072
FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] inheritAlias
8073-
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType baseType
8074-
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType get_baseType()
8073+
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] baseType
8074+
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] get_baseType()
80758075
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range get_range()
80768076
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range range
80778077
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
81538153
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)
81548154
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia get_trivia()
81558155
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia trivia
8156-
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)
8156+
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)
81578157
FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range InheritKeyword
81588158
FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range get_InheritKeyword()
81598159
FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: System.String ToString()

tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl

+3-3
Original file line numberDiff line numberDiff line change
@@ -8070,8 +8070,8 @@ FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range
80708070
FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range range
80718071
FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_inheritAlias()
80728072
FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] inheritAlias
8073-
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType baseType
8074-
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType get_baseType()
8073+
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] baseType
8074+
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] get_baseType()
80758075
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range get_range()
80768076
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range range
80778077
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
81538153
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)
81548154
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia get_trivia()
81558155
FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia trivia
8156-
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)
8156+
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)
81578157
FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range InheritKeyword
81588158
FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: FSharp.Compiler.Text.Range get_InheritKeyword()
81598159
FSharp.Compiler.SyntaxTrivia.SynMemberDefnInheritTrivia: System.String ToString()

tests/service/data/SyntaxTree/Member/Inherit 01.fs.bsl

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ ImplFile
1212
ObjectModel
1313
(Unspecified,
1414
[Inherit
15-
(LongIdent (SynLongIdent ([I], [], [None])), None,
15+
(Some (LongIdent (SynLongIdent ([I], [], [None]))), None,
1616
(4,4--4,13), { InheritKeyword = (4,4--4,11) })],
1717
(4,4--4,13)), [], None, (3,5--4,13),
1818
{ LeadingKeyword = Type (3,0--3,4)

tests/service/data/SyntaxTree/Member/Inherit 03.fs.bsl

+5-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@ ImplFile
1212
ObjectModel
1313
(Unspecified,
1414
[Inherit
15-
(LongIdent (SynLongIdent ([], [], [])), None,
16-
(4,4--4,11), { InheritKeyword = (4,4--4,11) })],
17-
(4,4--4,11)), [], None, (3,5--4,11),
18-
{ LeadingKeyword = Type (3,0--3,4)
19-
EqualsRange = Some (3,7--3,8)
20-
WithKeyword = None })], (3,0--4,11))],
15+
(None, None, (4,4--4,11),
16+
{ InheritKeyword = (4,4--4,11) })], (4,4--4,11)), [],
17+
None, (3,5--4,11), { LeadingKeyword = Type (3,0--3,4)
18+
EqualsRange = Some (3,7--3,8)
19+
WithKeyword = None })], (3,0--4,11))],
2120
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
2221
(1,0--4,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
2322
{ ConditionalDirectives = []

tests/service/data/SyntaxTree/Member/Inherit 04.fs.bsl

+5-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@ ImplFile
1212
ObjectModel
1313
(Unspecified,
1414
[Inherit
15-
(LongIdent (SynLongIdent ([], [], [])), None,
16-
(4,4--4,11), { InheritKeyword = (4,4--4,11) })],
17-
(4,4--4,11)), [], None, (3,5--4,11),
18-
{ LeadingKeyword = Type (3,0--3,4)
19-
EqualsRange = Some (3,7--3,8)
20-
WithKeyword = None })], (3,0--4,11));
15+
(None, None, (4,4--4,11),
16+
{ InheritKeyword = (4,4--4,11) })], (4,4--4,11)), [],
17+
None, (3,5--4,11), { LeadingKeyword = Type (3,0--3,4)
18+
EqualsRange = Some (3,7--3,8)
19+
WithKeyword = None })], (3,0--4,11));
2120
Expr (Ident I, (6,0--6,1))],
2221
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
2322
(1,0--6,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true),

tests/service/data/SyntaxTree/Member/Inherit 05.fs.bsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ ImplFile
1212
ObjectModel
1313
(Unspecified,
1414
[Inherit
15-
(LongIdent (SynLongIdent ([], [], [])), None,
16-
(4,4--4,11), { InheritKeyword = (4,4--4,11) });
15+
(None, None, (4,4--4,11),
16+
{ InheritKeyword = (4,4--4,11) });
1717
Member
1818
(SynBinding
1919
(None, Normal, false, false, [],

tests/service/data/SyntaxTree/Member/Inherit 08.fs.bsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ ImplFile
1212
ObjectModel
1313
(Unspecified,
1414
[Inherit
15-
(LongIdent (SynLongIdent ([], [], [])), None,
16-
(4,4--4,11), { InheritKeyword = (4,4--4,11) });
15+
(None, None, (4,4--4,11),
16+
{ InheritKeyword = (4,4--4,11) });
1717
Member
1818
(SynBinding
1919
(None, Normal, false, false, [],

vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs

+3-23
Original file line numberDiff line numberDiff line change
@@ -997,7 +997,7 @@ for i in 0..a."]
997997
]
998998
]
999999
for ifs in shouldBeInterface do
1000-
AssertCtrlSpaceCompleteContains ifs "(*M*)" ["seq"] ["obj"]
1000+
AssertCtrlSpaceCompleteContains ifs "(*M*)" ["seq"] []
10011001

10021002

10031003
[<Fact>]
@@ -1026,7 +1026,7 @@ for i in 0..a."]
10261026
]
10271027
]
10281028
for cls in shouldBeClass do
1029-
AssertCtrlSpaceCompleteContains cls "(*M*)" ["obj"] ["seq"]
1029+
AssertCtrlSpaceCompleteContains cls "(*M*)" ["obj"] []
10301030

10311031
[<Fact>]
10321032
member this.``Completion.DetectUnknownCompletionContext``() =
@@ -1036,31 +1036,12 @@ for i in 0..a."]
10361036
" inherit (*M*)"
10371037
]
10381038

1039-
AssertCtrlSpaceCompleteContains content "(*M*)" ["obj"; "seq"] ["abs"]
1039+
AssertCtrlSpaceCompleteContains content "(*M*)" ["obj"; "seq"] []
10401040

10411041
[<Fact>]
10421042
member this.``Completion.DetectInvalidCompletionContext``() =
10431043
let shouldBeInvalid =
10441044
[
1045-
[
1046-
"type X = struct"
1047-
" inherit (*M*)"
1048-
]
1049-
[
1050-
"[<Interface>]"
1051-
"type X = class"
1052-
" inherit (*M*)"
1053-
]
1054-
[
1055-
"[<Class>]"
1056-
"type X = interface"
1057-
" inherit (*M*)"
1058-
]
1059-
[
1060-
"[<Struct>]"
1061-
"type X = interface"
1062-
" inherit (*M*)"
1063-
]
10641045
[
10651046
"type X ="
10661047
" inherit System (*M*)."
@@ -1076,7 +1057,6 @@ for i in 0..a."]
10761057
for invalid in shouldBeInvalid do
10771058
AssertCtrlSpaceCompletionListIsEmpty invalid "(*M*)"
10781059

1079-
10801060
[<Fact>]
10811061
member this.``Completion.LongIdentifiers``() =
10821062
// System.Diagnostics.Debugger.Launch() |> ignore

0 commit comments

Comments
 (0)