From e59600927d3fd027984f04eee1c05fcfb3cd2573 Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Thu, 5 Mar 2020 16:36:41 -0600 Subject: [PATCH] add test case for fake interop --- .config/dotnet-tools.json | 2 +- .paket/Paket.Restore.targets | 12 ++++++++--- Directory.Build.props | 1 + paket.lock | 11 ++++++---- .../CompilerServiceInterface.fs | 8 +++---- .../TestCases/FakeInterop/build.fsx | 11 ++++++++++ test/FsAutoComplete.Tests.Lsp/Tests.fs | 21 +++++++++++++++++++ 7 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 test/FsAutoComplete.Tests.Lsp/TestCases/FakeInterop/build.fsx diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 8599247f8..f2cea5b4e 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "fake-cli": { - "version": "5.19.0", + "version": "5.20.0-alpha.1545", "commands": [ "fake" ] diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets index 8cb5986c1..0ec281627 100644 --- a/.paket/Paket.Restore.targets +++ b/.paket/Paket.Restore.targets @@ -27,10 +27,16 @@ $(PaketRootPath)paket.bootstrapper.exe $(PaketToolsPath)paket.bootstrapper.exe $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\ - + "$(PaketBootStrapperExePath)" $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)" + + + + true + true + True @@ -130,7 +136,7 @@ - $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[0].Replace(`"`, ``).Replace(` `, ``)) $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[1].Replace(`"`, ``).Replace(` `, ``)) @@ -163,7 +169,7 @@ - + diff --git a/Directory.Build.props b/Directory.Build.props index 3403cb583..a7f4bc0f4 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,6 +5,7 @@ FsAutoComplete A command line tool for interfacing with FSharp.Compiler.Service over a pipe. Apache-2.0 + 3186 true diff --git a/paket.lock b/paket.lock index 065389fc7..ef4633c5b 100644 --- a/paket.lock +++ b/paket.lock @@ -14,11 +14,14 @@ NUGET Destructurama.FSharp (1.1.1-dev-00035) FSharp.Core (>= 4.3.4) - restriction: || (&& (== net461) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) Serilog (>= 2.0 < 3.0) - restriction: || (&& (== net461) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - Fake.Core.Context (5.19.1) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Fake.Core.Context (5.20.0-alpha.1545) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) FSharp.Core (>= 4.7) - restriction: || (&& (== net461) (>= net462)) (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - Fake.Runtime (5.19.1) - Fake.Core.Context (>= 5.19.1) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - FSharp.Compiler.Service (>= 33.0.1) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Fake.Core.DependencyManager.Paket (5.20.0-alpha.1545) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + FSharp.Core (>= 4.7) - restriction: || (&& (== net461) (>= net462)) (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Fake.Runtime (5.20.0-alpha.1545) + Fake.Core.Context (>= 5.20.0-alpha.1545) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Fake.Core.DependencyManager.Paket (>= 5.20.0-alpha.1545) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + FSharp.Compiler.Service (>= 34.1.1) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) FSharp.Core (>= 4.7) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) Microsoft.DotNet.PlatformAbstractions (>= 2.1) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) Mono.Cecil (>= 0.11.1) - restriction: || (&& (== net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) diff --git a/src/FsAutoComplete.Core/CompilerServiceInterface.fs b/src/FsAutoComplete.Core/CompilerServiceInterface.fs index 17dc8dd9c..bdeb4f08b 100644 --- a/src/FsAutoComplete.Core/CompilerServiceInterface.fs +++ b/src/FsAutoComplete.Core/CompilerServiceInterface.fs @@ -617,10 +617,10 @@ type FSharpCompilerServiceChecker(backgroundServiceEnabled) = match errors with | [] -> let refs, otherOpts = projOptions.OtherOptions |> Array.partition (fun o -> o.StartsWith("-r")) - logQueueLength optsLogger (Log.setMessage "Resolved references" >> Log.addContextDestructured "refs" refs) - logQueueLength optsLogger (Log.setMessage "Resolved other options" >> Log.addContextDestructured "otherOpts" otherOpts) + logQueueLength optsLogger (Log.setMessage "Resolved references: {refs}" >> Log.addContextDestructured "refs" refs) + logQueueLength optsLogger (Log.setMessage "Resolved other options: {otherOpts}" >> Log.addContextDestructured "otherOpts" otherOpts) | errs -> - logQueueLength optsLogger (Log.setLogLevel LogLevel.Error >> Log.setMessage "Resolved options with errors" >> Log.addContextDestructured "opts" projOptions >> Log.addContextDestructured "errors" errs) + logQueueLength optsLogger (Log.setLogLevel LogLevel.Error >> Log.setMessage "Resolved {opts} with {errors}" >> Log.addContextDestructured "opts" projOptions >> Log.addContextDestructured "errors" errs) try match FakeSupport.detectFakeScript file with @@ -631,7 +631,7 @@ type FSharpCompilerServiceChecker(backgroundServiceEnabled) = logQueueLength optsLogger (Log.setMessage "{file} is a FAKE script" >> Log.addContextDestructured "file" file) try let otherOpts = FakeSupport.getProjectOptions detectionInfo - logQueueLength optsLogger (Log.setMessage "Discovered FAKE options" >> Log.addContextDestructured "file" file >> Log.addContextDestructured "otherOpts" otherOpts) + logQueueLength optsLogger (Log.setMessage "Discovered FAKE options {otherOpts} " >> Log.addContextDestructured "file" file >> Log.addContextDestructured "otherOpts" otherOpts) return { projOptions with OtherOptions = otherOpts } with e -> logQueueLength optsLogger (Log.setLogLevel LogLevel.Error >> Log.setMessage "Error in FAKE script support" >> Log.addExn e) diff --git a/test/FsAutoComplete.Tests.Lsp/TestCases/FakeInterop/build.fsx b/test/FsAutoComplete.Tests.Lsp/TestCases/FakeInterop/build.fsx new file mode 100644 index 000000000..fb7f6b38b --- /dev/null +++ b/test/FsAutoComplete.Tests.Lsp/TestCases/FakeInterop/build.fsx @@ -0,0 +1,11 @@ +#r "paket: +nuget Fake.Core.Target //" + +#load "./.fake/build.fsx/intellisense.fsx" + +open Fake.Core + +// Default target +Target.create "Default" (fun _ -> + Trace.trace "Hello World from FAKE" +) diff --git a/test/FsAutoComplete.Tests.Lsp/Tests.fs b/test/FsAutoComplete.Tests.Lsp/Tests.fs index f80ac2d17..a9f901467 100644 --- a/test/FsAutoComplete.Tests.Lsp/Tests.fs +++ b/test/FsAutoComplete.Tests.Lsp/Tests.fs @@ -980,6 +980,26 @@ let formattingTests = )) ] +let fakeInteropTests = + let serverStart = lazy ( + let folderPath = Path.Combine(__SOURCE_DIRECTORY__, "TestCases", "FakeInterop") + let (server, events) = serverInitialize folderPath defaultConfigDto + let buildScript = "build.fsx" + do waitForWorkspaceFinishedParsing events + server, events, folderPath, buildScript + ) + let serverTest f () = f serverStart.Value + + testList "fake integration" [ + testCase "can typecheck a fake script including uses of paket-delivered types" (serverTest (fun (server, events, rootPath, scriptName) -> + do server.TextDocumentDidOpen { TextDocument = loadDocument (Path.Combine(rootPath, scriptName)) } |> Async.RunSynchronously + match waitForParseResultsForFile scriptName events with + | Ok () -> + () // all good, no parsing/checking errors + | Core.Result.Error errors -> + failwithf "Errors while parsing script %s: %A" (Path.Combine(rootPath, scriptName)) errors + )) + ] ///Global list of tests let tests = testSequenced <| testList "lsp" [ @@ -998,4 +1018,5 @@ let tests = scriptEvictionTests tooltipTests formattingTests + fakeInteropTests ]