未验证 提交 5b0ba265 编写于 作者: P Petr Pokorny 提交者: GitHub

Custom equality on ModuleOrNamespaceKind (#13693)

上级 e15b0537
......@@ -475,6 +475,7 @@ exception UndefinedName of
exception InternalUndefinedItemRef of (string * string * string -> int * string) * string * string * string
[<CustomEquality;NoComparison>]
type ModuleOrNamespaceKind =
/// Indicates that a module is compiled to a class with the "Module" suffix added.
......@@ -488,6 +489,22 @@ type ModuleOrNamespaceKind =
/// Indicates that the sourcecode had a namespace.
/// If false, this namespace was implicitly constructed during type checking.
isExplicit: bool
override this.Equals other =
match other with
| :? ModuleOrNamespaceKind as kind ->
match this, kind with
| FSharpModuleWithSuffix, FSharpModuleWithSuffix
| ModuleOrType, ModuleOrType
| Namespace _, Namespace _ -> true
| _ -> false
| _ -> false
override this.GetHashCode () =
match this with
| FSharpModuleWithSuffix -> 0
| ModuleOrType -> 1
| Namespace _ -> 2
/// A public path records where a construct lives within the global namespace
/// of a CCU.
......
......@@ -294,6 +294,7 @@ exception UndefinedName of depth: int * error: (string -> string) * id: Ident *
exception InternalUndefinedItemRef of (string * string * string -> int * string) * string * string * string
[<CustomEquality; NoComparison>]
type ModuleOrNamespaceKind =
/// Indicates that a module is compiled to a class with the "Module" suffix added.
......
......@@ -318,3 +318,36 @@ module ModuleDefinitions =
|> withReferences [libFoo2; libFoo1]
|> verifyCompileAndRun
|> shouldSucceed
[<Fact>]
let ``Regression: compilation error with private types in namespace used in a different file`` () =
let types =
"""
namespace FsErrorRepro
type private Blah = { Number: int }
"""
let example =
"""
[<RequireQualifiedAccess>]
module FsErrorRepro.Example
let dummy (blahNum: int) =
let blah : Blah = { Number = blahNum }
printf $"%i{blah.Number}"
"""
let program =
"""
module FsErrorRepro.Main
[<EntryPoint>]
let main _ =
Example.dummy 15
0
"""
FSharp types
|> withAdditionalSourceFiles [SourceCodeFileKind.Create("example.fs", example)
SourceCodeFileKind.Create("program.fs", program)]
|> compile
|> shouldSucceed
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册