From 51a19b9a8bb0a4b5851b3e5d93005ddf8a38d891 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Mon, 25 Sep 2017 21:37:05 +0100 Subject: [PATCH 1/9] fix assembly reference --- .../Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj b/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj index 3b9fad0cd90..c0bd76dc751 100644 --- a/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj +++ b/vsintegration/Vsix/VisualFSharpOpenSource/VisualFSharpOpenSource.csproj @@ -324,8 +324,8 @@ False $(FSharpSourcesRoot)\..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll - - $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutableVersion)\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll + + $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.1.3.1\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll From 9fcd63a3900e4174fbcd296279d8341844940b38 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Sat, 30 Sep 2017 15:39:06 +0300 Subject: [PATCH 2/9] remove line endings from all *.nuspec files --- fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec | 5 +---- fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec | 7 +------ fcs/nuget/FSharp.Compiler.Service.nuspec | 7 +------ 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec b/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec index ad905b35c0f..4f0ad40b367 100644 --- a/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec @@ -2,10 +2,7 @@ FSharp.Compiler.Service.MSBuild.v12 - - Adds legacy MSBuild 12.0 support to the F# compiler services package for - resolving references such as #r "System, Version=4.1.0.0,..." - + Adds legacy MSBuild 12.0 support to the F# compiler services package for resolving references such as #r "System, Version=4.1.0.0,..." en-US false 16.0.1 diff --git a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec index d8501e86006..802173bd826 100644 --- a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec @@ -2,12 +2,7 @@ FSharp.Compiler.Service.ProjectCracker - - The F# compiler services package contains a custom build of the F# compiler that - exposes additional functionality for implementing F# language bindings, additional - tools based on the compiler or refactoring tools. The package also includes F# - interactive service that can be used for embedding F# scripting into your applications. - + The F# compiler services package contains a custom build of the F# compiler that exposes additional functionality for implementing F# language bindings, additional tools based on the compiler or refactoring tools. The package also includes F# interactive service that can be used for embedding F# scripting into your applications. en-US false 16.0.1 diff --git a/fcs/nuget/FSharp.Compiler.Service.nuspec b/fcs/nuget/FSharp.Compiler.Service.nuspec index 0df07c0240a..130f3230691 100644 --- a/fcs/nuget/FSharp.Compiler.Service.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.nuspec @@ -2,12 +2,7 @@ FSharp.Compiler.Service - - The F# compiler services package contains a custom build of the F# compiler that - exposes additional functionality for implementing F# language bindings, additional - tools based on the compiler or refactoring tools. The package also includes F# - interactive service that can be used for embedding F# scripting into your applications. - + The F# compiler services package contains a custom build of the F# compiler that exposes additional functionality for implementing F# language bindings, additional tools based on the compiler or refactoring tools. The package also includes F# interactive service that can be used for embedding F# scripting into your applications. en-US false 16.0.1 From 8c56795484668eeb5b399210c098e81bdc3bef28 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Sat, 30 Sep 2017 18:24:29 +0300 Subject: [PATCH 3/9] ProjectCracker returns *.fsi files in FSharpProjectOptions.SourceFiles array (in addition to *.fs files, in right order) --- .../ProjectCracker.fs | 8 ++- tests/service/ProjectOptionsTests.fs | 13 ++++ tests/service/data/FsAndFsiFiles.fsproj | 63 +++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 tests/service/data/FsAndFsiFiles.fsproj diff --git a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs b/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs index 462c749f2dd..a96eacdded1 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs @@ -16,11 +16,15 @@ type ProjectCracker = let enableLogging = defaultArg enableLogging true let logMap = ref Map.empty - let rec convert (opts: Microsoft.FSharp.Compiler.SourceCodeServices.ProjectCrackerTool.ProjectOptions) : FSharpProjectOptions = + let rec convert (opts: ProjectCrackerTool.ProjectOptions) : FSharpProjectOptions = let referencedProjects = Array.map (fun (a, b) -> a, convert b) opts.ReferencedProjectOptions let sourceFiles, otherOptions = - opts.Options |> Array.partition (fun x -> x.IndexOfAny(Path.GetInvalidPathChars()) = -1 && Path.GetExtension(x).ToLower() = ".fs") + opts.Options + |> Array.partition (fun x -> + let extension = Path.GetExtension(x).ToLower() + x.IndexOfAny(Path.GetInvalidPathChars()) = -1 + && (extension = ".fs" || extension = ".fsi")) let sepChar = Path.DirectorySeparatorChar diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs index c2cde167273..dd3388f54d6 100644 --- a/tests/service/ProjectOptionsTests.fs +++ b/tests/service/ProjectOptionsTests.fs @@ -217,6 +217,19 @@ let ``Project file parsing -- Logging``() = else Assert.That(log, Is.StringContaining("""Using "ResolveAssemblyReference" task from assembly "Microsoft.Build.Tasks.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".""")) +[] +let ``Project file parsing -- FSharpProjectOptions.SourceFiles contains both fs and fsi files``() = + let projectFileName = normalizePath (__SOURCE_DIRECTORY__ + @"/data/FsAndFsiFiles.fsproj") + let options, log = ProjectCracker.GetProjectOptionsFromProjectFileLogged(projectFileName, enableLogging=true) + printfn "%A" log + let expectedSourceFiles = + [| "Test1File2.fsi" + "Test1File2.fs" + "Test1File1.fs" + "Test1File0.fsi" + "Test1File0.fs" |] + Assert.That(options.SourceFiles |> Array.map Path.GetFileName, Is.EqualTo expectedSourceFiles, "source files") + [] let ``Project file parsing -- Full path``() = let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/ToolsVersion12.fsproj") diff --git a/tests/service/data/FsAndFsiFiles.fsproj b/tests/service/data/FsAndFsiFiles.fsproj new file mode 100644 index 00000000000..676918f28f1 --- /dev/null +++ b/tests/service/data/FsAndFsiFiles.fsproj @@ -0,0 +1,63 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {116cc2f9-f987-4b3d-915a-34cac04a73da} + Library + Test1 + Test1 + bin\$(Configuration)\ + False + 11 + + + True + full + False + False + DEBUG;TRACE + 3 + x86 + bin\Debug\Test1.xml + + + pdbonly + True + True + TRACE + 3 + x86 + bin\Release\Test1.xml + False + + + + ..\..\..\packages\Microsoft.Portable.FSharp.Core.4.1.20\lib\profiles\net40\FSharp.Core.dll + + + + + + + + + + + + + + + + + + ..\..\..\packages\NUnit\lib\nunit.framework.dll + True + True + + + + + \ No newline at end of file From 9ea1664c78f20e7c32adefe5dfe5b931567b4737 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Sat, 30 Sep 2017 18:52:16 +0300 Subject: [PATCH 4/9] ProjectCracker raises exception if ProjectCrackerTool returns non null ProjectCrackerOptions.Error (new field) --- .../ProjectCracker.fs | 6 ++++-- .../ProjectCrackerOptions.fs | 1 + .../ProjectCrackerTool.fs | 9 ++++++--- tests/service/ProjectOptionsTests.fs | 7 +++++-- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs b/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs index a96eacdded1..45fab18685b 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs @@ -17,6 +17,8 @@ type ProjectCracker = let logMap = ref Map.empty let rec convert (opts: ProjectCrackerTool.ProjectOptions) : FSharpProjectOptions = + if not (isNull opts.Error) then failwith opts.Error + let referencedProjects = Array.map (fun (a, b) -> a, convert b) opts.ReferencedProjectOptions let sourceFiles, otherOptions = @@ -77,8 +79,8 @@ type ProjectCracker = p.StartInfo.RedirectStandardOutput <- true ignore <| p.Start() - let ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof) - let opts = ser.ReadObject(p.StandardOutput.BaseStream) :?> Microsoft.FSharp.Compiler.SourceCodeServices.ProjectCrackerTool.ProjectOptions + let ser = new DataContractJsonSerializer(typeof) + let opts = ser.ReadObject(p.StandardOutput.BaseStream) :?> ProjectCrackerTool.ProjectOptions #endif convert opts, !logMap diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs index 34f3aa16e7a..71cb966fb19 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerOptions.fs @@ -7,4 +7,5 @@ type ProjectOptions = Options: string[] ReferencedProjectOptions: (string * ProjectOptions)[] LogOutput: string + Error: string } diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs index 639d4d0c2b7..9be9c375370 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs @@ -420,7 +420,8 @@ module internal ProjectCrackerTool = let options = { ProjectFile = file Options = Array.ofSeq (parsedProject.Options @ referencedProjectOutputs) ReferencedProjectOptions = referencedProjectOptions - LogOutput = parsedProject.LogOutput } + LogOutput = parsedProject.LogOutput + Error = null } parsedProject.OutputFile, options @@ -465,9 +466,11 @@ module internal ProjectCrackerTool = 2, { ProjectFile = projectFile; Options = [||]; ReferencedProjectOptions = [||]; - LogOutput = e.ToString() } + LogOutput = e.ToString() + Error = e.Message } else 1, { ProjectFile = ""; Options = [||]; ReferencedProjectOptions = [||]; - LogOutput = "At least two arguments required." } + LogOutput = "At least two arguments required." + Error = null } diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs index dd3388f54d6..43ae22048ca 100644 --- a/tests/service/ProjectOptionsTests.fs +++ b/tests/service/ProjectOptionsTests.fs @@ -137,8 +137,11 @@ let ``Project file parsing -- compile files 2``() = [] let ``Project file parsing -- bad project file``() = let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/Malformed.fsproj") - let log = snd (ProjectCracker.GetProjectOptionsFromProjectFileLogged(f)) - log.[f] |> should contain "Microsoft.Build.Exceptions.InvalidProjectFileException" + try + ProjectCracker.GetProjectOptionsFromProjectFileLogged(f) |> ignore + failwith "Expected exception" + with + | e -> Assert.That(e.Message, Contains.Substring "The project file could not be loaded.") [] let ``Project file parsing -- non-existent project file``() = From 6259fe73f6ce3446e0b46478f7fb547249318e17 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Sat, 30 Sep 2017 20:59:38 +0300 Subject: [PATCH 5/9] fix build on linux --- fcs/build.fsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fcs/build.fsx b/fcs/build.fsx index 7e2e12f1bee..08717a7ab0c 100644 --- a/fcs/build.fsx +++ b/fcs/build.fsx @@ -99,9 +99,9 @@ Target "Test.NetFx" (fun _ -> // -------------------------------------------------------------------------------------- // Build a NuGet package Target "NuGet.NetFx" (fun _ -> - runCmdIn __SOURCE_DIRECTORY__ @"..\.nuget\NuGet.exe" @"pack nuget\FSharp.Compiler.Service.nuspec -OutputDirectory %s" releaseDir - runCmdIn __SOURCE_DIRECTORY__ @"..\.nuget\NuGet.exe" @"pack nuget\FSharp.Compiler.Service.MSBuild.v12.nuspec -OutputDirectory %s" releaseDir - runCmdIn __SOURCE_DIRECTORY__ @"..\.nuget\NuGet.exe" @"pack nuget\FSharp.Compiler.Service.ProjectCracker.nuspec -OutputDirectory %s" releaseDir + runCmdIn __SOURCE_DIRECTORY__ "../.nuget/NuGet.exe" @"pack nuget/FSharp.Compiler.Service.nuspec -OutputDirectory %s" releaseDir + runCmdIn __SOURCE_DIRECTORY__ "../.nuget/NuGet.exe" @"pack nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec -OutputDirectory %s" releaseDir + runCmdIn __SOURCE_DIRECTORY__ "../.nuget/NuGet.exe" @"pack nuget/FSharp.Compiler.Service.ProjectCracker.nuspec -OutputDirectory %s" releaseDir ) From c821c12a89f4eef83557014ba8d1a5690bf26123 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Sat, 30 Sep 2017 21:18:00 +0300 Subject: [PATCH 6/9] fix a test --- tests/service/ProjectOptionsTests.fs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs index 43ae22048ca..4fddf734b6a 100644 --- a/tests/service/ProjectOptionsTests.fs +++ b/tests/service/ProjectOptionsTests.fs @@ -140,14 +140,16 @@ let ``Project file parsing -- bad project file``() = try ProjectCracker.GetProjectOptionsFromProjectFileLogged(f) |> ignore failwith "Expected exception" - with - | e -> Assert.That(e.Message, Contains.Substring "The project file could not be loaded.") + with e -> + Assert.That(e.Message, Contains.Substring "The project file could not be loaded.") [] let ``Project file parsing -- non-existent project file``() = let f = normalizePath (__SOURCE_DIRECTORY__ + @"/data/DoesNotExist.fsproj") - let log = snd (ProjectCracker.GetProjectOptionsFromProjectFileLogged(f, enableLogging=true)) - log.[f] |> should contain "System.IO.FileNotFoundException" + try + ProjectCracker.GetProjectOptionsFromProjectFileLogged(f, enableLogging=true) |> ignore + with e -> + Assert.That(e.Message, Contains.Substring "Could not find file") [] let ``Project file parsing -- output file``() = From af0e617f00c0c3d9c869d2a44d2045f550409f12 Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Sat, 30 Sep 2017 22:50:10 +0300 Subject: [PATCH 7/9] slashes --- fcs/FSharp.Compiler.Service.sln | 4 +++- .../FSharp.Compiler.Service.MSBuild.v12.nuspec | 2 +- .../FSharp.Compiler.Service.ProjectCracker.nuspec | 14 +++++++------- fcs/nuget/FSharp.Compiler.Service.nuspec | 6 +++--- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/fcs/FSharp.Compiler.Service.sln b/fcs/FSharp.Compiler.Service.sln index e1be7093795..2fe403a3e36 100644 --- a/fcs/FSharp.Compiler.Service.sln +++ b/fcs/FSharp.Compiler.Service.sln @@ -1,13 +1,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.8 +VisualStudioVersion = 15.0.26730.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{B6B68AE6-E7A4-4D43-9B34-FFA74BFE192B}" ProjectSection(SolutionItems) = preProject build.cmd = build.cmd build.fsx = build.fsx build.sh = build.sh + nuget\FSharp.Compiler.Service.MSBuild.v12.nuspec = nuget\FSharp.Compiler.Service.MSBuild.v12.nuspec nuget\FSharp.Compiler.Service.nuspec = nuget\FSharp.Compiler.Service.nuspec + nuget\FSharp.Compiler.Service.ProjectCracker.nuspec = nuget\FSharp.Compiler.Service.ProjectCracker.nuspec paket.dependencies = paket.dependencies README.md = README.md RELEASE_NOTES.md = RELEASE_NOTES.md diff --git a/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec b/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec index 4f0ad40b367..95e10561d9e 100644 --- a/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec @@ -14,6 +14,6 @@ F# compiler services for creating IDE tools, language extensions and for F# embedding. - + diff --git a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec index 802173bd826..c1b21c89df4 100644 --- a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec @@ -14,13 +14,13 @@ F# compiler services for creating IDE tools, language extensions and for F# embedding. - - - - - - - + + + + + + + diff --git a/fcs/nuget/FSharp.Compiler.Service.nuspec b/fcs/nuget/FSharp.Compiler.Service.nuspec index 130f3230691..6407828bc7d 100644 --- a/fcs/nuget/FSharp.Compiler.Service.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.nuspec @@ -20,8 +20,8 @@ - - - + + + From 8635e584038f0009abdd30ca698221ed5342c38d Mon Sep 17 00:00:00 2001 From: Vasily Kirichenko Date: Sun, 1 Oct 2017 09:54:57 +0300 Subject: [PATCH 8/9] revert slashes --- .../FSharp.Compiler.Service.MSBuild.v12.nuspec | 2 +- .../FSharp.Compiler.Service.ProjectCracker.nuspec | 14 +++++++------- fcs/nuget/FSharp.Compiler.Service.nuspec | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec b/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec index 95e10561d9e..4f0ad40b367 100644 --- a/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.MSBuild.v12.nuspec @@ -14,6 +14,6 @@ F# compiler services for creating IDE tools, language extensions and for F# embedding. - + diff --git a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec index c1b21c89df4..0f85fabcc4e 100644 --- a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec @@ -14,13 +14,13 @@ F# compiler services for creating IDE tools, language extensions and for F# embedding. - - - - - - - + + + + + + + diff --git a/fcs/nuget/FSharp.Compiler.Service.nuspec b/fcs/nuget/FSharp.Compiler.Service.nuspec index 6407828bc7d..130f3230691 100644 --- a/fcs/nuget/FSharp.Compiler.Service.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.nuspec @@ -20,8 +20,8 @@ - - - + + + From 912dad9fdf67a286114339d0938bd6a8e3039895 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 3 Oct 2017 23:22:49 +0100 Subject: [PATCH 9/9] Update FSharp.Compiler.Service.ProjectCracker.nuspec --- fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec index 0f85fabcc4e..802173bd826 100644 --- a/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec +++ b/fcs/nuget/FSharp.Compiler.Service.ProjectCracker.nuspec @@ -19,7 +19,7 @@ - +