dotnet / fsharp

The F# compiler, F# core library, F# language service, and F# tooling integration for Visual Studio
https://dotnet.microsoft.com/languages/fsharp
MIT License
3.9k stars 783 forks source link

Nullness issue - add contextual information into nullness mismatches #17409

Open T-Gro opened 3 months ago

T-Gro commented 3 months ago

Issue description

As of now, nullness related errors are coming from comparing pairs of types in the constraint solver, and all the nullness warnings come from here.

Which means that context (does it come from generic code, equality check, pattern matching, dereferencing a property via dot-lookup,... and many others) is not kept until the nullness constraint solving.

Which in the end makes the messages not user friendly - the ranges fit, but the messaging does not reflect context and source of the nullness mismatch.

Example:

let getLength (x: string | null) = x.Length

image

Choose one or more from the following categories of impact

Operating System

Windows (Default)

What .NET runtime/SDK kind are you seeing the issue on

.NET SDK (.NET Core, .NET 5+)

.NET Runtime/SDK version

No response

Reproducible code snippet and actual behavior

No response

Possible workarounds

No response

T-Gro commented 3 months ago

(Hint: For method calls, this would be coming from CanMemberSigsMatchUpToCheck in the subsumeTypes invocation. From there the info needs to go to ConstraintSolver to be known at warning time.