Skip to content

Commit bcad6fa

Browse files
committed
Checker: report environment before checking namespace
1 parent 4bf3bca commit bcad6fa

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

src/Compiler/Checking/CheckDeclarations.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5429,6 +5429,8 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem
54295429
let envNS = LocateEnv kind.IsModule cenv.thisCcu env enclosingNamespacePath
54305430
let envNS = ImplicitlyOpenOwnNamespace cenv.tcSink g cenv.amap m enclosingNamespacePath envNS
54315431

5432+
CallEnvSink cenv.tcSink (scopem, envNS.NameEnv, env.eAccessRights)
5433+
54325434
let modTyNS = envNS.eModuleOrNamespaceTypeAccumulator.Value
54335435
let modTyRoot, modulNSs = BuildRootModuleType enclosingNamespacePath envNS.eCompPath modTyNS
54345436
let modulNSOpt = List.tryHead modulNSs

tests/FSharp.Compiler.Service.Tests/CompletionTests.fs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,17 @@ let getCompletionInfo source =
1313
let getCompletionItemNames (completionInfo: DeclarationListInfo) =
1414
completionInfo.Items |> Array.map (fun item -> item.NameInCode)
1515

16-
let assertHasItemWithNames names (completionInfo: DeclarationListInfo) =
16+
let private assertItemsWithNames contains names (completionInfo: DeclarationListInfo) =
1717
let itemNames = getCompletionItemNames completionInfo |> set
1818

1919
for name in names do
20-
Assert.True(Set.contains name itemNames, $"{name} not found in {itemNames}")
20+
Assert.True(Set.contains name itemNames = contains)
21+
22+
let assertHasItemWithNames names (completionInfo: DeclarationListInfo) =
23+
assertItemsWithNames true names completionInfo
24+
25+
let assertHasNoItemsWithNames names (completionInfo: DeclarationListInfo) =
26+
assertItemsWithNames false names completionInfo
2127

2228
[<Fact>]
2329
let ``Expr - After record decl 01`` () =
@@ -353,4 +359,24 @@ module rec M =
353359
354360
let _: R{caret} = ()
355361
"""
356-
assertHasItemWithNames ["Rec1"; "Rec2"; "Rec3"] info
362+
assertHasItemWithNames ["Rec1"; "Rec2"; "Rec3"] info
363+
364+
[<Fact>]
365+
let ``Not in scope 01`` () =
366+
let info =
367+
getCompletionInfo """
368+
namespace Ns1
369+
370+
type E =
371+
| A = 1
372+
| B = 2
373+
| C = 1
374+
375+
namespace Ns2
376+
377+
module Module =
378+
match Ns1.E.A with
379+
| {caret}
380+
381+
"""
382+
assertHasNoItemsWithNames ["E"] info

0 commit comments

Comments
 (0)