From bae73d350230cd68fdb6d730bbaaad454c6f99c0 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Wed, 18 Dec 2024 21:57:31 +0100 Subject: [PATCH] Symbols: try to use ValReprInfoForDisplay in Mfv.CurriedParameterGroups (#18124) --- .../.FSharp.Compiler.Service/9.0.200.md | 1 + src/Compiler/Symbols/Symbols.fs | 2 +- src/Compiler/TypedTree/TypedTreeBasics.fs | 11 +++-- src/Compiler/TypedTree/TypedTreeBasics.fsi | 2 + .../FSharp.Compiler.Service.Tests/Symbols.fs | 40 +++++++++++++++++++ 5 files changed, 49 insertions(+), 7 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 4029c80e146..cab4ac0fd9d 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md @@ -17,6 +17,7 @@ * Add missing nullable-metadata for C# consumers of records,exceptions and DU subtypes generated from F# code. [PR #18079](https://github.com/dotnet/fsharp/pull/18079) * Fix a race condition in file book keeping in the compiler service ([#18008](https://github.com/dotnet/fsharp/pull/18008)) * Fix trimming '%' characters when lowering interpolated string to a concat call [PR #18123](https://github.com/dotnet/fsharp/pull/18123) +* Symbols: try to use ValReprInfoForDisplay in Mfv.CurriedParameterGroups ([PR #18124](https://github.com/dotnet/fsharp/pull/18124)) * Shim/file system: fix leaks of the shim [PR #18144](https://github.com/dotnet/fsharp/pull/18144) ### Added diff --git a/src/Compiler/Symbols/Symbols.fs b/src/Compiler/Symbols/Symbols.fs index 95427b7914f..c2772cf8736 100644 --- a/src/Compiler/Symbols/Symbols.fs +++ b/src/Compiler/Symbols/Symbols.fs @@ -2135,7 +2135,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = |> makeReadOnlyCollection | V v -> - match v.ValReprInfo with + match tryGetArityOfValForDisplay v.Deref with | None -> let _, tau = v.GeneralizedType if isFunTy cenv.g tau then diff --git a/src/Compiler/TypedTree/TypedTreeBasics.fs b/src/Compiler/TypedTree/TypedTreeBasics.fs index 0ad62482b6a..582d6767d7e 100644 --- a/src/Compiler/TypedTree/TypedTreeBasics.fs +++ b/src/Compiler/TypedTree/TypedTreeBasics.fs @@ -62,13 +62,12 @@ let arityOfVal (v: Val) = | None -> ValReprInfo.emptyValData | Some info -> info +let tryGetArityOfValForDisplay (v: Val) = + v.ValReprInfoForDisplay + |> Option.orElseWith (fun _ -> v.ValReprInfo) + let arityOfValForDisplay (v: Val) = - match v.ValReprInfoForDisplay with - | Some info -> info - | None -> - match v.ValReprInfo with - | None -> ValReprInfo.emptyValData - | Some info -> info + tryGetArityOfValForDisplay v |> Option.defaultValue ValReprInfo.emptyValData let tupInfoRef = TupInfo.Const false diff --git a/src/Compiler/TypedTree/TypedTreeBasics.fsi b/src/Compiler/TypedTree/TypedTreeBasics.fsi index c064be67c9e..6984d5c64fb 100644 --- a/src/Compiler/TypedTree/TypedTreeBasics.fsi +++ b/src/Compiler/TypedTree/TypedTreeBasics.fsi @@ -45,6 +45,8 @@ val nameOfVal: v: Val -> string val arityOfVal: v: Val -> ValReprInfo +val tryGetArityOfValForDisplay: v: Val -> ValReprInfo option + val arityOfValForDisplay: v: Val -> ValReprInfo val tupInfoRef: TupInfo diff --git a/tests/FSharp.Compiler.Service.Tests/Symbols.fs b/tests/FSharp.Compiler.Service.Tests/Symbols.fs index 7e01b64f1df..25617ca1235 100644 --- a/tests/FSharp.Compiler.Service.Tests/Symbols.fs +++ b/tests/FSharp.Compiler.Service.Tests/Symbols.fs @@ -787,6 +787,46 @@ type T() = assertRange (9, 19) (9, 20) mProp + + [] + let ``Repr info 01`` () = + let _, checkResults = + getParseAndCheckResults """ +module Module + +let f x = () +""" + let mfv = findSymbolByName "f" checkResults :?> FSharpMemberOrFunctionOrValue + let param = mfv.CurriedParameterGroups[0][0] + param.Name.Value |> shouldEqual "x" + + [] + let ``Repr info 02`` () = + let _, checkResults = + getParseAndCheckResults """ +module Module + +do + let f x = () + () +""" + let mfv = findSymbolByName "f" checkResults :?> FSharpMemberOrFunctionOrValue + let param = mfv.CurriedParameterGroups[0][0] + param.Name.Value |> shouldEqual "x" + + [] + let ``Repr info 03`` () = + let _, checkResults = + getParseAndCheckResults """ +module Module + +type T() = + let f x = () +""" + let mfv = findSymbolByName "f" checkResults :?> FSharpMemberOrFunctionOrValue + let param = mfv.CurriedParameterGroups[0][0] + param.Name.Value |> shouldEqual "x" + module GetValSignatureText = let private assertSignature (expected:string) source (lineNumber, column, line, identifier) = let _, checkResults = getParseAndCheckResults source