Skip to content

Commit

Permalink
Revert "Avoid duplicate nested modules in Trie. (dotnet#14756)"
Browse files Browse the repository at this point in the history
This reverts commit 2ca2f09.
  • Loading branch information
KevinRansom committed Feb 20, 2023
1 parent f36dd1d commit f15e9bc
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 188 deletions.
6 changes: 3 additions & 3 deletions src/Compiler/Driver/GraphChecking/TrieMapping.fs
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,7 @@ let mkDictFromKeyValuePairs (items: KeyValuePair<'TKey, 'TValue> list) =
let dict = Dictionary(Seq.length items)

for KeyValue (k, v) in items do
if not (dict.ContainsKey(k)) then
dict.Add(k, v)
dict.Add(k, v)

dict

Expand Down Expand Up @@ -189,7 +188,8 @@ let processSynModuleOrNamespace<'Decl>
mkSingletonDict name { Current = current; Children = node } |> continuation)
tail

if kind = SynModuleOrNamespaceKind.AnonModule then
if List.isEmpty name then
// This can happen for a namespace global.
// We collect the child nodes from the decls
decls |> List.choose (mkTrieForDeclaration idx) |> mkDictFromKeyValuePairs
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,188 +313,3 @@ let _ = ()
Assert.AreEqual(1, trie.Children.Count)
let aNode = trie.Children.["A"]
Assert.AreEqual(set [| 0 |], aNode.Files)

[<Test>]
let ``Two nested modules with the same name, in named namespace`` () =
let trie =
TrieMapping.mkTrie
[|
{
Idx = 0
FileName = "A.fs"
ParsedInput =
parseSourceCode (
"A.fs",
"""
namespace N
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module ``module`` =
let f x = x + 1
module ``module`` =
let g x = x + 1
""" )
}
|]

Assert.AreEqual(1, trie.Children.Count)
let node = trie.Children.["N"]
Assert.AreEqual(1, node.Children.Count)

[<Test>]
let ``Two nested modules with the same name, in namespace global`` () =
let trie =
TrieMapping.mkTrie
[|
{
Idx = 0
FileName = "A.fs"
ParsedInput =
parseSourceCode (
"A.fs",
"""
namespace global
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module ``module`` =
let f x = x + 1
module ``module`` =
let g x = x + 1
""" )
}
|]

// namespace global leads to a Root entry, no further processing will be done.
Assert.AreEqual(set [| 0 |], trie.Files)

[<Test>]
let ``Two nested modules with the same name, in anonymous module`` () =
let trie =
TrieMapping.mkTrie
[|
{
Idx = 1
FileName = "Program.fs"
ParsedInput =
parseSourceCode (
"Program.fs",
"""
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module ``module`` =
let f x = x + 1
module ``module`` =
let g x = x + 1
""" )
}
|]

Assert.AreEqual(1, trie.Children.Count)
Assert.True(trie.Children.ContainsKey("module"))

[<Test>]
let ``Two nested modules with the same name, in nested module`` () =
let trie =
TrieMapping.mkTrie
[|
{
Idx = 0
FileName = "A.fs"
ParsedInput =
parseSourceCode (
"A.fs",
"""
namespace A
module B =
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module ``module`` =
let f x = x + 1
module ``module`` =
let g x = x + 1
""" )
}
|]

let bNode = trie.Children["A"].Children["B"]
Assert.AreEqual(1, bNode.Children.Count)
Assert.True(bNode.Children.ContainsKey("module"))

[<Test>]
let ``Two nested modules with the same name, in nested module in signature file`` () =
let trie =
TrieMapping.mkTrie
[|
{
Idx = 0
FileName = "A.fsi"
ParsedInput =
parseSourceCode (
"A.fsi",
"""
namespace A
module B =
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module ``module`` = begin end
module ``module`` = begin end
""" )
}
|]

let bNode = trie.Children["A"].Children["B"]
Assert.AreEqual(1, bNode.Children.Count)
Assert.True(bNode.Children.ContainsKey("module"))

[<Test>]
let ``Two namespaces with the same name in the same implementation file`` () =
let trie =
TrieMapping.mkTrie
[|
{
Idx = 0
FileName = "A.fs"
ParsedInput =
parseSourceCode (
"A.fs",
"""
namespace A
module B = begin end
namespace A
module C = begin end
""" )
}
|]

let aNode = trie.Children["A"]
Assert.AreEqual(2, aNode.Children.Count)

[<Test>]
let ``Two namespaces with the same name in the same signature file`` () =
let trie =
TrieMapping.mkTrie
[|
{
Idx = 0
FileName = "A.fsi"
ParsedInput =
parseSourceCode (
"A.fsi",
"""
namespace A
module B = begin end
namespace A
module C = begin end
""" )
}
|]

let aNode = trie.Children["A"]
Assert.AreEqual(2, aNode.Children.Count)

0 comments on commit f15e9bc

Please sign in to comment.