diff --git a/FSharp.sln b/FSharp.sln index 23375be628e..dc46fa6ef57 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -42,10 +42,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Packages", "Packages", "{38 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", "src\fsharp\FSharp.Compiler.nuget\Microsoft.FSharp.Compiler.csproj", "{81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer", "src\fsharp\FSharp.Compiler.LanguageServer\FSharp.Compiler.LanguageServer.fsproj", "{99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer.UnitTests", "tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj", "{C97819B0-B428-4B96-9CD7-497D2D1C738C}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager", "src\fsharp\FSharp.DependencyManager\FSharp.DependencyManager.fsproj", "{8B7BF62E-7D8C-4928-BE40-4E392A9EE851}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{6771860A-614D-4FDD-A655-4C70EBCC91B0}" @@ -220,30 +216,6 @@ Global {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7}.Release|Any CPU.Build.0 = Release|Any CPU {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7}.Release|x86.ActiveCfg = Release|Any CPU {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7}.Release|x86.Build.0 = Release|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Debug|x86.ActiveCfg = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Debug|x86.Build.0 = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Proto|Any CPU.Build.0 = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Proto|x86.ActiveCfg = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Proto|x86.Build.0 = Debug|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Release|Any CPU.Build.0 = Release|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Release|x86.ActiveCfg = Release|Any CPU - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA}.Release|x86.Build.0 = Release|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Debug|x86.ActiveCfg = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Debug|x86.Build.0 = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Proto|Any CPU.Build.0 = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Proto|x86.ActiveCfg = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Proto|x86.Build.0 = Debug|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|Any CPU.Build.0 = Release|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|x86.ActiveCfg = Release|Any CPU - {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|x86.Build.0 = Release|Any CPU {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|Any CPU.Build.0 = Debug|Any CPU {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -309,8 +281,6 @@ Global {88E2D422-6852-46E3-A740-83E391DC7973} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {53C0DAAD-158C-4658-8EC7-D7341530239F} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7} = {3840F2E7-3898-45F7-8CF7-1E6829E56DB8} - {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA} = {B8DDA694-7939-42E3-95E5-265C2217C142} - {C97819B0-B428-4B96-9CD7-497D2D1C738C} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {8B7BF62E-7D8C-4928-BE40-4E392A9EE851} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {6771860A-614D-4FDD-A655-4C70EBCC91B0} = {B8DDA694-7939-42E3-95E5-265C2217C142} {4FEDF286-0252-4EBC-9E75-879CCA3B85DC} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 76bcf8369e7..a91cef850bd 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -144,12 +144,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.Core.nuget", "src\fsharp\FSharp.Core.nuget\FSharp.Core.nuget.csproj", "{8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer", "src\fsharp\FSharp.Compiler.LanguageServer\FSharp.Compiler.LanguageServer.fsproj", "{60BAFFA5-6631-4328-B044-2E012AB76DCA}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer.UnitTests", "tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj", "{AAF2D233-1C38-4090-8FFA-F7C545625E06}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.Editor.Helpers", "vsintegration\src\FSharp.Editor.Helpers\FSharp.Editor.Helpers.csproj", "{79255A92-ED00-40BA-9D64-12FCC664A976}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{20B7BC36-CF51-4D75-9E13-66681C07977F}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{09F56540-AFA5-4694-B7A6-0DBF6D4618C2}" @@ -850,42 +844,6 @@ Global {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}.Release|Any CPU.Build.0 = Release|Any CPU {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}.Release|x86.ActiveCfg = Release|Any CPU {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC}.Release|x86.Build.0 = Release|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Debug|x86.ActiveCfg = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Debug|x86.Build.0 = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Proto|Any CPU.Build.0 = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Proto|x86.ActiveCfg = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Proto|x86.Build.0 = Debug|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Release|Any CPU.Build.0 = Release|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Release|x86.ActiveCfg = Release|Any CPU - {60BAFFA5-6631-4328-B044-2E012AB76DCA}.Release|x86.Build.0 = Release|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Debug|x86.ActiveCfg = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Debug|x86.Build.0 = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Proto|Any CPU.Build.0 = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Proto|x86.ActiveCfg = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Proto|x86.Build.0 = Debug|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Release|Any CPU.Build.0 = Release|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Release|x86.ActiveCfg = Release|Any CPU - {AAF2D233-1C38-4090-8FFA-F7C545625E06}.Release|x86.Build.0 = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Debug|x86.ActiveCfg = Debug|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Debug|x86.Build.0 = Debug|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Proto|Any CPU.ActiveCfg = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Proto|Any CPU.Build.0 = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Proto|x86.ActiveCfg = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Proto|x86.Build.0 = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Release|Any CPU.Build.0 = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Release|x86.ActiveCfg = Release|Any CPU - {79255A92-ED00-40BA-9D64-12FCC664A976}.Release|x86.Build.0 = Release|Any CPU {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.Build.0 = Debug|Any CPU {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -1049,9 +1007,6 @@ Global {9482211E-23D0-4BD0-9893-E4AA5559F67A} = {6235B3AF-774D-4EA1-8F37-789E767F6368} {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8} = {647810D0-5307-448F-99A2-E83917010DAE} {8EC30B2E-F1F9-4A98-BBB5-DD0CF6C84DDC} = {647810D0-5307-448F-99A2-E83917010DAE} - {60BAFFA5-6631-4328-B044-2E012AB76DCA} = {B8DDA694-7939-42E3-95E5-265C2217C142} - {AAF2D233-1C38-4090-8FFA-F7C545625E06} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {79255A92-ED00-40BA-9D64-12FCC664A976} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {20B7BC36-CF51-4D75-9E13-66681C07977F} = {B8DDA694-7939-42E3-95E5-265C2217C142} {09F56540-AFA5-4694-B7A6-0DBF6D4618C2} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {DFA30881-C0B1-4813-B087-C21B5AF9B77F} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} diff --git a/eng/Build.ps1 b/eng/Build.ps1 index b1bac650541..cf74d015b79 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -337,7 +337,6 @@ try { if ($testDesktop -and -not $noVisualStudio) { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $desktopTargetFramework @@ -347,7 +346,6 @@ try { if ($testCoreClr) { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $coreclrTargetFramework - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.DependencyManager.UnitTests\FSharp.DependencyManager.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $coreclrTargetFramework diff --git a/eng/Versions.props b/eng/Versions.props index f7611980e00..a6d4b0e19fe 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -121,7 +121,6 @@ 16.0.28226-alpha 16.1.28916.169 16.1.28917.181 - 16.1.3121 16.1.89 16.1.89 16.1.89 diff --git a/eng/build.sh b/eng/build.sh index a53fce79146..a59ae0128fa 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -285,7 +285,6 @@ BuildSolution if [[ "$test_core_clr" == true ]]; then coreclrtestframework=netcoreapp3.0 TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework - TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.DependencyManager.UnitTests/FSharp.DependencyManager.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework $coreclrtestframework diff --git a/eng/targets/Settings.props b/eng/targets/Settings.props index 474e5d22a86..77f7a0c7048 100644 --- a/eng/targets/Settings.props +++ b/eng/targets/Settings.props @@ -11,9 +11,4 @@ false - - - false - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Directory.Build.props b/src/fsharp/FSharp.Compiler.LanguageServer/Directory.Build.props deleted file mode 100644 index 7cd41381b5d..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Directory.Build.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - true - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj deleted file mode 100644 index d02ae419bc4..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - $(MSBuildThisFileDirectory)FSharp.Compiler.LanguageServer.DesignTime.targets - - - - - - - - - - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets deleted file mode 100644 index ea8f3e28664..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets +++ /dev/null @@ -1,52 +0,0 @@ - - - - - true - false - true - true - false - false - false - true - false - true - false - - - - - - - _ComputeTargetFrameworkItems - _PopulateTargetFrameworks - - - - - <_TargetFramework Include="$(TargetFramework)" /> - - - - - - - - - - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj deleted file mode 100644 index 0bb08991405..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ /dev/null @@ -1,59 +0,0 @@ - - - - - Exe - .exe - net472;netcoreapp3.0 - netcoreapp3.0 - true - Implements the Language Server Protocol (LSP) for F#. - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_PublishedProjectOutputGroupFiles Include="$(PublishDir)\**" /> - - - - - - - - - - diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/JsonDUConverter.fs b/src/fsharp/FSharp.Compiler.LanguageServer/JsonDUConverter.fs deleted file mode 100644 index ae8575195dd..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/JsonDUConverter.fs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open FSharp.Reflection -open Newtonsoft.Json - -type JsonDUConverter() = - inherit JsonConverter() - override __.CanConvert(typ) = FSharpType.IsUnion(typ) - override __.WriteJson(writer, value, _serializer) = - writer.WriteValue(value.ToString().ToLowerInvariant()) - override __.ReadJson(reader, typ, x, serializer) = - let cases = FSharpType.GetUnionCases(typ) - let str = serializer.Deserialize(reader, typeof) :?> string - let case = cases |> Array.find (fun c -> String.Compare(c.Name, str, StringComparison.OrdinalIgnoreCase) = 0) - FSharpValue.MakeUnion(case, [||]) diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/JsonOptionConverter.fs b/src/fsharp/FSharp.Compiler.LanguageServer/JsonOptionConverter.fs deleted file mode 100644 index 937dda00e46..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/JsonOptionConverter.fs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open FSharp.Reflection -open Newtonsoft.Json - -type JsonOptionConverter() = - inherit JsonConverter() - override __.CanConvert(typ) = typ.IsGenericType && typ.GetGenericTypeDefinition() = typedefof> - override __.WriteJson(writer, value, serializer) = - let value = match value with - | null -> null - | _ -> - let _, fields = FSharpValue.GetUnionFields(value, value.GetType()) - fields.[0] - serializer.Serialize(writer, value) - override __.ReadJson(reader, typ, _, serializer) = - let innerType = typ.GetGenericArguments().[0] - let innerType = - if innerType.IsValueType then (typedefof>).MakeGenericType([|innerType|]) - else innerType - let value = serializer.Deserialize(reader, innerType) - let cases = FSharpType.GetUnionCases(typ) - if value = null then FSharpValue.MakeUnion(cases.[0], [||]) - else FSharpValue.MakeUnion(cases.[1], [|value|]) diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs b/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs deleted file mode 100644 index 48e4b0b4051..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open StreamJsonRpc - -[] -module FunctionNames = - [] - let OptionsSet = "options/set" - - [] - let TextDocumentPublishDiagnostics = "textDocument/publishDiagnostics" - -type Options = - { usePreviewTextHover: bool - usePreviewDiagnostics: bool } - static member Default() = - { usePreviewTextHover = false - usePreviewDiagnostics = false } - static member AllOn() = - { usePreviewTextHover = true - usePreviewDiagnostics = true } - -module Extensions = - type JsonRpc with - member jsonRpc.SetOptionsAsync (options: Options) = - async { - do! jsonRpc.InvokeAsync(OptionsSet, options) |> Async.AwaitTask - } diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs b/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs deleted file mode 100644 index 264e526fcd2..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open Newtonsoft.Json.Linq -open Newtonsoft.Json - -// Interfaces as defined at https://microsoft.github.io/language-server-protocol/specifications/specification-3-14/. -// The properties on these types are camlCased to match the underlying JSON properties to avoid attributes on every -// field: -// [] - -/// Represents a zero-based line and column of a text document. -type Position = - { line: int - character: int } - -type Range = - { start: Position - ``end``: Position } - -type DocumentUri = string - -type Location = - { uri: DocumentUri - range: Range } - -type DiagnosticRelatedInformation = - { location: Location - message: string } - -type Diagnostic = - { range: Range - severity: int option - code: string - source: string option - message: string - relatedInformation: DiagnosticRelatedInformation[] option } - static member Error = 1 - static member Warning = 2 - static member Information = 3 - static member Hint = 4 - -type PublishDiagnosticsParams = - { uri: DocumentUri - diagnostics: Diagnostic[] } - -type ClientCapabilities = - { workspace: JToken option // TODO: WorkspaceClientCapabilities - textDocument: JToken option // TODO: TextDocumentClientCapabilities, publishDiagnostics: { relatedInformation: bool option } - experimental: JToken option - supportsVisualStudioExtensions: bool option } - -[)>] -type Trace = - | Off - | Messages - | Verbose - -type WorkspaceFolder = - { uri: DocumentUri - name: string } - -/// Note, this type has many more optional values that can be expanded as support is added. -type ServerCapabilities = - { hoverProvider: bool } - static member DefaultCapabilities() = - { ServerCapabilities.hoverProvider = true } - -type InitializeResult = - { capabilities: ServerCapabilities } - -[)>] -type MarkupKind = - | PlainText - | Markdown - -type MarkupContent = - { kind: MarkupKind - value: string } - -type Hover = - { contents: MarkupContent - range: Range option } - -type TextDocumentIdentifier = - { uri: DocumentUri } diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs deleted file mode 100644 index 453b7f82280..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open System.Runtime.InteropServices -open System.Threading -open Newtonsoft.Json.Linq -open StreamJsonRpc - -// https://microsoft.github.io/language-server-protocol/specifications/specification-3-14/ -type Methods() = - - let state = State() - - /// Helper to run Async<'T> with a CancellationToken. - let runAsync (cancellationToken: CancellationToken) (computation: Async<'T>) = Async.StartAsTask(computation, cancellationToken=cancellationToken) - - member __.State = state - - //-------------------------------------------------------------------------- - // official LSP methods - //-------------------------------------------------------------------------- - - [] - member __.Initialize - ( - processId: Nullable, - [] rootPath: string, - [] rootUri: DocumentUri, - [] initializationOptions: JToken, - capabilities: ClientCapabilities, - [] trace: string, - [] workspaceFolders: WorkspaceFolder[], - [] cancellationToken: CancellationToken - ) = - state.Initialize rootPath rootUri (fun projectOptions -> TextDocument.PublishDiagnostics(state, projectOptions) |> Async.Start) - { InitializeResult.capabilities = ServerCapabilities.DefaultCapabilities() } - - [] - member __.Initialized () = () - - [] - member __.Shutdown(): obj = state.DoShutdown(); null - - [] - member __.Exit() = state.DoExit() - - [] - member __.cancelRequest (id: JToken) = state.DoCancel() - - [] - member __.TextDocumentHover - ( - textDocument: TextDocumentIdentifier, - position: Position, - [] cancellationToken: CancellationToken - ) = - TextDocument.Hover state textDocument position |> runAsync cancellationToken - - //-------------------------------------------------------------------------- - // unofficial LSP methods that we implement separately - //-------------------------------------------------------------------------- - - [] - member __.OptionsSet - ( - options: Options - ) = - eprintfn "got options %A" options - state.Options <- options - state.InvalidateAllProjects() diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Program.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Program.fs deleted file mode 100644 index 13d0c9709fb..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Program.fs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System - -module Program = - - [] - let main(args: string[]) = - async { - let server = new Server(Console.OpenStandardOutput(), Console.OpenStandardInput()) - server.StartListening() - do! server.WaitForExitAsync() - return 0 - } |> Async.RunSynchronously diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs deleted file mode 100644 index 28d5e49a583..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open System.IO -open StreamJsonRpc - -type Server(sendingStream: Stream, receivingStream: Stream) = - - let formatter = JsonMessageFormatter() - let converter = JsonOptionConverter() // special handler to convert between `Option<'T>` and `obj/null`. - do formatter.JsonSerializer.Converters.Add(converter) - let handler = new HeaderDelimitedMessageHandler(sendingStream, receivingStream, formatter) - let methods = Methods() - let rpc = new JsonRpc(handler, methods) - do methods.State.JsonRpc <- Some rpc - - member __.StartListening() = - rpc.StartListening() - - member __.WaitForExitAsync() = - async { - do! Async.AwaitEvent (methods.State.Shutdown) - do! Async.AwaitEvent (methods.State.Exit) - } - - interface IDisposable with - member __.Dispose() = - rpc.Dispose() diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/State.fs b/src/fsharp/FSharp.Compiler.LanguageServer/State.fs deleted file mode 100644 index 0812bb9a7f7..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/State.fs +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System -open System.Collections.Concurrent -open System.Collections.Generic -open System.Diagnostics -open System.IO -open System.Text.RegularExpressions -open FSharp.Compiler.SourceCodeServices -open StreamJsonRpc - -module internal Solution = - // easy unit testing - let getProjectPaths (solutionContent: string) (solutionDir: string) = - // This looks scary, but is much more lightweight than carrying along MSBuild just to have it parse the solution file. - // - // A valid line in .sln looks like: - // Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ConsoleApp2", "ConsoleApp2\ConsoleApp2.fsproj", "{60A4BE67-7E03-4200-AD38-B0E5E8E049C1}" - // and we're hoping to extract this: ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - // - // therefore: - // ^Project text 'Project' at the start of the line - // .* any number of characters - // \"" double quote character (it's doubled up to escape from the raw string literal here) - // ( start of capture group - // [^\""] not a quote - // * many of those - // \.fsproj literal string ".fsproj" - // ) end of capture group - // \"" double quote - let pattern = Regex(@"^Project.*\""([^\""]*\.fsproj)\""") - let lines = solutionContent.Split('\n') - let relativeProjects = - lines - |> Array.map pattern.Match - |> Array.filter (fun m -> m.Success) - |> Array.map (fun m -> m.Groups.[1].Value) - // .sln files by convention uses backslashes, which might not be appropriate at runtime - |> Array.map (fun p -> p.Replace('\\', Path.DirectorySeparatorChar)) - let projects = - relativeProjects - |> Array.map (fun p -> if Path.IsPathRooted(p) then p else Path.Combine(solutionDir, p)) - projects - -type State() = - - let checker = FSharpChecker.Create() - - let sourceFileToProjectMap = ConcurrentDictionary() - - let shutdownEvent = new Event<_>() - let exitEvent = new Event<_>() - let cancelEvent = new Event<_>() - let projectInvalidatedEvent = new Event<_>() - - let fileChanged (args: FileSystemEventArgs) = - match sourceFileToProjectMap.TryGetValue args.FullPath with - | true, projectOptions -> projectInvalidatedEvent.Trigger(projectOptions) - | false, _ -> () - let fileRenamed (args: RenamedEventArgs) = - match sourceFileToProjectMap.TryGetValue args.FullPath with - | true, projectOptions -> projectInvalidatedEvent.Trigger(projectOptions) - | false, _ -> () - let fileWatcher = new FileSystemWatcher() - do fileWatcher.IncludeSubdirectories <- true - do fileWatcher.Changed.Add(fileChanged) - do fileWatcher.Created.Add(fileChanged) - do fileWatcher.Deleted.Add(fileChanged) - do fileWatcher.Renamed.Add(fileRenamed) - - let execProcess (name: string) (args: string) = - let startInfo = ProcessStartInfo(name, args) - eprintfn "executing: %s %s" name args - startInfo.CreateNoWindow <- true - startInfo.RedirectStandardOutput <- true - startInfo.UseShellExecute <- false - let lines = List() - use proc = new Process() - proc.StartInfo <- startInfo - proc.OutputDataReceived.Add(fun args -> lines.Add(args.Data)) - proc.Start() |> ignore - proc.BeginOutputReadLine() - proc.WaitForExit() - lines.ToArray() - - let linesWithPrefixClean (prefix: string) (lines: string[]) = - lines - |> Array.filter (isNull >> not) - |> Array.map (fun line -> line.TrimStart(' ')) - |> Array.filter (fun line -> line.StartsWith(prefix)) - |> Array.map (fun line -> line.Substring(prefix.Length)) - - let getProjectOptions (rootDir: string) = - if isNull rootDir then [||] - else - fileWatcher.Path <- rootDir - fileWatcher.EnableRaisingEvents <- true - - /// This function is meant to be temporary. Until we figure out what a language server for a project - /// system looks like, we have to guess based on the files we find in the root. - let getProjectOptions (projectPath: string) = - let projectDir = Path.GetDirectoryName(projectPath) - let normalizePath (path: string) = - if Path.IsPathRooted(path) then path - else Path.Combine(projectDir, path) - - // To avoid essentially re-creating a copy of MSBuild alongside this tool, we instead fake a design- - // time build with this project. The output of building this helper project is text that's easily - // parsable. See the helper project for more information. - let reporterProject = Path.Combine(Path.GetDirectoryName(typeof.Assembly.Location), "FSharp.Compiler.LanguageServer.DesignTime.proj") - let detectedTfmSentinel = "DetectedTargetFramework=" - let detectedCommandLineArgSentinel = "DetectedCommandLineArg=" - - let execTfmReporter = - sprintf "build \"%s\" \"/p:ProjectFile=%s\"" reporterProject projectPath - |> execProcess "dotnet" - - let execArgReporter (tfm: string) = - sprintf "build \"%s\" \"/p:ProjectFile=%s\" \"/p:TargetFramework=%s\"" reporterProject projectPath tfm - |> execProcess "dotnet" - - // find the target frameworks - let targetFrameworks = - execTfmReporter - |> linesWithPrefixClean detectedTfmSentinel - - let getArgs (tfm: string) = - execArgReporter tfm - |> linesWithPrefixClean detectedCommandLineArgSentinel - - let tfmAndArgs = - targetFrameworks - |> Array.map (fun tfm -> tfm, getArgs tfm) - - let separateArgs (args: string[]) = - args - |> Array.partition (fun a -> a.StartsWith("-")) - |> (fun (options, files) -> - let normalizedFiles = files |> Array.map normalizePath - options, normalizedFiles) - - // TODO: for now we're only concerned with the first TFM - let _tfm, args = Array.head tfmAndArgs - - let otherOptions, sourceFiles = separateArgs args - - let projectOptions: FSharpProjectOptions = - { ProjectFileName = projectPath - ProjectId = None - SourceFiles = sourceFiles - OtherOptions = otherOptions - ReferencedProjects = [||] // TODO: populate from @(ProjectReference) - IsIncompleteTypeCheckEnvironment = false - UseScriptResolutionRules = false - LoadTime = DateTime.Now - UnresolvedReferences = None - OriginalLoadReferences = [] - ExtraProjectInfo = None - Stamp = None } - projectOptions - let topLevelProjects = Directory.GetFiles(rootDir, "*.fsproj") - let watchableProjectPaths = - match topLevelProjects with - | [||] -> - match Directory.GetFiles(rootDir, "*.sln") with - // TODO: what to do with multiple .sln or a combo of .sln/.fsproj? - | [| singleSolution |] -> - let content = File.ReadAllText(singleSolution) - let solutionDir = Path.GetDirectoryName(singleSolution) - Solution.getProjectPaths content solutionDir - | _ -> [||] - | _ -> topLevelProjects - let watchableProjectOptions = - watchableProjectPaths - |> Array.map getProjectOptions - - // associate source files with project options - let watchFile file projectOptions = - sourceFileToProjectMap.AddOrUpdate(file, projectOptions, fun _ _ -> projectOptions) - - for projectOptions in watchableProjectOptions do - // watch .fsproj - watchFile projectOptions.ProjectFileName projectOptions |> ignore - // TODO: watch .deps.json - for sourceFile in projectOptions.SourceFiles do - let sourceFileFullPath = - if Path.IsPathRooted(sourceFile) then sourceFile - else - let projectDir = Path.GetDirectoryName(projectOptions.ProjectFileName) - Path.Combine(projectDir, sourceFile) - watchFile sourceFileFullPath projectOptions |> ignore - - watchableProjectOptions - - member __.Checker = checker - - /// Initialize the LSP at the specified location. According to the spec, `rootUri` is to be preferred over `rootPath`. - member __.Initialize (rootPath: string) (rootUri: DocumentUri) (computeDiagnostics: FSharpProjectOptions -> unit) = - let rootDir = - if not (isNull rootUri) then Uri(rootUri).LocalPath - else rootPath - let projectOptions = getProjectOptions rootDir - projectInvalidatedEvent.Publish.Add computeDiagnostics // compute diagnostics on project invalidation - for projectOption in projectOptions do - computeDiagnostics projectOption // compute initial set of diagnostics - - [] - member __.Shutdown = shutdownEvent.Publish - - [] - member __.Exit = exitEvent.Publish - - [] - member __.Cancel = cancelEvent.Publish - - [] - member __.ProjectInvalidated = projectInvalidatedEvent.Publish - - member __.DoShutdown() = shutdownEvent.Trigger() - - member __.DoExit() = exitEvent.Trigger() - - member __.DoCancel() = cancelEvent.Trigger() - - member __.InvalidateAllProjects() = - for projectOptions in sourceFileToProjectMap.Values do - projectInvalidatedEvent.Trigger(projectOptions) - - member val Options = Options.Default() with get, set - - member val JsonRpc: JsonRpc option = None with get, set diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs b/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs deleted file mode 100644 index 489b55ebce1..00000000000 --- a/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer - -open System.Threading - -module TextDocument = - - let mutable publishDiagnosticsCancellationTokenSource = new CancellationTokenSource() - - let Hover (state: State) (textDocument: TextDocumentIdentifier) (position: Position) = - async { - eprintfn "hover at %d, %d" position.line position.character - if not state.Options.usePreviewTextHover then return None - else - let startCol, endCol = - if position.character = 0 then 0, 1 - else position.character, position.character + 1 - return Some { contents = { kind = MarkupKind.PlainText - value = "serving textDocument/hover from LSP" } - range = Some { start = { line = position.line; character = startCol } - ``end`` = { line = position.line; character = endCol } } - } - } - - let PublishDiagnostics(state: State, projectOptions: FSharp.Compiler.SourceCodeServices.FSharpProjectOptions) = - // TODO: honor TextDocumentClientCapabilities.publishDiagnostics.relatedInformation - // cancel any existing request to publish diagnostics - publishDiagnosticsCancellationTokenSource.Cancel() - publishDiagnosticsCancellationTokenSource <- new CancellationTokenSource() - async { - if not state.Options.usePreviewDiagnostics then return () - else - eprintfn "starting diagnostics computation" - match state.JsonRpc with - | None -> eprintfn "state.JsonRpc was null; should not be?" - | Some jsonRpc -> - let! results = state.Checker.ParseAndCheckProject projectOptions - let diagnostics = results.Errors - let diagnosticsPerFile = - diagnostics - |> Array.fold (fun state t -> - let existing = Map.tryFind t.FileName state |> Option.defaultValue [] - Map.add t.FileName (t :: existing) state) Map.empty - for sourceFile in projectOptions.SourceFiles do - let diagnostics = - Map.tryFind sourceFile diagnosticsPerFile - |> Option.defaultValue [] - |> List.map (fun d -> - // F# errors count lines starting at 1, but LSP starts at 0 - let range: Range = - { start = { line = d.StartLineAlternate - 1; character = d.StartColumn } - ``end`` = { line = d.EndLineAlternate - 1; character = d.EndColumn } } - let severity = - match d.Severity with - | FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity.Warning -> Diagnostic.Warning - | FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity.Error -> Diagnostic.Error - let res: Diagnostic = - { range = range - severity = Some severity - code = "FS" + d.ErrorNumber.ToString("0000") - source = Some d.FileName - message = d.Message - relatedInformation = None } - res) - |> List.toArray - let args: PublishDiagnosticsParams = - { uri = System.Uri(sourceFile).AbsoluteUri - diagnostics = diagnostics } - - // fire each notification separately - jsonRpc.NotifyAsync(TextDocumentPublishDiagnostics, args) |> Async.AwaitTask |> Async.Start - } - |> (fun computation -> Async.StartAsTask(computation, cancellationToken=publishDiagnosticsCancellationTokenSource.Token)) - |> Async.AwaitTask diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/DiagnosticsTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/DiagnosticsTests.fs deleted file mode 100644 index aaadff258e9..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/DiagnosticsTests.fs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer.UnitTests - -open System -open System.IO -open System.Linq -open System.Threading.Tasks -open FSharp.Compiler.LanguageServer -open Nerdbank.Streams -open NUnit.Framework - -[] -type DiagnosticsTests() = - - let createTestableProject (tfm: string) (sourceFiles: (string * string) list) = - let testDir = new TemporaryDirectory() - let directoryBuildText = "" - File.WriteAllText(Path.Combine(testDir.Directory, "Directory.Build.props"), directoryBuildText) - File.WriteAllText(Path.Combine(testDir.Directory, "Directory.Build.targets"), directoryBuildText) - for name, contents in sourceFiles do - File.WriteAllText(Path.Combine(testDir.Directory, name), contents) - let compileItems = - sourceFiles - |> List.map fst - |> List.map (sprintf " ") - |> List.fold (fun content line -> content + "\n" + line) "" - let replacements = - [ "{{COMPILE}}", compileItems - "{{TARGETFRAMEWORK}}", tfm ] - let projectTemplate = - @" - - - Library - {{TARGETFRAMEWORK}} - - -{{COMPILE}} - -" - let projectFile = - replacements - |> List.fold (fun (content: string) (find, replace) -> content.Replace(find, replace)) projectTemplate - File.WriteAllText(Path.Combine(testDir.Directory, "test.fsproj"), projectFile) - testDir - - let createRpcClient (tempDir: TemporaryDirectory) = - let clientStream, serverStream = FullDuplexStream.CreatePair().ToTuple() - let server = new Server(serverStream, serverStream) - server.StartListening() - let client = new TestClient(tempDir, clientStream, clientStream, server) - client - - let createClientTest (tfm: string) (sourceFiles: (string * string) list) = - let testDir = createTestableProject tfm sourceFiles - let client = createRpcClient testDir - client - - let getDiagnostics (content: string) = - async { - use client = createClientTest "netstandard2.0" [ "lib.fs", content ] - let! diagnostics = client.WaitForDiagnosticsAsync client.Initialize ["lib.fs"] - return diagnostics.["lib.fs"] - } - - [] - member __.``No diagnostics for correct code``() = - async { - let! diagnostics = getDiagnostics @" -namespace Test - -module Numbers = - let one: int = 1 -" - Assert.AreEqual(0, diagnostics.Length) - } |> Async.StartAsTask :> Task - - [] - member __.``Diagnostics for incorrect code``() = - async { - let! diagnostics = getDiagnostics @" -namespace Test - -module Numbers = - let one: int = false -" - let diag = diagnostics.Single() - Assert.AreEqual("FS0001", diag.code) - Assert.AreEqual(Some 1, diag.severity) - Assert.AreEqual(4, diag.range.start.line) - Assert.AreEqual(19, diag.range.start.character) - Assert.AreEqual(4, diag.range.``end``.line) - Assert.AreEqual(24, diag.range.``end``.character) - Assert.AreEqual("This expression was expected to have type\n 'int' \nbut here has type\n 'bool'", diag.message.Trim()) - Assert.IsTrue(diag.source.Value.EndsWith("lib.fs")) - } |> Async.StartAsTask :> Task - - [] - member __.``Diagnostics added for updated incorrect code``() = - async { - let correct = @" -namespace Test - -module Numbers = - let one: int = 1 -" - let incorrect = @" -namespace Test - -module Numbers = - let one: int = false -" - - // verify initial state - use client = createClientTest "netstandard2.0" [ "lib.fs", correct ] - let! diagnostics = client.WaitForDiagnosticsAsync client.Initialize ["lib.fs"] - Assert.AreEqual(0, diagnostics.["lib.fs"].Length) - - // touch file with incorrect data - let touch () = File.WriteAllText(Path.Combine(client.RootPath, "lib.fs"), incorrect) - let! diagnostics = client.WaitForDiagnostics touch ["lib.fs"] - let diag = diagnostics.["lib.fs"].Single() - Assert.AreEqual("FS0001", diag.code) - } |> Async.StartAsTask :> Task - - [] - member __.``Diagnostics removed for updated correct code``() = - async { - let incorrect = @" -namespace Test - -module Numbers = - let one: int = false -" - let correct = @" -namespace Test - -module Numbers = - let one: int = 1 -" - - // verify initial state - use client = createClientTest "netstandard2.0" [ "lib.fs", incorrect ] - let! diagnostics = client.WaitForDiagnosticsAsync client.Initialize ["lib.fs"] - let diag = diagnostics.["lib.fs"].Single() - Assert.AreEqual("FS0001", diag.code) - - // touch file with correct data - let touch () = File.WriteAllText(Path.Combine(client.RootPath, "lib.fs"), correct) - let! diagnostics = client.WaitForDiagnostics touch ["lib.fs"] - let libActualContents = File.ReadAllText(Path.Combine(client.RootPath, "lib.fs")) - Assert.AreEqual(0, diagnostics.["lib.fs"].Length, "Actual on-disk contents of lib.fs:\n" + libActualContents) - } |> Async.StartAsTask :> Task diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/Directory.Build.props b/tests/FSharp.Compiler.LanguageServer.UnitTests/Directory.Build.props deleted file mode 100644 index 7cd41381b5d..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/Directory.Build.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - true - - - - - diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj b/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj deleted file mode 100644 index 4e061f5575a..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - - net472;netcoreapp3.0 - netcoreapp3.0 - Library - true - nunit - true - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/MiscTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/MiscTests.fs deleted file mode 100644 index 02104be2e69..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/MiscTests.fs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer.UnitTests - -open System.IO -open FSharp.Compiler.LanguageServer -open NUnit.Framework - -[] -type MiscTests() = - - [] - member __.``Find F# projects in a .sln file``() = - let slnContent = @" -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29201.188 -MinimumVisualStudioVersion = 10.0.40219.1 -Project(""{F2A71F9B-5D33-465A-A702-920D77279786}"") = ""ConsoleApp1"", ""ConsoleApp1\ConsoleApp1.fsproj"", ""{60A4BE67-7E03-4200-AD38-B0E5E8E049C1}"" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {80902CFC-54E6-4485-AC17-4516930C8B2B} - EndGlobalSection -EndGlobal -" - let testDir = @"C:\Dir\With\Solution" // don't care about the potentially improper directory separators here, it's really just a dumb string - let foundProjects = Solution.getProjectPaths slnContent testDir - let expected = Path.Combine(testDir, "ConsoleApp1", "ConsoleApp1.fsproj") // proper directory separator characters will be used at runtime - Assert.AreEqual([| expected |], foundProjects) diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs deleted file mode 100644 index 8b262e2ceb2..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer.UnitTests - -open System.Diagnostics -open System.Threading.Tasks -open FSharp.Compiler.LanguageServer -open NUnit.Framework -open StreamJsonRpc - -[] -type ProtocolTests() = - -#if !NETCOREAPP - // The `netcoreapp` version of `FSharp.Compiler.LanguageServer.exe` can't be run without a `publish` step so - // we're artificially restricting this test to the full framework. - [] -#endif - member __.``Server consuming stdin and stdout``() = - async { - // start server as a console app - let serverAssemblyPath = typeof.Assembly.Location - let startInfo = ProcessStartInfo(serverAssemblyPath) - startInfo.UseShellExecute <- false - startInfo.RedirectStandardInput <- true - startInfo.RedirectStandardOutput <- true - let proc = Process.Start(startInfo) - - // create a fake client over stdin/stdout - let client = new JsonRpc(proc.StandardInput.BaseStream, proc.StandardOutput.BaseStream) - client.StartListening() - - // initialize - let capabilities: ClientCapabilities = - { workspace = None - textDocument = None - experimental = None - supportsVisualStudioExtensions = None } - let! result = - client.InvokeWithParameterObjectAsync( - "initialize", - {| processId = Process.GetCurrentProcess().Id - capabilities = capabilities |} - ) |> Async.AwaitTask - Assert.True(result.capabilities.hoverProvider) - do! client.NotifyAsync("initialized") |> Async.AwaitTask - - // shutdown - let! shutdownResponse = client.InvokeAsync("shutdown") |> Async.AwaitTask - Assert.IsNull(shutdownResponse) - - // exit - do! client.NotifyAsync("exit") |> Async.AwaitTask - if not (proc.WaitForExit(5000)) then failwith "Expected server process to exit." - } |> Async.StartAsTask :> Task diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/SerializationTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/SerializationTests.fs deleted file mode 100644 index 5d8457c4e5d..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/SerializationTests.fs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer.UnitTests - -open System -open FSharp.Compiler.LanguageServer -open NUnit.Framework -open Newtonsoft.Json - -[] -type SerializationTests() = - - let verifyRoundTrip (str: string) (typ: Type) = - let deserialized = JsonConvert.DeserializeObject(str, typ) - let roundTripped = JsonConvert.SerializeObject(deserialized) - Assert.AreEqual(str, roundTripped) - - let verifyRoundTripWithConverter (str: string) (typ: Type) (converter: JsonConverter) = - let deserialized = JsonConvert.DeserializeObject(str, typ, converter) - let roundTripped = JsonConvert.SerializeObject(deserialized, converter) - Assert.AreEqual(str, roundTripped) - - [] - member __.``Discriminated union as lower-case string``() = - verifyRoundTrip "\"plaintext\"" typeof - verifyRoundTrip "\"markdown\"" typeof - - [] - member __.``Option<'T> as obj/null``() = - verifyRoundTripWithConverter "1" typeof> (JsonOptionConverter()) - verifyRoundTripWithConverter "null" typeof> (JsonOptionConverter()) - verifyRoundTripWithConverter "{\"contents\":{\"kind\":\"plaintext\",\"value\":\"v\"},\"range\":{\"start\":{\"line\":1,\"character\":2},\"end\":{\"line\":3,\"character\":4}}}" typeof> (JsonOptionConverter()) - verifyRoundTripWithConverter "null" typeof> (JsonOptionConverter()) diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/TemporaryDirectory.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/TemporaryDirectory.fs deleted file mode 100644 index ef3953d7816..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/TemporaryDirectory.fs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer.UnitTests - -open System -open System.IO - -type TemporaryDirectory() = - - let directory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()) - do Directory.CreateDirectory(directory) |> ignore - - member __.Directory = directory - - interface IDisposable with - member __.Dispose() = - try - Directory.Delete(directory, true) - with - | _ -> () diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/TestClient.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/TestClient.fs deleted file mode 100644 index 0baaaf40ebd..00000000000 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/TestClient.fs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.LanguageServer.UnitTests - -open System -open System.Collections.Generic -open System.Diagnostics -open System.IO -open System.Threading -open FSharp.Compiler.LanguageServer -open Newtonsoft.Json.Linq -open StreamJsonRpc - -type TestClient(tempDir: TemporaryDirectory, sendingStream: Stream, receivingStream: Stream, server: Server) = - - let rootPath = tempDir.Directory - let rootPath = if rootPath.EndsWith(Path.DirectorySeparatorChar.ToString()) then rootPath else rootPath + Path.DirectorySeparatorChar.ToString() - let diagnosticsEvent = Event<_>() - - let formatter = JsonMessageFormatter() - let converter = JsonOptionConverter() // special handler to convert between `Option<'T>` and `obj/null`. - do formatter.JsonSerializer.Converters.Add(converter) - let handler = new HeaderDelimitedMessageHandler(sendingStream, receivingStream, formatter) - let client = new JsonRpc(handler) - let handler (functionName: string) (args: JToken): JToken = - match functionName with - | TextDocumentPublishDiagnostics -> - let args = args.ToObject(formatter.JsonSerializer) - let fullPath = Uri(args.uri).LocalPath - let shortPath = if fullPath.StartsWith(rootPath) then fullPath.Substring(rootPath.Length) else fullPath - diagnosticsEvent.Trigger((shortPath, args.diagnostics)) - null - | _ -> null - let addHandler (name: string) = - client.AddLocalRpcMethod(name, new Func(handler name)) - do addHandler TextDocumentPublishDiagnostics - do client.StartListening() - - member __.RootPath = rootPath - - member __.Server = server - - [] - member __.PublishDiagnostics = diagnosticsEvent.Publish - - member __.Initialize () = - async { - do! client.NotifyWithParameterObjectAsync(OptionsSet, {| options = Options.AllOn() |}) |> Async.AwaitTask - let capabilities: ClientCapabilities = - { workspace = None - textDocument = None - experimental = None - supportsVisualStudioExtensions = None } - let! _result = - client.InvokeWithParameterObjectAsync( - "initialize", // method - {| processId = Process.GetCurrentProcess().Id - rootPath = rootPath - capabilities = capabilities |} - ) |> Async.AwaitTask - return () - } - - member this.WaitForDiagnostics (triggerAction: unit -> unit) (fileNames: string list) = - async { - // prepare file diagnostic triggers - let diagnosticTriggers = Dictionary() - fileNames |> List.iter (fun f -> diagnosticTriggers.[f] <- new ManualResetEvent(false)) - - // prepare callback handler - let diagnosticsMap = Dictionary() - let handler (fileName: string, diagnostics: Diagnostic[]) = - diagnosticsMap.[fileName] <- diagnostics - // auto-generated files (e.g., AssemblyInfo.fs) won't be in the trigger map - if diagnosticTriggers.ContainsKey(fileName) then - diagnosticTriggers.[fileName].Set() |> ignore - - // subscribe to the event - let wrappedHandler = new Handler(fun _sender args -> handler args) - this.PublishDiagnostics.AddHandler(wrappedHandler) - triggerAction () - - // wait for all triggers to hit - let! results = - diagnosticTriggers - |> Seq.map (fun entry -> - async { - let! result = Async.AwaitWaitHandle(entry.Value, millisecondsTimeout = int (TimeSpan.FromSeconds(10.0).TotalMilliseconds)) - return if result then None - else - let filePath = Path.Combine(rootPath, entry.Key) - let actualContents = File.ReadAllText(filePath) - Some <| sprintf "No diagnostics received for file '%s'. Contents:\n%s\n" entry.Key actualContents - }) - |> Async.Parallel - let results = results |> Array.choose (fun x -> x) - if results.Length > 0 then - let combinedErrors = String.Join("-----\n", results) - let allDiagnosticsEvents = - diagnosticsMap - |> Seq.map (fun entry -> - sprintf "File '%s' reported %d diagnostics." entry.Key entry.Value.Length) - |> (fun s -> String.Join("\n", s)) - failwith <| sprintf "Error waiting for diagnostics:\n%s\n-----\n%s" combinedErrors allDiagnosticsEvents - - // clean up event - this.PublishDiagnostics.RemoveHandler(wrappedHandler) - - // done - return diagnosticsMap - } - - member this.WaitForDiagnosticsAsync (triggerAction: unit -> Async) (fileNames: string list) = - this.WaitForDiagnostics (fun () -> triggerAction () |> Async.RunSynchronously) fileNames - - interface IDisposable with - member __.Dispose() = - try - (tempDir :> IDisposable).Dispose() - with - | _ -> () diff --git a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest index cae75397665..e35e50e78e4 100644 --- a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest +++ b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest @@ -28,10 +28,6 @@ - - diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj index d68067fe1e1..0bfaa8f1cd2 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj @@ -61,14 +61,6 @@ True TargetFramework=$(DependencyTargetFramework) - - {60BAFFA5-6631-4328-B044-2E012AB76DCA} - FSharp.Compiler.LanguageServer - PublishedProjectOutputGroup%3b - false - Build;Publish - TargetFramework=$(DependencyTargetFramework) - {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} FSharp.Compiler.Server.Shared @@ -158,16 +150,6 @@ 2 True - - {0A3099F1-F0C7-4ADE-AB9B-526EF193A56F} - FSharp.Editor.Helpers - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - {c4586a06-1402-48bc-8e35-a1b8642f895b} FSharp.UIResources diff --git a/vsintegration/src/FSharp.Editor.Helpers/FSharp.Editor.Helpers.csproj b/vsintegration/src/FSharp.Editor.Helpers/FSharp.Editor.Helpers.csproj deleted file mode 100644 index cb6cfb36cb0..00000000000 --- a/vsintegration/src/FSharp.Editor.Helpers/FSharp.Editor.Helpers.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - Library - net472 - - - - - - - - - - - FSharp.Editor.Helpers - $(VSAssemblyVersion) - $PackageFolder$\FSharp.Editor.Helpers.dll - - - - diff --git a/vsintegration/src/FSharp.Editor.Helpers/LanguageClient.cs b/vsintegration/src/FSharp.Editor.Helpers/LanguageClient.cs deleted file mode 100644 index 87759ceef7b..00000000000 --- a/vsintegration/src/FSharp.Editor.Helpers/LanguageClient.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.VisualStudio.LanguageServer.Client; -using Microsoft.VisualStudio.Threading; - -namespace Microsoft.VisualStudio.FSharp.Editor.Helpers -{ - /// - /// Exists as an abstract implementor of purely to manage the non-standard async - /// event handlers. - /// - public abstract class LanguageClient : ILanguageClient - { - public abstract string Name { get; } - - public abstract IEnumerable ConfigurationSections { get; } - - public abstract object InitializationOptions { get; } - - public abstract IEnumerable FilesToWatch { get; } - - public event AsyncEventHandler StartAsync; - -#pragma warning disable 67 // The event 'LanguageClient.StopAsync' is never used - public event AsyncEventHandler StopAsync; -#pragma warning restore 67 - - public abstract Task ActivateAsync(CancellationToken token); - - protected abstract Task DoLoadAsync(); - - public async Task OnLoadedAsync() - { - await DoLoadAsync(); - await StartAsync.InvokeAsync(this, EventArgs.Empty); - } - - public abstract Task OnServerInitializeFailedAsync(Exception e); - - public abstract Task OnServerInitializedAsync(); - } -} diff --git a/vsintegration/src/FSharp.Editor/Common/LspService.fs b/vsintegration/src/FSharp.Editor/Common/LspService.fs deleted file mode 100644 index 433f8338394..00000000000 --- a/vsintegration/src/FSharp.Editor/Common/LspService.fs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System.ComponentModel.Composition -open FSharp.Compiler.LanguageServer -open FSharp.Compiler.LanguageServer.Extensions -open StreamJsonRpc - -[)>] -type LspService() = - let mutable options = Options.Default() - let mutable jsonRpc: JsonRpc option = None - - let sendOptions () = - async { - match jsonRpc with - | None -> () - | Some rpc -> do! rpc.SetOptionsAsync(options) - } - - member __.SetJsonRpc(rpc: JsonRpc) = - jsonRpc <- Some rpc - sendOptions() - - member __.SetOptions(opt: Options) = - options <- opt - sendOptions() diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs index 0d92ce047be..2e7a44e2511 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs @@ -34,9 +34,6 @@ type internal FSharpDocumentDiagnosticAnalyzer [] () = let getProjectInfoManager(document: Document) = document.Project.Solution.Workspace.Services.GetService().FSharpProjectOptionsManager - let getSettings(document: Document) = - document.Project.Solution.Workspace.Services.GetService() - static let errorInfoEqualityComparer = { new IEqualityComparer with member __.Equals (x, y) = @@ -113,10 +110,6 @@ type internal FSharpDocumentDiagnosticAnalyzer [] () = interface IFSharpDocumentDiagnosticAnalyzer with member this.AnalyzeSyntaxAsync(document: Document, cancellationToken: CancellationToken): Task> = - // if using LSP, just bail early - let settings = getSettings document - if settings.Advanced.UsePreviewDiagnostics then Task.FromResult(ImmutableArray.Empty) - else let projectInfoManager = getProjectInfoManager document asyncMaybe { let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken) @@ -130,10 +123,6 @@ type internal FSharpDocumentDiagnosticAnalyzer [] () = |> RoslynHelpers.StartAsyncAsTask cancellationToken member this.AnalyzeSemanticsAsync(document: Document, cancellationToken: CancellationToken): Task> = - // if using LSP, just bail early - let settings = getSettings document - if settings.Advanced.UsePreviewDiagnostics then Task.FromResult(ImmutableArray.Empty) - else let projectInfoManager = getProjectInfoManager document asyncMaybe { let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken) diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 77add187654..629f7f2b0f9 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -35,10 +35,6 @@ - - Common\LspExternalAccess.fs - - @@ -55,10 +51,6 @@ - - LanguageService\JsonOptionConverter.fs - - @@ -122,7 +114,6 @@ - @@ -151,7 +142,6 @@ - diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpLanguageClient.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpLanguageClient.fs deleted file mode 100644 index 7a987d665f4..00000000000 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpLanguageClient.fs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor.LanguageService - -open System.ComponentModel.Composition -open System.Diagnostics -open System.IO -open System.Threading -open System.Threading.Tasks -open Microsoft.FSharp.Control -open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.VisualStudio.FSharp.Editor.Helpers -open Microsoft.VisualStudio.LanguageServer.Client -open Microsoft.VisualStudio.Utilities -open StreamJsonRpc - -// https://docs.microsoft.com/en-us/visualstudio/extensibility/adding-an-lsp-extension?view=vs-2019 - -/// Provides exports necessary to register the language client. -type FSharpContentDefinition() = - - [] - [] - [] - static member val FSharpContentTypeDefinition: ContentTypeDefinition = null with get, set - - [] - [] - [] - static member val FSharpFileExtensionDefinition: FileExtensionToContentTypeDefinition = null with get, set - -[)>] -[] -type internal FSharpLanguageClient - [] - ( - lspService: LspService, - settings: EditorOptions - ) = - inherit LanguageClient() - override __.Name = "F# Language Service" - override this.ActivateAsync(_token: CancellationToken) = - async { - let thisAssemblyPath = Path.GetDirectoryName(this.GetType().Assembly.Location) - let serverAssemblyPath = Path.Combine(thisAssemblyPath, "Agent", "FSharp.Compiler.LanguageServer.exe") - let startInfo = ProcessStartInfo(serverAssemblyPath) - startInfo.UseShellExecute <- false - startInfo.CreateNoWindow <- true // comment to see log messages written to stderr - startInfo.RedirectStandardInput <- true - startInfo.RedirectStandardOutput <- true - let proc = new Process() - proc.StartInfo <- startInfo - return - if proc.Start() then new Connection(proc.StandardOutput.BaseStream, proc.StandardInput.BaseStream) - else null - } |> Async.StartAsTask - override __.ConfigurationSections = null - override __.FilesToWatch = null - override __.InitializationOptions = null - override __.DoLoadAsync() = Task.CompletedTask - override __.OnServerInitializeFailedAsync(_e: exn) = Task.CompletedTask - override __.OnServerInitializedAsync() = Task.CompletedTask - interface ILanguageClientCustomMessage with - member __.CustomMessageTarget = null - member __.MiddleLayer = null - member __.AttachForCustomMessageAsync(rpc: JsonRpc) = - async { - do! lspService.SetJsonRpc(rpc) - do! lspService.SetOptions(settings.Advanced.AsLspOptions()) - } |> Async.StartAsTask :> Task diff --git a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs index af88f02d10b..7485176811a 100644 --- a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs +++ b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs @@ -5,7 +5,6 @@ open System.ComponentModel.Composition open System.Runtime.InteropServices open System.Windows open System.Windows.Controls -open FSharp.Compiler.LanguageServer open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.FSharp.UIResources @@ -92,17 +91,10 @@ type CodeLensOptions = [] type AdvancedOptions = { IsBlockStructureEnabled: bool - IsOutliningEnabled: bool - UsePreviewTextHover: bool - UsePreviewDiagnostics: bool } + IsOutliningEnabled: bool } static member Default = { IsBlockStructureEnabled = true - IsOutliningEnabled = true - UsePreviewTextHover = false - UsePreviewDiagnostics = false } - member this.AsLspOptions(): Options = - { usePreviewTextHover = this.UsePreviewTextHover - usePreviewDiagnostics = this.UsePreviewDiagnostics } + IsOutliningEnabled = true } [] type FormattingOptions = @@ -203,14 +195,6 @@ module internal OptionsUI = inherit AbstractOptionPage() override __.CreateView() = upcast AdvancedOptionsControl() - override this.OnApply(args) = - base.OnApply(args) - async { - let lspService = this.GetService() - let settings = this.GetService() - let options = settings.Advanced.AsLspOptions() - do! lspService.SetOptions options - } |> Async.Start [] type internal FormattingOptionPage() = diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs index 7b90bb3aefc..a6ea0c90332 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs @@ -206,10 +206,6 @@ type internal FSharpAsyncQuickInfoSource // This method can be called from the background thread. // Do not call IServiceProvider.GetService here. override __.GetQuickInfoItemAsync(session:IAsyncQuickInfoSession, cancellationToken:CancellationToken) : Task = - // The following lines should be disabled for branch `release/dev16.2`, enabled otherwise - //// if using LSP, just bail early - //if settings.Advanced.UsePreviewTextHover then Task.FromResult(null) - //else let triggerPoint = session.GetTriggerPoint(textBuffer.CurrentSnapshot) match triggerPoint.HasValue with | false -> Task.FromResult(null) diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf index b071e0c5f72..5340031907e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf index 4184f3edc59..2ca4bd450e9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf index 4b1a5e0d904..394481ad696 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf index 99d34699194..821545638e2 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf index 8902030751c..dd58cb9a119 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf index de4d65e71f8..c0221174d97 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf index e7191ac3c4a..6f540b54250 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf index 6936b8e97f5..f912b6b4c78 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf index fefd197867e..5a2b75dce09 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf index 355d363084e..2b5303d91de 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf index 86ac32f4b37..73a72b806a2 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf index 0537632d5fc..474f99a3dcd 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf index 17c64ffefb9..16b7339b2a4 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml b/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml index 57ca75df757..7126d6efb8b 100644 --- a/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml +++ b/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml @@ -24,17 +24,6 @@ - - diff --git a/vsintegration/src/FSharp.UIResources/Strings.Designer.cs b/vsintegration/src/FSharp.UIResources/Strings.Designer.cs index c03ff05d776..fd74fbb404f 100644 --- a/vsintegration/src/FSharp.UIResources/Strings.Designer.cs +++ b/vsintegration/src/FSharp.UIResources/Strings.Designer.cs @@ -419,14 +419,5 @@ public static string Unused_opens_code_fix { return ResourceManager.GetString("Unused_opens_code_fix", resourceCulture); } } - - /// - /// Looks up a localized string similar to (Preview) Use out of process language server. - /// - public static string Use_out_of_process_language_server { - get { - return ResourceManager.GetString("Use_out_of_process_language_server", resourceCulture); - } - } } } diff --git a/vsintegration/src/FSharp.UIResources/Strings.resx b/vsintegration/src/FSharp.UIResources/Strings.resx index 037596b7161..19f6d2658bc 100644 --- a/vsintegration/src/FSharp.UIResources/Strings.resx +++ b/vsintegration/src/FSharp.UIResources/Strings.resx @@ -231,9 +231,6 @@ Suggest names for unresolved identifiers - - (Preview) Use out of process language server - Text hover diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf index a9808062bdd..da6e649a8ba 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf @@ -202,11 +202,6 @@ Navrhovat názvy pro nerozpoznané identifikátory - - (Preview) Use out of process language server - (Preview) Použít mimoprocesový jazykový server - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf index 9e48372cb23..653c542d13f 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf @@ -202,11 +202,6 @@ Namen für nicht aufgelöste Bezeichner vorschlagen - - (Preview) Use out of process language server - (Vorschauversion) Prozessexternen Sprachserver verwenden - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf index cd6b650ec60..39c2877127c 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf @@ -202,11 +202,6 @@ Sugerir nombres para los identificadores no resueltos - - (Preview) Use out of process language server - (Versión preliminar) Usar el servidor de lenguaje fuera del proceso - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf index 90b7e5b378c..3d73fe222b1 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf @@ -202,11 +202,6 @@ Suggérer des noms pour les identificateurs non résolus - - (Preview) Use out of process language server - (Préversion) Utiliser un serveur de langage hors processus - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf index 51b5a87f284..34d9ec67029 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf @@ -202,11 +202,6 @@ Suggerisci nomi per gli identificatori non risolti - - (Preview) Use out of process language server - (Anteprima) Usa server di linguaggio out-of-process - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf index 7a59c8c4d34..5771c8c5848 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf @@ -202,11 +202,6 @@ 未解決の識別子の名前を提案します - - (Preview) Use out of process language server - (プレビュー) プロセス外言語サーバーの使用 - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf index 8ba93bed1b4..dacb9996564 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf @@ -202,11 +202,6 @@ 확인되지 않은 식별자의 이름 제안 - - (Preview) Use out of process language server - (미리 보기) Out of Process 언어 서버 사용 - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf index 3d83c8f6ad3..4a205499f29 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf @@ -202,11 +202,6 @@ Sugeruj nazwy w przypadku nierozpoznanych identyfikatorów - - (Preview) Use out of process language server - (Wersja zapoznawcza) Korzystanie z serwera języka poza procesem - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf index e3a75c3136e..13cce041c99 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf @@ -202,11 +202,6 @@ Sugerir nomes para identificadores não resolvidos - - (Preview) Use out of process language server - (Versão Prévia) Usar um servidor de idioma fora do processo - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf index 106dcd8b87a..579c059dcd6 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf @@ -202,11 +202,6 @@ Предлагать имена для неразрешенных идентификаторов - - (Preview) Use out of process language server - (Предварительная версия) Использование сервера языка процессов - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf index 8525295e6e4..6ff42fad0e4 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf @@ -202,11 +202,6 @@ Çözümlenmemiş tanımlayıcılar için ad öner - - (Preview) Use out of process language server - (Önizleme) İşlem dışı dil sunucusunu kullanma - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf index ff0bad31447..b85bb0227b1 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf @@ -202,11 +202,6 @@ 为未解析标识符建议名称 - - (Preview) Use out of process language server - (预览)使用进程外语言服务器 - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf index 1edc051a596..acbacbce081 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf @@ -202,11 +202,6 @@ 為未解析的識別碼建議名稱 - - (Preview) Use out of process language server - (預覽) 使用處理序語言伺服器 - - \ No newline at end of file