From 3fddcbca86ae2a646582327f73c11bf810a32a1a Mon Sep 17 00:00:00 2001 From: "progressive.galib" Date: Tue, 7 Jan 2025 08:08:10 +0000 Subject: [PATCH 01/10] /Compiler/TypedTree/TypedTreePickle.fs refactored. "#if" directive around nullness removed from src Related: #18061 (partially addresses) - [x] Release notes entry updated: in `docs/release-notes/.FSharp.Compiler.Service/9.0.200.md`, --- docs/release-notes/.FSharp.Compiler.Service/9.0.200.md | 3 ++- src/Compiler/DependencyManager/DependencyProvider.fs | 3 --- src/Compiler/DependencyManager/DependencyProvider.fsi | 3 --- 3 files changed, 2 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 8bfd9d8155b..e0be7f700a9 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md @@ -52,7 +52,8 @@ * Better ranges for #nowarn error reporting; bring back #nowarn warnings for --langVersion:80; add warnings under feature flag ([PR #17871](https://github.com/dotnet/fsharp/pull/17871)) * CheckAndThrow can be invoked only from within Cancellable context ([PR #18037](https://github.com/dotnet/fsharp/pull/18037)) * Make ILTypeDef base type calculation lazy. ([PR #18005](https://github.com/dotnet/fsharp/pull/18005)) +* "#if" directive around nullness removed from src/Compiler/DependencyManager/DependencyProvider ([PR #18206](https://github.com/dotnet/fsharp/pull/18206) ### Breaking Changes -* Aliasing `StructAttribute` will now produce a warning (part of [Language suggestion #1136](https://github.com/fsharp/fslang-suggestions/issues/1136), [PR #18098](https://github.com/dotnet/fsharp/pull/18098)) \ No newline at end of file +* Aliasing `StructAttribute` will now produce a warning (part of [Language suggestion #1136](https://github.com/fsharp/fslang-suggestions/issues/1136), [PR #18098](https://github.com/dotnet/fsharp/pull/18098)) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index cc1b47de2ea..a1ee446fb81 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -123,9 +123,6 @@ type IResolveDependenciesResult = /// #I @"c:\somepath\to\packages\1.1.1\ResolvedPackage" abstract Roots: seq -#if NO_CHECKNULLS -[] -#endif type IDependencyManagerProvider = abstract Name: string abstract Key: string diff --git a/src/Compiler/DependencyManager/DependencyProvider.fsi b/src/Compiler/DependencyManager/DependencyProvider.fsi index 4c97224fc90..6568a5f89d2 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fsi +++ b/src/Compiler/DependencyManager/DependencyProvider.fsi @@ -39,9 +39,6 @@ type IResolveDependenciesResult = abstract Roots: seq /// Wraps access to a DependencyManager implementation -#if NO_CHECKNULLS -[] -#endif type IDependencyManagerProvider = /// Name of the dependency manager From 851c0d522549477715830df5ca0a7050e12c89c3 Mon Sep 17 00:00:00 2001 From: "progressive.galib" Date: Tue, 7 Jan 2025 08:37:13 +0000 Subject: [PATCH 02/10] try 2 --- docs/release-notes/.FSharp.Compiler.Service/9.0.200.md | 2 +- src/Compiler/DependencyManager/DependencyProvider.fs | 3 ++- src/Compiler/DependencyManager/DependencyProvider.fsi | 1 + 3 files changed, 4 insertions(+), 2 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 e0be7f700a9..12875b77be5 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md @@ -52,7 +52,7 @@ * Better ranges for #nowarn error reporting; bring back #nowarn warnings for --langVersion:80; add warnings under feature flag ([PR #17871](https://github.com/dotnet/fsharp/pull/17871)) * CheckAndThrow can be invoked only from within Cancellable context ([PR #18037](https://github.com/dotnet/fsharp/pull/18037)) * Make ILTypeDef base type calculation lazy. ([PR #18005](https://github.com/dotnet/fsharp/pull/18005)) -* "#if" directive around nullness removed from src/Compiler/DependencyManager/DependencyProvider ([PR #18206](https://github.com/dotnet/fsharp/pull/18206) +* "#if" directive around nullness removed from src/Compiler/DependencyManager/DependencyProvider ([PR #18207](https://github.com/dotnet/fsharp/pull/18207) ### Breaking Changes diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index a1ee446fb81..64d7dca412d 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -122,7 +122,8 @@ type IResolveDependenciesResult = /// This path is also equivalent to /// #I @"c:\somepath\to\packages\1.1.1\ResolvedPackage" abstract Roots: seq - + +[] type IDependencyManagerProvider = abstract Name: string abstract Key: string diff --git a/src/Compiler/DependencyManager/DependencyProvider.fsi b/src/Compiler/DependencyManager/DependencyProvider.fsi index 6568a5f89d2..63d67ed8205 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fsi +++ b/src/Compiler/DependencyManager/DependencyProvider.fsi @@ -39,6 +39,7 @@ type IResolveDependenciesResult = abstract Roots: seq /// Wraps access to a DependencyManager implementation +[] type IDependencyManagerProvider = /// Name of the dependency manager From a4c56aa1e6b91fb5fe625f9786225e88f7339645 Mon Sep 17 00:00:00 2001 From: "progressive.galib" Date: Tue, 7 Jan 2025 15:00:03 +0000 Subject: [PATCH 03/10] refactoring --- src/Compiler/DependencyManager/DependencyProvider.fs | 8 +++++--- src/Compiler/DependencyManager/DependencyProvider.fsi | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index 64d7dca412d..78cfa25201f 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -15,7 +15,7 @@ open System.Collections.Concurrent module Option = /// Convert string into Option string where null and String.Empty result in None - let ofString (s: string MaybeNull) = + let ofString (s: string | null) = match s with | null -> None | "" -> None @@ -122,8 +122,10 @@ type IResolveDependenciesResult = /// This path is also equivalent to /// #I @"c:\somepath\to\packages\1.1.1\ResolvedPackage" abstract Roots: seq - + +#if NO_CHECKNULLS [] +#endif type IDependencyManagerProvider = abstract Name: string abstract Key: string @@ -715,4 +717,4 @@ type DependencyProvider // Unregister everything registeredDependencyManagers <- None (dllResolveHandler :> IDisposable).Dispose() - assemblyResolveHandler.Dispose() + assemblyResolveHandler.Dispose() \ No newline at end of file diff --git a/src/Compiler/DependencyManager/DependencyProvider.fsi b/src/Compiler/DependencyManager/DependencyProvider.fsi index 63d67ed8205..78d4ce80fe3 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fsi +++ b/src/Compiler/DependencyManager/DependencyProvider.fsi @@ -39,7 +39,9 @@ type IResolveDependenciesResult = abstract Roots: seq /// Wraps access to a DependencyManager implementation +#if NO_CHECKNULLS [] +#endif type IDependencyManagerProvider = /// Name of the dependency manager @@ -136,4 +138,4 @@ type DependencyProvider = /// TryFindDependencyManagerInPath - given a #r "key:sometext" go and find a DependencyManager that satisfies the key member TryFindDependencyManagerInPath: compilerTools: string seq * outputDir: string * reportError: ResolvingErrorReport * path: string -> - string MaybeNull * IDependencyManagerProvider MaybeNull + string MaybeNull * IDependencyManagerProvider MaybeNull \ No newline at end of file From 8441ede9d8202b61d37462553234889a33110dcd Mon Sep 17 00:00:00 2001 From: "progressive.galib" Date: Tue, 7 Jan 2025 16:06:33 +0000 Subject: [PATCH 04/10] . --- src/Compiler/DependencyManager/DependencyProvider.fs | 4 ++-- src/Compiler/DependencyManager/DependencyProvider.fsi | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index 78cfa25201f..e9e241ee3ac 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -607,7 +607,7 @@ type DependencyProvider outputDir: string, reportError: ResolvingErrorReport, path: string - ) : string MaybeNull * IDependencyManagerProvider MaybeNull = + ) : string | null * IDependencyManagerProvider | null = try if path.Contains ":" && not (Path.IsPathRooted path) then let managers = @@ -637,7 +637,7 @@ type DependencyProvider outputDir: string, reportError: ResolvingErrorReport, key: string - ) : IDependencyManagerProvider MaybeNull = + ) : IDependencyManagerProvider | null = try RegisteredDependencyManagers compilerTools (Option.ofString outputDir) reportError |> Map.tryFind key diff --git a/src/Compiler/DependencyManager/DependencyProvider.fsi b/src/Compiler/DependencyManager/DependencyProvider.fsi index 78d4ce80fe3..b2d8dd5b0d1 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fsi +++ b/src/Compiler/DependencyManager/DependencyProvider.fsi @@ -138,4 +138,4 @@ type DependencyProvider = /// TryFindDependencyManagerInPath - given a #r "key:sometext" go and find a DependencyManager that satisfies the key member TryFindDependencyManagerInPath: compilerTools: string seq * outputDir: string * reportError: ResolvingErrorReport * path: string -> - string MaybeNull * IDependencyManagerProvider MaybeNull \ No newline at end of file + string | null * IDependencyManagerProvider | null \ No newline at end of file From cb74ce7ffcd00eee1919c173ba6a2d4cfe31e3f6 Mon Sep 17 00:00:00 2001 From: "progressive.galib" Date: Tue, 7 Jan 2025 16:30:31 +0000 Subject: [PATCH 05/10] . --- src/Compiler/DependencyManager/DependencyProvider.fs | 2 +- src/Compiler/DependencyManager/DependencyProvider.fsi | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index e9e241ee3ac..7f5dda60be8 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -657,7 +657,7 @@ type DependencyProvider packageManagerTextLines: (string * string) seq, reportError: ResolvingErrorReport, executionTfm: string, - [] executionRid: string MaybeNull, + [] executionRid: string | null, [] implicitIncludeDir: string, [] mainScriptName: string, [] fileName: string, diff --git a/src/Compiler/DependencyManager/DependencyProvider.fsi b/src/Compiler/DependencyManager/DependencyProvider.fsi index b2d8dd5b0d1..fffaa9a2026 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fsi +++ b/src/Compiler/DependencyManager/DependencyProvider.fsi @@ -123,7 +123,7 @@ type DependencyProvider = packageManagerTextLines: (string * string) seq * reportError: ResolvingErrorReport * executionTfm: string * - [] executionRid: string * + [] executionRid: string * [] implicitIncludeDir: string * [] mainScriptName: string * [] fileName: string * @@ -133,7 +133,7 @@ type DependencyProvider = /// Fetch a dependencymanager that supports a specific key member TryFindDependencyManagerByKey: compilerTools: string seq * outputDir: string * reportError: ResolvingErrorReport * key: string -> - IDependencyManagerProvider MaybeNull + IDependencyManagerProvider | null /// TryFindDependencyManagerInPath - given a #r "key:sometext" go and find a DependencyManager that satisfies the key member TryFindDependencyManagerInPath: From bffe6d637eeb38cdc442ddc6d093144c8174af38 Mon Sep 17 00:00:00 2001 From: "progressive.galib" Date: Tue, 7 Jan 2025 17:29:31 +0000 Subject: [PATCH 06/10] lets hope this works --- src/Compiler/DependencyManager/DependencyProvider.fs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index 7f5dda60be8..91de2d08083 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -160,15 +160,15 @@ type ReflectionDependencyManagerProvider let instance = if not (isNull (theType.GetConstructor([| typeof; typeof |]))) then - Activator.CreateInstance(theType, [| outputDir :> objnull; useResultsCache :> objnull |]) + Activator.CreateInstance(theType, [| outputDir :> obj | null; useResultsCache :> obj | null |]) else - Activator.CreateInstance(theType, [| outputDir :> objnull |]) + Activator.CreateInstance(theType, [| outputDir :> obj | null |]) - let nameProperty (x: objnull) = x |> nameProperty.GetValue |> string - let keyProperty (x: objnull) = x |> keyProperty.GetValue |> string + let nameProperty (x: obj | null) = x |> nameProperty.GetValue |> string + let keyProperty (x: obj | null) = x |> keyProperty.GetValue |> string - let helpMessagesProperty (x: objnull) = - let toStringArray (o: objnull) = !!o :?> string[] + let helpMessagesProperty (x: obj | null) = + let toStringArray (o: obj| null) = !!o :?> string[] match helpMessagesProperty with | Some helpMessagesProperty -> x |> helpMessagesProperty.GetValue |> toStringArray From cf575d33263e0e11fe0188faadf2270e9cfeb568 Mon Sep 17 00:00:00 2001 From: "progressive.galib" Date: Tue, 7 Jan 2025 17:41:43 +0000 Subject: [PATCH 07/10] . --- src/Compiler/DependencyManager/DependencyProvider.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index 91de2d08083..633beb12f0a 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -681,8 +681,8 @@ type DependencyProvider try let executionRid = match executionRid with - | Null -> RidHelpers.platformRid - | NonNull executionRid -> executionRid + | null -> RidHelpers.platformRid + | executionRid -> executionRid Ok( packageManager.ResolveDependencies( From dd8ae98ff3ed6e48579c00df1144e667671a7738 Mon Sep 17 00:00:00 2001 From: progressive-galib <125106402+progressive-galib@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:17:43 +0600 Subject: [PATCH 08/10] fantomas tried with a bit of tricks DependencyProvider.fs --- .../DependencyManager/DependencyProvider.fs | 272 +++++++++--------- 1 file changed, 139 insertions(+), 133 deletions(-) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index 633beb12f0a..d69ccfc56d9 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -168,7 +168,7 @@ type ReflectionDependencyManagerProvider let keyProperty (x: obj | null) = x |> keyProperty.GetValue |> string let helpMessagesProperty (x: obj | null) = - let toStringArray (o: obj| null) = !!o :?> string[] + let toStringArray (o: obj | null) = !!o :?> string[] match helpMessagesProperty with | Some helpMessagesProperty -> x |> helpMessagesProperty.GetValue |> toStringArray @@ -188,50 +188,42 @@ type ReflectionDependencyManagerProvider let resolveMethod = getInstanceMethod theType - [| - typeof - typeof - typeof - typeof> - typeof - |] + [| typeof + typeof + typeof + typeof> + typeof |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType - [| - typeof - typeof<(string * string) seq> - typeof - typeof - |] + [| typeof + typeof<(string * string) seq> + typeof + typeof |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType - [| - typeof - typeof<(string * string) seq> - typeof - typeof - typeof - |] + [| typeof + typeof<(string * string) seq> + typeof + typeof + typeof |] resolveDependenciesMethodName let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType - [| - typeof - typeof - typeof - typeof<(string * string) seq> - typeof - typeof - typeof - |] + [| typeof + typeof + typeof + typeof<(string * string) seq> + typeof + typeof + typeof |] resolveDependenciesMethodName let clearResultsCacheMethod = @@ -257,50 +249,42 @@ type ReflectionDependencyManagerProvider let resolveMethod = getInstanceMethod theType - [| - typeof - typeof - typeof - typeof> - typeof - |] + [| typeof + typeof + typeof + typeof> + typeof |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType - [| - typeof - typeof<(string * string) seq> - typeof - typeof - |] + [| typeof + typeof<(string * string) seq> + typeof + typeof |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType - [| - typeof - typeof<(string * string) seq> - typeof - typeof - typeof - |] + [| typeof + typeof<(string * string) seq> + typeof + typeof + typeof |] resolveDependenciesMethodName let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType - [| - typeof - typeof - typeof - typeof<(string * string) seq> - typeof - typeof - typeof - |] + [| typeof + typeof + typeof + typeof<(string * string) seq> + typeof + typeof + typeof |] resolveDependenciesMethodName let clearResultsCacheMethod = @@ -358,8 +342,7 @@ type ReflectionDependencyManagerProvider member _.Roots = match getInstanceProperty> (result.GetType()) "Roots" with | None -> Seq.empty - | Some p -> !! p.GetValue(result) :?> seq - } + | Some p -> !! p.GetValue(result) :?> seq } static member MakeResultFromFields ( @@ -387,8 +370,7 @@ type ReflectionDependencyManagerProvider member _.SourceFiles = sourceFiles /// The roots to package directories - member _.Roots = roots - } + member _.Roots = roots } interface IDependencyManagerProvider with @@ -409,16 +391,8 @@ type ReflectionDependencyManagerProvider /// Resolve the dependencies for the given arguments member _.ResolveDependencies - ( - scriptDir, - mainScriptName, - scriptName, - scriptExt, - packageManagerTextLines, - tfm, - rid, - timeout - ) : IResolveDependenciesResult = + (scriptDir, mainScriptName, scriptName, scriptExt, packageManagerTextLines, tfm, rid, timeout) + : IResolveDependenciesResult = // The ResolveDependencies method, has two signatures, the original signature in the variable resolveDeps and the updated signature resolveDepsEx // the resolve method can return values in two different tuples: // (bool * string list * string list * string list) @@ -427,36 +401,49 @@ type ReflectionDependencyManagerProvider let method, arguments = if resolveDepsExWithScriptInfoAndTimeout.IsSome then resolveDepsExWithScriptInfoAndTimeout, - [| - box scriptDir - box scriptName - box scriptExt - box packageManagerTextLines - box tfm - box rid - box timeout - |] + [| box scriptDir + box scriptName + box scriptExt + box packageManagerTextLines + box tfm + box rid + box timeout |] elif resolveDepsExWithTimeout.IsSome then - resolveDepsExWithTimeout, [| box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] + resolveDepsExWithTimeout, + [| box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] elif resolveDepsEx.IsSome then resolveDepsEx, [| box scriptExt; box packageManagerTextLines; box tfm; box rid |] elif resolveDeps.IsSome then resolveDeps, - [| - box scriptDir - box mainScriptName - box scriptName - box (packageManagerTextLines |> Seq.filter (fun (dv, _) -> dv = "r") |> Seq.map snd) - box tfm - |] + [| box scriptDir + box mainScriptName + box scriptName + box (packageManagerTextLines |> Seq.filter (fun (dv, _) -> dv = "r") |> Seq.map snd) + box tfm |] else None, [||] match method with - | None -> ReflectionDependencyManagerProvider.MakeResultFromFields(false, [||], [||], Seq.empty, Seq.empty, Seq.empty) + | None -> + ReflectionDependencyManagerProvider.MakeResultFromFields( + false, + [||], + [||], + Seq.empty, + Seq.empty, + Seq.empty + ) | Some m -> match m.Invoke(instance, arguments) with - | null -> ReflectionDependencyManagerProvider.MakeResultFromFields(false, [||], [||], Seq.empty, Seq.empty, Seq.empty) + | null -> + ReflectionDependencyManagerProvider.MakeResultFromFields( + false, + [||], + [||], + Seq.empty, + Seq.empty, + Seq.empty + ) // Verify the number of arguments returned in the tuple returned by resolvedependencies, it can be: // 1 - object with properties @@ -477,13 +464,24 @@ type ReflectionDependencyManagerProvider !!tupleFields[2] :?> string list |> List.distinct |> List.toSeq | _ -> false, seqEmpty, seqEmpty - ReflectionDependencyManagerProvider.MakeResultFromFields(success, [||], [||], Seq.empty, sourceFiles, packageRoots) + ReflectionDependencyManagerProvider.MakeResultFromFields( + success, + [||], + [||], + Seq.empty, + sourceFiles, + packageRoots + ) /// Provides DependencyManagement functions. /// Class is IDisposable type DependencyProvider - internal (assemblyProbingPaths: AssemblyResolutionProbe option, nativeProbingRoots: NativeResolutionProbe option, useResultsCache: bool) - = + internal + ( + assemblyProbingPaths: AssemblyResolutionProbe option, + nativeProbingRoots: NativeResolutionProbe option, + useResultsCache: bool + ) = // Note: creating a NativeDllResolveHandler currently installs process-wide handlers let dllResolveHandler = new NativeDllResolveHandler(nativeProbingRoots) @@ -495,13 +493,11 @@ type DependencyProvider // Resolution Path = Location of FSharp.Compiler.Service.dll let assemblySearchPaths = lazy - ([ - let assemblyLocation = - typeof.GetTypeInfo().Assembly.Location + ([ let assemblyLocation = + typeof.GetTypeInfo().Assembly.Location - yield !!(Path.GetDirectoryName assemblyLocation) - yield AppDomain.CurrentDomain.BaseDirectory - ]) + yield !!(Path.GetDirectoryName assemblyLocation) + yield AppDomain.CurrentDomain.BaseDirectory ]) let enumerateDependencyManagerAssemblies compilerTools (reportError: ResolvingErrorReport) = getCompilerToolsDesignTimeAssemblyPaths compilerTools @@ -527,7 +523,11 @@ type DependencyProvider let mutable registeredDependencyManagers: Map option = None - let RegisteredDependencyManagers (compilerTools: seq) (outputDir: string option) (reportError: ResolvingErrorReport) = + let RegisteredDependencyManagers + (compilerTools: seq) + (outputDir: string option) + (reportError: ResolvingErrorReport) + = match registeredDependencyManagers with | Some managers -> managers | None -> @@ -537,7 +537,8 @@ type DependencyProvider let loadedProviders = enumerateDependencyManagerAssemblies compilerTools reportError |> Seq.collect (fun a -> a.GetTypes()) - |> Seq.choose (fun t -> ReflectionDependencyManagerProvider.InstanceMaker(t, outputDir, useResultsCache)) + |> Seq.choose (fun t -> + ReflectionDependencyManagerProvider.InstanceMaker(t, outputDir, useResultsCache)) |> Seq.map (fun maker -> maker ()) defaultProviders @@ -557,7 +558,8 @@ type DependencyProvider new(assemblyProbingPaths: AssemblyResolutionProbe, nativeProbingRoots: NativeResolutionProbe, useResultsCache) = new DependencyProvider(Some assemblyProbingPaths, Some nativeProbingRoots, useResultsCache) - new(nativeProbingRoots: NativeResolutionProbe, useResultsCache) = new DependencyProvider(None, Some nativeProbingRoots, useResultsCache) + new(nativeProbingRoots: NativeResolutionProbe, useResultsCache) = + new DependencyProvider(None, Some nativeProbingRoots, useResultsCache) new(nativeProbingRoots: NativeResolutionProbe) = new DependencyProvider(None, Some nativeProbingRoots, true) @@ -565,14 +567,12 @@ type DependencyProvider /// Returns a formatted help messages for registered dependencymanagers for the host to present member _.GetRegisteredDependencyManagerHelpText(compilerTools, outputDir, errorReport) = - [| - let managers = - RegisteredDependencyManagers compilerTools (Option.ofString outputDir) errorReport + [| let managers = + RegisteredDependencyManagers compilerTools (Option.ofString outputDir) errorReport - for kvp in managers do - let dm = kvp.Value - yield! dm.HelpMessages - |] + for kvp in managers do + let dm = kvp.Value + yield! dm.HelpMessages |] /// Clear the DependencyManager results caches member _.ClearResultsCache(compilerTools, outputDir, errorReport) = @@ -584,12 +584,8 @@ type DependencyProvider /// Returns a formatted error message for the host to present member _.CreatePackageManagerUnknownError - ( - compilerTools: seq, - outputDir: string, - packageManagerKey: string, - reportError: ResolvingErrorReport - ) = + (compilerTools: seq, outputDir: string, packageManagerKey: string, reportError: ResolvingErrorReport) + = let registeredKeys = String.Join( ", ", @@ -598,16 +594,17 @@ type DependencyProvider ) let searchPaths = assemblySearchPaths.Force() - FSComp.SR.packageManagerUnknown (packageManagerKey, String.Join(", ", searchPaths, compilerTools), registeredKeys) + + FSComp.SR.packageManagerUnknown ( + packageManagerKey, + String.Join(", ", searchPaths, compilerTools), + registeredKeys + ) /// Fetch a dependencymanager that supports a specific key member this.TryFindDependencyManagerInPath - ( - compilerTools: seq, - outputDir: string, - reportError: ResolvingErrorReport, - path: string - ) : string | null * IDependencyManagerProvider | null = + (compilerTools: seq, outputDir: string, reportError: ResolvingErrorReport, path: string) + : string | null * IDependencyManagerProvider | null = try if path.Contains ":" && not (Path.IsPathRooted path) then let managers = @@ -616,7 +613,12 @@ type DependencyProvider match managers |> Seq.tryFind (fun kv -> path.StartsWithOrdinal(kv.Value.Key + ":")) with | None -> let err, msg = - this.CreatePackageManagerUnknownError(compilerTools, outputDir, path.Split(':').[0], reportError) + this.CreatePackageManagerUnknownError( + compilerTools, + outputDir, + path.Split(':').[0], + reportError + ) reportError.Invoke(ErrorReportType.Error, err, msg) null, null @@ -632,12 +634,8 @@ type DependencyProvider /// Fetch a dependencymanager that supports a specific key member _.TryFindDependencyManagerByKey - ( - compilerTools: seq, - outputDir: string, - reportError: ResolvingErrorReport, - key: string - ) : IDependencyManagerProvider | null = + (compilerTools: seq, outputDir: string, reportError: ResolvingErrorReport, key: string) + : IDependencyManagerProvider | null = try RegisteredDependencyManagers compilerTools (Option.ofString outputDir) reportError |> Map.tryFind key @@ -708,7 +706,15 @@ type DependencyProvider res | Error(errorNumber, errorData) -> reportError.Invoke(ErrorReportType.Error, errorNumber, errorData) - ReflectionDependencyManagerProvider.MakeResultFromFields(false, arrEmpty, arrEmpty, seqEmpty, seqEmpty, seqEmpty) + + ReflectionDependencyManagerProvider.MakeResultFromFields( + false, + arrEmpty, + arrEmpty, + seqEmpty, + seqEmpty, + seqEmpty + ) interface IDisposable with @@ -717,4 +723,4 @@ type DependencyProvider // Unregister everything registeredDependencyManagers <- None (dllResolveHandler :> IDisposable).Dispose() - assemblyResolveHandler.Dispose() \ No newline at end of file + assemblyResolveHandler.Dispose() From 3af7a7fcbd854069d5932379b6d3803c20dc7f15 Mon Sep 17 00:00:00 2001 From: Petr Date: Mon, 13 Jan 2025 14:36:36 +0100 Subject: [PATCH 09/10] fantomas ignore --- .fantomasignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.fantomasignore b/.fantomasignore index b901c74bd99..d1bea49f566 100644 --- a/.fantomasignore +++ b/.fantomasignore @@ -40,6 +40,9 @@ src/Compiler/Checking/SignatureConformance.fs src/Compiler/Checking/TypeHierarchy.fs src/Compiler/Checking/TypeRelations.fs +# nullness-related problems +src/Compiler/DependencyManager/DependencyProvider.fs + # Incorrectly formatted: https://github.com/dotnet/fsharp/pull/14645/commits/49443a67ea8a17670c8a7c80c8bdf91f82231e91 or https://github.com/fsprojects/fantomas/issues/2733 # This CompilerImports.fs behavior is not fixed yet, following up in https://github.com/fsprojects/fantomas/issues/2733 src/Compiler/Driver/CompilerImports.fs From cf56fed154998c83b7b52437717ef5a6e609ffc8 Mon Sep 17 00:00:00 2001 From: Petr Date: Mon, 13 Jan 2025 14:41:39 +0100 Subject: [PATCH 10/10] unformat --- .../DependencyManager/DependencyProvider.fs | 280 +++++++++--------- 1 file changed, 137 insertions(+), 143 deletions(-) diff --git a/src/Compiler/DependencyManager/DependencyProvider.fs b/src/Compiler/DependencyManager/DependencyProvider.fs index d69ccfc56d9..1bf72a76e5b 100644 --- a/src/Compiler/DependencyManager/DependencyProvider.fs +++ b/src/Compiler/DependencyManager/DependencyProvider.fs @@ -160,15 +160,15 @@ type ReflectionDependencyManagerProvider let instance = if not (isNull (theType.GetConstructor([| typeof; typeof |]))) then - Activator.CreateInstance(theType, [| outputDir :> obj | null; useResultsCache :> obj | null |]) + Activator.CreateInstance(theType, [| outputDir :> objnull; useResultsCache :> objnull |]) else - Activator.CreateInstance(theType, [| outputDir :> obj | null |]) + Activator.CreateInstance(theType, [| outputDir :> objnull |]) - let nameProperty (x: obj | null) = x |> nameProperty.GetValue |> string - let keyProperty (x: obj | null) = x |> keyProperty.GetValue |> string + let nameProperty (x: objnull) = x |> nameProperty.GetValue |> string + let keyProperty (x: objnull) = x |> keyProperty.GetValue |> string - let helpMessagesProperty (x: obj | null) = - let toStringArray (o: obj | null) = !!o :?> string[] + let helpMessagesProperty (x: objnull) = + let toStringArray (o: objnull) = !!o :?> string[] match helpMessagesProperty with | Some helpMessagesProperty -> x |> helpMessagesProperty.GetValue |> toStringArray @@ -188,42 +188,50 @@ type ReflectionDependencyManagerProvider let resolveMethod = getInstanceMethod theType - [| typeof - typeof - typeof - typeof> - typeof |] + [| + typeof + typeof + typeof + typeof> + typeof + |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType - [| typeof - typeof<(string * string) seq> - typeof - typeof |] + [| + typeof + typeof<(string * string) seq> + typeof + typeof + |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType - [| typeof - typeof<(string * string) seq> - typeof - typeof - typeof |] + [| + typeof + typeof<(string * string) seq> + typeof + typeof + typeof + |] resolveDependenciesMethodName let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType - [| typeof - typeof - typeof - typeof<(string * string) seq> - typeof - typeof - typeof |] + [| + typeof + typeof + typeof + typeof<(string * string) seq> + typeof + typeof + typeof + |] resolveDependenciesMethodName let clearResultsCacheMethod = @@ -249,42 +257,50 @@ type ReflectionDependencyManagerProvider let resolveMethod = getInstanceMethod theType - [| typeof - typeof - typeof - typeof> - typeof |] + [| + typeof + typeof + typeof + typeof> + typeof + |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType - [| typeof - typeof<(string * string) seq> - typeof - typeof |] + [| + typeof + typeof<(string * string) seq> + typeof + typeof + |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType - [| typeof - typeof<(string * string) seq> - typeof - typeof - typeof |] + [| + typeof + typeof<(string * string) seq> + typeof + typeof + typeof + |] resolveDependenciesMethodName let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType - [| typeof - typeof - typeof - typeof<(string * string) seq> - typeof - typeof - typeof |] + [| + typeof + typeof + typeof + typeof<(string * string) seq> + typeof + typeof + typeof + |] resolveDependenciesMethodName let clearResultsCacheMethod = @@ -342,7 +358,8 @@ type ReflectionDependencyManagerProvider member _.Roots = match getInstanceProperty> (result.GetType()) "Roots" with | None -> Seq.empty - | Some p -> !! p.GetValue(result) :?> seq } + | Some p -> !! p.GetValue(result) :?> seq + } static member MakeResultFromFields ( @@ -370,7 +387,8 @@ type ReflectionDependencyManagerProvider member _.SourceFiles = sourceFiles /// The roots to package directories - member _.Roots = roots } + member _.Roots = roots + } interface IDependencyManagerProvider with @@ -391,8 +409,16 @@ type ReflectionDependencyManagerProvider /// Resolve the dependencies for the given arguments member _.ResolveDependencies - (scriptDir, mainScriptName, scriptName, scriptExt, packageManagerTextLines, tfm, rid, timeout) - : IResolveDependenciesResult = + ( + scriptDir, + mainScriptName, + scriptName, + scriptExt, + packageManagerTextLines, + tfm, + rid, + timeout + ) : IResolveDependenciesResult = // The ResolveDependencies method, has two signatures, the original signature in the variable resolveDeps and the updated signature resolveDepsEx // the resolve method can return values in two different tuples: // (bool * string list * string list * string list) @@ -401,49 +427,36 @@ type ReflectionDependencyManagerProvider let method, arguments = if resolveDepsExWithScriptInfoAndTimeout.IsSome then resolveDepsExWithScriptInfoAndTimeout, - [| box scriptDir - box scriptName - box scriptExt - box packageManagerTextLines - box tfm - box rid - box timeout |] + [| + box scriptDir + box scriptName + box scriptExt + box packageManagerTextLines + box tfm + box rid + box timeout + |] elif resolveDepsExWithTimeout.IsSome then - resolveDepsExWithTimeout, - [| box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] + resolveDepsExWithTimeout, [| box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] elif resolveDepsEx.IsSome then resolveDepsEx, [| box scriptExt; box packageManagerTextLines; box tfm; box rid |] elif resolveDeps.IsSome then resolveDeps, - [| box scriptDir - box mainScriptName - box scriptName - box (packageManagerTextLines |> Seq.filter (fun (dv, _) -> dv = "r") |> Seq.map snd) - box tfm |] + [| + box scriptDir + box mainScriptName + box scriptName + box (packageManagerTextLines |> Seq.filter (fun (dv, _) -> dv = "r") |> Seq.map snd) + box tfm + |] else None, [||] match method with - | None -> - ReflectionDependencyManagerProvider.MakeResultFromFields( - false, - [||], - [||], - Seq.empty, - Seq.empty, - Seq.empty - ) + | None -> ReflectionDependencyManagerProvider.MakeResultFromFields(false, [||], [||], Seq.empty, Seq.empty, Seq.empty) | Some m -> match m.Invoke(instance, arguments) with - | null -> - ReflectionDependencyManagerProvider.MakeResultFromFields( - false, - [||], - [||], - Seq.empty, - Seq.empty, - Seq.empty - ) + | null -> ReflectionDependencyManagerProvider.MakeResultFromFields(false, [||], [||], Seq.empty, Seq.empty, Seq.empty) // Verify the number of arguments returned in the tuple returned by resolvedependencies, it can be: // 1 - object with properties @@ -464,24 +477,13 @@ type ReflectionDependencyManagerProvider !!tupleFields[2] :?> string list |> List.distinct |> List.toSeq | _ -> false, seqEmpty, seqEmpty - ReflectionDependencyManagerProvider.MakeResultFromFields( - success, - [||], - [||], - Seq.empty, - sourceFiles, - packageRoots - ) + ReflectionDependencyManagerProvider.MakeResultFromFields(success, [||], [||], Seq.empty, sourceFiles, packageRoots) /// Provides DependencyManagement functions. /// Class is IDisposable type DependencyProvider - internal - ( - assemblyProbingPaths: AssemblyResolutionProbe option, - nativeProbingRoots: NativeResolutionProbe option, - useResultsCache: bool - ) = + internal (assemblyProbingPaths: AssemblyResolutionProbe option, nativeProbingRoots: NativeResolutionProbe option, useResultsCache: bool) + = // Note: creating a NativeDllResolveHandler currently installs process-wide handlers let dllResolveHandler = new NativeDllResolveHandler(nativeProbingRoots) @@ -493,11 +495,13 @@ type DependencyProvider // Resolution Path = Location of FSharp.Compiler.Service.dll let assemblySearchPaths = lazy - ([ let assemblyLocation = - typeof.GetTypeInfo().Assembly.Location + ([ + let assemblyLocation = + typeof.GetTypeInfo().Assembly.Location - yield !!(Path.GetDirectoryName assemblyLocation) - yield AppDomain.CurrentDomain.BaseDirectory ]) + yield !!(Path.GetDirectoryName assemblyLocation) + yield AppDomain.CurrentDomain.BaseDirectory + ]) let enumerateDependencyManagerAssemblies compilerTools (reportError: ResolvingErrorReport) = getCompilerToolsDesignTimeAssemblyPaths compilerTools @@ -523,11 +527,7 @@ type DependencyProvider let mutable registeredDependencyManagers: Map option = None - let RegisteredDependencyManagers - (compilerTools: seq) - (outputDir: string option) - (reportError: ResolvingErrorReport) - = + let RegisteredDependencyManagers (compilerTools: seq) (outputDir: string option) (reportError: ResolvingErrorReport) = match registeredDependencyManagers with | Some managers -> managers | None -> @@ -537,8 +537,7 @@ type DependencyProvider let loadedProviders = enumerateDependencyManagerAssemblies compilerTools reportError |> Seq.collect (fun a -> a.GetTypes()) - |> Seq.choose (fun t -> - ReflectionDependencyManagerProvider.InstanceMaker(t, outputDir, useResultsCache)) + |> Seq.choose (fun t -> ReflectionDependencyManagerProvider.InstanceMaker(t, outputDir, useResultsCache)) |> Seq.map (fun maker -> maker ()) defaultProviders @@ -558,8 +557,7 @@ type DependencyProvider new(assemblyProbingPaths: AssemblyResolutionProbe, nativeProbingRoots: NativeResolutionProbe, useResultsCache) = new DependencyProvider(Some assemblyProbingPaths, Some nativeProbingRoots, useResultsCache) - new(nativeProbingRoots: NativeResolutionProbe, useResultsCache) = - new DependencyProvider(None, Some nativeProbingRoots, useResultsCache) + new(nativeProbingRoots: NativeResolutionProbe, useResultsCache) = new DependencyProvider(None, Some nativeProbingRoots, useResultsCache) new(nativeProbingRoots: NativeResolutionProbe) = new DependencyProvider(None, Some nativeProbingRoots, true) @@ -567,12 +565,14 @@ type DependencyProvider /// Returns a formatted help messages for registered dependencymanagers for the host to present member _.GetRegisteredDependencyManagerHelpText(compilerTools, outputDir, errorReport) = - [| let managers = - RegisteredDependencyManagers compilerTools (Option.ofString outputDir) errorReport + [| + let managers = + RegisteredDependencyManagers compilerTools (Option.ofString outputDir) errorReport - for kvp in managers do - let dm = kvp.Value - yield! dm.HelpMessages |] + for kvp in managers do + let dm = kvp.Value + yield! dm.HelpMessages + |] /// Clear the DependencyManager results caches member _.ClearResultsCache(compilerTools, outputDir, errorReport) = @@ -584,8 +584,12 @@ type DependencyProvider /// Returns a formatted error message for the host to present member _.CreatePackageManagerUnknownError - (compilerTools: seq, outputDir: string, packageManagerKey: string, reportError: ResolvingErrorReport) - = + ( + compilerTools: seq, + outputDir: string, + packageManagerKey: string, + reportError: ResolvingErrorReport + ) = let registeredKeys = String.Join( ", ", @@ -594,17 +598,16 @@ type DependencyProvider ) let searchPaths = assemblySearchPaths.Force() - - FSComp.SR.packageManagerUnknown ( - packageManagerKey, - String.Join(", ", searchPaths, compilerTools), - registeredKeys - ) + FSComp.SR.packageManagerUnknown (packageManagerKey, String.Join(", ", searchPaths, compilerTools), registeredKeys) /// Fetch a dependencymanager that supports a specific key member this.TryFindDependencyManagerInPath - (compilerTools: seq, outputDir: string, reportError: ResolvingErrorReport, path: string) - : string | null * IDependencyManagerProvider | null = + ( + compilerTools: seq, + outputDir: string, + reportError: ResolvingErrorReport, + path: string + ) : string | null * IDependencyManagerProvider | null = try if path.Contains ":" && not (Path.IsPathRooted path) then let managers = @@ -613,12 +616,7 @@ type DependencyProvider match managers |> Seq.tryFind (fun kv -> path.StartsWithOrdinal(kv.Value.Key + ":")) with | None -> let err, msg = - this.CreatePackageManagerUnknownError( - compilerTools, - outputDir, - path.Split(':').[0], - reportError - ) + this.CreatePackageManagerUnknownError(compilerTools, outputDir, path.Split(':').[0], reportError) reportError.Invoke(ErrorReportType.Error, err, msg) null, null @@ -634,8 +632,12 @@ type DependencyProvider /// Fetch a dependencymanager that supports a specific key member _.TryFindDependencyManagerByKey - (compilerTools: seq, outputDir: string, reportError: ResolvingErrorReport, key: string) - : IDependencyManagerProvider | null = + ( + compilerTools: seq, + outputDir: string, + reportError: ResolvingErrorReport, + key: string + ) : IDependencyManagerProvider | null = try RegisteredDependencyManagers compilerTools (Option.ofString outputDir) reportError |> Map.tryFind key @@ -706,15 +708,7 @@ type DependencyProvider res | Error(errorNumber, errorData) -> reportError.Invoke(ErrorReportType.Error, errorNumber, errorData) - - ReflectionDependencyManagerProvider.MakeResultFromFields( - false, - arrEmpty, - arrEmpty, - seqEmpty, - seqEmpty, - seqEmpty - ) + ReflectionDependencyManagerProvider.MakeResultFromFields(false, arrEmpty, arrEmpty, seqEmpty, seqEmpty, seqEmpty) interface IDisposable with