diff --git a/.vsts-pr.yaml b/.vsts-pr.yaml
index b7d3862888d..772fd8cf18f 100644
--- a/.vsts-pr.yaml
+++ b/.vsts-pr.yaml
@@ -90,7 +90,7 @@ jobs:
- job: Windows
pool:
- vmImage: vs2017-win2016
+ vmImage: windows-2019
timeoutInMinutes: 120
strategy:
maxParallel: 4
@@ -128,7 +128,7 @@ jobs:
- job: Windows_FCS
pool:
- vmImage: vs2017-win2016
+ vmImage: windows-2019
timeoutInMinutes: 120
steps:
- script: fcs\build.cmd TestAndNuget
diff --git a/DEVGUIDE.md b/DEVGUIDE.md
index 83d88b8e8d9..474442c5c64 100644
--- a/DEVGUIDE.md
+++ b/DEVGUIDE.md
@@ -66,7 +66,7 @@ Running tests:
To build and test Visual F# IDE Tools, install these requirements:
-- Download [Visual Studio 2017](https://www.visualstudio.com/downloads/)
+- Download [Visual Studio 2019](https://www.visualstudio.com/downloads/)
- Launch the Visual Studio Installer
- Under the **"Windows"** workload, select **".NET desktop development"**
- Select the optional component **"F# desktop language support"**
@@ -78,11 +78,11 @@ Steps to build:
Build.cmd -- build all F# components under the default configuration (Debug)
Build.cmd -configuration Release -- build all F# components as Release
- Build.cmd -testDesktop -- build and test all net46 tests
+ Build.cmd -testDesktop -- build and test all net472 tests
All test options:
- -testDesktop -- test all net46 target frameworks
+ -testDesktop -- test all net472 target frameworks
-testCoreClr -- test all netstandard and netcoreapp target frameworks
-testFSharpQA -- test all F# Cambridge tests
-testVs -- test all VS integration points
@@ -95,18 +95,18 @@ Note on Debug vs Release: ``Release`` Configuration has a degraded debugging exp
Note ([#2351](https://github.com/Microsoft/visualfsharp/issues/2351)): if you face this error:
-> error VSSDK1077: Unable to locate the extensions directory. "ExternalSettingsManager::GetScopePaths failed to initialize PkgDefManager for C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe".
+> error VSSDK1077: Unable to locate the extensions directory. "ExternalSettingsManager::GetScopePaths failed to initialize PkgDefManager for C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\devenv.exe".
Or hard crash on launch ("Unknown Error"), delete these folders:
-- `%localappdata%\Microsoft\VisualStudio\15.0_(some number here)RoslynDev`
-- `%localappdata%\Microsoft\VisualStudio\15.0_(some number here)`
+- `%localappdata%\Microsoft\VisualStudio\16.0_(some number here)RoslynDev`
+- `%localappdata%\Microsoft\VisualStudio\16.0_(some number here)`
#### [Optional] Install the Visual F# IDE Tools (Windows Only)
The new builds of the Visual F# IDE Tools can no longer be installed into Visual Studio 2015.
-You can install Visual Studio 2017 from https://www.visualstudio.com/downloads/.
+You can install Visual Studio 2019 from https://www.visualstudio.com/downloads/.
**Note:** This step will install a VSIX extension into Visual Studio "Next" that changes the Visual F# IDE Tools
components installed in that VS installation. You can revert this step by disabling or uninstalling the addin.
@@ -135,15 +135,15 @@ Because this uses the "RoslynDev" hive you can simultaneously test changes to an
#### [Optional] Rapid deployment of incremental changes to Visual F# IDE Tools components
-For the brave, you can rapidly deploy incrementally updated versions of Visual F# IDE Tool components such as ``FSHarp.Editor.dll`` by copying them directly into the extension directory in your user AppData folder:
+For the brave, you can rapidly deploy incrementally updated versions of Visual F# IDE Tool components such as ``FSharp.Editor.dll`` by copying them directly into the extension directory in your user AppData folder:
- xcopy /y debug\net40\bin\FSharp.* "%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\15.0_7c5620b7FSharpDev\Extensions\Microsoft.VisualFSharpTools\Visual F# Tools\15.4.1.9055"
+ xcopy /y debug\net40\bin\FSharp.* "%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\16.0_7c5620b7FSharpDev\Extensions\Microsoft.VisualFSharpTools\Visual F# Tools\16.4.1.9055"
This gives a much tighter inner development loop than uninstalling/reinstalling the VSIX, as you do not have to restart VIsual Studio. Caveat emptor.
#### [Optional] Clobber the F# SDK on the machine
-**Note:** The step below will try to clobber the machine-wide installed F# SDK on your machine. This replaces the ``fsc.exe`` used by the standard install location or ``Microsoft.FSharp.Targets``. **Repairing Visual Studio 15 is currently the only way to revert this step.**
+**Note:** The step below will try to clobber the machine-wide installed F# SDK on your machine. This replaces the ``fsc.exe`` used by the standard install location or ``Microsoft.FSharp.Targets``. **Repairing Visual Studio 16 is currently the only way to revert this step.**
For **Debug**:
@@ -184,7 +184,7 @@ If you change error messages you may need to update FSComp.fs in `src\buildfroms
To do this, build the non-buildfromsource version of FSharp.Compiler.Private (src\fsharp\FSharp.Compiler.Private) then check its obj\ directory for `FSComp.fs` and manually copy that into the buildfromsource directory.
.\build net40
- copy /y artifacts\obj\FSharp.Compiler.Private\Release\net46\FSComp.* src\buildfromsource\FSharp.Compiler.Private\
+ copy /y artifacts\obj\FSharp.Compiler.Private\Release\net472\FSComp.* src\buildfromsource\FSharp.Compiler.Private\
If your changes involve modifying the list of language keywords in any way, (e.g. when implementing a new keyword), the XLF localization files need to be synced with the corresponding resx files. This can be done automatically by running
diff --git a/FSharpBuild.Directory.Build.targets b/FSharpBuild.Directory.Build.targets
index ebd6f0d47d5..1d9828726b9 100644
--- a/FSharpBuild.Directory.Build.targets
+++ b/FSharpBuild.Directory.Build.targets
@@ -4,16 +4,6 @@
-
-
- $(AssetTargetFallback);net462
- $(NoWarn);NU1605;NU1701
-
-
$(CompileDependsOn);CopyAndSubstituteTextFiles
diff --git a/FSharpTests.Directory.Build.props b/FSharpTests.Directory.Build.props
index 6c298fe4426..ed5d63ca747 100644
--- a/FSharpTests.Directory.Build.props
+++ b/FSharpTests.Directory.Build.props
@@ -7,11 +7,11 @@
true
- $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\net46
+ $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\net472fsc.exe
- $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\net46
+ $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\net472fsi.exe
@@ -32,7 +32,7 @@
- <_FSharpBuildTargetFramework Condition="'$(FSharpTestCompilerVersion)' == 'net40'">net46
+ <_FSharpBuildTargetFramework Condition="'$(FSharpTestCompilerVersion)' == 'net40'">net472
<_FSharpBuildTargetFramework Condition="'$(FSharpTestCompilerVersion)' == 'coreclr'">netstandard2.0
<_FSharpBuildBinPath>$(MSBuildThisFileDirectory)artifacts\bin\FSharp.Build\$(Configuration)\$(_FSharpBuildTargetFramework)
diff --git a/RoslynPackageVersion.txt b/RoslynPackageVersion.txt
index 593eafec198..f0add9e0811 100644
--- a/RoslynPackageVersion.txt
+++ b/RoslynPackageVersion.txt
@@ -1 +1 @@
-2.9.0-beta8-63208-01
+3.0.0-beta4-19170-01
diff --git a/VisualFSharp.sln b/VisualFSharp.sln
index 278bea71bc8..41d5424b810 100644
--- a/VisualFSharp.sln
+++ b/VisualFSharp.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.28010.2036
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28729.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CFE3259A-2D30-4EB0-80D5-E8B5F3D01449}"
EndProject
@@ -48,7 +48,7 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Editor", "vsintegrat
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectSystem.Base", "vsintegration\src\FSharp.ProjectSystem.Base\Project\ProjectSystem.Base.csproj", "{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}"
EndProject
-Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FSharp.PropertiesPages", "vsintegration\src\FSharp.ProjectSystem.PropertyPages\FSharp.PropertiesPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}"
+Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "FSharp.PropertiesPages", "vsintegration\src\FSharp.ProjectSystem.PropertyPages\FSharp.PropertiesPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "ProjectSystem", "vsintegration\src\FSharp.ProjectSystem.FSharp\ProjectSystem.fsproj", "{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}"
EndProject
@@ -288,10 +288,10 @@ Global
{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Debug|x86.ActiveCfg = Debug|Any CPU
{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Debug|x86.Build.0 = Debug|Any CPU
- {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
- {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|Any CPU.Build.0 = Proto|Any CPU
- {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|x86.ActiveCfg = Proto|Any CPU
- {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|x86.Build.0 = Proto|Any CPU
+ {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|Any CPU.ActiveCfg = Release|Any CPU
+ {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|Any CPU.Build.0 = Release|Any CPU
+ {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|x86.ActiveCfg = Release|Any CPU
+ {FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|x86.Build.0 = Release|Any CPU
{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Release|Any CPU.Build.0 = Release|Any CPU
{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Release|x86.ActiveCfg = Release|Any CPU
diff --git a/benchmarks/Benchmarks.sln b/benchmarks/Benchmarks.sln
index 5d339f7a99f..3d490e60b8c 100644
--- a/benchmarks/Benchmarks.sln
+++ b/benchmarks/Benchmarks.sln
@@ -1,32 +1,39 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.28307.136
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28407.52
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "CompilerServiceBenchmarks", "CompilerServiceBenchmarks\CompilerServiceBenchmarks.fsproj", "{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}"
+Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "CompilerServiceBenchmarks", "CompilerServiceBenchmarks\CompilerServiceBenchmarks.fsproj", "{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}"
EndProject
-Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "..\src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{BB9EAE76-194A-49D8-9618-586CBE7031D9}"
+Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "..\src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}"
EndProject
-Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", "..\src\fsharp\FSharp.Compiler.Private\FSharp.Compiler.Private.fsproj", "{F57B02B1-CF26-4D93-9211-8CEB4F1572F0}"
+Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", "..\src\fsharp\FSharp.Compiler.Private\FSharp.Compiler.Private.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Proto|Any CPU = Proto|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Proto|Any CPU.ActiveCfg = Release|Any CPU
+ {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Proto|Any CPU.Build.0 = Release|Any CPU
{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Release|Any CPU.Build.0 = Release|Any CPU
- {BB9EAE76-194A-49D8-9618-586CBE7031D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BB9EAE76-194A-49D8-9618-586CBE7031D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BB9EAE76-194A-49D8-9618-586CBE7031D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BB9EAE76-194A-49D8-9618-586CBE7031D9}.Release|Any CPU.Build.0 = Release|Any CPU
- {F57B02B1-CF26-4D93-9211-8CEB4F1572F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F57B02B1-CF26-4D93-9211-8CEB4F1572F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F57B02B1-CF26-4D93-9211-8CEB4F1572F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F57B02B1-CF26-4D93-9211-8CEB4F1572F0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DED3BBD7-53F4-428A-8C9F-27968E768605}.Proto|Any CPU.ActiveCfg = Debug|Any CPU
+ {DED3BBD7-53F4-428A-8C9F-27968E768605}.Proto|Any CPU.Build.0 = Debug|Any CPU
+ {DED3BBD7-53F4-428A-8C9F-27968E768605}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DED3BBD7-53F4-428A-8C9F-27968E768605}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.Build.0 = Debug|Any CPU
+ {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj b/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj
index fcdd08995e3..513ff0d4ec2 100644
--- a/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj
+++ b/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj
@@ -1,8 +1,19 @@
+
+ $(MSBuildProjectDirectory)\..\..\src
+
+
Exenet472
+ true
+ true
+ $(SystemValueTuplePackageVersion)
+
+
+
+ AnyCPU
@@ -11,11 +22,12 @@
+
-
-
+
+
diff --git a/benchmarks/CompilerServiceBenchmarks/Program.fs b/benchmarks/CompilerServiceBenchmarks/Program.fs
index 95485c5c145..386d8d95fb5 100644
--- a/benchmarks/CompilerServiceBenchmarks/Program.fs
+++ b/benchmarks/CompilerServiceBenchmarks/Program.fs
@@ -1,13 +1,87 @@
open System
open System.IO
-open BenchmarkDotNet.Attributes
-open BenchmarkDotNet.Running
+open System.Text
open FSharp.Compiler.ErrorLogger
open FSharp.Compiler.SourceCodeServices
-open System.Text
+open FSharp.Compiler.Text
+open FSharp.Compiler.AbstractIL
+open FSharp.Compiler.AbstractIL.IL
+open FSharp.Compiler.AbstractIL.ILBinaryReader
+open CodeAnalysis.Text
+open BenchmarkDotNet.Attributes
+open BenchmarkDotNet.Running
+
+module private SourceText =
+
+ open System.Runtime.CompilerServices
+
+ let weakTable = ConditionalWeakTable()
+
+ let create (sourceText: SourceText) =
+
+ let sourceText =
+ { new ISourceText with
+
+ member __.Item with get index = sourceText.[index]
+
+ member __.GetLineString(lineIndex) =
+ sourceText.Lines.[lineIndex].ToString()
+
+ member __.GetLineCount() =
+ sourceText.Lines.Count
+
+ member __.GetLastCharacterPosition() =
+ if sourceText.Lines.Count > 0 then
+ (sourceText.Lines.Count, sourceText.Lines.[sourceText.Lines.Count - 1].Span.Length)
+ else
+ (0, 0)
+
+ member __.GetSubTextString(start, length) =
+ sourceText.GetSubText(TextSpan(start, length)).ToString()
+
+ member __.SubTextEquals(target, startIndex) =
+ if startIndex < 0 || startIndex >= sourceText.Length then
+ raise (ArgumentOutOfRangeException("startIndex"))
+
+ if String.IsNullOrEmpty(target) then
+ raise (ArgumentException("Target is null or empty.", "target"))
+
+ let lastIndex = startIndex + target.Length
+ if lastIndex <= startIndex || lastIndex >= sourceText.Length then
+ raise (ArgumentException("Target is too big.", "target"))
+
+ let mutable finished = false
+ let mutable didEqual = true
+ let mutable i = 0
+ while not finished && i < target.Length do
+ if target.[i] <> sourceText.[startIndex + i] then
+ didEqual <- false
+ finished <- true // bail out early
+ else
+ i <- i + 1
+
+ didEqual
+
+ member __.ContentEquals(sourceText) =
+ match sourceText with
+ | :? SourceText as sourceText -> sourceText.ContentEquals(sourceText)
+ | _ -> false
-[]
-type CompilerServiceParsing() =
+ member __.Length = sourceText.Length
+
+ member __.CopyTo(sourceIndex, destination, destinationIndex, count) =
+ sourceText.CopyTo(sourceIndex, destination, destinationIndex, count)
+ }
+
+ sourceText
+
+type SourceText with
+
+ member this.ToFSharpSourceText() =
+ SourceText.weakTable.GetValue(this, Runtime.CompilerServices.ConditionalWeakTable<_,_>.CreateValueCallback(SourceText.create))
+
+[]
+type CompilerService() =
let mutable checkerOpt = None
@@ -24,6 +98,17 @@ type CompilerServiceParsing() =
IsExe = false
}
+ let mutable assembliesOpt = None
+
+ let readerOptions =
+ {
+ pdbDirPath = None
+ ilGlobals = mkILGlobals ILScopeRef.Local
+ reduceMemoryUsage = ReduceMemoryFlag.No
+ metadataOnly = MetadataOnlyFlag.Yes
+ tryGetMetadataSnapshot = fun _ -> None
+ }
+
[]
member __.Setup() =
match checkerOpt with
@@ -32,18 +117,25 @@ type CompilerServiceParsing() =
match sourceOpt with
| None ->
- let source = File.ReadAllText("""..\..\..\..\..\src\fsharp\TypeChecker.fs""")
- sourceOpt <- Some(source)
+ sourceOpt <- Some <| SourceText.From(File.OpenRead("""..\..\..\..\..\src\fsharp\TypeChecker.fs"""), Encoding.Default, SourceHashAlgorithm.Sha1, true)
+ | _ -> ()
+
+ match assembliesOpt with
+ | None ->
+ assembliesOpt <-
+ System.AppDomain.CurrentDomain.GetAssemblies()
+ |> Array.map (fun x -> (x.Location))
+ |> Some
| _ -> ()
- []
+ []
member __.ParsingSetup() =
match checkerOpt with
| None -> failwith "no checker"
| Some(checker) ->
checker.InvalidateAll()
checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
- checker.ParseFile("dummy.fs", "dummy", parsingOptions) |> Async.RunSynchronously |> ignore
+ checker.ParseFile("dummy.fs", SourceText.ofString "dummy", parsingOptions) |> Async.RunSynchronously |> ignore
[]
member __.Parsing() =
@@ -51,10 +143,62 @@ type CompilerServiceParsing() =
| None, _ -> failwith "no checker"
| _, None -> failwith "no source"
| Some(checker), Some(source) ->
- let results = checker.ParseFile("TypeChecker.fs", source, parsingOptions) |> Async.RunSynchronously
+ let results = checker.ParseFile("TypeChecker.fs", source.ToFSharpSourceText(), parsingOptions) |> Async.RunSynchronously
if results.ParseHadErrors then failwithf "parse had errors: %A" results.Errors
+ []
+ member __.ILReadingSetup() =
+ // With caching, performance increases an order of magnitude when re-reading an ILModuleReader.
+ // Clear it for benchmarking.
+ ClearAllILModuleReaderCache()
+
+ []
+ member __.ILReading() =
+ match assembliesOpt with
+ | None -> failwith "no assemblies"
+ | Some(assemblies) ->
+ // We try to read most of everything in the assembly that matter, mainly types with their properties, methods, and fields.
+ // CustomAttrs and SecurityDecls are lazy until you call them, so we call them here for benchmarking.
+ assemblies
+ |> Array.iter (fun (fileName) ->
+ let reader = OpenILModuleReader fileName readerOptions
+
+ let ilModuleDef = reader.ILModuleDef
+
+ let ilAssemblyManifest = ilModuleDef.Manifest.Value
+
+ ilAssemblyManifest.CustomAttrs |> ignore
+ ilAssemblyManifest.SecurityDecls |> ignore
+ ilAssemblyManifest.ExportedTypes.AsList
+ |> List.iter (fun x ->
+ x.CustomAttrs |> ignore
+ )
+
+ ilModuleDef.CustomAttrs |> ignore
+ ilModuleDef.TypeDefs.AsArray
+ |> Array.iter (fun ilTypeDef ->
+ ilTypeDef.CustomAttrs |> ignore
+ ilTypeDef.SecurityDecls |> ignore
+
+ ilTypeDef.Methods.AsArray
+ |> Array.iter (fun ilMethodDef ->
+ ilMethodDef.CustomAttrs |> ignore
+ ilMethodDef.SecurityDecls |> ignore
+ )
+
+ ilTypeDef.Fields.AsList
+ |> List.iter (fun ilFieldDef ->
+ ilFieldDef.CustomAttrs |> ignore
+ )
+
+ ilTypeDef.Properties.AsList
+ |> List.iter (fun ilPropertyDef ->
+ ilPropertyDef.CustomAttrs |> ignore
+ )
+ )
+ )
+
[]
let main argv =
- let _ = BenchmarkRunner.Run()
+ let _ = BenchmarkRunner.Run()
0
diff --git a/benchmarks/Directory.Build.props b/benchmarks/Directory.Build.props
new file mode 100644
index 00000000000..bb8eac309b1
--- /dev/null
+++ b/benchmarks/Directory.Build.props
@@ -0,0 +1,3 @@
+
+
+
diff --git a/benchmarks/Directory.Build.targets b/benchmarks/Directory.Build.targets
new file mode 100644
index 00000000000..ccd47cc0a9a
--- /dev/null
+++ b/benchmarks/Directory.Build.targets
@@ -0,0 +1,3 @@
+
+
+
diff --git a/build.sh b/build.sh
index ed167ab24ac..6c74895c02c 100755
--- a/build.sh
+++ b/build.sh
@@ -13,4 +13,4 @@ while [[ -h $source ]]; do
done
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
-"$scriptroot/eng/build.sh" --build $@
+"$scriptroot/eng/build.sh" --build --restore $@
diff --git a/eng/Build.ps1 b/eng/Build.ps1
index 865cf231575..f00118e5bd2 100644
--- a/eng/Build.ps1
+++ b/eng/Build.ps1
@@ -34,7 +34,7 @@ param (
# Options
[switch][Alias('proto')]$bootstrap,
[string]$bootstrapConfiguration = "Proto",
- [string]$bootstrapTfm = "net46",
+ [string]$bootstrapTfm = "net472",
[switch][Alias('bl')]$binaryLog,
[switch]$ci,
[switch]$official,
@@ -184,12 +184,12 @@ function UpdatePath() {
}
TestAndAddToPath $subdir
- TestAndAddToPath "$ArtifactsDir\bin\fsc\$configuration\net46"
- TestAndAddToPath "$ArtifactsDir\bin\fsiAnyCpu\$configuration\net46"
+ TestAndAddToPath "$ArtifactsDir\bin\fsc\$configuration\net472"
+ TestAndAddToPath "$ArtifactsDir\bin\fsiAnyCpu\$configuration\net472"
}
function VerifyAssemblyVersions() {
- $fsiPath = Join-Path $ArtifactsDir "bin\fsi\Proto\net46\fsi.exe"
+ $fsiPath = Join-Path $ArtifactsDir "bin\fsi\Proto\net472\fsi.exe"
# Only verify versions on CI or official build
if ($ci -or $official) {
@@ -238,8 +238,8 @@ try {
VerifyAssemblyVersions
}
- $desktopTargetFramework = "net46"
- $coreclrTargetFramework = "netcoreapp2.0"
+ $desktopTargetFramework = "net472"
+ $coreclrTargetFramework = "netcoreapp2.1"
if ($testDesktop) {
TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework
@@ -266,7 +266,7 @@ try {
UpdatePath
$env:HOSTED_COMPILER = 1
$env:CSC_PIPE = "$env:USERPROFILE\.nuget\packages\Microsoft.Net.Compilers\2.7.0\tools\csc.exe"
- $env:FSCOREDLLPATH = "$ArtifactsDir\bin\fsc\$configuration\net46\FSharp.Core.dll"
+ $env:FSCOREDLLPATH = "$ArtifactsDir\bin\fsc\$configuration\net472\FSharp.Core.dll"
$env:LINK_EXE = "$RepoRoot\tests\fsharpqa\testenv\bin\link\link.exe"
$env:OSARCH = $env:PROCESSOR_ARCHITECTURE
Exec-Console $perlExe """$RepoRoot\tests\fsharpqa\testenv\bin\runall.pl"" -resultsroot ""$resultsRoot"" -results $resultsLog -log $errorLog -fail $failLog -cleanup:no -procs:$env:NUMBER_OF_PROCESSORS"
diff --git a/eng/Versions.props b/eng/Versions.props
index d1cc8d36cfd..3a05092d768 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -12,18 +12,18 @@
beta
- 4.5
- $(FSCoreMajorVersion).5
+ 4.6
+ $(FSCoreMajorVersion).2$(FSCoreMajorVersion).0$(FSCoreVersion).0
- 10.2
- $(FSPackageMajorVersion).3
+ 10.4
+ $(FSPackageMajorVersion).2$(FSPackageVersion)$(FSProductVersion).0
- 15
- 9
+ 16
+ 0$(VSMajorVersion).0$(VSMajorVersion).$(VSMinorVersion).0$(VSAssemblyVersion).0
@@ -35,17 +35,6 @@
$(FSCorePackageVersion)$(FSProductVersion)$(VSAssemblyVersion)
-
- <_BuildNumber>$(OfficialBuildId)
- <_BuildNumber Condition="'$(OfficialBuildId)' == ''">$([System.DateTime]::Now.ToString(yyyyMMdd)).0
- $(_BuildNumber.Split('.')[0])
- $(VSMajorVersion).$(VSMinorVersion).$(VsixVersionDateStampFix)$(VersionPrefix)
@@ -65,12 +54,15 @@
https://myget.org/F/vs-editor/api/v3/index.json;
https://vside.myget.org/F/vssdk/api/v3/index.json;
https://vside.myget.org/F/vs-impl/api/v3/index.json;
+ https://myget.org/F/roslyn_concord/api/v3/index.json;
+ https://vside.myget.org/F/devcore/api/v3/index.json;
$([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)..\RoslynPackageVersion.txt').Trim())1.5.04.3.0
+ 4.0.04.3.04.3.04.3.0
@@ -109,44 +101,46 @@
8.0.114.0.25420
- 15.8.525
- 15.0.26201-alpha
+ 16.0.467
+ 16.0.4671.1.4322
- 15.8.525
- 15.0.26201
- 15.8.525
- 15.8.525
- 15.8.525
- 8.0.50727
+ 16.0.467
+ 16.0.28727
+ 16.0.28729
+ 16.0.467
+ 16.0.467
+ 16.0.467
+ 8.0.507287.10.6071
- 15.0.26201
- 8.0.50727
+ 16.0.28729
+ 8.0.50728
+ 16.0.201-pre-g7d366164d02.3.615210314.3.25407
- 15.0.26201
- 15.0.26201
- 15.9.28307
+ 16.0.28729
+ 16.0.28729
+ 16.0.2872910.0.3031911.0.5072715.0.25123-Dev15Preview7.10.6072
- 8.0.50727
- 9.0.30729
- 10.0.30319
- 11.0.61030
- 12.0.30110
- 15.8.525
+ 8.0.50728
+ 9.0.30730
+ 10.0.30320
+ 11.0.61031
+ 12.0.30111
+ 16.0.4677.10.6071
- 8.0.50727
- 10.0.30319
+ 8.0.50728
+ 10.0.3032012.0.30112
- 15.8.525
- 15.8.525
- 15.8.209
- 15.0.26201
- 15.3.15
+ 16.0.467
+ 16.0.467
+ 16.0.102
+ 16.0.28729
+ 15.3.589.0.30729
- 15.7.109
+ 16.0.226412.0.47.0.48.0.4
diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1
index 304eac5a3e5..089e987f70d 100644
--- a/eng/build-utils.ps1
+++ b/eng/build-utils.ps1
@@ -13,10 +13,10 @@ $binaryLog = if (Test-Path variable:binaryLog) { $binaryLog } else { $false }
$nodeReuse = if (Test-Path variable:nodeReuse) { $nodeReuse } else { $false }
$bootstrapDir = if (Test-Path variable:bootstrapDir) { $bootstrapDir } else { "" }
$bootstrapConfiguration = if (Test-Path variable:bootstrapConfiguration) { $bootstrapConfiguration } else { "Proto" }
-$bootstrapTfm = if (Test-Path variable:bootstrapTfm) { $bootstrapTfm } else { "net46" }
+$bootstrapTfm = if (Test-Path variable:bootstrapTfm) { $bootstrapTfm } else { "net472" }
$properties = if (Test-Path variable:properties) { $properties } else { @() }
-function GetProjectOutputBinary([string]$fileName, [string]$projectName = "", [string]$configuration = $script:configuration, [string]$tfm = "net46", [string]$rid = "", [bool]$published = $false) {
+function GetProjectOutputBinary([string]$fileName, [string]$projectName = "", [string]$configuration = $script:configuration, [string]$tfm = "net472", [string]$rid = "", [bool]$published = $false) {
$projectName = if ($projectName -ne "") { $projectName } else { [System.IO.Path]::GetFileNameWithoutExtension($fileName) }
$publishDir = if ($published) { "publish\" } else { "" }
$ridDir = if ($rid -ne "") { "$rid\" } else { "" }
diff --git a/eng/build.sh b/eng/build.sh
index d814dcd04d4..887d11bffb4 100755
--- a/eng/build.sh
+++ b/eng/build.sh
@@ -240,9 +240,10 @@ InitializeDotNetCli $restore
BuildSolution
if [[ "$test_core_clr" == true ]]; then
- TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework netcoreapp2.0
- TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework netcoreapp2.0
- TestUsingNUnit --testproject "$repo_root/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj" --targetframework netcoreapp2.0
+ coreclrtestframework=netcoreapp2.1
+ TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework
+ TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework $coreclrtestframework
+ TestUsingNUnit --testproject "$repo_root/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj" --targetframework $coreclrtestframework
fi
ExitWithExitCode 0
diff --git a/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj b/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj
index 1c82ed8fcda..346edc8bddd 100644
--- a/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj
+++ b/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj
@@ -29,6 +29,9 @@
+
+
+ $(FSharpSourcesRoot)\..\fcs\dependencies\MSBuild.v12.0\Microsoft.Build.Framework.dll
diff --git a/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj b/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj
index 648f66924df..932e3b87c16 100644
--- a/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj
+++ b/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj
@@ -28,6 +28,9 @@
+
+
+
\ No newline at end of file
diff --git a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj
index 85e345669c4..c6d2243856a 100644
--- a/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj
+++ b/fcs/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj
@@ -7,10 +7,12 @@
net461;netcoreapp2.0true
+ 4.1.19$(NoWarn);44;75;truetruefalse
+ truetrue
diff --git a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj
index dcdf91eef4a..ebd96c88b52 100644
--- a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj
+++ b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj
@@ -639,6 +639,7 @@
+
diff --git a/fcs/samples/EditorService/EditorService.fsproj b/fcs/samples/EditorService/EditorService.fsproj
index 25795d9299c..4f86815c922 100644
--- a/fcs/samples/EditorService/EditorService.fsproj
+++ b/fcs/samples/EditorService/EditorService.fsproj
@@ -13,6 +13,8 @@
+
+
diff --git a/fcs/samples/EditorService/Program.fs b/fcs/samples/EditorService/Program.fs
index 91c50b36a98..e3ab70185c3 100644
--- a/fcs/samples/EditorService/Program.fs
+++ b/fcs/samples/EditorService/Program.fs
@@ -8,6 +8,7 @@ open FSharp.Compiler.QuickParse
let checker = FSharpChecker.Create()
let parseWithTypeInfo (file, input) =
+ let input = FSharp.Compiler.Text.SourceText.ofString input
let checkOptions, _errors = checker.GetProjectOptionsFromScript(file, input) |> Async.RunSynchronously
let parsingOptions, _errors = checker.GetParsingOptionsFromProjectOptions(checkOptions)
let untypedRes = checker.ParseFile(file, input, parsingOptions) |> Async.RunSynchronously
diff --git a/fcs/samples/FscExe/FscExe.fsproj b/fcs/samples/FscExe/FscExe.fsproj
index a160f690d2f..4a4dcc02e0d 100644
--- a/fcs/samples/FscExe/FscExe.fsproj
+++ b/fcs/samples/FscExe/FscExe.fsproj
@@ -15,6 +15,8 @@
+
+
diff --git a/fcs/samples/FsiExe/FsiExe.fsproj b/fcs/samples/FsiExe/FsiExe.fsproj
index 4ce18ab142c..526d71589c8 100644
--- a/fcs/samples/FsiExe/FsiExe.fsproj
+++ b/fcs/samples/FsiExe/FsiExe.fsproj
@@ -17,6 +17,8 @@
+
+
diff --git a/fcs/samples/InteractiveService/InteractiveService.fsproj b/fcs/samples/InteractiveService/InteractiveService.fsproj
index 75686578f21..36ada2d3db2 100644
--- a/fcs/samples/InteractiveService/InteractiveService.fsproj
+++ b/fcs/samples/InteractiveService/InteractiveService.fsproj
@@ -13,6 +13,8 @@
+
+
diff --git a/fcs/samples/Tokenizer/Tokenizer.fsproj b/fcs/samples/Tokenizer/Tokenizer.fsproj
index 75686578f21..36ada2d3db2 100644
--- a/fcs/samples/Tokenizer/Tokenizer.fsproj
+++ b/fcs/samples/Tokenizer/Tokenizer.fsproj
@@ -13,6 +13,8 @@
+
+
diff --git a/fcs/samples/UntypedTree/Program.fs b/fcs/samples/UntypedTree/Program.fs
index c2a0caee13c..ba6afb2dd2b 100644
--- a/fcs/samples/UntypedTree/Program.fs
+++ b/fcs/samples/UntypedTree/Program.fs
@@ -11,7 +11,7 @@ let checker = FSharpChecker.Create()
// Get untyped tree for a specified input
let getUntypedTree (file, input) =
let parsingOptions = { FSharpParsingOptions.Default with SourceFiles = [| file |] }
- let untypedRes = checker.ParseFile(file, input, parsingOptions) |> Async.RunSynchronously
+ let untypedRes = checker.ParseFile(file, FSharp.Compiler.Text.SourceText.ofString input, parsingOptions) |> Async.RunSynchronously
match untypedRes.ParseTree with
| Some tree -> tree
| None -> failwith "Something went wrong during parsing!"
diff --git a/fcs/samples/UntypedTree/UntypedTree.fsproj b/fcs/samples/UntypedTree/UntypedTree.fsproj
index 75686578f21..60879414172 100644
--- a/fcs/samples/UntypedTree/UntypedTree.fsproj
+++ b/fcs/samples/UntypedTree/UntypedTree.fsproj
@@ -13,6 +13,8 @@
+
+
diff --git a/global.json b/global.json
index 099f010dd1c..3345384598f 100644
--- a/global.json
+++ b/global.json
@@ -2,7 +2,7 @@
"tools": {
"dotnet": "2.1.504",
"vs": {
- "version": "15.9",
+ "version": "16.0",
"components": [
"Microsoft.Net.Core.Component.SDK.2.1",
"Microsoft.VisualStudio.Component.FSharp"
diff --git a/proto.proj b/proto.proj
index bbad2c34cc5..84103f6fdf8 100644
--- a/proto.proj
+++ b/proto.proj
@@ -7,15 +7,15 @@
- TargetFramework=net46
+ TargetFramework=net472TargetFramework=netcoreapp2.1
- TargetFramework=net46
+ TargetFramework=net472TargetFramework=netcoreapp2.1
- TargetFramework=net46
+ TargetFramework=net472TargetFramework=netcoreapp2.1
diff --git a/scripts/verify-translations.cmd b/scripts/verify-translations.cmd
index 86094da755e..b61d9533b07 100644
--- a/scripts/verify-translations.cmd
+++ b/scripts/verify-translations.cmd
@@ -1,3 +1,3 @@
@echo off
-%~dp0..\artifacts\bin\fsi\Release\net46\fsi.exe %~dp0VerifyAllTranslations.fsx -- %~dp0
+%~dp0..\artifacts\bin\fsi\Release\net472\fsi.exe %~dp0VerifyAllTranslations.fsx -- %~dp0
diff --git a/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj b/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj
index 27625453ec9..c0b0eff808e 100644
--- a/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj
+++ b/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj
@@ -1,8 +1,7 @@
- net46
- net462
+ net472
@@ -108,7 +107,6 @@ folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp"
file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\$(TargetFramework)\Microsoft.Portable.FSharp.Targets"
file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\$(TargetFramework)\System.Collections.Immutable.dll"
file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Reflection.Metadata.dll"
- file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.ValueTuple.dll"
file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\$(TargetFramework)\Microsoft.FSharp.NetSdk.props"
file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\$(TargetFramework)\Microsoft.FSharp.NetSdk.targets"
file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\$(TargetFramework)\Microsoft.FSharp.Overrides.NetSdk.targets"
diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.csproj b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.csproj
index 657be2a1f48..268f1d84dea 100644
--- a/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.csproj
+++ b/setup/Swix/Microsoft.FSharp.Dependencies/Microsoft.FSharp.Dependencies.csproj
@@ -1,7 +1,7 @@
- net46
+ net472
diff --git a/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj b/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj
index c86f94ec07a..e7226c491eb 100644
--- a/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj
+++ b/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj
@@ -1,7 +1,7 @@
- net46
+ net472
diff --git a/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.csproj b/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.csproj
index d736e5c5c55..190a403755d 100644
--- a/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.csproj
+++ b/setup/Swix/Microsoft.FSharp.SDK/Microsoft.FSharp.SDK.csproj
@@ -1,7 +1,7 @@
- net46
+ net472
diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs
index e2cf38f107f..8e1ef967ad8 100644
--- a/src/absil/ilread.fs
+++ b/src/absil/ilread.fs
@@ -4003,6 +4003,8 @@ let OpenILModuleReaderFromBytes fileName bytes opts =
let ilModule, ilAssemblyRefs, pdb = openPE (fileName, pefile, opts.pdbDirPath, (opts.reduceMemoryUsage = ReduceMemoryFlag.Yes), opts.ilGlobals, true)
new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) :> ILModuleReader
+let ClearAllILModuleReaderCache() = ilModuleReaderCache.Clear(ILModuleReaderCacheLockToken())
+
let OpenILModuleReader fileName opts =
// Pseudo-normalize the paths.
let (ILModuleReaderCacheKey (fullPath,writeStamp,_,_,_,_) as key), keyOk =
diff --git a/src/absil/ilread.fsi b/src/absil/ilread.fsi
index 8fa43982fea..000b9cc34ff 100644
--- a/src/absil/ilread.fsi
+++ b/src/absil/ilread.fsi
@@ -80,6 +80,8 @@ type ILModuleReader =
/// PDB files may not be read with this option.
val internal OpenILModuleReader: string -> ILReaderOptions -> ILModuleReader
+val internal ClearAllILModuleReaderCache : unit -> unit
+
/// Open a binary reader based on the given bytes.
val internal OpenILModuleReaderFromBytes: fileNameForDebugOutput:string -> assemblyContents: byte[] -> options: ILReaderOptions -> ILModuleReader
diff --git a/src/buildfromsource/BuildFromSource.targets b/src/buildfromsource/BuildFromSource.targets
index 223415a1a9b..660c26a27a6 100644
--- a/src/buildfromsource/BuildFromSource.targets
+++ b/src/buildfromsource/BuildFromSource.targets
@@ -3,7 +3,7 @@
- 4.5.0.0
+ 4.6.0.0$(MSBuildThisFileDirectory)../../BuildFromSource/$(Configuration)/bin$(MSBuildThisFileDirectory)..
diff --git a/src/buildfromsource/FSharp.Build/AssemblyInfo.fs b/src/buildfromsource/FSharp.Build/AssemblyInfo.fs
index 5eb0475d851..522a7fd0448 100644
--- a/src/buildfromsource/FSharp.Build/AssemblyInfo.fs
+++ b/src/buildfromsource/FSharp.Build/AssemblyInfo.fs
@@ -8,7 +8,7 @@ open System.Reflection
[]
[]
[]
-[]
-[]
+[]
+[]
[]
do()
diff --git a/src/buildfromsource/FSharp.Compiler.Interactive.Settings/AssemblyInfo.fs b/src/buildfromsource/FSharp.Compiler.Interactive.Settings/AssemblyInfo.fs
index 9477e27f151..9168535f02a 100644
--- a/src/buildfromsource/FSharp.Compiler.Interactive.Settings/AssemblyInfo.fs
+++ b/src/buildfromsource/FSharp.Compiler.Interactive.Settings/AssemblyInfo.fs
@@ -10,7 +10,7 @@ open System.Runtime.InteropServices
[]
[]
[]
-[]
-[]
+[]
+[]
[]
do()
diff --git a/src/buildfromsource/FSharp.Compiler.Private/AssemblyInfo.fs b/src/buildfromsource/FSharp.Compiler.Private/AssemblyInfo.fs
index 3b6e5c9279f..629acc02a0c 100644
--- a/src/buildfromsource/FSharp.Compiler.Private/AssemblyInfo.fs
+++ b/src/buildfromsource/FSharp.Compiler.Private/AssemblyInfo.fs
@@ -10,7 +10,7 @@ open System.Runtime.InteropServices
[]
[]
[]
-[]
-[]
+[]
+[]
[]
do()
diff --git a/src/buildfromsource/FSharp.Compiler.nuget/FSharp.Compiler.nuget.fsproj b/src/buildfromsource/FSharp.Compiler.nuget/FSharp.Compiler.nuget.fsproj
index 0a6b022ba75..607145dc73b 100644
--- a/src/buildfromsource/FSharp.Compiler.nuget/FSharp.Compiler.nuget.fsproj
+++ b/src/buildfromsource/FSharp.Compiler.nuget/FSharp.Compiler.nuget.fsproj
@@ -20,7 +20,7 @@
Microsoft and F# Software FoundationVisual F# Compiler FSharp functional programming-rc-$(BuildRevision.Trim())-0
- 10.2.0$(PreReleaseSuffix)
+ 10.4.0$(PreReleaseSuffix)-prop "licenseUrl=$(PackageLicenceUrl)" -prop "version=$(PackageVersion)" -prop "authors=$(PackageAuthors)" -prop "projectUrl=$(PackageProjectUrl)" -prop "tags=$(PackageTags)"
diff --git a/src/buildfromsource/FSharp.Core/AssemblyInfo.fs b/src/buildfromsource/FSharp.Core/AssemblyInfo.fs
index 91e66830260..bae3ada1267 100644
--- a/src/buildfromsource/FSharp.Core/AssemblyInfo.fs
+++ b/src/buildfromsource/FSharp.Core/AssemblyInfo.fs
@@ -16,8 +16,8 @@ open System.Runtime.InteropServices
[]
#endif
-[]
-[]
+[]
+[]
[]
do()
diff --git a/src/buildfromsource/Fsc/AssemblyInfo.fs b/src/buildfromsource/Fsc/AssemblyInfo.fs
index 42f7feb94b9..0e4751a01f8 100644
--- a/src/buildfromsource/Fsc/AssemblyInfo.fs
+++ b/src/buildfromsource/Fsc/AssemblyInfo.fs
@@ -10,7 +10,7 @@ open System.Runtime.InteropServices
[]
[]
[]
-[]
-[]
+[]
+[]
[]
do()
diff --git a/src/buildfromsource/Fsi/AssemblyInfo.fs b/src/buildfromsource/Fsi/AssemblyInfo.fs
index 2103574e816..bcdbebb5bca 100644
--- a/src/buildfromsource/Fsi/AssemblyInfo.fs
+++ b/src/buildfromsource/Fsi/AssemblyInfo.fs
@@ -7,7 +7,7 @@ open System.Reflection
[]
[]
[]
-[]
-[]
+[]
+[]
[]
do()
diff --git a/src/fsharp/CheckFormatStrings.fs b/src/fsharp/CheckFormatStrings.fs
index 7fd078de824..024a2e7d13c 100644
--- a/src/fsharp/CheckFormatStrings.fs
+++ b/src/fsharp/CheckFormatStrings.fs
@@ -54,15 +54,17 @@ let parseFormatStringInternal (m:range) (g: TcGlobals) (context: FormatStringChe
let (offset, fmt) =
match context with
| Some context ->
- let length = context.Source.Length
- if m.EndLine < context.LineStartPositions.Length then
- let startIndex = context.LineStartPositions.[m.StartLine-1] + m.StartColumn
- let endIndex = context.LineStartPositions.[m.EndLine-1] + m.EndColumn - 1
- if startIndex < length-3 && context.Source.[startIndex..startIndex+2] = "\"\"\"" then
- (3, context.Source.[startIndex+3..endIndex-3])
- elif startIndex < length-2 && context.Source.[startIndex..startIndex+1] = "@\"" then
- (2, context.Source.[startIndex+2..endIndex-1])
- else (1, context.Source.[startIndex+1..endIndex-1])
+ let sourceText = context.SourceText
+ let lineStartPositions = context.LineStartPositions
+ let length = sourceText.Length
+ if m.EndLine < lineStartPositions.Length then
+ let startIndex = lineStartPositions.[m.StartLine-1] + m.StartColumn
+ let endIndex = lineStartPositions.[m.EndLine-1] + m.EndColumn - 1
+ if startIndex < length-3 && sourceText.SubTextEquals("\"\"\"", startIndex) then
+ (3, sourceText.GetSubTextString(startIndex + 3, endIndex - startIndex))
+ elif startIndex < length-2 && sourceText.SubTextEquals("@\"", startIndex) then
+ (2, sourceText.GetSubTextString(startIndex + 2, endIndex + 1 - startIndex))
+ else (1, sourceText.GetSubTextString(startIndex + 1, endIndex - startIndex))
else (1, fmt)
| None -> (1, fmt)
diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs
index e14df2d3fb6..a57ee237690 100644
--- a/src/fsharp/CompileOps.fs
+++ b/src/fsharp/CompileOps.fs
@@ -14,15 +14,15 @@ open Internal.Utilities.Collections
open Internal.Utilities.Filename
open Internal.Utilities.Text
-open FSharp.Compiler.AbstractIL
-open FSharp.Compiler.AbstractIL.IL
+open FSharp.Compiler.AbstractIL
+open FSharp.Compiler.AbstractIL.IL
open FSharp.Compiler.AbstractIL.ILBinaryReader
-open FSharp.Compiler.AbstractIL.Internal
-open FSharp.Compiler.AbstractIL.Internal.Library
+open FSharp.Compiler.AbstractIL.Internal
+open FSharp.Compiler.AbstractIL.Internal.Library
open FSharp.Compiler.AbstractIL.Extensions.ILX
-open FSharp.Compiler.AbstractIL.Diagnostics
+open FSharp.Compiler.AbstractIL.Diagnostics
-open FSharp.Compiler
+open FSharp.Compiler
open FSharp.Compiler.Ast
open FSharp.Compiler.AttributeChecking
open FSharp.Compiler.ConstraintSolver
@@ -44,6 +44,7 @@ open FSharp.Compiler.TypeChecker
open FSharp.Compiler.Tast
open FSharp.Compiler.Tastops
open FSharp.Compiler.TcGlobals
+open FSharp.Compiler.Text
open FSharp.Compiler.DotNetFrameworkDependencies
@@ -599,7 +600,7 @@ let getErrorString key = SR.GetString key
let (|InvalidArgument|_|) (exn: exn) = match exn with :? ArgumentException as e -> Some e.Message | _ -> None
-let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) =
+let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (suggestNames: bool) =
let rec OutputExceptionR (os: StringBuilder) error =
@@ -643,16 +644,16 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) =
let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv t1 t2
match contextInfo with
- | ContextInfo.IfExpression range when range = m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore
- | ContextInfo.CollectionElement (isArray, range) when range = m ->
+ | ContextInfo.IfExpression range when Range.equals range m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore
+ | ContextInfo.CollectionElement (isArray, range) when Range.equals range m ->
if isArray then
os.Append(FSComp.SR.arrayElementHasWrongType(t1, t2)) |> ignore
else
os.Append(FSComp.SR.listElementHasWrongType(t1, t2)) |> ignore
- | ContextInfo.OmittedElseBranch range when range = m -> os.Append(FSComp.SR.missingElseBranch(t2)) |> ignore
- | ContextInfo.ElseBranchResult range when range = m -> os.Append(FSComp.SR.elseBranchHasWrongType(t1, t2)) |> ignore
- | ContextInfo.FollowingPatternMatchClause range when range = m -> os.Append(FSComp.SR.followingPatternMatchClauseHasWrongType(t1, t2)) |> ignore
- | ContextInfo.PatternMatchGuard range when range = m -> os.Append(FSComp.SR.patternMatchGuardIsNotBool(t2)) |> ignore
+ | ContextInfo.OmittedElseBranch range when Range.equals range m -> os.Append(FSComp.SR.missingElseBranch(t2)) |> ignore
+ | ContextInfo.ElseBranchResult range when Range.equals range m -> os.Append(FSComp.SR.elseBranchHasWrongType(t1, t2)) |> ignore
+ | ContextInfo.FollowingPatternMatchClause range when Range.equals range m -> os.Append(FSComp.SR.followingPatternMatchClauseHasWrongType(t1, t2)) |> ignore
+ | ContextInfo.PatternMatchGuard range when Range.equals range m -> os.Append(FSComp.SR.patternMatchGuardIsNotBool(t2)) |> ignore
| _ -> os.Append(ConstraintSolverTypesNotInEqualityRelation2E().Format t1 t2) |> ignore
if m.StartLine <> m2.StartLine then
os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore
@@ -680,16 +681,16 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) =
&& typeEquiv g t2 t2' ->
let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv t1 t2
match contextInfo with
- | ContextInfo.IfExpression range when range = m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore
- | ContextInfo.CollectionElement (isArray, range) when range = m ->
+ | ContextInfo.IfExpression range when Range.equals range m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore
+ | ContextInfo.CollectionElement (isArray, range) when Range.equals range m ->
if isArray then
os.Append(FSComp.SR.arrayElementHasWrongType(t1, t2)) |> ignore
else
os.Append(FSComp.SR.listElementHasWrongType(t1, t2)) |> ignore
- | ContextInfo.OmittedElseBranch range when range = m -> os.Append(FSComp.SR.missingElseBranch(t2)) |> ignore
- | ContextInfo.ElseBranchResult range when range = m -> os.Append(FSComp.SR.elseBranchHasWrongType(t1, t2)) |> ignore
- | ContextInfo.FollowingPatternMatchClause range when range = m -> os.Append(FSComp.SR.followingPatternMatchClauseHasWrongType(t1, t2)) |> ignore
- | ContextInfo.PatternMatchGuard range when range = m -> os.Append(FSComp.SR.patternMatchGuardIsNotBool(t2)) |> ignore
+ | ContextInfo.OmittedElseBranch range when Range.equals range m -> os.Append(FSComp.SR.missingElseBranch(t2)) |> ignore
+ | ContextInfo.ElseBranchResult range when Range.equals range m -> os.Append(FSComp.SR.elseBranchHasWrongType(t1, t2)) |> ignore
+ | ContextInfo.FollowingPatternMatchClause range when Range.equals range m -> os.Append(FSComp.SR.followingPatternMatchClauseHasWrongType(t1, t2)) |> ignore
+ | ContextInfo.PatternMatchGuard range when Range.equals range m -> os.Append(FSComp.SR.patternMatchGuardIsNotBool(t2)) |> ignore
| ContextInfo.TupleInRecordFields ->
os.Append(ErrorFromAddingTypeEquation1E().Format t2 t1 tpcs) |> ignore
os.Append(System.Environment.NewLine + FSComp.SR.commaInsteadOfSemicolonInRecord()) |> ignore
@@ -824,9 +825,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) =
| UndefinedName(_, k, id, suggestionsF) ->
os.Append(k (DecompileOpName id.idText)) |> ignore
- let filtered = ErrorResolutionHints.FilterPredictions id.idText suggestionsF
- if List.isEmpty filtered |> not then
- os.Append(ErrorResolutionHints.FormatPredictions DecompileOpName filtered) |> ignore
+ if suggestNames then
+ let filtered = ErrorResolutionHints.FilterPredictions suggestionsF id.idText
+ if List.isEmpty filtered |> not then
+ os.Append(ErrorResolutionHints.FormatPredictions DecompileOpName filtered) |> ignore
| InternalUndefinedItemRef(f, smr, ccuName, s) ->
@@ -1364,9 +1366,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) =
| ErrorWithSuggestions ((_, s), _, idText, suggestionF) ->
os.Append(DecompileOpName s) |> ignore
- let filtered = ErrorResolutionHints.FilterPredictions idText suggestionF
- if List.isEmpty filtered |> not then
- os.Append(ErrorResolutionHints.FormatPredictions DecompileOpName filtered) |> ignore
+ if suggestNames then
+ let filtered = ErrorResolutionHints.FilterPredictions suggestionF idText
+ if List.isEmpty filtered |> not then
+ os.Append(ErrorResolutionHints.FormatPredictions DecompileOpName filtered) |> ignore
| NumberedError ((_, s), _) -> os.Append(s) |> ignore
@@ -1581,11 +1584,11 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) =
OutputExceptionR os (err.Exception)
-// remove any newlines and tabs
-let OutputPhasedDiagnostic (os: System.Text.StringBuilder) (err: PhasedDiagnostic) (flattenErrors: bool) =
+// remove any newlines and tabs
+let OutputPhasedDiagnostic (os: System.Text.StringBuilder) (err: PhasedDiagnostic) (flattenErrors: bool) (suggestNames: bool) =
let buf = new System.Text.StringBuilder()
- OutputPhasedErrorR buf err
+ OutputPhasedErrorR buf err suggestNames
let s = if flattenErrors then ErrorLogger.NormalizeErrorString (buf.ToString()) else buf.ToString()
os.Append(s) |> ignore
@@ -1635,9 +1638,9 @@ type Diagnostic =
| Long of bool * DiagnosticDetailedInfo
/// returns sequence that contains Diagnostic for the given error + Diagnostic for all related errors
-let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err: PhasedDiagnostic) =
- let outputWhere (showFullPaths, errorStyle) m: DiagnosticLocation =
- if m = rangeStartup || m = rangeCmdArgs then
+let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err: PhasedDiagnostic, suggestNames: bool) =
+ let outputWhere (showFullPaths, errorStyle) m: DiagnosticLocation =
+ if Range.equals m rangeStartup || Range.equals m rangeCmdArgs then
{ Range = m; TextRepresentation = ""; IsEmpty = true; File = "" }
else
let file = m.FileName
@@ -1672,7 +1675,7 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt
| ErrorStyle.VSErrors ->
// Show prefix only for real files. Otherwise, we just want a truncated error like:
// parse error FS0031: blah blah
- if m<>range0 && m<>rangeStartup && m<>rangeCmdArgs then
+ if not (Range.equals m range0) && not (Range.equals m rangeStartup) && not (Range.equals m rangeCmdArgs) then
let file = file.Replace("/", "\\")
let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) (mkPos m.EndLine (m.EndColumn + 1) )
sprintf "%s(%d,%d,%d,%d): " file m.StartLine m.StartColumn m.EndLine m.EndColumn, m, file
@@ -1708,7 +1711,7 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt
let canonical = OutputCanonicalInformation(err.Subcategory(), GetDiagnosticNumber mainError)
let message =
let os = System.Text.StringBuilder()
- OutputPhasedDiagnostic os mainError flattenErrors
+ OutputPhasedDiagnostic os mainError flattenErrors suggestNames
os.ToString()
let entry: DiagnosticDetailedInfo = { Location = where; Canonical = canonical; Message = message }
@@ -1723,7 +1726,7 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt
let relCanonical = OutputCanonicalInformation(err.Subcategory(), GetDiagnosticNumber mainError) // Use main error for code
let relMessage =
let os = System.Text.StringBuilder()
- OutputPhasedDiagnostic os err flattenErrors
+ OutputPhasedDiagnostic os err flattenErrors suggestNames
os.ToString()
let entry: DiagnosticDetailedInfo = { Location = relWhere; Canonical = relCanonical; Message = relMessage}
@@ -1731,7 +1734,7 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt
| _ ->
let os = System.Text.StringBuilder()
- OutputPhasedDiagnostic os err flattenErrors
+ OutputPhasedDiagnostic os err flattenErrors suggestNames
errors.Add( Diagnostic.Short(isError, os.ToString()) )
relatedErrors |> List.iter OutputRelatedError
@@ -1752,7 +1755,8 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt
/// prints error and related errors to the specified StringBuilder
let rec OutputDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError) os (err: PhasedDiagnostic) =
- let errors = CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err)
+ // 'true' for "suggestNames" is passed last here because we want to report suggestions in fsc.exe and fsi.exe, just not in regular IDE usage.
+ let errors = CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err, true)
for e in errors do
Printf.bprintf os "\n"
match e with
@@ -1782,7 +1786,6 @@ let OutputDiagnosticContext prefix fileLineFn os err =
let (++) x s = x @ [s]
-
//----------------------------------------------------------------------------
// General file name resolver
//--------------------------------------------------------------------------
@@ -2392,12 +2395,12 @@ type TcConfigBuilder =
member tcConfigB.AddReferencedAssemblyByPath (m, path) =
if FileSystem.IsInvalidPathShim(path) then
warning(Error(FSComp.SR.buildInvalidAssemblyName(path), m))
- elif not (tcConfigB.referencedDLLs |> List.exists (fun ar2 -> m=ar2.Range && path=ar2.Text)) then // NOTE: We keep same paths if range is different.
+ elif not (tcConfigB.referencedDLLs |> List.exists (fun ar2 -> Range.equals m ar2.Range && path=ar2.Text)) then // NOTE: We keep same paths if range is different.
let projectReference = tcConfigB.projectReferences |> List.tryPick (fun pr -> if pr.FileName = path then Some pr else None)
tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs ++ AssemblyReference(m, path, projectReference)
member tcConfigB.RemoveReferencedAssemblyByPath (m, path) =
- tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs |> List.filter (fun ar-> ar.Range <> m || ar.Text <> path)
+ tcConfigB.referencedDLLs <- tcConfigB.referencedDLLs |> List.filter (fun ar -> not (Range.equals ar.Range m) || ar.Text <> path)
static member SplitCommandLineResourceInfo (ri: string) =
let p = ri.IndexOf ','
@@ -2542,7 +2545,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) =
r, Some(filename)
else
// If the file doesn't exist, let reference resolution logic report the error later...
- defaultCoreLibraryReference, if r.Range =rangeStartup then Some(filename) else None
+ defaultCoreLibraryReference, if Range.equals r.Range rangeStartup then Some(filename) else None
match data.referencedDLLs |> List.filter (fun assemblyReference -> assemblyReference.SimpleAssemblyNameIs libraryName) with
| [r] -> nameOfDll r
| [] ->
@@ -2899,7 +2902,13 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) =
// file is included in the search path. This should ideally already be one of the search paths, but
// during some global checks it won't be. We append to the end of the search list so that this is the last
// place that is checked.
- if m <> range0 && m <> rangeStartup && m <> rangeCmdArgs && FileSystem.IsPathRootedShim m.FileName then
+ let isPoundRReference (r: range) =
+ not (Range.equals r range0) &&
+ not (Range.equals r rangeStartup) &&
+ not (Range.equals r rangeCmdArgs) &&
+ FileSystem.IsPathRootedShim r.FileName
+
+ if isPoundRReference m then
tcConfig.GetSearchPathsForLibraryFiles() @ [Path.GetDirectoryName(m.FileName)]
else
tcConfig.GetSearchPathsForLibraryFiles()
@@ -4840,7 +4849,7 @@ module private ScriptPreprocessClosure =
open Internal.Utilities.Text.Lexing
/// Represents an input to the closure finding process
- type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: string * parseRequired: bool
+ type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: ISourceText * parseRequired: bool
/// Represents an output of the closure finding process
type ClosureFile = ClosureFile of string * range * ParsedInput option * (PhasedDiagnostic * bool) list * (PhasedDiagnostic * bool) list * (string * range) list // filename, range, errors, warnings, nowarns
@@ -4856,8 +4865,8 @@ module private ScriptPreprocessClosure =
/// Parse a script from source.
let ParseScriptText
- (filename: string, source: string, tcConfig: TcConfig, codeContext,
- lexResourceManager: Lexhelp.LexResourceManager, errorLogger: ErrorLogger) =
+ (filename: string, sourceText: ISourceText, tcConfig: TcConfig, codeContext,
+ lexResourceManager: Lexhelp.LexResourceManager, errorLogger: ErrorLogger) =
// fsc.exe -- COMPILED\!INTERACTIVE
// fsi.exe -- !COMPILED\INTERACTIVE
@@ -4869,7 +4878,7 @@ module private ScriptPreprocessClosure =
| CodeContext.CompilationAndEvaluation -> ["INTERACTIVE"]
| CodeContext.Compilation -> ["COMPILED"]
| CodeContext.Editing -> "EDITING" :: (if IsScript filename then ["INTERACTIVE"] else ["COMPILED"])
- let lexbuf = UnicodeLexing.StringAsLexbuf source
+ let lexbuf = UnicodeLexing.SourceTextAsLexbuf(sourceText)
let isLastCompiland = (IsScript filename), tcConfig.target.IsExe // The root compiland is last in the list of compilands.
ParseOneInputLexbuf (tcConfig, lexResourceManager, defines, lexbuf, filename, isLastCompiland, errorLogger)
@@ -4920,7 +4929,7 @@ module private ScriptPreprocessClosure =
| None -> new StreamReader(stream, true)
| Some (n: int) -> new StreamReader(stream, Encoding.GetEncoding(n))
let source = reader.ReadToEnd()
- [ClosureSource(filename, m, source, parseRequired)]
+ [ClosureSource(filename, m, SourceText.ofString source, parseRequired)]
with e ->
errorRecovery e m
[]
@@ -4953,7 +4962,7 @@ module private ScriptPreprocessClosure =
let tcConfig = ref tcConfig
let observedSources = Observed()
- let rec loop (ClosureSource(filename, m, source, parseRequired)) =
+ let rec loop (ClosureSource(filename, m, sourceText, parseRequired)) =
[ if not (observedSources.HaveSeen(filename)) then
observedSources.SetSeen(filename)
//printfn "visiting %s" filename
@@ -4961,7 +4970,7 @@ module private ScriptPreprocessClosure =
let parseResult, parseDiagnostics =
let errorLogger = CapturingErrorLogger("FindClosureParse")
use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger)
- let result = ParseScriptText (filename, source, !tcConfig, codeContext, lexResourceManager, errorLogger)
+ let result = ParseScriptText (filename, sourceText, !tcConfig, codeContext, lexResourceManager, errorLogger)
result, errorLogger.Diagnostics
match parseResult with
@@ -5055,7 +5064,7 @@ module private ScriptPreprocessClosure =
match GetRangeOfDiagnostic exn with
| Some m ->
// Return true if the error was *not* from a #load-ed file.
- let isArgParameterWhileNotEditing = (codeContext <> CodeContext.Editing) && (m = range0 || m = rangeStartup || m = rangeCmdArgs)
+ let isArgParameterWhileNotEditing = (codeContext <> CodeContext.Editing) && (Range.equals m range0 || Range.equals m rangeStartup || Range.equals m rangeCmdArgs)
let isThisFileName = (0 = String.Compare(rootFilename, m.FileName, StringComparison.OrdinalIgnoreCase))
isArgParameterWhileNotEditing || isThisFileName
| None -> true
@@ -5078,13 +5087,12 @@ module private ScriptPreprocessClosure =
/// Given source text, find the full load closure. Used from service.fs, when editing a script file
let GetFullClosureOfScriptText
- (ctok, legacyReferenceResolver, defaultFSharpBinariesDir,
- filename, source,
- codeContext, useSimpleResolution, useFsiAuxLib,
- lexResourceManager: Lexhelp.LexResourceManager,
- applyCommmandLineArgs, assumeDotNetFramework,
- tryGetMetadataSnapshot, reduceMemoryUsage) =
-
+ (ctok, legacyReferenceResolver, defaultFSharpBinariesDir,
+ filename, sourceText,
+ codeContext, useSimpleResolution, useFsiAuxLib,
+ lexResourceManager: Lexhelp.LexResourceManager,
+ applyCommmandLineArgs, assumeDotNetFramework,
+ tryGetMetadataSnapshot, reduceMemoryUsage) =
// Resolve the basic references such as FSharp.Core.dll first, before processing any #I directives in the script
//
// This is tries to mimic the action of running the script in F# Interactive - the initial context for scripting is created
@@ -5105,7 +5113,7 @@ module private ScriptPreprocessClosure =
codeContext, useSimpleResolution, useFsiAuxLib, Some references0,
applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage)
- let closureSources = [ClosureSource(filename, range0, source, true)]
+ let closureSources = [ClosureSource(filename, range0, sourceText, true)]
let closureFiles, tcConfig = FindClosureFiles(closureSources, tcConfig, codeContext, lexResourceManager)
GetLoadClosure(ctok, filename, closureFiles, tcConfig, codeContext)
@@ -5124,23 +5132,26 @@ module private ScriptPreprocessClosure =
type LoadClosure with
/// Analyze a script text and find the closure of its references.
+ /// Used from FCS, when editing a script file.
+ //
+ /// A temporary TcConfig is created along the way, is why this routine takes so many arguments. We want to be sure to use exactly the
+ /// same arguments as the rest of the application.
static member ComputeClosureOfScriptText
- (ctok, legacyReferenceResolver, defaultFSharpBinariesDir,
- filename: string, source: string, codeContext, useSimpleResolution: bool,
- useFsiAuxLib, lexResourceManager: Lexhelp.LexResourceManager,
- applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) =
+ (ctok, legacyReferenceResolver, defaultFSharpBinariesDir,
+ filename: string, sourceText:ISourceText, codeContext, useSimpleResolution: bool,
+ useFsiAuxLib, lexResourceManager: Lexhelp.LexResourceManager,
+ applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage): LoadClosure =
use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse
ScriptPreprocessClosure.GetFullClosureOfScriptText
- (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, source,
- codeContext, useSimpleResolution, useFsiAuxLib, lexResourceManager,
+ (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText,
+ codeContext, useSimpleResolution, useFsiAuxLib, lexResourceManager,
applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage)
/// Analyze a set of script files and find the closure of their references.
- static member ComputeClosureOfScriptFiles
- (ctok, tcConfig: TcConfig, files:(string*range) list, codeContext,
- lexResourceManager: Lexhelp.LexResourceManager) =
-
+ static member ComputeClosureOfScriptFiles
+ (ctok, tcConfig: TcConfig, files:(string*range) list, codeContext,
+ lexResourceManager: Lexhelp.LexResourceManager) =
use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse
ScriptPreprocessClosure.GetFullClosureOfScriptFiles (ctok, tcConfig, files, codeContext, lexResourceManager)
@@ -5444,4 +5455,4 @@ let TypeCheckClosedInputSet (ctok, checkForErrors, tcConfig, tcImports, tcGlobal
// Existing public APIs delegate to newer implementations
let GetFSharpCoreLibraryName () = getFSharpCoreLibraryName
-let DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework = defaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework
\ No newline at end of file
+let DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework = defaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework
diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi
index 912bcf137cf..c3d88bb4a11 100755
--- a/src/fsharp/CompileOps.fsi
+++ b/src/fsharp/CompileOps.fsi
@@ -9,14 +9,15 @@ open System.Collections.Generic
open FSharp.Compiler.AbstractIL
open FSharp.Compiler.AbstractIL.IL
open FSharp.Compiler.AbstractIL.ILBinaryReader
-open FSharp.Compiler.AbstractIL.Internal.Library
-open FSharp.Compiler
+open FSharp.Compiler.AbstractIL.Internal.Library
+open FSharp.Compiler
open FSharp.Compiler.TypeChecker
open FSharp.Compiler.Range
open FSharp.Compiler.Ast
open FSharp.Compiler.ErrorLogger
open FSharp.Compiler.Tast
open FSharp.Compiler.TcGlobals
+open FSharp.Compiler.Text
open Microsoft.FSharp.Core.CompilerServices
#if !NO_EXTENSIONTYPING
open FSharp.Compiler.ExtensionTyping
@@ -82,7 +83,7 @@ val GetDiagnosticNumber: PhasedDiagnostic -> int
val SplitRelatedDiagnostics: PhasedDiagnostic -> PhasedDiagnostic * PhasedDiagnostic list
/// Output an error to a buffer
-val OutputPhasedDiagnostic: StringBuilder -> PhasedDiagnostic -> flattenErrors: bool -> unit
+val OutputPhasedDiagnostic: StringBuilder -> PhasedDiagnostic -> flattenErrors: bool -> suggestNames: bool -> unit
/// Output an error or warning to a buffer
val OutputDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * isError:bool -> StringBuilder -> PhasedDiagnostic -> unit
@@ -119,7 +120,7 @@ type Diagnostic =
| Long of bool * DiagnosticDetailedInfo
/// Part of LegacyHostedCompilerForTesting
-val CollectDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * warning:bool * PhasedDiagnostic -> seq
+val CollectDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * warning:bool * PhasedDiagnostic * suggestNames: bool -> seq
//----------------------------------------------------------------------------
// Resolve assembly references
@@ -800,7 +801,7 @@ type LoadClosure =
//
/// A temporary TcConfig is created along the way, is why this routine takes so many arguments. We want to be sure to use exactly the
/// same arguments as the rest of the application.
- static member ComputeClosureOfScriptText: CompilationThreadToken * legacyReferenceResolver: ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * filename: string * source: string * implicitDefines:CodeContext * useSimpleResolution: bool * useFsiAuxLib: bool * lexResourceManager: Lexhelp.LexResourceManager * applyCompilerOptions: (TcConfigBuilder -> unit) * assumeDotNetFramework: bool * tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * reduceMemoryUsage: ReduceMemoryFlag -> LoadClosure
+ static member ComputeClosureOfScriptText: CompilationThreadToken * legacyReferenceResolver: ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * filename: string * sourceText: ISourceText * implicitDefines:CodeContext * useSimpleResolution: bool * useFsiAuxLib: bool * lexResourceManager: Lexhelp.LexResourceManager * applyCompilerOptions: (TcConfigBuilder -> unit) * assumeDotNetFramework: bool * tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * reduceMemoryUsage: ReduceMemoryFlag -> LoadClosure
/// Analyze a set of script files and find the closure of their references. The resulting references are then added to the given TcConfig.
/// Used from fsi.fs and fsc.fs, for #load and command line.
diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs
index 196edd054cf..9ae257ce35a 100644
--- a/src/fsharp/ConstraintSolver.fs
+++ b/src/fsharp/ConstraintSolver.fs
@@ -1931,7 +1931,7 @@ and SolveTypeIsNonNullableValueType (csenv: ConstraintSolverEnv) ndeep m2 trace
| _ ->
let underlyingTy = stripTyEqnsAndMeasureEqns g ty
if isStructTy g underlyingTy then
- if tyconRefEq g g.system_Nullable_tcref (tcrefOfAppTy g underlyingTy) then
+ if isAppTy g underlyingTy && tyconRefEq g g.system_Nullable_tcref (tcrefOfAppTy g underlyingTy) then
return! ErrorD (ConstraintSolverError(FSComp.SR.csTypeParameterCannotBeNullable(), m, m))
else
return! ErrorD (ConstraintSolverError(FSComp.SR.csGenericConstructRequiresStructType(NicePrint.minimalStringOfType denv ty), m, m2))
diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs
index cb43aded141..fc6560258f0 100755
--- a/src/fsharp/ErrorLogger.fs
+++ b/src/fsharp/ErrorLogger.fs
@@ -125,7 +125,7 @@ let inline protectAssemblyExplorationNoReraise dflt1 dflt2 f =
// Attach a range if this is a range dual exception.
let rec AttachRange m (exn:exn) =
- if m = range0 then exn
+ if Range.equals m range0 then exn
else
match exn with
// Strip TargetInvocationException wrappers
diff --git a/src/fsharp/ErrorResolutionHints.fs b/src/fsharp/ErrorResolutionHints.fs
index f40dd8f914e..fc136a8bed1 100644
--- a/src/fsharp/ErrorResolutionHints.fs
+++ b/src/fsharp/ErrorResolutionHints.fs
@@ -24,7 +24,7 @@ let IsInEditDistanceProximity idText suggestion =
editDistance <= threshold
/// Filters predictions based on edit distance to the given unknown identifier.
-let FilterPredictions (idText:string) (suggestionF:ErrorLogger.Suggestions) =
+let FilterPredictions (suggestionF:ErrorLogger.Suggestions) (idText:string) =
let uppercaseText = idText.ToUpperInvariant()
let allSuggestions = suggestionF()
diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj
index d46efd025e6..f5f297bda75 100644
--- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj
+++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj
@@ -4,7 +4,7 @@
Library
- net46;netstandard2.0
+ net472;netstandard2.0netstandard2.0FSharp.Build$(NoWarn);45;55;62;75;1204
@@ -36,7 +36,7 @@
-
+
diff --git a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props
index 1b905a5c2f3..2d07d58ce69 100644
--- a/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props
+++ b/src/fsharp/FSharp.Build/Microsoft.FSharp.NetSdk.props
@@ -74,7 +74,7 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
4.4.0
- 4.5.2
+ 4.6.2$(DefaultValueTuplePackageVersion)$(DefaultFSharpCorePackageVersion)
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf
index c7540eaf089..374f1770bbb 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ Parametr ToolPath není známý. Zadejte cestu k nástroji.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf
index 381fc6afddf..c5a6cb42c9f 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath unbekannt. Geben Sie den Pfad zum Tool an.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf
index 14821c6fc73..4791cd16b2c 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath se desconoce; especifique la ruta de acceso a la herramienta.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf
index 8cb98ce31f2..79ddfd7ab24 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath est inconnu, spécifiez le chemin de l'outil.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf
index 7f8dd0509fa..a7dd116bb44 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ Il valore di ToolPath è sconosciuto. Specificare il percorso dello strumento.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf
index b87334379e5..e26503cb96f 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath が不明です。ツールンパスを指定します。
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf
index 9e0c6d16dbb..4c141658672 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath를 알 수 없습니다. 도구 경로를 지정하세요.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf
index a75fe926a6d..b7734b58a75 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ Właściwość ToolPath jest nieznana. Określ ścieżkę do narzędzia.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf
index b084cd8db2d..865c593fd07 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath desconhecido. Especifique o caminho para a ferramenta.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf
index 2b2f588c6ee..b1fef639ee0 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ Путь к инструменту (ToolPath) неизвестен, укажите путь к инструменту.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf
index 1653136e1ad..4dd43b35531 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath bilinmiyor; aracın yolunu belirtin.
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hans.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hans.xlf
index 6d4f74c9d3f..bf5016a3685 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hans.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hans.xlf
@@ -4,7 +4,7 @@
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath 未知;请指定工具的路径。
diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf
index 96863db1dda..0e30a5cfeca 100644
--- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf
+++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf
@@ -1,10 +1,10 @@
-
+
ToolPath is unknown; specify the path to the tool.
- ToolPath is unknown; specify the path to the tool.
+ ToolPath 未知; 請指定工具的路徑。
diff --git a/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj b/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj
index f54cd37330d..6307f17baf3 100644
--- a/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj
+++ b/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj
@@ -4,7 +4,7 @@
Library
- net46;netstandard2.0
+ net472;netstandard2.0netstandard2.0FSharp.Compiler.Interactive.Settings$(NoWarn);45;55;62;75;1182;1204
diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj
index 70a80240b4b..9fef6d27589 100644
--- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj
+++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj
@@ -4,7 +4,7 @@
Library
- net46;netstandard2.0
+ net472;netstandard2.0netstandard2.0FSharp.Compiler.Private$(NoWarn);45;55;62;75;1204
@@ -12,10 +12,17 @@
$(DefineConstants);COMPILER$(DefineConstants);MSBUILD_AT_LEAST_15$(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1
- truetrue
+
+ true
+
+
+
+ true
+
+
$(BaseOutputPath)\$(Configuration)\$(TargetFramework)
@@ -27,7 +34,6 @@
-
@@ -50,6 +56,7 @@
+
@@ -622,6 +629,12 @@
Service/service.fs
+
+ Service/ServiceErrorResolutionHints.fsi
+
+
+ Service/ServiceErrorResolutionHints.fs
+
Service/ServiceInterfaceStubGenerator.fsi
@@ -652,7 +665,7 @@
InteractiveSession/fsi.fs
-
+
Misc/MSBuildReferenceResolver.fs
@@ -665,7 +678,7 @@
-
+
@@ -697,7 +710,6 @@
-
diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj
index fd1a2470534..75a7353bb96 100644
--- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj
+++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj
@@ -3,8 +3,10 @@
- net46true
+ net472
+ FSharp.Compiler.Server.Shared
+ true
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf
index b5d21ee48fb..7c8e97d6501 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf
index 01d60b65b31..cfcd71290fa 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf
index 86bcc129825..46a617777f6 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf
index 3c12f6109a2..09dfb48a62c 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf
index 4991f7ffaf9..5598638a5f4 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf
index ae165167480..d33e013cb6a 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf
@@ -1,4 +1,4 @@
-
+
@@ -204,7 +204,7 @@
The function did not compute a permutation.
- 関数は順列を計算しませんでした。
+ 関数は順列をコンピューティングしませんでした。
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf
index 49b8be6efb8..ed24759baaa 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -314,7 +314,7 @@
Type mismatch when building '{0}': expected function type in function application or let binding. Expected '{1}', but received type '{2}'.
- {0}'을(를) 작성하는 동안 형식 불일치 문제가 발생했습니다. 함수 응용 프로그램 또는 let 바인딩에 함수 형식이 필요합니다. '{1}'이(가) 필요한데 '{2}' 형식을 수신했습니다.
+ '{0}'을(를) 작성하는 동안 형식 불일치 문제가 발생했습니다. 함수 애플리케이션 또는 let 바인딩에 함수 형식이 필요합니다. '{1}'이(가) 필요한데 '{2}' 형식을 수신했습니다.
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf
index d435fc3f80a..3d869bc263b 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf
index 43296899d7c..48c0450f629 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf
index 51162715a61..cb488ded3eb 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf
@@ -1,4 +1,4 @@
-
+
@@ -514,7 +514,7 @@
F# union type requires different number of arguments
- К# типу объединения требуется другое количество аргументов
+ Типу объединения F# требуется другое количество аргументов
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf
index 33601727b60..2baf7f4b07b 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf
index de92b3ac758..e75ede8758c 100644
--- a/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf
+++ b/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs
index 872109989a7..ee8cddf8a28 100644
--- a/src/fsharp/NameResolution.fs
+++ b/src/fsharp/NameResolution.fs
@@ -23,6 +23,7 @@ open FSharp.Compiler.AccessibilityLogic
open FSharp.Compiler.AttributeChecking
open FSharp.Compiler.InfoReader
open FSharp.Compiler.PrettyNaming
+open FSharp.Compiler.Text
open System.Collections.Generic
#if !NO_EXTENSIONTYPING
@@ -897,7 +898,7 @@ let AddResults res1 res2 =
| Exception _, Result l -> Result l
| Result x, Exception _ -> Result x
// If we have error messages for the same symbol, then we can merge suggestions.
- | Exception (UndefinedName(n1, f, id1, suggestions1)), Exception (UndefinedName(n2, _, id2, suggestions2)) when n1 = n2 && id1.idText = id2.idText && id1.idRange = id2.idRange ->
+ | Exception (UndefinedName(n1, f, id1, suggestions1)), Exception (UndefinedName(n2, _, id2, suggestions2)) when n1 = n2 && id1.idText = id2.idText && Range.equals id1.idRange id2.idRange ->
let suggestions = HashSet(suggestions1())
suggestions.UnionWith(suggestions2())
Exception(UndefinedName(n1, f, id1, fun () -> suggestions))
@@ -1251,7 +1252,7 @@ type OpenDeclaration =
IsOwnNamespace = isOwnNamespace }
type FormatStringCheckContext =
- { Source: string
+ { SourceText: ISourceText
LineStartPositions: int[] }
/// An abstract type for reporting the results of name resolution and type checking.
@@ -1261,7 +1262,7 @@ type ITypecheckResultsSink =
abstract NotifyNameResolution: pos * Item * Item * TyparInst * ItemOccurence * Tastops.DisplayEnv * NameResolutionEnv * AccessorDomain * range * bool -> unit
abstract NotifyFormatSpecifierLocation: range * int -> unit
abstract NotifyOpenDeclaration: OpenDeclaration -> unit
- abstract CurrentSource: string option
+ abstract CurrentSourceText: ISourceText option
abstract FormatStringCheckContext: FormatStringCheckContext option
let (|ValRefOfProp|_|) (pi: PropInfo) = pi.ArbitraryValRef
@@ -1353,8 +1354,10 @@ let tyconRefDefnEq g (eref1: EntityRef) (eref2: EntityRef) =
tyconRefEq g eref1 eref2 ||
// Signature items considered equal to implementation items
- eref1.DefinitionRange <> Range.rangeStartup && eref1.DefinitionRange <> Range.range0 && eref1.DefinitionRange <> Range.rangeCmdArgs &&
- (eref1.DefinitionRange = eref2.DefinitionRange || eref1.SigRange = eref2.SigRange) &&
+ not (Range.equals eref1.DefinitionRange Range.rangeStartup) &&
+ not (Range.equals eref1.DefinitionRange Range.range0) &&
+ not (Range.equals eref1.DefinitionRange Range.rangeCmdArgs) &&
+ (Range.equals eref1.DefinitionRange eref2.DefinitionRange || Range.equals eref1.SigRange eref2.SigRange) &&
eref1.LogicalName = eref2.LogicalName
let valRefDefnHash (_g: TcGlobals) (vref1: ValRef) =
@@ -1364,8 +1367,10 @@ let valRefDefnEq g (vref1: ValRef) (vref2: ValRef) =
valRefEq g vref1 vref2 ||
// Signature items considered equal to implementation items
- vref1.DefinitionRange <> Range.rangeStartup && vref1.DefinitionRange <> Range.range0 && vref1.DefinitionRange <> Range.rangeCmdArgs &&
- (vref1.DefinitionRange = vref2.DefinitionRange || vref1.SigRange = vref2.SigRange) &&
+ not (Range.equals vref1.DefinitionRange Range.rangeStartup) &&
+ not (Range.equals vref1.DefinitionRange Range.range0) &&
+ not (Range.equals vref1.DefinitionRange Range.rangeCmdArgs) &&
+ (Range.equals vref1.DefinitionRange vref2.DefinitionRange || Range.equals vref1.SigRange vref2.SigRange) &&
vref1.LogicalName = vref2.LogicalName
let unionCaseRefDefnEq g (uc1: UnionCaseRef) (uc2: UnionCaseRef) =
@@ -1384,7 +1389,7 @@ let ItemsAreEffectivelyEqual g orig other =
| TType_var tp1, TType_var tp2 ->
not tp1.IsCompilerGenerated && not tp1.IsFromError &&
not tp2.IsCompilerGenerated && not tp2.IsFromError &&
- tp1.Range = tp2.Range
+ Range.equals tp1.Range tp2.Range
| AbbrevOrAppTy tcref1, AbbrevOrAppTy tcref2 ->
tyconRefDefnEq g tcref1 tcref2
| _ -> false)
@@ -1393,7 +1398,7 @@ let ItemsAreEffectivelyEqual g orig other =
valRefDefnEq g vref1 vref2
| ActivePatternCaseUse (range1, range1i, idx1), ActivePatternCaseUse (range2, range2i, idx2) ->
- (idx1 = idx2) && (range1 = range2 || range1i = range2i)
+ (idx1 = idx2) && (Range.equals range1 range2 || Range.equals range1i range2i)
| MethodUse minfo1, MethodUse minfo2 ->
MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2 ||
@@ -1410,10 +1415,10 @@ let ItemsAreEffectivelyEqual g orig other =
| _ -> false
| Item.ArgName (id1, _, _), Item.ArgName (id2, _, _) ->
- (id1.idText = id2.idText && id1.idRange = id2.idRange)
+ (id1.idText = id2.idText && Range.equals id1.idRange id2.idRange)
| (Item.ArgName (id, _, _), ValUse vref) | (ValUse vref, Item.ArgName (id, _, _)) ->
- ((id.idRange = vref.DefinitionRange || id.idRange = vref.SigRange) && id.idText = vref.DisplayName)
+ ((Range.equals id.idRange vref.DefinitionRange || Range.equals id.idRange vref.SigRange) && id.idText = vref.DisplayName)
| Item.AnonRecdField(anon1, _, i1, _), Item.AnonRecdField(anon2, _, i2, _) -> Tastops.anonInfoEquiv anon1 anon2 && i1 = i2
@@ -1520,7 +1525,7 @@ type TcSymbolUses(g, capturedNameResolutions: ResizeArray()
let capturedExprTypings = ResizeArray<_>()
let capturedNameResolutions = ResizeArray<_>()
@@ -1536,7 +1541,7 @@ type TcResultsSinkImpl(g, ?source: string) =
new System.Collections.Generic.HashSet
( { new IEqualityComparer with
member __.GetHashCode ((m, _)) = hash m
- member __.Equals ((m1, item1), (m2, item2)) = m1 = m2 && ItemsAreEffectivelyEqual g item1 item2 } )
+ member __.Equals ((m1, item1), (m2, item2)) = Range.equals m1 m2 && ItemsAreEffectivelyEqual g item1 item2 } )
let capturedMethodGroupResolutions = ResizeArray<_>()
let capturedOpenDeclarations = ResizeArray()
@@ -1544,18 +1549,18 @@ type TcResultsSinkImpl(g, ?source: string) =
let formatStringCheckContext =
lazy
- source |> Option.map (fun source ->
+ sourceText |> Option.map (fun sourceText ->
let positions =
[|
yield 0
- for i in 1..source.Length do
- let c = source.[i-1]
- if c = '\r' && i < source.Length && source.[i] = '\n' then ()
+ for i in 1..sourceText.Length do
+ let c = sourceText.[i-1]
+ if c = '\r' && i < sourceText.Length && sourceText.[i] = '\n' then ()
elif c = '\r' then yield i
elif c = '\n' then yield i
- yield source.Length
+ yield sourceText.Length
|]
- { Source = source
+ { SourceText = sourceText
LineStartPositions = positions })
member this.GetResolutions() =
@@ -1581,9 +1586,9 @@ type TcResultsSinkImpl(g, ?source: string) =
// results in duplication of textual variables. So we ensure we never record two name resolutions
// for the same identifier at the same location.
if allowedRange m then
- if replace then
- capturedNameResolutions.RemoveAll(fun cnr -> cnr.Range = m) |> ignore
- capturedMethodGroupResolutions.RemoveAll(fun cnr -> cnr.Range = m) |> ignore
+ if replace then
+ capturedNameResolutions.RemoveAll(fun cnr -> Range.equals cnr.Range m) |> ignore
+ capturedMethodGroupResolutions.RemoveAll(fun cnr -> Range.equals cnr.Range m) |> ignore
else
let alreadyDone =
match item with
@@ -1610,7 +1615,7 @@ type TcResultsSinkImpl(g, ?source: string) =
member sink.NotifyOpenDeclaration(openDeclaration) =
capturedOpenDeclarations.Add(openDeclaration)
- member sink.CurrentSource = source
+ member sink.CurrentSourceText = sourceText
member sink.FormatStringCheckContext = formatStringCheckContext.Value
@@ -1847,7 +1852,7 @@ let rec ResolveLongIndentAsModuleOrNamespace sink atMostOne amap m first fullyQu
let mutable moduleNotFoundErrorCache = None
let moduleNotFound (modref: ModuleOrNamespaceRef) (mty: ModuleOrNamespaceType) (id: Ident) depth =
match moduleNotFoundErrorCache with
- | Some (oldId, error) when oldId = id.idRange -> error
+ | Some (oldId, error) when Range.equals oldId id.idRange -> error
| _ ->
let suggestNames() =
mty.ModulesAndNamespacesByDemangledName
@@ -2607,7 +2612,7 @@ let rec ResolveExprLongIdentPrim sink (ncenv: NameResolver) first fullyQualified
} |> HashSet
match innerSearch with
- | Exception (UndefinedName(0, _, id1, suggestionsF)) when id.idRange = id1.idRange ->
+ | Exception (UndefinedName(0, _, id1, suggestionsF)) when Range.equals id.idRange id1.idRange ->
let mergeSuggestions() =
let res = suggestEverythingInScope()
res.UnionWith(suggestionsF())
@@ -3295,7 +3300,7 @@ let ResolveLongIdentAsExprAndComputeRange (sink: TcResultsSink) (ncenv: NameReso
match lid with
| [] | [_] -> false
| head :: ids ->
- ids |> List.forall (fun id -> id.idRange = head.idRange)
+ ids |> List.forall (fun id -> Range.equals id.idRange head.idRange)
let callSink (refinedItem, tpinst) =
if not isFakeIdents then
diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi
index c887aad2fd3..a790947ece4 100755
--- a/src/fsharp/NameResolution.fsi
+++ b/src/fsharp/NameResolution.fsi
@@ -2,7 +2,7 @@
module internal FSharp.Compiler.NameResolution
-open FSharp.Compiler
+open FSharp.Compiler
open FSharp.Compiler.AccessibilityLogic
open FSharp.Compiler.Ast
open FSharp.Compiler.Infos
@@ -14,6 +14,7 @@ open FSharp.Compiler.Tastops
open FSharp.Compiler.TcGlobals
open FSharp.Compiler.AbstractIL.Internal.Library
open FSharp.Compiler.PrettyNaming
+open FSharp.Compiler.Text
/// A NameResolver is a context for name resolution. It primarily holds an InfoReader.
type NameResolver =
@@ -347,7 +348,7 @@ type internal OpenDeclaration =
/// Source text and an array of line end positions, used for format string parsing
type FormatStringCheckContext =
{ /// Source text
- Source: string
+ SourceText: ISourceText
/// Array of line start positions
LineStartPositions: int[] }
@@ -370,7 +371,7 @@ type ITypecheckResultsSink =
abstract NotifyOpenDeclaration : OpenDeclaration -> unit
/// Get the current source
- abstract CurrentSource : string option
+ abstract CurrentSourceText : ISourceText option
/// Cached line-end normalized source text and an array of line end positions, used for format string parsing
abstract FormatStringCheckContext : FormatStringCheckContext option
@@ -379,7 +380,7 @@ type ITypecheckResultsSink =
type internal TcResultsSinkImpl =
/// Create a TcResultsSinkImpl
- new : tcGlobals : TcGlobals * ?source:string -> TcResultsSinkImpl
+ new : tcGlobals : TcGlobals * ?sourceText: ISourceText -> TcResultsSinkImpl
/// Get all the resolutions reported to the sink
member GetResolutions : unit -> TcResolutions
diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs
index 769c3e5c4ae..a3ac283fe13 100644
--- a/src/fsharp/Optimizer.fs
+++ b/src/fsharp/Optimizer.fs
@@ -1808,16 +1808,23 @@ let TryDetectQueryQuoteAndRun cenv (expr: Expr) =
| _ ->
//printfn "Not eliminating because no Run found"
None
+
+let IsILMethodRefDeclaringTypeSystemString (ilg: ILGlobals) (mref: ILMethodRef) =
+ mref.DeclaringTypeRef.Scope.IsAssemblyRef &&
+ mref.DeclaringTypeRef.Scope.AssemblyRef.Name = ilg.typ_String.TypeRef.Scope.AssemblyRef.Name &&
+ mref.DeclaringTypeRef.BasicQualifiedName = ilg.typ_String.BasicQualifiedName
-let IsSystemStringConcatOverload (methRef: ILMethodRef) =
- methRef.Name = "Concat" && methRef.DeclaringTypeRef.FullName = "System.String" &&
- methRef.ReturnType.BasicQualifiedName = "System.String" &&
- methRef.ArgTypes |> List.forall(fun ilty -> ilty.BasicQualifiedName = "System.String")
-
-let IsSystemStringConcatArray (methRef: ILMethodRef) =
- methRef.Name = "Concat" && methRef.DeclaringTypeRef.FullName = "System.String" &&
- methRef.ReturnType.BasicQualifiedName = "System.String" &&
- methRef.ArgTypes.Length = 1 && methRef.ArgTypes.Head.BasicQualifiedName = "System.String[]"
+let IsILMethodRefSystemStringConcatOverload (ilg: ILGlobals) (mref: ILMethodRef) =
+ IsILMethodRefDeclaringTypeSystemString ilg mref &&
+ mref.Name = "Concat" &&
+ mref.ReturnType.BasicQualifiedName = ilg.typ_String.BasicQualifiedName &&
+ mref.ArgCount >= 2 && mref.ArgCount <= 4 && mref.ArgTypes |> List.forall(fun ilty -> ilty.BasicQualifiedName = ilg.typ_String.BasicQualifiedName)
+
+let IsILMethodRefSystemStringConcatArray (ilg: ILGlobals) (mref: ILMethodRef) =
+ IsILMethodRefDeclaringTypeSystemString ilg mref &&
+ mref.Name = "Concat" &&
+ mref.ReturnType.BasicQualifiedName = ilg.typ_String.BasicQualifiedName &&
+ mref.ArgCount = 1 && mref.ArgTypes.Head.BasicQualifiedName = "System.String[]"
/// Optimize/analyze an expression
let rec OptimizeExpr cenv (env: IncrementalOptimizationEnv) expr =
@@ -1944,10 +1951,10 @@ and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) =
and MakeOptimizedSystemStringConcatCall cenv env m args =
let rec optimizeArg argExpr accArgs =
match argExpr, accArgs with
- | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ], _), _ when IsSystemStringConcatArray methRef ->
+ | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ], _), _ when IsILMethodRefSystemStringConcatArray cenv.g.ilg methRef ->
optimizeArgs args accArgs
- | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, args, _), _ when IsSystemStringConcatOverload methRef ->
+ | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, args, _), _ when IsILMethodRefSystemStringConcatOverload cenv.g.ilg mref ->
optimizeArgs args accArgs
// Optimize string constants, e.g. "1" + "2" will turn into "12"
@@ -1977,7 +1984,7 @@ and MakeOptimizedSystemStringConcatCall cenv env m args =
mkStaticCall_String_Concat_Array cenv.g m arg
match expr with
- | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _) as op, tyargs, args, m) when IsSystemStringConcatOverload methRef || IsSystemStringConcatArray methRef ->
+ | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _) as op, tyargs, args, m) when IsILMethodRefSystemStringConcatOverload cenv.g.ilg methRef || IsILMethodRefSystemStringConcatArray cenv.g.ilg methRef ->
OptimizeExprOpReductions cenv env (op, tyargs, args, m)
| _ ->
OptimizeExpr cenv env expr
@@ -2046,9 +2053,9 @@ and OptimizeExprOp cenv env (op, tyargs, args, m) =
| TOp.ILAsm([], [ty]), _, [a] when typeEquiv cenv.g (tyOfExpr cenv.g a) ty -> OptimizeExpr cenv env a
// Optimize calls when concatenating strings, e.g. "1" + "2" + "3" + "4" .. etc.
- | TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ] when IsSystemStringConcatArray methRef ->
+ | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ] when IsILMethodRefSystemStringConcatArray cenv.g.ilg mref ->
MakeOptimizedSystemStringConcatCall cenv env m args
- | TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, args when IsSystemStringConcatOverload methRef ->
+ | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, args when IsILMethodRefSystemStringConcatOverload cenv.g.ilg mref ->
MakeOptimizedSystemStringConcatCall cenv env m args
| _ ->
diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs
index 0f4bf494cae..4ee9dc12121 100644
--- a/src/fsharp/PatternMatchCompilation.fs
+++ b/src/fsharp/PatternMatchCompilation.fs
@@ -1350,7 +1350,7 @@ let rec CompilePattern g denv amap exprm matchm warnOnUnused actionOnFailure (o
// If the remainder of the match boiled away to nothing interesting.
// We measure this simply by seeing if the range of the resulting expression is identical to matchm.
let spTarget =
- if expr.Range = matchm then SuppressSequencePointAtTarget
+ if Range.equals expr.Range matchm then SuppressSequencePointAtTarget
else SequencePointAtTarget
// Make the clause that represents the remaining cases of the pattern match
diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs
index df39365b1de..62528b1da7f 100644
--- a/src/fsharp/TastOps.fs
+++ b/src/fsharp/TastOps.fs
@@ -1775,7 +1775,8 @@ let isRefTy g ty =
isFunTy g ty ||
isReprHiddenTy g ty ||
isFSharpObjModelRefTy g ty ||
- isUnitTy g ty
+ isUnitTy g ty ||
+ (isAnonRecdTy g ty && not (isStructAnonRecdTy g ty))
)
// ECMA C# LANGUAGE SPECIFICATION, 27.2
diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs
old mode 100755
new mode 100644
index d1b44c792f8..b92148dc582
--- a/src/fsharp/TastPickle.fs
+++ b/src/fsharp/TastPickle.fs
@@ -122,6 +122,7 @@ type WriterState =
onlerefs: Table
osimpletys: Table
oglobals : TcGlobals
+ mutable isStructThisArgPos : bool
ofile : string
/// Indicates if we are using in-memory format, where we store XML docs as well
oInMem : bool
@@ -778,7 +779,8 @@ let pickleObjWithDanglingCcus inMem file g scope p x =
osimpletys=Table<_>.Create "osimpletys"
oglobals=g
ofile=file
- oInMem=inMem }
+ oInMem=inMem
+ isStructThisArgPos = false}
p x st1
let sizes =
st1.oentities.Size,
@@ -802,7 +804,8 @@ let pickleObjWithDanglingCcus inMem file g scope p x =
osimpletys=Table<_>.Create "osimpletys (fake)"
oglobals=g
ofile=file
- oInMem=inMem }
+ oInMem=inMem
+ isStructThisArgPos = false }
p_array p_encoded_ccuref ccuNameTab.AsArray st2
// Add a 4th integer indicated by a negative 1st integer
let z1 = if nanoninfos > 0 then -ntycons-1 else ntycons
diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs
index 6c47f4e262c..48c3ea31ebd 100755
--- a/src/fsharp/TypeChecker.fs
+++ b/src/fsharp/TypeChecker.fs
@@ -671,22 +671,22 @@ let ShrinkContext env oldRange newRange =
| ContextInfo.SequenceExpression _ ->
env
| ContextInfo.CollectionElement (b,m) ->
- if m <> oldRange then env else
+ if not (Range.equals m oldRange) then env else
{ env with eContextInfo = ContextInfo.CollectionElement(b,newRange) }
| ContextInfo.FollowingPatternMatchClause m ->
- if m <> oldRange then env else
+ if not (Range.equals m oldRange) then env else
{ env with eContextInfo = ContextInfo.FollowingPatternMatchClause newRange }
| ContextInfo.PatternMatchGuard m ->
- if m <> oldRange then env else
+ if not (Range.equals m oldRange) then env else
{ env with eContextInfo = ContextInfo.PatternMatchGuard newRange }
| ContextInfo.IfExpression m ->
- if m <> oldRange then env else
+ if not (Range.equals m oldRange) then env else
{ env with eContextInfo = ContextInfo.IfExpression newRange }
| ContextInfo.OmittedElseBranch m ->
- if m <> oldRange then env else
+ if not (Range.equals m oldRange) then env else
{ env with eContextInfo = ContextInfo.OmittedElseBranch newRange }
| ContextInfo.ElseBranchResult m ->
- if m <> oldRange then env else
+ if not (Range.equals m oldRange) then env else
{ env with eContextInfo = ContextInfo.ElseBranchResult newRange }
/// Optimized unification routine that avoids creating new inference
@@ -1870,7 +1870,7 @@ let MakeAndPublishSimpleVals cenv env m names mergeNamesInOneNameresEnv =
member this.NotifyExprHasType(_, _, _, _, _, _) = assert false // no expr typings in MakeSimpleVals
member this.NotifyFormatSpecifierLocation(_, _) = ()
member this.NotifyOpenDeclaration(_) = ()
- member this.CurrentSource = None
+ member this.CurrentSourceText = None
member this.FormatStringCheckContext = None }
use _h = WithNewTypecheckResultsSink(sink, cenv.tcSink)
@@ -6925,7 +6925,7 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr
let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors
let haveCtor = Option.isSome inherits
- let optOrigExprInfo, tpenv =
+ let optOrigExpr, tpenv =
match optOrigExpr with
| None -> None, tpenv
| Some (origExpr, _) ->
@@ -6933,10 +6933,9 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr
| Some (_, _, mInherits, _, _) -> error(Error(FSComp.SR.tcInvalidRecordConstruction(), mInherits))
| None ->
let olde, tpenv = TcExpr cenv overallTy env tpenv origExpr
- let oldvaddr, oldvaddre = mkCompGenLocal mWholeExpr "inputRecord" (if isStructTy cenv.g overallTy then mkByrefTy cenv.g overallTy else overallTy)
- Some (olde, oldvaddr, oldvaddre), tpenv
+ Some (olde), tpenv
- let hasOrigExpr = optOrigExprInfo.IsSome
+ let hasOrigExpr = optOrigExpr.IsSome
let fldsList =
let flds =
@@ -6963,6 +6962,13 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr
| Some v -> yield n, v
| None -> () ]
+ let optOrigExprInfo =
+ match optOrigExpr with
+ | None -> None
+ | Some(olde) ->
+ let oldvaddr, oldvaddre = mkCompGenLocal mWholeExpr "inputRecord" (if isStructTy cenv.g overallTy then mkByrefTy cenv.g overallTy else overallTy)
+ Some(olde, oldvaddr, oldvaddre)
+
if hasOrigExpr && not (isRecdTy cenv.g overallTy) then
errorR(Error(FSComp.SR.tcExpressionFormRequiresRecordTypes(), mWholeExpr))
@@ -11626,7 +11632,7 @@ and AnalyzeAndMakeAndPublishRecursiveValue overridesOK isGeneratedEventVal cenv
// Suppress hover tip for "get" and "set" at property definitions, where toolId <> bindingId
match toolIdOpt with
- | Some tid when not tid.idRange.IsSynthetic && tid.idRange <> bindingId.idRange ->
+ | Some tid when not tid.idRange.IsSynthetic && not (Range.equals tid.idRange bindingId.idRange) ->
let item = Item.Value (mkLocalValRef vspec)
CallNameResolutionSink cenv.tcSink (tid.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.RelatedText, env.DisplayEnv, env.eAccessRights)
| _ -> ()
diff --git a/src/fsharp/UnicodeLexing.fs b/src/fsharp/UnicodeLexing.fs
index f484a5f1a80..bb1c26dabf2 100644
--- a/src/fsharp/UnicodeLexing.fs
+++ b/src/fsharp/UnicodeLexing.fs
@@ -6,7 +6,7 @@ module internal FSharp.Compiler.UnicodeLexing
// Functions for Unicode char-based lexing (new code).
//
-open FSharp.Compiler.AbstractIL.Internal.Library
+open FSharp.Compiler.AbstractIL.Internal.Library
open Internal.Utilities
open System.IO
@@ -19,6 +19,9 @@ let StringAsLexbuf (s:string) : Lexbuf =
let FunctionAsLexbuf (bufferFiller: char[] * int * int -> int) : Lexbuf =
LexBuffer<_>.FromFunction bufferFiller
+
+let SourceTextAsLexbuf sourceText =
+ LexBuffer.FromSourceText(sourceText)
// The choice of 60 retries times 50 ms is not arbitrary. The NTFS FILETIME structure
// uses 2 second resolution for LastWriteTime. We retry long enough to surpass this threshold
diff --git a/src/fsharp/UnicodeLexing.fsi b/src/fsharp/UnicodeLexing.fsi
index 9f02c3e1972..7c0f0fb68d5 100644
--- a/src/fsharp/UnicodeLexing.fsi
+++ b/src/fsharp/UnicodeLexing.fsi
@@ -2,6 +2,7 @@
module internal FSharp.Compiler.UnicodeLexing
+open FSharp.Compiler.Text
open Microsoft.FSharp.Text
open Internal.Utilities.Text.Lexing
@@ -9,3 +10,4 @@ type Lexbuf = LexBuffer
val internal StringAsLexbuf : string -> Lexbuf
val public FunctionAsLexbuf : (char [] * int * int -> int) -> Lexbuf
val public UnicodeFileAsLexbuf :string * int option * (*retryLocked*) bool -> Lexbuf
+val public SourceTextAsLexbuf : ISourceText -> Lexbuf
diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs
index 1babf797800..9a3018d096c 100644
--- a/src/fsharp/fsc.fs
+++ b/src/fsharp/fsc.fs
@@ -142,11 +142,12 @@ type InProcErrorLoggerProvider() =
member this.HandleTooManyErrors(text) = warnings.Add(Diagnostic.Short(false, text))
- member this.HandleIssue(tcConfigBuilder, err, isError) =
- let errs =
+ member this.HandleIssue(tcConfigBuilder, err, isError) =
+ // 'true' is passed for "suggestNames", since we want to suggest names with fsc.exe runs and this doesn't affect IDE perf
+ let errs =
CollectDiagnostic
- (tcConfigBuilder.implicitIncludeDir, tcConfigBuilder.showFullPaths,
- tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, isError, err)
+ (tcConfigBuilder.implicitIncludeDir, tcConfigBuilder.showFullPaths,
+ tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, isError, err, true)
let container = if isError then errors else warnings
container.AddRange(errs) }
:> ErrorLogger }
@@ -227,10 +228,10 @@ let AdjustForScriptCompile(ctok, tcConfigB: TcConfigBuilder, commandLineSourceFi
// Record the references from the analysis of the script. The full resolutions are recorded as the corresponding #I paths used to resolve them
// are local to the scripts and not added to the tcConfigB (they are added to localized clones of the tcConfigB).
- let references =
- closure.References
- |> List.collect snd
- |> List.filter (fun r -> r.originalReference.Range<>range0 && r.originalReference.Range<>rangeStartup)
+ let references =
+ closure.References
+ |> List.collect snd
+ |> List.filter (fun r -> not (Range.equals r.originalReference.Range range0) && not (Range.equals r.originalReference.Range rangeStartup))
references |> List.iter (fun r -> tcConfigB.AddReferencedAssemblyByPath(r.originalReference.Range, r.resolvedPath))
closure.NoWarns |> List.collect (fun (n, ms) -> ms|>List.map(fun m->m, n)) |> List.iter (fun (x,m) -> tcConfigB.TurnWarningOff(x, m))
diff --git a/src/fsharp/fsc/app.config b/src/fsharp/fsc/app.config
index 80d85763659..68fff88101e 100644
--- a/src/fsharp/fsc/app.config
+++ b/src/fsharp/fsc/app.config
@@ -6,7 +6,7 @@
-
+
diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj
index 581b4a11797..8ddb082c56a 100644
--- a/src/fsharp/fsc/fsc.fsproj
+++ b/src/fsharp/fsc/fsc.fsproj
@@ -4,17 +4,16 @@
Exe
- net46;netcoreapp2.1
+ net472;netcoreapp2.1netcoreapp2.1.exe$(NoWarn);45;55;62;75;1204true$(OtherFlags) --maxerrors:20 --extraoptimizationloops:1
- truetrue
-
+ x86
diff --git a/src/fsharp/fsi/app.config b/src/fsharp/fsi/app.config
index e6feb514fab..818ebc93b43 100644
--- a/src/fsharp/fsi/app.config
+++ b/src/fsharp/fsi/app.config
@@ -5,7 +5,7 @@
-
+
diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs
index 59c39c77b85..5cf9f24641f 100644
--- a/src/fsharp/fsi/fsi.fs
+++ b/src/fsharp/fsi/fsi.fs
@@ -48,6 +48,7 @@ open FSharp.Compiler.TypeChecker
open FSharp.Compiler.Tast
open FSharp.Compiler.Tastops
open FSharp.Compiler.TcGlobals
+open FSharp.Compiler.Text
open FSharp.Compiler.SourceCodeServices
open FSharp.Compiler.ReferenceResolver
@@ -2321,7 +2322,7 @@ type internal FsiInteractionProcessor
let tcConfig = TcConfig.Create(tcConfigB,validate=false)
let fsiInteractiveChecker = FsiInteractiveChecker(legacyReferenceResolver, checker, tcConfig, istate.tcGlobals, istate.tcImports, istate.tcState)
- fsiInteractiveChecker.ParseAndCheckInteraction(ctok, text)
+ fsiInteractiveChecker.ParseAndCheckInteraction(ctok, SourceText.ofString text)
//----------------------------------------------------------------------------
@@ -2560,7 +2561,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i
| Choice2Of2 None -> Choice2Of2 (System.Exception "Operation could not be completed due to earlier error")
| Choice2Of2 (Some userExn) -> Choice2Of2 userExn
- userRes, ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs)
+ // 'true' is passed for "suggestNames" because we want the FSI session to suggest names for misspellings and it won't affect IDE perf much
+ userRes, ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs, true)
let dummyScriptFileName = "input.fsx"
diff --git a/src/fsharp/fsi/fsi.fsproj b/src/fsharp/fsi/fsi.fsproj
index 77a9274a1e6..a7bafddfded 100644
--- a/src/fsharp/fsi/fsi.fsproj
+++ b/src/fsharp/fsi/fsi.fsproj
@@ -4,18 +4,17 @@
Exe
- net46;netcoreapp2.1
+ net472;netcoreapp2.1netcoreapp2.1.exe$(NoWarn);45;55;62;75;1204true$(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1fsi.res
- truetrue
-
+ x86$(DefineConstants);FSI_SHADOW_COPY_REFERENCES;FSI_SERVER
@@ -31,14 +30,11 @@
-
-
-
-
-
+
+
-
+
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf
index 98419003261..2567d3f26f2 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf
@@ -1,4 +1,4 @@
-
+
@@ -264,7 +264,7 @@
Prevents references from being locked by the F# Interactive process
- Znemožňuje zamknutí referencí procesem nástroje F# Interactive.
+ Znemožňuje zamknutí referencí interaktivním procesem jazyka F#.
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf
index 93303b279f6..6c4abe48cce 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf
@@ -1,4 +1,4 @@
-
+
@@ -134,7 +134,7 @@
\n\nException raised during pretty printing.\nPlease report this so it can be fixed.\nTrace: {0}\n
- \n\nAusnahme beim Schöndruck.\nMelden Sie dies, damit das Problem behoben werden kann.\nAblaufverfolgung: {0}\n
+ \n\nAusnahme bei der automatischen Strukturierung und Einrückung.\nMelden Sie dies, damit das Problem behoben werden kann.\nAblaufverfolgung: {0}\n
@@ -264,7 +264,7 @@
Prevents references from being locked by the F# Interactive process
- Verhindert, dass Verweise vom F# Interactive-Prozess gesperrt werden
+ Verhindert, dass Verweise vom interaktiven Prozess F# gesperrt werden
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf
index 6b25550fed5..a43b278bb13 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -99,7 +99,7 @@
A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'.
- Se produjo un problema al iniciar el proceso de F# interactivo. Esto puede deberse a un problema conocido de compatibilidad de la consola de procesos en segundo plano con aplicaciones habilitadas para Unicode en algunos sistemas Windows. Pruebe lo siguiente: seleccione Herramientas->Opciones->F# interactivo para Visual Studio y escriba “--fsi-server-no-unicode”.
+ Se produjo un problema al iniciar el proceso de F# interactivo. Esto puede deberse a un problema conocido de compatibilidad de la consola de procesos en segundo plano con aplicaciones habilitadas para Unicode en algunos sistemas Windows. Pruebe lo siguiente: seleccione Herramientas->Opciones->F# interactivo para Visual Studio y escriba '--fsi-server-no-unicode'.
@@ -139,7 +139,7 @@
F# Interactive directives:
- Directivas de F# interactivo:
+ Directivas de F#:
@@ -214,7 +214,7 @@
--> Referenced '{0}' (file may be locked by F# Interactive process)
- --> “{0}” al que se hace referencia (el archivo puede estar bloqueado por un proceso de F# interactivo)
+ --> '{0}' al que se hace referencia (el archivo puede estar bloqueado por un proceso de F# interactivo)
@@ -259,7 +259,7 @@
F# Interactive for F# {0}
- F# interactivo para F# {0}
+ F# Interactive para F# {0}
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf
index b69c71103d4..57ed7d784ed 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -134,7 +134,7 @@
\n\nException raised during pretty printing.\nPlease report this so it can be fixed.\nTrace: {0}\n
- \n\nException déclenchée durant l'impression automatique.\nSignalez ce problème afin qu'il soit corrigé.\nTrace : {0}\n
+ \n\nException déclenchée pendant le listing en mode Pretty. \nSignalez ce problème afin qu'il soit corrigé.\nTrace : {0}\n
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf
index 51a94aabb2a..d7f05d6aa96 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf
index 0751b4601e4..060deb12475 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf
@@ -99,7 +99,7 @@
A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'.
- F# インタラクティブのプロセスの開始中に問題が発生しました。この原因は、一部の Windows システム上での Unicode 対応アプリケーションのバックグラウンド プロセス コンソールのサポートに関する既知の問題にある可能性があります。[ツール]5D; の [オプション]5D; から [F# Interactive for Visual Studio]5D; を選択し、「--fsi-server-no-unicode」と入力してください。
+ F# Interactive のプロセスの開始中に問題が発生しました。この原因は、一部の Windows システム上での Unicode 対応アプリケーションのバックグラウンド プロセス コンソールのサポートに関する既知の問題にある可能性があります。[ツール]5D; の [オプション]5D; から [F# Interactive for Visual Studio]5D; を選択し、「--fsi-server-no-unicode」と入力してください。
@@ -214,7 +214,7 @@
--> Referenced '{0}' (file may be locked by F# Interactive process)
- --> '{0}' を参照しました (ファイルが F# インタラクティブのプロセスによってロックされている可能性があります)
+ --> '{0}' を参照しました (ファイルが F# Interactive のプロセスによってロックされている可能性があります)
@@ -259,12 +259,12 @@
F# Interactive for F# {0}
- F# {0} の F# インタラクティブ
+ F# {0} の F# InteractivePrevents references from being locked by the F# Interactive process
- 参照が F# インタラクティブ プロセスによってロックされないようにします。
+ 参照が F# 対話型プロセスによってロックされないようにします。
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf
index 5d0b2017d62..b6af609a2a2 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -99,7 +99,7 @@
A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'.
- F# 대화형 프로세스를 시작하는 동안 오류가 발생했습니다. 일부 Windows 시스템에서 나타나는 유니코드 기반 응용 프로그램의 백그라운드 프로세스 콘솔 지원과 관련된 알려진 문제가 원인일 수 있습니다. [도구]5D;->[옵션]5D;->[Visual Studio용 F# 대화형]5D;를 선택하고 '--fsi-server-no-unicode'를 입력해 보세요.
+ F# 대화형 프로세스를 시작하는 동안 오류가 발생했습니다. 일부 Windows 시스템에서 나타나는 유니코드 기반 애플리케이션의 백그라운드 프로세스 콘솔 지원과 관련된 알려진 문제가 원인일 수 있습니다. [도구]->[옵션]->[Visual Studio용 F# 대화형]를 선택하고 '--fsi-server-no-unicode'를 입력해 보세요.
@@ -174,7 +174,7 @@
F# Interactive command line options:
- F# 대화형 명령줄 옵션:
+ F# Interactive 명령줄 옵션:
@@ -254,7 +254,7 @@
Microsoft (R) F# Interactive version {0}
- Microsoft (R) F# 대화형 버전 {0}
+ Microsoft (R) F# Interactive 버전 {0}
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf
index f6b3de9b345..82960cad8fd 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf
index 70a3636f04a..41c3148c356 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
@@ -99,7 +99,7 @@
A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'.
- Um problema ocorreu na inicialização do processo F# Interativo. Isto pode ter ocorrido devido a um problema conhecido com processo de fundo do console de apoio pelo aplicativos habilitados Unicode em alguns sistemas do Windows. Tente Ferramentas->Opções->F# Interativo para Visual Studio e insira '--fsi-server-no-unicode'.
+ Um problema ocorreu na inicialização do processo interativo #F. Isto pode ter ocorrido devido a um problema conhecido com processo de fundo do console de apoio pelo aplicativos habilitados Unicode em alguns sistemas do Windows. Tente Ferramentas->Opções->Interativo F# para Visual Studio e insira '--fsi-server-no-unicode'.
@@ -134,7 +134,7 @@
\n\nException raised during pretty printing.\nPlease report this so it can be fixed.\nTrace: {0}\n
- \n\nExceção levantadas durante a reformatação automática.\nReporte esta exceção para ela que possa ser corrigida.\nRastrear: {0}\n
+ \n\nExceção levantada durante a reformatação automática.\nReporte esta exceção para ela que possa ser corrigida.\nRastrear: {0}\n
@@ -264,7 +264,7 @@
Prevents references from being locked by the F# Interactive process
- Impede que as referências sejam bloqueadas pelo processo de F# Interativo
+ Impede que as referências sejam bloqueadas pelo processo de F# interativo
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf
index de3a08eed18..0de5c8a5277 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf
@@ -1,4 +1,4 @@
-
+
@@ -189,7 +189,7 @@
\n- Interrupt\n
- \n- Interrupt\n
+ \n- Прерывать\n
@@ -264,7 +264,7 @@
Prevents references from being locked by the F# Interactive process
- Предотвращает блокировку ссылок процессом F# Interactive.
+ Предотвращает блокировку ссылок интерактивным процессом F#.
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf
index 35bd3478f9b..2a499f85b8e 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -99,7 +99,7 @@
A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'.
- F# Etkileşimli işlemi başlatılırken bir sorun oluştu. Bu durum, bazı Windows sistemlerindeki Unicode kullanan uygulamalara yönelik arka plan işlemi konsol desteğinde bilinen bir soruna bağlı olabilir. Visual Studio için Araçlar->Seçenekler->F# Etkileşimli'yi seçmeyi deneyin ve '--fsi-server-no-unicode' girin.
+ F# Interactive işlemi başlatılırken bir sorun oluştu. Bu durum, bazı Windows sistemlerindeki Unicode kullanan uygulamalara yönelik arka plan işlemi konsol desteğinde bilinen bir soruna bağlı olabilir. Visual Studio için Araçlar->Seçenekler->F# Interactive'i seçmeyi deneyin ve '--fsi-server-no-unicode' girin.
@@ -139,7 +139,7 @@
F# Interactive directives:
- F# Etkileşimli yönergeleri:
+ F# Interactive yönergeleri:
@@ -214,7 +214,7 @@
--> Referenced '{0}' (file may be locked by F# Interactive process)
- --> '{0}' öğesine başvuruldu (dosya F# Etkileşimli işlemi tarafından kilitlenmiş olabilir)
+ --> '{0}' öğesine başvuruldu (dosya F# Interactive işlemi tarafından kilitlenmiş olabilir)
@@ -254,12 +254,12 @@
Microsoft (R) F# Interactive version {0}
- Microsoft (R) F# Etkileşimli sürüm {0}
+ Microsoft (R) F# Interactive sürüm {0}F# Interactive for F# {0}
- F# {0} için F# Etkileşimli
+ F# {0} için F# Interactive
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf
index 6089715c683..5d81aa592b0 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf
@@ -99,7 +99,7 @@
A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'.
- 启动 F# 交互窗口进程时发生问题。此情况可能是由一个已知问题导致的,即某些 Windows 系统上的后台进程控制台不支持启用了 Unicode 的应用程序。请尝试选择“工具”->“选项”->“适用于 Visual Studio 的 F# 交互窗口”,然后输入“--fsi-server-no-unicode”。
+ 启动 F# 交互进程时发生问题。此情况可能是由一个已知问题导致的,即某些 Windows 系统上的后台进程控制台不支持启用了 Unicode 的应用程序。请尝试选择“工具”->“选项”->“F# 交互 for Visual Studio”,然后输入“--fsi-server-no-unicode”。
@@ -174,7 +174,7 @@
F# Interactive command line options:
- F# 交互窗口命令行选项:
+ F# 交互命令行选项:
@@ -214,7 +214,7 @@
--> Referenced '{0}' (file may be locked by F# Interactive process)
- --> 已引用“{0}”(文件可能由 F# 交互窗口进程锁定)
+ --> 已引用“{0}”(文件可能由 F# 交互进程锁定)
@@ -254,7 +254,7 @@
Microsoft (R) F# Interactive version {0}
- Microsoft(R) F# 交互窗口版本 {0}
+ Microsoft(R) F# 交互版本 {0}
@@ -264,7 +264,7 @@
Prevents references from being locked by the F# Interactive process
- 防止引用被 F# 交互窗口进程锁定
+ 防止引用被 F# 交互式进程锁定
diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf
index 1752c12240a..295ea674957 100644
--- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf
+++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf
@@ -99,7 +99,7 @@
A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'.
- 啟動 F# 互動處理序時發生問題。這可能是因為背景處理序主控台對於支援某些 Windows 系統上具備 Unicode 支援功能之應用程式的已知問題所造成。請嘗試選取 [工具]5D; -> [選項]5D; -> [F# Interactive for Visual Studio]5D;,然後輸入 '--fsi-server-no-unicode'。
+ 啟動 F# Interactive 處理序時發生問題。這可能是因為背景處理序主控台對於支援某些 Windows 系統上具備 Unicode 支援功能之應用程式的已知問題所造成。請嘗試選取 [工具]5D; -> [選項]5D; -> [F# Interactive for Visual Studio]5D;,然後輸入 '--fsi-server-no-unicode'。
@@ -139,7 +139,7 @@
F# Interactive directives:
- F# 互動指示詞:
+ F# Interactive 指示詞:
@@ -174,7 +174,7 @@
F# Interactive command line options:
- F# 互動命令列選項:
+ F# Interactive 命令列選項:
@@ -214,7 +214,7 @@
--> Referenced '{0}' (file may be locked by F# Interactive process)
- --> 參考的 '{0}' (檔案可能已被 F# 互動處理序鎖定)
+ --> 參考的 '{0}' (檔案可能已被 F# Interactive 處理序鎖定)
@@ -264,7 +264,7 @@
Prevents references from being locked by the F# Interactive process
- 避免參考遭 F# 互動處理序封鎖
+ 避免參考遭 F# 互動式處理序封鎖
diff --git a/src/fsharp/fsiAnyCpu/app.config b/src/fsharp/fsiAnyCpu/app.config
index a7514bd602e..6e8f1eb9084 100644
--- a/src/fsharp/fsiAnyCpu/app.config
+++ b/src/fsharp/fsiAnyCpu/app.config
@@ -6,7 +6,7 @@
-
+
diff --git a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj
index b310a33b43c..0c81d84e268 100644
--- a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj
+++ b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj
@@ -4,14 +4,13 @@
Exe
- net46
+ net472AnyCPU.exe$(NoWarn);45;55;62;75;1204true$(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1..\fsi\fsi.res
- truetrue
diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy
index 1a7afd753f8..a769fc979c4 100644
--- a/src/fsharp/pars.fsy
+++ b/src/fsharp/pars.fsy
@@ -3834,7 +3834,7 @@ parenExpr:
| LPAREN parenExprBody ends_other_than_rparen_coming_soon_or_recover
{ if not $3 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen())
- let lhsm = unionRangeWithPos (rhs parseState 1) (rhs parseState 3).Start
+ let lhsm = unionRangeWithPos (rhs parseState 1) (rhs parseState 2).End
SynExpr.Paren(exprFromParseError ($2 lhsm), rhs parseState 1, None, lhsm) }
| LPAREN error rparen
@@ -3857,9 +3857,9 @@ parenExpr:
arbExpr("parenExpr2rbcs", lhsm) }
| LPAREN OBLOCKEND_COMING_SOON
- { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen())
- let lhsm = unionRangeWithPos (rhs parseState 1) (rhs parseState 2).Start
- arbExpr("parenExpr2obecs", lhsm) }
+ { let lparenRange = (rhs parseState 1)
+ reportParseErrorAt lparenRange (FSComp.SR.parsUnmatchedParen())
+ SynExpr.Paren(arbExpr("parenExpr2obecs", lparenRange.EndRange), lparenRange, None, lparenRange) }
| LPAREN recover %prec prec_atomexpr_lparen_error
{ reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen())
diff --git a/src/fsharp/range.fs b/src/fsharp/range.fs
index 2bf3f17f613..c393b31ead2 100755
--- a/src/fsharp/range.fs
+++ b/src/fsharp/range.fs
@@ -271,6 +271,9 @@ type range(code1:int64, code2: int64) =
let mkRange filePath startPos endPos = range (fileIndexOfFileAux true filePath, startPos, endPos)
+let equals (r1: range) (r2: range) =
+ r1.Code1 = r2.Code1 && r1.Code2 = r2.Code2
+
let mkFileIndexRange fileIndex startPos endPos = range (fileIndex, startPos, endPos)
let posOrder = Order.orderOn (fun (p:pos) -> p.Line, p.Column) (Pair.order (Int32.order, Int32.order))
diff --git a/src/fsharp/range.fsi b/src/fsharp/range.fsi
index 5da9bee549a..6bc7ddf5b7d 100755
--- a/src/fsharp/range.fsi
+++ b/src/fsharp/range.fsi
@@ -98,6 +98,8 @@ val mkFileIndexRange : FileIndex -> pos -> pos -> range
/// This view hides the use of file indexes and just uses filenames
val mkRange : string -> pos -> pos -> range
+val equals : range -> range -> bool
+
/// Reduce a range so it only covers a line
val trimRangeToLine : range -> range
diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs
index c372fa2d8fc..9548dfa1ecc 100755
--- a/src/fsharp/service/IncrementalBuild.fs
+++ b/src/fsharp/service/IncrementalBuild.fs
@@ -1730,17 +1730,16 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput
/// CreateIncrementalBuilder (for background type checking). Note that fsc.fs also
/// creates an incremental builder used by the command line compiler.
- static member TryCreateBackgroundBuilderForProjectOptions
- (ctok, legacyReferenceResolver, defaultFSharpBinariesDir,
- frameworkTcImportsCache: FrameworkImportsCache,
- loadClosureOpt: LoadClosure option,
- sourceFiles: string list,
- commandLineArgs: string list,
- projectReferences, projectDirectory,
- useScriptResolutionRules, keepAssemblyContents,
- keepAllBackgroundResolutions, maxTimeShareMilliseconds,
- tryGetMetadataSnapshot) =
-
+ static member TryCreateBackgroundBuilderForProjectOptions
+ (ctok, legacyReferenceResolver, defaultFSharpBinariesDir,
+ frameworkTcImportsCache: FrameworkImportsCache,
+ loadClosureOpt: LoadClosure option,
+ sourceFiles: string list,
+ commandLineArgs: string list,
+ projectReferences, projectDirectory,
+ useScriptResolutionRules, keepAssemblyContents,
+ keepAllBackgroundResolutions, maxTimeShareMilliseconds,
+ tryGetMetadataSnapshot, suggestNamesForErrors) =
let useSimpleResolutionSwitch = "--simpleresolution"
cancellable {
@@ -1868,7 +1867,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput
errorLogger.GetErrors() |> Array.map (fun (d, severity) -> d, severity = FSharpErrorSeverity.Error)
| _ ->
Array.ofList delayedLogger.Diagnostics
- |> Array.map (fun (d, isError) -> FSharpErrorInfo.CreateFromException(d, isError, range.Zero))
+ |> Array.map (fun (d, isError) -> FSharpErrorInfo.CreateFromException(d, isError, range.Zero, suggestNamesForErrors))
return builderOpt, diagnostics
}
diff --git a/src/fsharp/service/IncrementalBuild.fsi b/src/fsharp/service/IncrementalBuild.fsi
index ff117a0a5cb..89d143ca985 100755
--- a/src/fsharp/service/IncrementalBuild.fsi
+++ b/src/fsharp/service/IncrementalBuild.fsi
@@ -162,7 +162,7 @@ type internal IncrementalBuilder =
/// This may be a marginally long-running operation (parses are relatively quick, only one file needs to be parsed)
member GetParseResultsForFile : CompilationThreadToken * filename:string -> Cancellable
- static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot -> Cancellable
+ static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool -> Cancellable
/// Increment the usage count on the IncrementalBuilder by 1. This initial usage count is 0 so immediately after creation
/// a call to KeepBuilderAlive should be made. The returns an IDisposable which will
diff --git a/src/fsharp/service/ServiceErrorResolutionHints.fs b/src/fsharp/service/ServiceErrorResolutionHints.fs
new file mode 100644
index 00000000000..37fbc2ea528
--- /dev/null
+++ b/src/fsharp/service/ServiceErrorResolutionHints.fs
@@ -0,0 +1,14 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace FSharp.Compiler.SourceCodeServices
+
+open System.Collections.Generic
+
+open FSharp.Compiler.ErrorResolutionHints
+
+module ErrorResolutionHints =
+ let getSuggestedNames (namesToCheck: string[]) (unresolvedIdentifier: string) =
+ let res = FilterPredictions (fun () -> HashSet(namesToCheck)) unresolvedIdentifier |> List.map snd
+ match res with
+ | [] -> None
+ | _ -> Some res
\ No newline at end of file
diff --git a/src/fsharp/service/ServiceErrorResolutionHints.fsi b/src/fsharp/service/ServiceErrorResolutionHints.fsi
new file mode 100644
index 00000000000..3677ecd0426
--- /dev/null
+++ b/src/fsharp/service/ServiceErrorResolutionHints.fsi
@@ -0,0 +1,9 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace FSharp.Compiler.SourceCodeServices
+
+/// Exposes the string distance algorithm used to suggest names for mistyped identifiers.
+module ErrorResolutionHints =
+ /// Given a set of names, uses and a string representing an unresolved identifier,
+ /// returns a list of suggested names if there are any feasible candidates.
+ val getSuggestedNames: symbolUses: string[] -> unresolvedIdentifier: string -> string list option
\ No newline at end of file
diff --git a/src/fsharp/service/ServiceNavigation.fs b/src/fsharp/service/ServiceNavigation.fs
index a8538051828..525946190bc 100755
--- a/src/fsharp/service/ServiceNavigation.fs
+++ b/src/fsharp/service/ServiceNavigation.fs
@@ -71,7 +71,10 @@ type FSharpNavigationItems(declarations:FSharpNavigationTopLevelDeclaration[]) =
member x.Declarations = declarations
module NavigationImpl =
- let unionRangesChecked r1 r2 = if r1 = range.Zero then r2 elif r2 = range.Zero then r1 else unionRanges r1 r2
+ let unionRangesChecked r1 r2 =
+ if FSharp.Compiler.Range.equals r1 range.Zero then r2
+ elif FSharp.Compiler.Range.equals r2 range.Zero then r1
+ else unionRanges r1 r2
let rangeOfDecls2 f decls =
match (decls |> List.map (f >> (fun (d:FSharpNavigationDeclarationItem) -> d.bodyRange))) with
diff --git a/src/fsharp/service/ServiceParamInfoLocations.fs b/src/fsharp/service/ServiceParamInfoLocations.fs
index f527e493ba9..926f02d1d0d 100755
--- a/src/fsharp/service/ServiceParamInfoLocations.fs
+++ b/src/fsharp/service/ServiceParamInfoLocations.fs
@@ -83,7 +83,7 @@ module internal NoteworthyParamInfoLocationsImpl =
let inner = traverseSynExpr synExpr
match inner with
| None ->
- if AstTraversal.rangeContainsPosEdgesExclusive parenRange pos then
+ if AstTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then
Found (parenRange.Start, [(parenRange.End, getNamedParamName synExpr)], rpRangeOpt.IsSome), None
else
NotFound, None
@@ -100,7 +100,7 @@ module internal NoteworthyParamInfoLocationsImpl =
let inner = traverseSynExpr synExpr
match inner with
| None ->
- if AstTraversal.rangeContainsPosEdgesExclusive parenRange pos then
+ if AstTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then
let commasAndCloseParen = ((synExprList, commaRanges@[parenRange]) ||> List.map2 (fun e c -> c.End, getNamedParamName e))
let r = Found (parenRange.Start, commasAndCloseParen, rpRangeOpt.IsSome)
r, None
diff --git a/src/fsharp/service/ServiceParseTreeWalk.fs b/src/fsharp/service/ServiceParseTreeWalk.fs
index 40e6580cc8e..6e578113c6a 100755
--- a/src/fsharp/service/ServiceParseTreeWalk.fs
+++ b/src/fsharp/service/ServiceParseTreeWalk.fs
@@ -27,6 +27,8 @@ module public AstTraversal =
// treat ranges as though they are fully open: (,)
let rangeContainsPosEdgesExclusive (m1:range) p = posGt p m1.Start && posGt m1.End p
+ let rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive (m1:range) p = posGt p m1.Start && posGeq m1.End p
+
/// used to track route during traversal AST
[]
type TraverseStep =
diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs
index 7cf4f3fb317..7152dd0c13e 100644
--- a/src/fsharp/service/ServiceXmlDocParser.fs
+++ b/src/fsharp/service/ServiceXmlDocParser.fs
@@ -2,7 +2,9 @@
namespace FSharp.Compiler.SourceCodeServices
-open FSharp.Compiler.AbstractIL.Internal.Library
+open FSharp.Compiler
+open FSharp.Compiler.AbstractIL.Internal.Library
+open FSharp.Compiler.Text
/// Represent an Xml documentation block in source code
type XmlDocable =
@@ -38,10 +40,10 @@ module XmlDocParsing =
| SynPat.InstanceMember _
| SynPat.FromParseError _ -> []
- let getXmlDocablesImpl(sourceCodeLinesOfTheFile: string [], input: ParsedInput option) =
+ let getXmlDocablesImpl(sourceText: ISourceText, input: ParsedInput option) =
let indentOf (lineNum: int) =
let mutable i = 0
- let line = sourceCodeLinesOfTheFile.[lineNum-1] // -1 because lineNum reported by xmldocs are 1-based, but array is 0-based
+ let line = sourceText.GetLineString(lineNum-1) // -1 because lineNum reported by xmldocs are 1-based, but array is 0-based
while i < line.Length && line.Chars(i) = ' ' do
i <- i + 1
i
@@ -184,7 +186,7 @@ module XmlDocComment =
res
module XmlDocParser =
+
/// Get the list of Xml documentation from current source code
- let getXmlDocables (sourceCodeOfTheFile, input) =
- let sourceCodeLinesOfTheFile = String.getLines sourceCodeOfTheFile
- XmlDocParsing.getXmlDocablesImpl (sourceCodeLinesOfTheFile, input)
\ No newline at end of file
+ let getXmlDocables (sourceText: ISourceText, input) =
+ XmlDocParsing.getXmlDocablesImpl (sourceText, input)
\ No newline at end of file
diff --git a/src/fsharp/service/ServiceXmlDocParser.fsi b/src/fsharp/service/ServiceXmlDocParser.fsi
index 128f351e290..03a36a7d241 100644
--- a/src/fsharp/service/ServiceXmlDocParser.fsi
+++ b/src/fsharp/service/ServiceXmlDocParser.fsi
@@ -5,6 +5,7 @@ namespace FSharp.Compiler.SourceCodeServices
open FSharp.Compiler
open FSharp.Compiler.Range
open FSharp.Compiler.Ast
+open FSharp.Compiler.Text
/// Represent an Xml documentation block in source code
type public XmlDocable =
@@ -16,6 +17,7 @@ module public XmlDocComment =
val isBlank : string -> int option
module public XmlDocParser =
+
/// Get the list of Xml documentation from current source code
- val getXmlDocables : sourceCodeOfTheFile : string * input : Ast.ParsedInput option -> XmlDocable list
+ val getXmlDocables : ISourceText * input: Ast.ParsedInput option -> XmlDocable list
\ No newline at end of file
diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs
index 3ca94694558..63d3d667af4 100644
--- a/src/fsharp/service/service.fs
+++ b/src/fsharp/service/service.fs
@@ -14,13 +14,13 @@ open System.Reflection
open System.Text
open Microsoft.FSharp.Core.Printf
-open FSharp.Compiler
+open FSharp.Compiler
open FSharp.Compiler.AbstractIL
open FSharp.Compiler.AbstractIL.IL
open FSharp.Compiler.AbstractIL.ILBinaryReader
open FSharp.Compiler.AbstractIL.Diagnostics
-open FSharp.Compiler.AbstractIL.Internal
-open FSharp.Compiler.AbstractIL.Internal.Library
+open FSharp.Compiler.AbstractIL.Internal
+open FSharp.Compiler.AbstractIL.Internal.Library
open FSharp.Compiler.AccessibilityLogic
open FSharp.Compiler.Ast
@@ -36,12 +36,13 @@ open FSharp.Compiler.Lexhelp
open FSharp.Compiler.Layout
open FSharp.Compiler.Tast
open FSharp.Compiler.Tastops
-open FSharp.Compiler.TcGlobals
+open FSharp.Compiler.TcGlobals
+open FSharp.Compiler.Text
open FSharp.Compiler.Infos
open FSharp.Compiler.InfoReader
open FSharp.Compiler.NameResolution
open FSharp.Compiler.TypeChecker
-open FSharp.Compiler.SourceCodeServices.SymbolHelpers
+open FSharp.Compiler.SourceCodeServices.SymbolHelpers
open Internal.Utilities
open Internal.Utilities.Collections
@@ -1025,7 +1026,7 @@ type TypeCheckInfo
let pos = mkPos line col
let isPosMatch(pos, ar:AssemblyReference) : bool =
let isRangeMatch = (Range.rangeContainsPos ar.Range pos)
- let isNotSpecialRange = (ar.Range <> rangeStartup) && (ar.Range <> range0) && (ar.Range <> rangeCmdArgs)
+ let isNotSpecialRange = not (Range.equals ar.Range rangeStartup) && not (Range.equals ar.Range range0) && not (Range.equals ar.Range rangeCmdArgs)
let isMatch = isRangeMatch && isNotSpecialRange
isMatch
@@ -1465,23 +1466,14 @@ type FSharpParsingOptions =
module internal Parser =
- // We'll need number of lines for adjusting error messages at EOF
- let GetFileInfoForLastLineErrors (source: string) =
- // number of lines in the source file
- let lastLine = (source |> Seq.sumBy (fun c -> if c = '\n' then 1 else 0)) + 1
- // length of the last line
- let lastLineLength = source.Length - source.LastIndexOf("\n",StringComparison.Ordinal) - 1
- lastLine, lastLineLength
-
-
/// Error handler for parsing & type checking while processing a single file
- type ErrorHandler(reportErrors, mainInputFileName, errorSeverityOptions: FSharpErrorSeverityOptions, source) =
+ type ErrorHandler(reportErrors, mainInputFileName, errorSeverityOptions: FSharpErrorSeverityOptions, sourceText: ISourceText, suggestNamesForErrors: bool) =
let mutable options = errorSeverityOptions
let errorsAndWarningsCollector = new ResizeArray<_>()
let mutable errorCount = 0
// We'll need number of lines for adjusting error messages at EOF
- let fileInfo = GetFileInfoForLastLineErrors source
+ let fileInfo = sourceText.GetLastCharacterPosition()
// This function gets called whenever an error happens during parsing or checking
let diagnosticSink sev (exn: PhasedDiagnostic) =
@@ -1495,7 +1487,7 @@ module internal Parser =
else exn
if reportErrors then
let report exn =
- for ei in ErrorHelpers.ReportError (options, false, mainInputFileName, fileInfo, (exn, sev)) do
+ for ei in ErrorHelpers.ReportError (options, false, mainInputFileName, fileInfo, (exn, sev), suggestNamesForErrors) do
errorsAndWarningsCollector.Add ei
if sev = FSharpErrorSeverity.Error then
errorCount <- errorCount + 1
@@ -1541,12 +1533,10 @@ module internal Parser =
let tokenizer = LexFilter.LexFilter(lightSyntaxStatus, options.CompilingFsLib, Lexer.token lexargs true, lexbuf)
tokenizer.Lexer
- // Adding this new-line character at the end of the source seems odd but is required for some unit tests
- // Todo: fix tests
- let addNewLine (source: string) =
- if source.Length = 0 || not (source.[source.Length - 1] = '\n') then source + "\n" else source
+ let createLexbuf sourceText =
+ UnicodeLexing.SourceTextAsLexbuf(sourceText)
- let matchBraces(source, fileName, options: FSharpParsingOptions, userOpName: string) =
+ let matchBraces(sourceText, fileName, options: FSharpParsingOptions, userOpName: string, suggestNamesForErrors: bool) =
let delayedLogger = CapturingErrorLogger("matchBraces")
use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayedLogger)
use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse
@@ -1559,8 +1549,8 @@ module internal Parser =
use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse
let matchingBraces = new ResizeArray<_>()
- Lexhelp.usingLexbufForParsing(UnicodeLexing.StringAsLexbuf(addNewLine source), fileName) (fun lexbuf ->
- let errHandler = ErrorHandler(false, fileName, options.ErrorSeverityOptions, source)
+ Lexhelp.usingLexbufForParsing(createLexbuf sourceText, fileName) (fun lexbuf ->
+ let errHandler = ErrorHandler(false, fileName, options.ErrorSeverityOptions, sourceText, suggestNamesForErrors)
let lexfun = createLexerFunction fileName options lexbuf errHandler
let parenTokensBalance t1 t2 =
match t1, t2 with
@@ -1588,14 +1578,14 @@ module internal Parser =
matchBraces [])
matchingBraces.ToArray()
- let parseFile(source, fileName, options: FSharpParsingOptions, userOpName: string) =
+ let parseFile(sourceText: ISourceText, fileName, options: FSharpParsingOptions, userOpName: string, suggestNamesForErrors: bool) =
Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "parseFile", fileName)
- let errHandler = new ErrorHandler(true, fileName, options.ErrorSeverityOptions, source)
+ let errHandler = new ErrorHandler(true, fileName, options.ErrorSeverityOptions, sourceText, suggestNamesForErrors)
use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _oldLogger -> errHandler.ErrorLogger)
use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse
let parseResult =
- Lexhelp.usingLexbufForParsing(UnicodeLexing.StringAsLexbuf(addNewLine source), fileName) (fun lexbuf ->
+ Lexhelp.usingLexbufForParsing(createLexbuf sourceText, fileName) (fun lexbuf ->
let lexfun = createLexerFunction fileName options lexbuf errHandler
let isLastCompiland =
fileName.Equals(options.LastFileName, StringComparison.CurrentCultureIgnoreCase) ||
@@ -1613,7 +1603,7 @@ module internal Parser =
// Type check a single file against an initial context, gleaning both errors and intellisense information.
let CheckOneFile
(parseResults: FSharpParseFileResults,
- source: string,
+ sourceText: ISourceText,
mainInputFileName: string,
projectFileName: string,
tcConfig: TcConfig,
@@ -1628,7 +1618,8 @@ module internal Parser =
// Used by 'FSharpDeclarationListInfo' to check the IncrementalBuilder is still alive.
checkAlive : (unit -> bool),
textSnapshotInfo : obj option,
- userOpName: string) =
+ userOpName: string,
+ suggestNamesForErrors: bool) =
async {
use _logBlock = Logger.LogBlock LogCompilerFunctionId.Service_CheckOneFile
@@ -1640,7 +1631,7 @@ module internal Parser =
// Run the type checker...
| Some parsedMainInput ->
// Initialize the error handler
- let errHandler = new ErrorHandler(true, mainInputFileName, tcConfig.errorSeverityOptions, source)
+ let errHandler = new ErrorHandler(true, mainInputFileName, tcConfig.errorSeverityOptions, sourceText, suggestNamesForErrors)
use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _oldLogger -> errHandler.ErrorLogger)
use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.TypeCheck
@@ -1717,7 +1708,8 @@ module internal Parser =
tcState.NiceNameGenerator.Reset()
// Typecheck the real input.
- let sink = TcResultsSinkImpl(tcGlobals, source = source)
+ let sink = TcResultsSinkImpl(tcGlobals, sourceText = sourceText)
+
let! ct = Async.CancellationToken
let! resOpt =
@@ -2199,17 +2191,17 @@ module Helpers =
&& FSharpProjectOptions.UseSameProject(o1,o2)
/// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. parsing
- let AreSameForParsing((fileName1: string, source1: string, options1), (fileName2, source2, options2)) =
- fileName1 = fileName2 && options1 = options2 && source1 = source2
+ let AreSameForParsing((fileName1: string, source1Hash: int, options1), (fileName2, source2Hash, options2)) =
+ fileName1 = fileName2 && options1 = options2 && source1Hash = source2Hash
let AreSimilarForParsing((fileName1, _, _), (fileName2, _, _)) =
fileName1 = fileName2
/// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. checking
- let AreSameForChecking3((fileName1: string, source1: string, options1: FSharpProjectOptions), (fileName2, source2, options2)) =
+ let AreSameForChecking3((fileName1: string, source1Hash: int, options1: FSharpProjectOptions), (fileName2, source2Hash, options2)) =
(fileName1 = fileName2)
&& FSharpProjectOptions.AreSameForChecking(options1,options2)
- && (source1 = source2)
+ && source1Hash = source2Hash
/// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. resource usage
let AreSubsumable3((fileName1:string,_,o1:FSharpProjectOptions),(fileName2:string,_,o2:FSharpProjectOptions)) =
@@ -2222,7 +2214,7 @@ module CompileHelpers =
let errorSink isError exn =
let mainError, relatedErrors = SplitRelatedDiagnostics exn
- let oneError e = errors.Add(FSharpErrorInfo.CreateFromException (e, isError, Range.range0))
+ let oneError e = errors.Add(FSharpErrorInfo.CreateFromException (e, isError, Range.range0, true)) // Suggest names for errors
oneError mainError
List.iter oneError relatedErrors
@@ -2325,9 +2317,8 @@ module CompileHelpers =
System.Console.SetError error
| None -> ()
-
-type FileName = string
-type Source = string
+type SourceTextHash = int
+type FileName = string
type FilePath = string
type ProjectPath = string
type FileVersion = int
@@ -2337,7 +2328,7 @@ type ScriptClosureCacheToken() = interface LockToken
// There is only one instance of this type, held in FSharpChecker
-type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot) as self =
+type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors) as self =
// STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.reactor: The one and only Reactor
let reactor = Reactor.Singleton
let beforeFileChecked = Event()
@@ -2394,7 +2385,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
(ctok, legacyReferenceResolver, defaultFSharpBinariesDir, frameworkTcImportsCache, loadClosure, Array.toList options.SourceFiles,
Array.toList options.OtherOptions, projectReferences, options.ProjectDirectory,
options.UseScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, maxTimeShareMilliseconds,
- tryGetMetadataSnapshot)
+ tryGetMetadataSnapshot, suggestNamesForErrors)
// We're putting the builder in the cache, so increment its count.
let decrement = IncrementalBuilder.KeepBuilderAlive builderOpt
@@ -2472,7 +2463,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
// Also keyed on source. This can only be out of date if the antecedent is out of date
let checkFileInProjectCache =
- MruCache
+ MruCache
(keepStrongly=checkFileInProjectCacheSize,
areSame=AreSameForChecking3,
areSimilar=AreSubsumable3)
@@ -2506,7 +2497,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
| Parser.TypeCheckAborted.Yes -> FSharpCheckFileAnswer.Aborted
| Parser.TypeCheckAborted.No scope -> FSharpCheckFileAnswer.Succeeded(MakeCheckFileResults(filename, options, builder, scope, dependencyFiles, creationErrors, parseErrors, tcErrors))
- member bc.RecordTypeCheckFileInProjectResults(filename,options,parsingOptions,parseResults,fileVersion,priorTimeStamp,checkAnswer,source) =
+ member bc.RecordTypeCheckFileInProjectResults(filename,options,parsingOptions,parseResults,fileVersion,priorTimeStamp,checkAnswer,sourceText) =
match checkAnswer with
| None
| Some FSharpCheckFileAnswer.Aborted -> ()
@@ -2514,43 +2505,44 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
foregroundTypeCheckCount <- foregroundTypeCheckCount + 1
parseCacheLock.AcquireLock (fun ltok ->
checkFileInProjectCachePossiblyStale.Set(ltok, (filename,options),(parseResults,typedResults,fileVersion))
- checkFileInProjectCache.Set(ltok, (filename,source,options),(parseResults,typedResults,fileVersion,priorTimeStamp))
- parseFileCache.Set(ltok, (filename, source, parsingOptions), parseResults))
+ checkFileInProjectCache.Set(ltok, (filename,sourceText,options),(parseResults,typedResults,fileVersion,priorTimeStamp))
+ parseFileCache.Set(ltok, (filename, sourceText, parsingOptions), parseResults))
member bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) =
if implicitlyStartBackgroundWork then
- bc.CheckProjectInBackground(options, userOpName + ".ImplicitlyStartCheckProjectInBackground")
+ bc.CheckProjectInBackground(options, userOpName + ".ImplicitlyStartCheckProjectInBackground")
- member bc.ParseFile(filename: string, source: string, options: FSharpParsingOptions, userOpName: string) =
+ member bc.ParseFile(filename: string, sourceText: ISourceText, options: FSharpParsingOptions, userOpName: string) =
async {
- match parseCacheLock.AcquireLock(fun ltok -> parseFileCache.TryGet(ltok, (filename, source, options))) with
+ let hash = sourceText.GetHashCode()
+ match parseCacheLock.AcquireLock(fun ltok -> parseFileCache.TryGet(ltok, (filename, hash, options))) with
| Some res -> return res
| None ->
foregroundParseCount <- foregroundParseCount + 1
- let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile(source, filename, options, userOpName)
+ let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile(sourceText, filename, options, userOpName, suggestNamesForErrors)
let res = FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, options.SourceFiles)
- parseCacheLock.AcquireLock(fun ltok -> parseFileCache.Set(ltok, (filename, source, options), res))
+ parseCacheLock.AcquireLock(fun ltok -> parseFileCache.Set(ltok, (filename, hash, options), res))
return res
}
/// Fetch the parse information from the background compiler (which checks w.r.t. the FileSystem API)
member bc.GetBackgroundParseResultsForFileInProject(filename, options, userOpName) =
reactor.EnqueueAndAwaitOpAsync(userOpName, "GetBackgroundParseResultsForFileInProject ", filename, fun ctok ->
- cancellable {
- let! builderOpt, creationErrors, decrement = getOrCreateBuilderAndKeepAlive (ctok, options, userOpName)
- use _unwind = decrement
- match builderOpt with
- | None -> return FSharpParseFileResults(creationErrors, None, true, [| |])
- | Some builder ->
- let! parseTreeOpt,_,_,parseErrors = builder.GetParseResultsForFile (ctok, filename)
- let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (builder.TcConfig.errorSeverityOptions, false, filename, parseErrors) |]
- return FSharpParseFileResults(errors = errors, input = parseTreeOpt, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated)
- }
+ cancellable {
+ let! builderOpt, creationErrors, decrement = getOrCreateBuilderAndKeepAlive (ctok, options, userOpName)
+ use _unwind = decrement
+ match builderOpt with
+ | None -> return FSharpParseFileResults(creationErrors, None, true, [| |])
+ | Some builder ->
+ let! parseTreeOpt,_,_,parseErrors = builder.GetParseResultsForFile (ctok, filename)
+ let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (builder.TcConfig.errorSeverityOptions, false, filename, parseErrors, suggestNamesForErrors) |]
+ return FSharpParseFileResults(errors = errors, input = parseTreeOpt, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated)
+ }
)
- member bc.GetCachedCheckFileResult(builder: IncrementalBuilder,filename,source,options) =
+ member bc.GetCachedCheckFileResult(builder: IncrementalBuilder,filename,sourceText: ISourceText,options) =
// Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date
- let cachedResults = parseCacheLock.AcquireLock (fun ltok -> checkFileInProjectCache.TryGet(ltok, (filename,source,options)))
+ let cachedResults = parseCacheLock.AcquireLock (fun ltok -> checkFileInProjectCache.TryGet(ltok, (filename,sourceText.GetHashCode(),options)))
match cachedResults with
// | Some (parseResults, checkResults, _, _) when builder.AreCheckResultsBeforeFileInProjectReady(filename) ->
@@ -2579,7 +2571,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
/// 7. Releases the file "lock".
member private bc.CheckOneFileImpl
(parseResults: FSharpParseFileResults,
- source: string,
+ sourceText: ISourceText,
fileName: string,
options: FSharpProjectOptions,
textSnapshotInfo: obj option,
@@ -2595,7 +2587,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
let rec loop() =
async {
// results may appear while we were waiting for the lock, let's recheck if it's the case
- let cachedResults = bc.GetCachedCheckFileResult(builder, fileName, source, options)
+ let cachedResults = bc.GetCachedCheckFileResult(builder, fileName, sourceText, options)
match cachedResults with
| Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults
@@ -2606,11 +2598,11 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
// For scripts, this will have been recorded by GetProjectOptionsFromScript.
let loadClosure = scriptClosureCacheLock.AcquireLock (fun ltok -> scriptClosureCache.TryGet (ltok, options))
let! tcErrors, tcFileResult =
- Parser.CheckOneFile(parseResults, source, fileName, options.ProjectFileName, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports,
- tcPrior.TcState, tcPrior.ModuleNamesDict, loadClosure, tcPrior.TcErrors, reactorOps, (fun () -> builder.IsAlive), textSnapshotInfo, userOpName)
+ Parser.CheckOneFile(parseResults, sourceText, fileName, options.ProjectFileName, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports,
+ tcPrior.TcState, tcPrior.ModuleNamesDict, loadClosure, tcPrior.TcErrors, reactorOps, (fun () -> builder.IsAlive), textSnapshotInfo, userOpName, suggestNamesForErrors)
let parsingOptions = FSharpParsingOptions.FromTcConfig(tcPrior.TcConfig, Array.ofList builder.SourceFiles, options.UseScriptResolutionRules)
let checkAnswer = MakeCheckFileAnswer(fileName, tcFileResult, options, builder, Array.ofList tcPrior.TcDependencyFiles, creationErrors, parseResults.Errors, tcErrors)
- bc.RecordTypeCheckFileInProjectResults(fileName, options, parsingOptions, parseResults, fileVersion, tcPrior.TimeStamp, Some checkAnswer, source)
+ bc.RecordTypeCheckFileInProjectResults(fileName, options, parsingOptions, parseResults, fileVersion, tcPrior.TimeStamp, Some checkAnswer, sourceText.GetHashCode())
return checkAnswer
finally
let dummy = ref ()
@@ -2626,7 +2618,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
}
/// Type-check the result obtained by parsing, but only if the antecedent type checking context is available.
- member bc.CheckFileInProjectAllowingStaleCachedResults(parseResults: FSharpParseFileResults, filename, fileVersion, source, options, textSnapshotInfo: obj option, userOpName) =
+ member bc.CheckFileInProjectAllowingStaleCachedResults(parseResults: FSharpParseFileResults, filename, fileVersion, sourceText: ISourceText, options, textSnapshotInfo: obj option, userOpName) =
let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "CheckFileInProjectAllowingStaleCachedResults ", filename, action)
async {
try
@@ -2641,7 +2633,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
match incrementalBuildersCache.TryGetAny (ctok, options) with
| Some (Some builder, creationErrors, _) ->
- match bc.GetCachedCheckFileResult(builder, filename, source, options) with
+ match bc.GetCachedCheckFileResult(builder, filename, sourceText, options) with
| Some (_, checkResults) -> return Some (builder, creationErrors, Some (FSharpCheckFileAnswer.Succeeded checkResults))
| _ -> return Some (builder, creationErrors, None)
| _ -> return None // the builder wasn't ready
@@ -2661,7 +2653,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
match tcPrior with
| Some tcPrior ->
- let! checkResults = bc.CheckOneFileImpl(parseResults, source, filename, options, textSnapshotInfo, fileVersion, builder, tcPrior, creationErrors, userOpName)
+ let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, textSnapshotInfo, fileVersion, builder, tcPrior, creationErrors, userOpName)
return Some checkResults
| None -> return None // the incremental builder was not up to date
finally
@@ -2669,7 +2661,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
}
/// Type-check the result obtained by parsing. Force the evaluation of the antecedent type checking context if needed.
- member bc.CheckFileInProject(parseResults: FSharpParseFileResults, filename, fileVersion, source, options, textSnapshotInfo, userOpName) =
+ member bc.CheckFileInProject(parseResults: FSharpParseFileResults, filename, fileVersion, sourceText: ISourceText, options, textSnapshotInfo, userOpName) =
let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "CheckFileInProject", filename, action)
async {
try
@@ -2681,21 +2673,21 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
| None -> return FSharpCheckFileAnswer.Succeeded (MakeCheckFileResultsEmpty(filename, creationErrors))
| Some builder ->
// Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date
- let cachedResults = bc.GetCachedCheckFileResult(builder, filename, source, options)
+ let cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options)
match cachedResults with
| Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults
| _ ->
Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CheckFileInProject.CacheMiss", filename)
let! tcPrior = execWithReactorAsync <| fun ctok -> builder.GetCheckResultsBeforeFileInProject (ctok, filename)
- let! checkAnswer = bc.CheckOneFileImpl(parseResults, source, filename, options, textSnapshotInfo, fileVersion, builder, tcPrior, creationErrors, userOpName)
+ let! checkAnswer = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, textSnapshotInfo, fileVersion, builder, tcPrior, creationErrors, userOpName)
return checkAnswer
finally
bc.ImplicitlyStartCheckProjectInBackground(options, userOpName)
}
/// Parses and checks the source file and returns untyped AST and check results.
- member bc.ParseAndCheckFileInProject (filename:string, fileVersion, source, options:FSharpProjectOptions, textSnapshotInfo, userOpName) =
+ member bc.ParseAndCheckFileInProject (filename:string, fileVersion, sourceText: ISourceText, options:FSharpProjectOptions, textSnapshotInfo, userOpName) =
let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "ParseAndCheckFileInProject", filename, action)
async {
try
@@ -2716,7 +2708,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
return (parseResults, FSharpCheckFileAnswer.Aborted)
| Some builder ->
- let cachedResults = bc.GetCachedCheckFileResult(builder, filename, source, options)
+ let cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options)
match cachedResults with
| Some (parseResults, checkResults) ->
@@ -2730,9 +2722,9 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
// Do the parsing.
let parsingOptions = FSharpParsingOptions.FromTcConfig(builder.TcConfig, Array.ofList (builder.SourceFiles), options.UseScriptResolutionRules)
- let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile (source, filename, parsingOptions, userOpName)
+ let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors)
let parseResults = FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, builder.AllDependenciesDeprecated)
- let! checkResults = bc.CheckOneFileImpl(parseResults, source, filename, options, textSnapshotInfo, fileVersion, builder, tcPrior, creationErrors, userOpName)
+ let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, textSnapshotInfo, fileVersion, builder, tcPrior, creationErrors, userOpName)
Logger.LogBlockMessageStop (filename + strGuid + "-Successful") LogCompilerFunctionId.Service_ParseAndCheckFileInProject
@@ -2756,8 +2748,8 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
let! (parseTreeOpt, _, _, untypedErrors) = builder.GetParseResultsForFile (ctok, filename)
let! tcProj = builder.GetCheckResultsAfterFileInProject (ctok, filename)
let errorOptions = builder.TcConfig.errorSeverityOptions
- let untypedErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, untypedErrors) |]
- let tcErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, tcProj.TcErrors) |]
+ let untypedErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, untypedErrors, suggestNamesForErrors) |]
+ let tcErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, tcProj.TcErrors, suggestNamesForErrors) |]
let parseResults = FSharpParseFileResults(errors = untypedErrors, input = parseTreeOpt, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated)
let loadClosure = scriptClosureCacheLock.AcquireLock (fun ltok -> scriptClosureCache.TryGet (ltok, options) )
let scope =
@@ -2777,11 +2769,11 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
/// Try to get recent approximate type check results for a file.
- member bc.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, source, _userOpName: string) =
- match source with
+ member bc.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, sourceText: ISourceText option, _userOpName: string) =
+ match sourceText with
| Some sourceText ->
parseCacheLock.AcquireLock (fun ltok ->
- match checkFileInProjectCache.TryGet(ltok,(filename,sourceText,options)) with
+ match checkFileInProjectCache.TryGet(ltok,(filename,sourceText.GetHashCode(),options)) with
| Some (a,b,c,_) -> Some (a,b,c)
| None -> parseCacheLock.AcquireLock (fun ltok -> checkFileInProjectCachePossiblyStale.TryGet(ltok,(filename,options))))
| None -> parseCacheLock.AcquireLock (fun ltok -> checkFileInProjectCachePossiblyStale.TryGet(ltok,(filename,options)))
@@ -2798,7 +2790,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
let! (tcProj, ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt) = builder.GetCheckResultsAndImplementationsForProject(ctok)
let errorOptions = tcProj.TcConfig.errorSeverityOptions
let fileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation
- let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, true, fileName, tcProj.TcErrors) |]
+ let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, true, fileName, tcProj.TcErrors, suggestNamesForErrors) |]
return FSharpCheckProjectResults (options.ProjectFileName, Some tcProj.TcConfig, keepAssemblyContents, errors,
Some(tcProj.TcGlobals, tcProj.TcImports, tcProj.TcState.Ccu, tcProj.TcState.CcuSig,
tcProj.TcSymbolUses, tcProj.TopAttribs, tcAssemblyDataOpt, ilAssemRef,
@@ -2828,7 +2820,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
member bc.ParseAndCheckProject(options, userOpName) =
reactor.EnqueueAndAwaitOpAsync(userOpName, "ParseAndCheckProject", options.ProjectFileName, fun ctok -> bc.ParseAndCheckProjectImpl(options, ctok, userOpName))
- member bc.GetProjectOptionsFromScript(filename, source, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, assumeDotNetFramework: bool option, extraProjectInfo: obj option, optionsStamp: int64 option, userOpName) =
+ member bc.GetProjectOptionsFromScript(filename, sourceText, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, assumeDotNetFramework: bool option, extraProjectInfo: obj option, optionsStamp: int64 option, userOpName) =
reactor.EnqueueAndAwaitOpAsync (userOpName, "GetProjectOptionsFromScript", filename, fun ctok ->
cancellable {
use errors = new ErrorScope()
@@ -2854,7 +2846,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
let loadClosure =
LoadClosure.ComputeClosureOfScriptText(ctok, legacyReferenceResolver,
- defaultFSharpBinariesDir, filename, source,
+ defaultFSharpBinariesDir, filename, sourceText,
CodeContext.Editing, useSimpleResolution, useFsiAuxLib, new Lexhelp.LexResourceManager(),
applyCompilerOptions, assumeDotNetFramework,
tryGetMetadataSnapshot=tryGetMetadataSnapshot,
@@ -2984,9 +2976,9 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
[]
[]
// There is typically only one instance of this type in a Visual Studio process.
-type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot) =
+type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors) =
- let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot)
+ let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors)
static let globalInstance = lazy FSharpChecker.Create()
@@ -3002,7 +2994,7 @@ type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyConten
let maxMemEvent = new Event()
/// Instantiate an interactive checker.
- static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot) =
+ static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot, ?suggestNamesForErrors) =
let legacyReferenceResolver =
match legacyReferenceResolver with
@@ -3013,41 +3005,42 @@ type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyConten
let keepAllBackgroundResolutions = defaultArg keepAllBackgroundResolutions true
let projectCacheSizeReal = defaultArg projectCacheSize projectCacheSizeDefault
let tryGetMetadataSnapshot = defaultArg tryGetMetadataSnapshot (fun _ -> None)
- new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot)
+ let suggestNamesForErrors = defaultArg suggestNamesForErrors false
+ new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors)
member ic.ReferenceResolver = legacyReferenceResolver
- member ic.MatchBraces(filename, source, options: FSharpParsingOptions, ?userOpName: string) =
+ member ic.MatchBraces(filename, sourceText: ISourceText, options: FSharpParsingOptions, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
+ let hash = sourceText.GetHashCode()
async {
- match braceMatchCache.TryGet(AssumeAnyCallerThreadWithoutEvidence(), (filename, source, options)) with
+ match braceMatchCache.TryGet(AssumeAnyCallerThreadWithoutEvidence(), (filename, hash, options)) with
| Some res -> return res
| None ->
- let res = Parser.matchBraces(source, filename, options, userOpName)
- braceMatchCache.Set(AssumeAnyCallerThreadWithoutEvidence(), (filename, source, options), res)
+ let res = Parser.matchBraces(sourceText, filename, options, userOpName, suggestNamesForErrors)
+ braceMatchCache.Set(AssumeAnyCallerThreadWithoutEvidence(), (filename, hash, options), res)
return res
}
+ member ic.MatchBraces(filename, source: string, options: FSharpProjectOptions, ?userOpName: string) =
+ let userOpName = defaultArg userOpName "Unknown"
+ let parsingOptions, _ = ic.GetParsingOptionsFromProjectOptions(options)
+ ic.MatchBraces(filename, SourceText.ofString source, parsingOptions, userOpName)
+
member ic.GetParsingOptionsFromProjectOptions(options): FSharpParsingOptions * _ =
let sourceFiles = List.ofArray options.SourceFiles
let argv = List.ofArray options.OtherOptions
ic.GetParsingOptionsFromCommandLineArgs(sourceFiles, argv, options.UseScriptResolutionRules)
- member ic.MatchBraces(filename, source, options: FSharpProjectOptions, ?userOpName: string) =
- let userOpName = defaultArg userOpName "Unknown"
- let parsingOptions, _ = ic.GetParsingOptionsFromProjectOptions(options)
- ic.MatchBraces(filename, source, parsingOptions, userOpName)
-
- member ic.ParseFile(filename, source, options, ?userOpName: string) =
+ member ic.ParseFile(filename, sourceText, options, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
ic.CheckMaxMemoryReached()
- backgroundCompiler.ParseFile(filename, source, options, userOpName)
-
+ backgroundCompiler.ParseFile(filename, sourceText, options, userOpName)
- member ic.ParseFileInProject(filename, source, options, ?userOpName: string) =
+ member ic.ParseFileInProject(filename, source: string, options, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
let parsingOptions, _ = ic.GetParsingOptionsFromProjectOptions(options)
- ic.ParseFile(filename, source, parsingOptions, userOpName)
+ ic.ParseFile(filename, SourceText.ofString source, parsingOptions, userOpName)
member ic.GetBackgroundParseResultsForFileInProject (filename,options, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
@@ -3058,9 +3051,9 @@ type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyConten
backgroundCompiler.GetBackgroundCheckResultsForFileInProject(filename,options, userOpName)
/// Try to get recent approximate type check results for a file.
- member ic.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, ?source, ?userOpName: string) =
+ member ic.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, ?sourceText, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
- backgroundCompiler.TryGetRecentCheckResultsForFile(filename,options,source, userOpName)
+ backgroundCompiler.TryGetRecentCheckResultsForFile(filename,options,sourceText, userOpName)
member ic.Compile(argv: string[], ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
@@ -3190,21 +3183,21 @@ type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyConten
/// parse including the reconstructed types in the file.
member ic.CheckFileInProjectAllowingStaleCachedResults(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?textSnapshotInfo:obj, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
- backgroundCompiler.CheckFileInProjectAllowingStaleCachedResults(parseResults,filename,fileVersion,source,options,textSnapshotInfo, userOpName)
-
+ backgroundCompiler.CheckFileInProjectAllowingStaleCachedResults(parseResults,filename,fileVersion,SourceText.ofString source,options,textSnapshotInfo, userOpName)
+
/// Typecheck a source code file, returning a handle to the results of the
/// parse including the reconstructed types in the file.
- member ic.CheckFileInProject(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?textSnapshotInfo:obj, ?userOpName: string) =
+ member ic.CheckFileInProject(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, sourceText:ISourceText, options:FSharpProjectOptions, ?textSnapshotInfo:obj, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
ic.CheckMaxMemoryReached()
- backgroundCompiler.CheckFileInProject(parseResults,filename,fileVersion,source,options,textSnapshotInfo, userOpName)
-
+ backgroundCompiler.CheckFileInProject(parseResults,filename,fileVersion,sourceText,options,textSnapshotInfo, userOpName)
+
/// Typecheck a source code file, returning a handle to the results of the
/// parse including the reconstructed types in the file.
- member ic.ParseAndCheckFileInProject(filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?textSnapshotInfo:obj, ?userOpName: string) =
+ member ic.ParseAndCheckFileInProject(filename:string, fileVersion:int, sourceText:ISourceText, options:FSharpProjectOptions, ?textSnapshotInfo:obj, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
ic.CheckMaxMemoryReached()
- backgroundCompiler.ParseAndCheckFileInProject(filename, fileVersion, source, options, textSnapshotInfo, userOpName)
+ backgroundCompiler.ParseAndCheckFileInProject(filename, fileVersion, sourceText, options, textSnapshotInfo, userOpName)
member ic.ParseAndCheckProject(options, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
@@ -3216,9 +3209,9 @@ type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyConten
backgroundCompiler.KeepProjectAlive(options, userOpName)
/// For a given script file, get the ProjectOptions implied by the #load closure
- member ic.GetProjectOptionsFromScript(filename, source, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?assumeDotNetFramework, ?extraProjectInfo: obj, ?optionsStamp: int64, ?userOpName: string) =
+ member ic.GetProjectOptionsFromScript(filename, sourceText, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?assumeDotNetFramework, ?extraProjectInfo: obj, ?optionsStamp: int64, ?userOpName: string) =
let userOpName = defaultArg userOpName "Unknown"
- backgroundCompiler.GetProjectOptionsFromScript(filename, source, loadedTimeStamp, otherFlags, useFsiAuxLib, assumeDotNetFramework, extraProjectInfo, optionsStamp, userOpName)
+ backgroundCompiler.GetProjectOptionsFromScript(filename, sourceText, loadedTimeStamp, otherFlags, useFsiAuxLib, assumeDotNetFramework, extraProjectInfo, optionsStamp, userOpName)
member ic.GetProjectOptionsFromCommandLineArgs(projectFileName, argv, ?loadedTimeStamp, ?extraProjectInfo: obj) =
let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading
@@ -3311,13 +3304,14 @@ type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyConten
type FsiInteractiveChecker(legacyReferenceResolver, reactorOps: IReactorOperations, tcConfig: TcConfig, tcGlobals, tcImports, tcState) =
let keepAssemblyContents = false
- member __.ParseAndCheckInteraction (ctok, source, ?userOpName: string) =
+ member __.ParseAndCheckInteraction (ctok, sourceText: ISourceText, ?userOpName: string) =
async {
let userOpName = defaultArg userOpName "Unknown"
let filename = Path.Combine(tcConfig.implicitIncludeDir, "stdin.fsx")
+ let suggestNamesForErrors = true // Will always be true, this is just for readability
// Note: projectSourceFiles is only used to compute isLastCompiland, and is ignored if Build.IsScript(mainInputFileName) is true (which it is in this case).
let parsingOptions = FSharpParsingOptions.FromTcConfig(tcConfig, [| filename |], true)
- let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile (source, filename, parsingOptions, userOpName)
+ let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors)
let dependencyFiles = [| |] // interactions have no dependencies
let parseResults = FSharpParseFileResults(parseErrors, parseTreeOpt, parseHadErrors = anyErrors, dependencyFiles = dependencyFiles)
@@ -3329,8 +3323,8 @@ type FsiInteractiveChecker(legacyReferenceResolver, reactorOps: IReactorOperatio
let fsiCompilerOptions = CompileOptions.GetCoreFsiCompilerOptions tcConfigB
CompileOptions.ParseCompilerOptions (ignore, fsiCompilerOptions, [ ])
- let loadClosure = LoadClosure.ComputeClosureOfScriptText(ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, source, CodeContext.Editing, tcConfig.useSimpleResolution, tcConfig.useFsiAuxLib, new Lexhelp.LexResourceManager(), applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot=(fun _ -> None), reduceMemoryUsage=reduceMemoryUsage)
- let! tcErrors, tcFileResult = Parser.CheckOneFile(parseResults, source, filename, "project", tcConfig, tcGlobals, tcImports, tcState, Map.empty, Some loadClosure, backgroundDiagnostics, reactorOps, (fun () -> true), None, userOpName)
+ let loadClosure = LoadClosure.ComputeClosureOfScriptText(ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, CodeContext.Editing, tcConfig.useSimpleResolution, tcConfig.useFsiAuxLib, new Lexhelp.LexResourceManager(), applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot=(fun _ -> None), reduceMemoryUsage=reduceMemoryUsage)
+ let! tcErrors, tcFileResult = Parser.CheckOneFile(parseResults, sourceText, filename, "project", tcConfig, tcGlobals, tcImports, tcState, Map.empty, Some loadClosure, backgroundDiagnostics, reactorOps, (fun () -> true), None, userOpName, suggestNamesForErrors)
return
match tcFileResult with
diff --git a/src/fsharp/service/service.fsi b/src/fsharp/service/service.fsi
index 5952587d8ff..4547068b515 100755
--- a/src/fsharp/service/service.fsi
+++ b/src/fsharp/service/service.fsi
@@ -14,7 +14,7 @@ open FSharp.Compiler.AbstractIL
open FSharp.Compiler.AbstractIL.IL
open FSharp.Compiler.AbstractIL.Internal.Library
open FSharp.Compiler.AbstractIL.ILBinaryReader
-open FSharp.Compiler
+open FSharp.Compiler
open FSharp.Compiler.Ast
open FSharp.Compiler.Driver
open FSharp.Compiler.ErrorLogger
@@ -26,6 +26,7 @@ open FSharp.Compiler.Infos
open FSharp.Compiler.InfoReader
open FSharp.Compiler.Tast
open FSharp.Compiler.Tastops
+open FSharp.Compiler.Text
/// Represents the reason why the GetDeclarationLocation operation failed.
[]
@@ -371,7 +372,7 @@ type public FSharpChecker =
/// If false, do not keep full intermediate checking results from background checking suitable for returning from GetBackgroundCheckResultsForFileInProject. This reduces memory usage.
/// An optional resolver for non-file references, for legacy purposes
/// An optional resolver to access the contents of .NET binaries in a memory-efficient way
- static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot -> FSharpChecker
+ static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool -> FSharpChecker
///
/// Parse a source code file, returning information about brace matching in the file.
@@ -379,10 +380,10 @@ type public FSharpChecker =
///
///
/// The filename for the file, used to help caching of results.
- /// The full source for the file.
+ /// The full source for the file.
/// Parsing options for the project or script.
/// An optional string used for tracing compiler operations associated with this request.
- member MatchBraces: filename: string * source: string * options: FSharpParsingOptions * ?userOpName: string -> Async<(range * range)[]>
+ member MatchBraces: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?userOpName: string -> Async<(range * range)[]>
///
/// Parse a source code file, returning information about brace matching in the file.
@@ -402,10 +403,10 @@ type public FSharpChecker =
///
///
/// The filename for the file.
- /// The full source for the file.
+ /// The full source for the file.
/// Parsing options for the project or script.
/// An optional string used for tracing compiler operations associated with this request.
- member ParseFile: filename: string * source: string * options: FSharpParsingOptions * ?userOpName: string -> Async
+ member ParseFile: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?userOpName: string -> Async
///
/// Parse a source code file, returning a handle that can be used for obtaining navigation bar information
@@ -460,7 +461,7 @@ type public FSharpChecker =
/// The results of ParseFile for this file.
/// The name of the file in the project whose source is being checked.
/// An integer that can be used to indicate the version of the file. This will be returned by TryGetRecentCheckResultsForFile when looking up the file.
- /// The full source for the file.
+ /// The full source for the file.
/// The options for the project or script.
///
/// An item passed back to 'hasTextChangedSinceLastTypecheck' (from some calls made on 'FSharpCheckFileResults') to help determine if
@@ -468,7 +469,7 @@ type public FSharpChecker =
/// can be used to marginally increase accuracy of intellisense results in some situations.
///
/// An optional string used for tracing compiler operations associated with this request.
- member CheckFileInProject : parsed: FSharpParseFileResults * filename: string * fileversion: int * source: string * options: FSharpProjectOptions * ?textSnapshotInfo: obj * ?userOpName: string -> Async
+ member CheckFileInProject : parsed: FSharpParseFileResults * filename: string * fileversion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?textSnapshotInfo: obj * ?userOpName: string -> Async
///
///
@@ -492,7 +493,7 @@ type public FSharpChecker =
/// can be used to marginally increase accuracy of intellisense results in some situations.
///
/// An optional string used for tracing compiler operations associated with this request.
- member ParseAndCheckFileInProject : filename: string * fileversion: int * source: string * options: FSharpProjectOptions * ?textSnapshotInfo: obj * ?userOpName: string -> Async
+ member ParseAndCheckFileInProject : filename: string * fileversion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?textSnapshotInfo: obj * ?userOpName: string -> Async
///
/// Parse and typecheck all files in a project.
@@ -523,7 +524,7 @@ type public FSharpChecker =
/// so that an 'unload' and 'reload' action will cause the script to be considered as a new project,
/// so that references are re-resolved.
/// An optional string used for tracing compiler operations associated with this request.
- member GetProjectOptionsFromScript : filename: string * source: string * ?loadedTimeStamp: DateTime * ?otherFlags: string[] * ?useFsiAuxLib: bool * ?assumeDotNetFramework: bool * ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string -> Async
+ member GetProjectOptionsFromScript : filename: string * sourceText: ISourceText * ?loadedTimeStamp: DateTime * ?otherFlags: string[] * ?useFsiAuxLib: bool * ?assumeDotNetFramework: bool * ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string -> Async
///
/// Get the FSharpProjectOptions implied by a set of command line arguments.
@@ -621,9 +622,9 @@ type public FSharpChecker =
///
/// The filename for the file.
/// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing.
- /// Optionally, specify source that must match the previous parse precisely.
+ /// Optionally, specify source that must match the previous parse precisely.
/// An optional string used for tracing compiler operations associated with this request.
- member TryGetRecentCheckResultsForFile : filename: string * options:FSharpProjectOptions * ?source: string * ?userOpName: string -> (FSharpParseFileResults * FSharpCheckFileResults * (*version*)int) option
+ member TryGetRecentCheckResultsForFile : filename: string * options:FSharpProjectOptions * ?sourceText: ISourceText * ?userOpName: string -> (FSharpParseFileResults * FSharpCheckFileResults * (*version*)int) option
/// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation.
member InvalidateAll : unit -> unit
@@ -723,7 +724,7 @@ type internal FsiInteractiveChecker =
internal new : ReferenceResolver.Resolver * ops: IReactorOperations * tcConfig: TcConfig * tcGlobals: TcGlobals * tcImports: TcImports * tcState: TcState -> FsiInteractiveChecker
/// An optional string used for tracing compiler operations associated with this request.
- member internal ParseAndCheckInteraction : CompilationThreadToken * source:string * ?userOpName: string -> Async
+ member internal ParseAndCheckInteraction : CompilationThreadToken * sourceText:ISourceText * ?userOpName: string -> Async
/// Information about the compilation environment
[]
diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs
index 943337a7da6..977aced452d 100644
--- a/src/fsharp/symbols/SymbolHelpers.fs
+++ b/src/fsharp/symbols/SymbolHelpers.fs
@@ -60,15 +60,15 @@ type FSharpErrorInfo(fileName, s: pos, e: pos, severity: FSharpErrorSeverity, me
override __.ToString()= sprintf "%s (%d,%d)-(%d,%d) %s %s %s" fileName (int s.Line) (s.Column + 1) (int e.Line) (e.Column + 1) subcategory (if severity=FSharpErrorSeverity.Warning then "warning" else "error") message
/// Decompose a warning or error into parts: position, severity, message, error number
- static member CreateFromException(exn, isError, fallbackRange: range) =
+ static member CreateFromException(exn, isError, fallbackRange: range, suggestNames: bool) =
let m = match GetRangeOfDiagnostic exn with Some m -> m | None -> fallbackRange
- let msg = bufs (fun buf -> OutputPhasedDiagnostic buf exn false)
+ let msg = bufs (fun buf -> OutputPhasedDiagnostic buf exn false suggestNames)
let errorNum = GetDiagnosticNumber exn
FSharpErrorInfo(m.FileName, m.Start, m.End, (if isError then FSharpErrorSeverity.Error else FSharpErrorSeverity.Warning), msg, exn.Subcategory(), errorNum)
/// Decompose a warning or error into parts: position, severity, message, error number
- static member CreateFromExceptionAndAdjustEof(exn, isError, fallbackRange: range, (linesCount: int, lastLength: int)) =
- let r = FSharpErrorInfo.CreateFromException(exn, isError, fallbackRange)
+ static member CreateFromExceptionAndAdjustEof(exn, isError, fallbackRange: range, (linesCount: int, lastLength: int), suggestNames: bool) =
+ let r = FSharpErrorInfo.CreateFromException(exn, isError, fallbackRange, suggestNames)
// Adjust to make sure that errors reported at Eof are shown at the linesCount
let startline, schange = min (r.StartLineAlternate, false) (linesCount, true)
@@ -90,7 +90,7 @@ type ErrorScope() =
PushErrorLoggerPhaseUntilUnwind (fun _oldLogger ->
{ new ErrorLogger("ErrorScope") with
member x.DiagnosticSink(exn, isError) =
- let err = FSharpErrorInfo.CreateFromException(exn, isError, range.Zero)
+ let err = FSharpErrorInfo.CreateFromException(exn, isError, range.Zero, false)
errors <- err :: errors
if isError && firstError.IsNone then
firstError <- Some err.Message
@@ -173,14 +173,14 @@ type CompilationGlobalsScope(errorLogger: ErrorLogger, phase: BuildPhase) =
unwindEL.Dispose()
module ErrorHelpers =
- let ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, sev)) =
+ let ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, sev), suggestNames) =
[ let isError = (sev = FSharpErrorSeverity.Error) || ReportWarningAsError options exn
if (isError || ReportWarning options exn) then
let oneError exn =
[ // We use the first line of the file as a fallbackRange for reporting unexpected errors.
// Not ideal, but it's hard to see what else to do.
let fallbackRange = rangeN mainInputFileName 1
- let ei = FSharpErrorInfo.CreateFromExceptionAndAdjustEof (exn, isError, fallbackRange, fileInfo)
+ let ei = FSharpErrorInfo.CreateFromExceptionAndAdjustEof (exn, isError, fallbackRange, fileInfo, suggestNames)
if allErrors || (ei.FileName = mainInputFileName) || (ei.FileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation) then
yield ei ]
@@ -189,10 +189,10 @@ module ErrorHelpers =
for e in relatedErrors do
yield! oneError e ]
- let CreateErrorInfos (options, allErrors, mainInputFileName, errors) =
+ let CreateErrorInfos (options, allErrors, mainInputFileName, errors, suggestNames) =
let fileInfo = (Int32.MaxValue, Int32.MaxValue)
[| for (exn, isError) in errors do
- yield! ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, isError)) |]
+ yield! ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, isError), suggestNames) |]
//----------------------------------------------------------------------------
@@ -747,7 +747,7 @@ module internal SymbolHelpers =
| Item.TypeVar (nm1, tp1), Item.TypeVar (nm2, tp2) ->
(nm1 = nm2) && typarRefEq tp1 tp2
| Item.ModuleOrNamespaces(modref1 :: _), Item.ModuleOrNamespaces(modref2 :: _) -> fullDisplayTextOfModRef modref1 = fullDisplayTextOfModRef modref2
- | Item.SetterArg(id1, _), Item.SetterArg(id2, _) -> (id1.idRange, id1.idText) = (id2.idRange, id2.idText)
+ | Item.SetterArg(id1, _), Item.SetterArg(id2, _) -> Range.equals id1.idRange id2.idRange && id1.idText = id2.idText
| Item.MethodGroup(_, meths1, _), Item.MethodGroup(_, meths2, _) ->
Seq.zip meths1 meths2 |> Seq.forall (fun (minfo1, minfo2) ->
MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2)
diff --git a/src/fsharp/symbols/SymbolHelpers.fsi b/src/fsharp/symbols/SymbolHelpers.fsi
index 205d573961d..984654c461d 100755
--- a/src/fsharp/symbols/SymbolHelpers.fsi
+++ b/src/fsharp/symbols/SymbolHelpers.fsi
@@ -37,8 +37,8 @@ type public FSharpErrorInfo =
member Message:string
member Subcategory:string
member ErrorNumber:int
- static member internal CreateFromExceptionAndAdjustEof : PhasedDiagnostic * isError: bool * range * lastPosInFile:(int*int) -> FSharpErrorInfo
- static member internal CreateFromException : PhasedDiagnostic * isError: bool * range -> FSharpErrorInfo
+ static member internal CreateFromExceptionAndAdjustEof : PhasedDiagnostic * isError: bool * range * lastPosInFile:(int*int) * suggestNames: bool -> FSharpErrorInfo
+ static member internal CreateFromException : PhasedDiagnostic * isError: bool * range * suggestNames: bool -> FSharpErrorInfo
//----------------------------------------------------------------------------
// Object model for quick info
@@ -200,5 +200,5 @@ type internal CompilationGlobalsScope =
interface IDisposable
module internal ErrorHelpers =
- val ReportError: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * fileInfo: (int * int) * (PhasedDiagnostic * FSharpErrorSeverity) -> FSharpErrorInfo list
- val CreateErrorInfos: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * seq<(PhasedDiagnostic * FSharpErrorSeverity)> -> FSharpErrorInfo[]
+ val ReportError: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * fileInfo: (int * int) * (PhasedDiagnostic * FSharpErrorSeverity) * suggestNames: bool -> FSharpErrorInfo list
+ val CreateErrorInfos: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * seq<(PhasedDiagnostic * FSharpErrorSeverity)> * suggestNames: bool -> FSharpErrorInfo[]
diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs
index e55e073e07e..945d4938634 100644
--- a/src/fsharp/symbols/Symbols.fs
+++ b/src/fsharp/symbols/Symbols.fs
@@ -2310,7 +2310,7 @@ and FSharpStaticParameter(cenv, sp: Tainted< ExtensionTyping.ProvidedParameterIn
override x.Equals(other: obj) =
box x === other ||
match other with
- | :? FSharpStaticParameter as p -> x.Name = p.Name && x.DeclarationLocation = p.DeclarationLocation
+ | :? FSharpStaticParameter as p -> x.Name = p.Name && Range.equals x.DeclarationLocation p.DeclarationLocation
| _ -> false
override x.GetHashCode() = hash x.Name
@@ -2355,7 +2355,7 @@ and FSharpParameter(cenv, paramTy:TType, topArgInfo:ArgReprInfo, mOpt, isParamAr
override x.Equals(other: obj) =
box x === other ||
match other with
- | :? FSharpParameter as p -> x.Name = p.Name && x.DeclarationLocation = p.DeclarationLocation
+ | :? FSharpParameter as p -> x.Name = p.Name && Range.equals x.DeclarationLocation p.DeclarationLocation
| _ -> false
override x.GetHashCode() = hash (box topArgInfo)
diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf
index 2a1a49f1540..64dc650b873 100644
--- a/src/fsharp/xlf/FSComp.txt.cs.xlf
+++ b/src/fsharp/xlf/FSComp.txt.cs.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Všechny elementy výrazu konstruktoru seznamu musí mít stejný typ. Očekávalo se, že tento výraz bude mít typ {0}, ale tady je typu {1}.
+ Všechny elementy výrazu konstruktoru seznamu musí mít stejný typ. Očekávalo se, že tento výraz bude mít typ {0}, ale tady je typu {1}.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Všechny elementy výrazu konstruktoru pole musí mít stejný typ. Očekávalo se, že tento výraz bude mít typ {0}, ale tady je typu {1}.
+ Všechny elementy výrazu konstruktoru pole musí mít stejný typ. Očekávalo se, že tento výraz bude mít typ {0}, ale tady je typu {1}.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- Ve výrazu if chybí větev else. Větev then je typu {0}. Protože if je výraz a ne příkaz, přidejte větev else, která vrátí hodnotu stejného typu.
+ Ve výrazu if chybí větev else. Větev then je typu {0}. Protože if je výraz a ne příkaz, přidejte větev else, která vrátí hodnotu stejného typu.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Všechny větve výrazu if musí mít stejný typ. Očekávalo se, že tento výraz bude mít typ {0}, ale tady je typu {1}.
+ Všechny větve výrazu if musí mít stejný typ. Očekávalo se, že tento výraz bude mít typ {0}, ale tady je typu {1}.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Všechny větve výrazu porovnávacího vzorku musí vracet hodnoty stejného typu. První větev vrátila hodnotu typu {0}, ale tato větev vrátila hodnotu typu {1}.
+ Všechny větve výrazu porovnání vzorů musí vracet hodnoty stejného typu. První větev vrátila hodnotu typu {0}, ale tato větev vrátila hodnotu typu {1}.
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Neplatná direktiva. Očekávaná direktiva je #I \"<cesta>\".
+ Neplatná direktiva. Očekávalo se: #I \"<cesta>\".Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Neplatná direktiva. Očekávaná direktiva je #r \"<file-or-assembly>\".
+ Neplatná direktiva. Očekávalo se #r \"<soubor-nebo-sestavení>\".Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Neplatná direktiva. Očekávaná direktiva je #load \"<soubor>\" ... \"<soubor>\".
+ Neplatná direktiva. Očekávalo se #load \"<soubor>\" ... \"<soubor>\"'.
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- Modul {0} obsahuje hodnotu\n {1}, \nale jeho signatura definuje hodnotu\n {2}. \nObecné parametry v signatuře a implementaci jsou různých druhů. Je možné, že chybí atribut [<Measure>].
+ Modul {0} obsahuje hodnotu\n {1}, \nale jeho signatura určuje hodnotu\n {2}. \nObecné parametry v signatuře a implementaci jsou různých druhů. Je možné, že chybí atribut [<Measure>].Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- Modul {0} obsahuje hodnotu\n {1}, \nale jeho signatura definuje hodnotu\n {2}. \nArity v signatuře a implementaci se liší. Signatura určuje, že {3} je definice funkce nebo výraz lambda přijímající argumenty aspoň v počtu {4}, ale implementace je vypočítaná hodnota funkce. Pokud chcete deklarovat vypočítanou hodnotu funkce jako povolenou implementaci, jednoduše ohraničte její typ v signatuře závorkami, třeba pomocí notace\n\tval {5}: int -> (int -> int),\nkterá nahradí notaci\n\tval {6}: int -> int -> int.
+ Modul {0} obsahuje hodnotu\n {1}, \nale jeho signatura určuje hodnotu\n {2}. \nArity v signatuře a implementaci se liší. Signatura určuje, že {3} je definice funkce nebo výraz lambda přijímající argumenty aspoň v počtu {4}, ale implementace je vypočítaná hodnota funkce. Pokud chcete deklarovat vypočítanou hodnotu funkce jako povolenou implementaci, jednoduše ohraničte její typ v signatuře závorkami, třeba pomocí notace\n\tval {5}: int -> (int -> int),\nkterá nahradí notaci\n\tval {6}: int -> int -> int.
@@ -619,12 +619,12 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- Definice {0} pro typ {1} v signatuře a implementaci nejsou kompatibilní, protože typ implementace je zapečetěný, ale ze signatury vyplývá, že není. Zvažte možnost přidat k signatuře atribut [<Sealed>].
+ Definice {0} pro typ {1} v signatuře a implementaci nejsou kompatibilní, protože typ implementace je zapečetěný, ale signatura uvádí, že není. Zvažte možnost přidat k signatuře atribut [<Sealed>].The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- Definice {0} pro typ {1} v signatuře a implementaci nejsou kompatibilní, protože typ implementace není zapečetěný, ale ze signatury vyplývá, že je. Zvažte možnost přidat k implementaci atribut [<Sealed>].
+ Definice {0} pro typ {1} v signatuře a implementaci nejsou kompatibilní, protože typ implementace není zapečetěný, ale signatura uvádí, že je. Zvažte možnost přidat k implementaci atribut [<Sealed>].
@@ -1039,7 +1039,7 @@
A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Typ s atributem CustomEquality musí mít explicitní implementaci aspoň jednoho z následujících: Object.Equals(obj), System.IEquatable<_>, nebo System.Collections.IStructuralEquatable.
+ Typ s atributem CustomEquality musí mít explicitní implementaci aspoň jednoho z následujících: Object.Equals(obj), System.IEquatable<_> nebo System.Collections.IStructuralEquatable.
@@ -2124,7 +2124,7 @@
'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- Metoda assert se nedá použít jako hodnota první třídy. Použijte místo ní assert <výraz>.
+ assert nejde použít jako první hodnotu třídy. Použijte místo toho assert <výraz>.
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- Použití -> ve výrazech pořadí a výpočtu je omezené na formu for pat in expr -> expr. Ke generování prvků v komplexnějších výrazech pořadí použijte syntaxi for ... in ... do ... yield...
+ Použití -> ve výrazech pořadí a výpočtu je omezené na formu for vzor in výraz -> výraz. Ke generování prvků v komplexnějších výrazech pořadí použijte syntaxi for ... in ... do ... yield...
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- Syntaxe (typ,...,typ) ident se v kódu F# nepoužívá. Zvažte možnost použít místo ní syntaxi ident<typ,...,typ>.
+ Syntaxe (typ,...,typ) ident se v kódu F# nepoužívá. Místo toho zkuste použít ident<typ,...,typ>.
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- Parametr s atributy vyžaduje rovněž název, například [<atribut>] Název : Typ.
+ Parametr s atributy vyžaduje také název, třeba [<Atribut>] Název : Typ.
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- Typ struktura, záznam nebo sjednocení {0} implementuje explicitně rozhraní System.IComparable<_>. Pro tento typ musíte použít atribut CustomComparison a vytvořit konzistentní implementaci rozhraní System.IComparable, které není obecné.
+ Typ struktury, záznamu nebo sjednocení {0} explicitně implementuje rozhraní System.IComparable<_>. Pro typ je třeba použít atribut CustomComparison a měli byste také poskytnout konzistentní implementaci neobecného rozhraní System.IComparable.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- Parametry typu odvozené pro tuto hodnotu nejsou v případě vymazání zkratek typů stabilní. To je způsobené použitím zkratek typu, které vypouštějí nebo mění pořadí parametrů typu, třeba pomocí notace\n\ttype taggedInt<'a> = int nebo\n\ttype swap<'a,'b> = 'b * 'a.\nZvažte deklarování parametrů typu pro tuto hodnotu explicitně, třeba pomocí notace\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ Parametry typu odvozené pro tuto hodnotu nejsou v případě vymazání zkratek typů stabilní. Způsobuje to použití zkratek typu, které vypouštějí nebo mění pořadí parametrů typu, třeba pomocí notace\n\ttype taggedInt<'a> = int nebo\n\ttype swap<'a,'b> = 'b * 'a.\nZvažte možnost deklarování parametrů typu pro tuto hodnotu explicitně, třeba pomocí notace\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- Typ {0} není typem, u kterého by se dal pomocí této syntaxe vytvořit výčet hodnot, tj. není kompatibilní s seq<_>, IEnumerable<_> ani IEnumerable a nemá metodu GetEnumerator.
+ Typ {0} není typem, u kterého by se dal pomocí této syntaxe vytvořit výčet hodnot, tj. není kompatibilní se seq<_>, IEnumerable<_> ani IEnumerable a nemá metodu GetEnumerator.
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- Omezení enum musí mít notaci enum<type>.
+ Omezení enum musí být ve formátu enum<typ>.
@@ -2634,7 +2634,7 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- Tato vlastnost je neplatného typu. Vlastnosti, které přebírají víc argumentů indexeru, by měly mít typy s notací ty1 * ty2 -> ty3. Vlastnosti, které vrací funkce, by měly mít typy s notací (ty1 -> ty2).
+ Tato vlastnost nemá platný typ. Vlastnosti, které přebírají více argumentů indexeru, by měly mít typy s notací ty1 * ty2 -> ty3. Vlastnosti, které vrací funkce, by měly mít typy s notací (ty1 -> ty2).
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- Konstanty číselných literálů, které nejsou primitivní, se nedají použít u porovnání vzorů, protože můžou být během použití modulu NumericLiteral mapované na víc různých typů. Zvažte možnost nahrazení proměnnou a na konci klauzule porovnání použijte when <variable> = <constant>.
+ Konstanty číselných literálů, které nejsou primitivní, se nedají použít u porovnání vzorů, protože můžou být během použití modulu NumericLiteral mapované na více různých typů. Zvažte možnost nahrazení proměnnou a na konci klauzule porovnání použijte when <proměnná> = <konstanta>.
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- Zápis proměnlivých hodnot funkcí by měl být let mutable f = (fun args -> ...).
+ Zápis proměnlivých hodnot funkcí by měl být let mutable f = (fun arg -> ...).
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Hodnotě literálu se nedají předávat atributy [<ThreadStatic>] nebo [<ContextStatic>].
+ Literálové hodnotě nejde přiřadit atribut [<ThreadStatic>] nebo [<ContextStatic>].
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- Vazby use musí mít notaci use <var> = <expr>.
+ Vazby use musí být ve formátu use <proměnná> = <výraz>.
@@ -3494,7 +3494,7 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Pokud se předává také hodnota konstanty, například val x : int = 1, může být deklarací jenom atribut [<Literal>].
+ Pokud se definuje také hodnota konstanty, třeba val x : int = 1, může být deklarací jenom atribut [<Literal>].
@@ -3514,7 +3514,7 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- Neinicializovaná pole val musí být měnitelná a označená atributem [<DefaultValue>]. Zvažte možnost použít místo pole val vazbu let.
+ Neinicializovaná pole val musí být měnitelná a musí být označená atributem [<DefaultValue>]. Zvažte možnost použít místo pole val vazbu let.
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- Explicitní deklarace typu pro konstruktory musí mít formulaci ty1 * ... * tyN -> resTy. Je možné, že výraz resTy bude potřeba uzavřít do závorek.
+ Explicitní deklarace typu pro konstruktory musí mít formát ty1 * ... * tyN -> resTy. Je možné, že výraz resTy bude potřeba uzavřít do závorek.
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- Typ struktura, záznam nebo sjednocení {0} implementuje explicitně rozhraní System.IEquatable<_>. Použijte pro tento typ atribut CustomEquality a vytvořte konzistentní implementaci přepsání System.Object.Equals(obj), které není obecné.
+ Typ struktury, záznamu nebo sjednocení {0} explicitně implementuje rozhraní System.IEquatable<_>. Použijte pro typ atribut CustomEquality a poskytněte konzistentní implementaci neobecného přepsání System.Object.Equals(obj).
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Tato zkratka typu má aspoň jeden parametr deklarovaného typu, který se u zkracovaného typu nevyskytuje. Při zkracování typů se musí použít všechny parametry deklarovaného typu. Zvažte možnost odebrání jednoho nebo víc parametrů typu, nebo použijte konkrétní definici typu, která zabaluje nadřízený typ, třeba type C<'a> = C f ...
+ Tato zkratka typu má aspoň jeden parametr deklarovaného typu, který se u zkracovaného typu nevyskytuje. Při zkracování typů se musí použít všechny parametry deklarovaného typu. Zvažte možnost odebrání jednoho nebo více parametrů typu, nebo použijte konkrétní definici typu, která zabaluje nadřízený typ, třeba type C<'a> = C of ...
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- Signatura skrývá reprezentaci tohoto typu. Charakteristiku typu je potřeba určit pomocí atributu, jako je [<Sealed>], [<Class>] nebo [<Interface>].
+ Signatura reprezentaci tohoto typu skrývá. Charakteristiku typu je potřeba určit pomocí atributu, jako je třeba [<Sealed>], [<Class>] nebo [<Interface>].
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- Určení delegátů musí mít notaci typ -> typ.
+ Specifikace delegátů musí mít notaci typ -> typ.Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Specifikace delegátů nesmí být curryfikované typy. Pro delegáty, kteří mají víc argumentů, použijte typ * ... * typ -> typ a pro delegáty, kteří vrací hodnoty funkcí, použijte typ -> (typ -> typ).
+ Specifikace delegátů nesmí být curryfikované typy. Pro delegáty, kteří mají více argumentů, použijte typ * ... * typ -> typ a pro delegáty, kteří vrací hodnoty funkcí, použijte typ -> (typ -> typ).
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- Syntaxe type X with ... je rezervovaná pro rozšíření. Typy, které mají skrytou reprezentaci, ale mají členy, se teď v signaturách deklarují pomocí notace type X = ... Je možné, že k definici typu v signatuře budete muset přidat také atribut [<Sealed>].
+ Syntaxe type X with ... je vyhrazená pro rozšíření. Typy, které mají skrytou reprezentaci, ale mají členy, se teď v signaturách deklarují pomocí notace type X = ... Je možné, že k definici typu v signatuře bude potřeba přidat také atribut [<Sealed>].
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- Událost {0} je nestandardního typu. Pokud je tato událost deklarovaná v jiném jazyce CLI, bude možná potřeba k této události přistoupit pomocí jejích explicitních metod {1} a {2}. Pokud je tato událost deklarovaná v jazyce F#, vytvořte její typ jako instanci buď IDelegateEvent<_>, nebo IEvent<_,_>.
+ Událost {0} je nestandardního typu. Pokud je tato událost deklarovaná v jiném jazyce CLI, bude možná potřeba k této události přistoupit pomocí jejích explicitních metod {1} a {2}. Pokud je tato událost deklarovaná v jazyce F#, vytvořte její typ jako instanci IDelegateEvent<_> nebo IEvent<_,_>.
@@ -5119,12 +5119,12 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Parametry typu je potřeba zadat bezprostředně za název typu, třeba \"type C<'T>\", ne type \"C <'T>\".
+ Odeberte mezery mezi názvem a parametrem typu, například \"type C<'T>\", ne type \"C <'T>\". Parametry typu je potřeba zadat bezprostředně za název typu.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Argumenty typu je potřeba zadat bezprostředně za název typu, třeba \"C<'T>\", ne \"C <'T>\".
+ Odeberte mezery mezi názvem a parametrem typu, například \"C<'T>\", ne \"C <'T>\". Parametry typu je potřeba zadat bezprostředně za název typu.
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- Parametr {0} je odvozený jako parametr typu ByRef. Parametrům typu ByRef se musí předávat explicitní poznámka typu, třeba x1: byref<int>. V případě jejího použití se k parametru typu ByRef přistoupí implicitně přes ukazatel.
+ Parametr {0} je odvozený jako parametr typu byref. Parametrům typu byref se musí předávat explicitní anotace typu, třeba x1: byref<int>. V případě jejího použití se k parametru typu byref přistoupí implicitně přes ukazatel.
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- Název souboru MDB musí být <název-souboru-sestavení>.mdb. Možnost --pdb se bude ignorovat.
+ Název souboru MDB musí být <název-souboru-sestavení>.mdb. Parametr --pdb se bude ignorovat.
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- Vazby use! musí mít notaci use! <var> = <expr>.
+ Vazby use! musí mít formát use! <proměnná> = <výraz>.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- Předávat kompilátoru soubor .resx ({0}) jako zdrojový soubor je zastaralý postup. Pomocí souboru resgen.exe převeďte soubor .resx na soubor .resources, aby se předával jako možnost --resource. Pokud používáte MSBuild, dá se to udělat prostřednictvím položky <EmbeddedResource> v souboru projektu .fsproj.
+ Předávat kompilátoru soubor .resx ({0}) jako zdrojový soubor je zastaralý postup. Pomocí programu resgen.exe převeďte soubor .resx na soubor .resources, aby se předával jako parametr --resource. Pokud používáte MSBuild, dá se to udělat prostřednictvím položky <EmbeddedResource> v souboru projektu .fsproj.
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- Nespárovaný výraz [<. Očekává se výraz >].
+ Nespárovaná dvojice znaků [<. Očekávala se dvojice znaků >].Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Neočekávaný konec vstupu ve výrazu match. Očekávaná notace je match <výraz> with | <cesta> -> <výraz> | <cesta> -> <výraz>
+ Neočekávaný konec vstupu ve výrazu match. Očekávaná notace je match <výraz> with | <vzor> -> <výraz> | <vzor> -> <výraz> ...Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- Neočekávaný konec vstupu ve výrazu try. Očekávaná notace je try <výraz> with <pravidla> nebo try <výraz> finally <výraz>.
+ Neočekávaný konec vstupu ve výrazu try. Očekávalo se try <výraz> with <pravidla> nebo try <výraz> finally <výraz>.Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- Neočekávaný konec vstupu ve výrazu while. Očekávaná notace je while <výraz> do <výraz>.
+ Neočekávaný konec vstupu ve výrazu while. Očekávalo se while <výraz> do <výraz>.Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Neočekávaný konec vstupu ve výrazu for. Očekávaná notace je for <vzor> in <výraz> do <výraz>.
+ Neočekávaný konec vstupu ve výrazu for. Očekávaná notace je for <vzor> in <výraz> do <výraz>'.
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Neočekávaný konec vstupu ve větvi then podmínky. Očekávaná notace je if <výraz> then <výraz> nebo if <výraz> then <výraz> else <výraz>.
+ Neočekávaný konec vstupu ve větvi then podmíněného výrazu. Očekávalo se if <výraz> then <výraz> nebo if <výraz> then <výraz> else <výraz>.Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Neočekávaný konec vstupu ve větvi else podmínky. Očekávaná notace je if <výraz> then <výraz> nebo if <výraz> then <výraz> else <výraz>.
+ Neočekávaný konec vstup ve větvi else podmíněného výrazu. Očekávalo se if <výraz> then <výraz> nebo if <výraz> then <výraz> else <výraz>.Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Neočekávaný konec vstupu v těle výrazu lambda. Očekávaná notace je fun <cesta> ... <cesta> -> <výraz>.
+ Neočekávaný konec vstupu v těle výrazu lambda. Očekávaná notace je fun <vzor> ... <vzor> -> <výraz>.
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- Ve výrazu while chybí do. Očekávaná notace je while <výraz> do <výraz>.
+ Chybí do ve výrazu while. Očekávalo se while <výraz> do <výraz>'.Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Ve výrazu for chybí klíčové slovo do. Očekávaná notace je for <cesta> in <výraz> do <výraz>.
+ Chybí do ve výrazu for. Očekávalo se for <vzor> in <výraz> do <výraz>.Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Neplatná relace spojení v {0}. Očekávaná notace je expr <op> expr, kde <op> je =, =?, ?= nebo ?=?.
+ Neplatná relace spojení v {0}. Očekávaná notace je výraz <op> výraz, kde <op> je =, =?, ?= nebo ?=?.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- Typ {0} je neplatný, protože T v byref<T> nemůže obsahovat typy ByRef.
+ Typ {0} je neplatný, protože T v byref<T> nemůže obsahovat typy byref.
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- Výjimka nebo případ typu union {0} nemá pole s názvem {1}.
+ Případ typu union {0} nemá žádné pole s názvem {1}.
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- Převod z {0} na {1} je přetypování nahoru bezpečné v době kompilace, ne přetypování dolů. Zvažte použití operátoru :> (upcast) namísto :?> (downcast).
+ Převod z {0} na {1} je přetypování nahoru bezpečné v době kompilace, ne přetypování dolů. Zvažte použití operátoru :> (přetypování nahoru) namísto :?> (přetypování dolů).
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Slouží v asynchronních pracovních postupech k vytvoření vazby názvu s výsledkem asynchronního výpočtu. V jiných výrazech výpočtu se používá k vytvoření vazby názvu s výsledkem, který je výpočetního typu.
+ Používá se ve výrazech výpočtu k navázání názvu na výsledek jiného výrazu výpočtu.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Slouží k označení hodnoty, která vznikne jako výsledek výrazu výpočtu.
+ Používá se k poskytnutí hodnoty pro výsledek obsahujícího výrazu výpočtu.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Slouží k označení výrazu výpočtu, který po vyhodnocení poskytne výsledek obsahujícího výrazu výpočtu.
+ Používá se k poskytnutí hodnoty pro výsledek obsahujícího výrazu výpočtu, když tato hodnota sama pochází z výsledku jiného výrazu výpočtu.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Používá se místo výrazu let! v asynchronních pracovních postupech a jiných výrazech výpočtu pro hodnoty, které k uvolnění prostředků vyžadují volání funkce Dispose.
+ Používá se místo let! ve výpočetních výrazech pro výsledky výpočetních výrazů, které implementují IDisposable.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Přes ukazatel byref vrácený funkcí nebo metodou se ve výchozím nastavení přistupuje od verze F# 4.5. Pokud chcete získat vrácenou hodnotu jako ukazatel, použijte operátor address-of, např. &f(x) nebo &obj.Method(arg1, arg2).
+ K ukazateli byref vrácenému funkcí nebo metodou se od F# 4.5 implicitně přistupuje přes ukazatel. Pokud chcete návratovou hodnotu získat jako ukazatel, použijte operátor adresy, například &f(x) nebo &obj.Metoda(arg1, arg2).A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Typ s přidanou poznámkou IsByRefLike musí být také struktura. Bylo by vhodné přidat do typu atribut [<Struct>].
+ Typ označený IsByRefLike musí být také strukturou. Zvažte možnost přidat k typu atribut [<Struct>].
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Typ s přidanou poznámkou IsReadOnly musí být také struktura. Bylo by vhodné přidat do typu atribut [<Struct>].
+ Typ označený IsReadOnly musí být také strukturou. Zvažte možnost přidat k typu atribut [<Struct>].
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ Nespárované znaky {{|anonymous record field
- anonymous record field
+ pole anonymního záznamuThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ Výjimka {0} nemá žádné pole s názvem {1}.Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Aktivní vzory nemají žádná pole. Tato syntaxe je neplatná.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ Konstruktor nemá žádné pole s názvem {0}.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Dva typy anonymních záznamů jsou z různých sestavení: {0} a {1}.Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Dva typy anonymních záznamů mají odlišné sady názvů polí: {0} a {1}Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ Nejde volat metodu rozšíření byref {0}. První parametr vyžaduje, aby hodnota byla měnitelná nebo typu byref, která není jen pro čtení.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Typy ByRef nesmí mít rozšíření volitelného typu.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ Nejde částečně použít rozšiřující metodu {0}, protože první parametr je typu byref.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Tento typ nedědí atribut. S jinými jazyky .NET nebude správně fungovat.Invalid anonymous record expression
- Invalid anonymous record expression
+ Neplatný výraz anonymního záznamuInvalid anonymous record type
- Invalid anonymous record type
+ Neplatný typ anonymního záznamuThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ Vstupem výrazu pro kopírování a aktualizaci, který vytvoří anonymní záznam, musí být anonymní záznam nebo záznam.The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ Parametr {0} má neplatný typ {1}. To nepovolují pravidla Common IL.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ Funkce nebo metoda má neplatný návratový typ {0}. To nepovolují pravidla Common IL.
diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf
index 58b4c635303..0ff2a2ef173 100644
--- a/src/fsharp/xlf/FSComp.txt.de.xlf
+++ b/src/fsharp/xlf/FSComp.txt.de.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Alle Elemente eines Listenkonstruktorausdrucks müssen den gleichen Typ aufweisen. Es wurde erwartet, dass dieser Ausdruck den Typ "{0}" aufweist, hier liegt aber der Typ "{1}" vor.
+ Alle Elemente eines Listenkonstruktorausdrucks müssen den gleichen Typ aufweisen. Es wurde erwartet, dass dieser Ausdruck den Typ "{0}" aufweist, hier liegt aber der Typ "{1}" vor.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Alle Elemente eines Arraykonstruktorausdrucks müssen den gleichen Typ aufweisen. Es wurde erwartet, dass dieser Ausdruck den Typ "{0}" aufweist, hier liegt aber der Typ "{1}" vor.
+ Alle Elemente eines Arraykonstruktorausdrucks müssen den gleichen Typ aufweisen. Es wurde erwartet, dass dieser Ausdruck den Typ "{0}" aufweist, hier liegt aber der Typ "{1}" vor.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- Dem if-Ausdruck fehlt ein else-Branch. Der then-Branch weist den Typ "{0}" auf. Da "if" ein Ausdruck und keine Anweisung ist, fügen Sie einen else-Branch hinzu, der einen Wert des gleichen Typs zurückgibt.
+ Dem if-Ausdruck fehlt ein else-Branch. Der then-Branch weist den Typ "{0}" auf. Da "if" ein Ausdruck und keine Anweisung ist, fügen Sie einen else-Branch hinzu, der einen Wert des gleichen Typs zurückgibt.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Alle Branches eines if-Ausdrucks müssen den gleichen Typ aufweisen. Es wurde erwartet, dass dieser Ausdruck den Typ "{0}" aufweist, hier liegt aber der Typ "{1}" vor.
+ Alle Branches eines if-Ausdrucks müssen den gleichen Typ aufweisen. Es wurde erwartet, dass dieser Ausdruck den Typ "{0}" aufweist, hier liegt aber der Typ "{1}" vor.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Alle Verzweigungen eines Musterübereinstimmungsausdrucks müssen Werte des gleichen Typs zurückgeben. Die erste Verzweigung hat einen Wert vom Typ "{0}", diese Verzweigung jedoch einen Wert vom Typ "{1}" zurückgegeben.
+ Alle Branches eines Musterübereinstimmungsausdrucks müssen Werte des gleichen Typs zurückgeben. Der erste Branch hat einen Wert vom Typ "{0}" zurückgegeben, aber dieser Branch gab einen Wert vom Typ "{1}" zurück.
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Ungültige Direktive. Erwartet wurde "#I \"<Pfad>\"".
+ Ungültige Anweisung. Erwartet wird: "#I \"<path>\".Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Ungültige Direktive. Erwartet wurde "#r \"<Datei-oder-Assembly>\"".
+ Ungültige Anweisung. Erwartet wird: "#r \"<file-or-assembly>\"".Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Ungültige Direktive. Erwartet wurde "#load \"<Datei>\" ... \"<Datei>\"".
+ Ungültige Anweisung. Erwartet wird: "#load \"<file>\" ... \"<file>\".
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- Das Modul "{0}" enthält\n {1} \nDie Signatur gibt aber Folgendes an:\n {2} \nDie generischen Parameter in der Signatur und in der Implementierung haben einen unterschiedlichen Typ. Möglicherweise fehlt ein [<Measure>]-Attribut.
+ Das Modul "{0}" enthält\n {1} \nDie Signatur gibt aber Folgendes an:\n {2} \nDie generischen Parameter in der Signatur und in der Implementierung haben einen unterschiedlichen Typ. Möglicherweise fehlt ein [<Measure>]-Attribut.Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- Das Modul "{0}" enthält\n {1} \nDie Signatur gibt aber Folgendes an:\n {2} \nDie Stelligkeit in der Signatur und in der Implementierung ist unterschiedlich. Laut Signatur ist "{3}" eine Funktionsdefinition oder ein lambda-Ausdruck, die bzw. der mindestens {4} Argument(e) akzeptiert, bei der Implementierung handelt es sich allerdings um einen berechneten Funktionswert. Um einen berechneten Funktionswert als zulässige Implementierung zu deklarieren, setzen Sie den Typ in der Signatur einfach in Klammern, z.B.\n\tval {5}: int -> (int -> int)\nanstatt\n\tval {6}: int -> int -> int.
+ Das Modul "{0}" enthält\n {1}, \ndie Signatur legt jedoch\n {2} fest. \nDie Stelligkeit in der Signatur und der Implementierung unterscheidet sich. Die Signatur gibt an, dass es sich bei "{3}" um eine Funktionsdefinition oder einen Lambdaausdruck handelt, der mindestens {4} Argumente akzeptiert, bei der Implementierung handelt es sich jedoch um einen berechneten Funktionswert. Deklarieren Sie einen berechneten Funktionswert als zulässige Implementierung, indem Sie dessen Typ in der Signatur in Klammern setzen, z.B.\n "\tval {5}: int -> (int -> int)" \nstatt\n "\tval {6}: int -> int -> int".
@@ -619,12 +619,12 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- Die {0} Definitionen für den Typ "{1}" in der Signatur und in der Implementierung sind nicht kompatibel, weil der Implementierungstyp versiegelt ist, laut Signatur aber nicht versiegelt sein sollte. Fügen Sie der Signatur ggf. das [<Sealed>]-Attribut hinzu.
+ Die {0}-Definitionen für den Typ "{1}" in der Signatur und in der Implementierung sind nicht kompatibel, weil der Implementierungstyp versiegelt ist, laut Signatur aber nicht versiegelt sein sollte. Fügen Sie der Signatur ggf. das [<Sealed>]-Attribut hinzu.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- Die {0} Definitionen für den Typ "{1}" in der Signatur und in der Implementierung sind nicht kompatibel, weil der Implementierungstyp nicht versiegelt ist, laut Signatur aber versiegelt sein sollte. Fügen Sie der Implementierung ggf. das [<Sealed>]-Attribut hinzu.
+ Die {0}-Definitionen für den Typ "{1}" in der Signatur und in der Implementierung sind nicht kompatibel, weil der Implementierungstyp nicht versiegelt ist, laut Signatur aber versiegelt sein sollte. Fügen Sie der Implementierung ggf. das [<Sealed>]-Attribut hinzu.
@@ -634,7 +634,7 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- Die {0} Definitionen für den Typ "{1}" in der Signatur und in der Implementierung sind nicht kompatibel, weil es sich bei der Signatur um eine abstrakte Klasse handelt, bei der Implementierung hingegen nicht. Fügen Sie der Implementierung ggf. das [<AbstractClass>]-Attribut hinzu.
+ Die {0}-Definitionen für den Typ "{1}" in der Signatur und Implementierung sind nicht kompatibel, da es sich bei der Signatur um eine abstrakte Klasse handelt, bei der Implementierung jedoch nicht. Fügen Sie das [<AbstractClass>]-Attribut zur Implementierung hinzu.
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Ein Typ mit dem ReferenceEquality-Attribut darf keine explizite Implementierung von "Object.Equals(obj)", "System.IEquatable<_>" und/oder "System.Collections.IStructuralEquatable" aufweisen.
+ Ein Typ mit dem Attribut "ReferenceEquality" darf keine explizite Implementierung von "Object.Equals(obj)", "System.IEquatable<_>" oder "System.Collections.IStructuralEquatable" aufweisen.A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Ein Typ mit dem CustomEquality-Attribut erfordert die explizite Implementierung von "Object.Equals(obj)", "System.IEquatable<_>" und/oder "System.Collections.IStructuralEquatable".
+ Ein Typ mit dem CustomEquality-Attribut erfordert die explizite Implementierung von "Object.Equals(obj)" , "System.IEquatable<_>" und/oder " System.Collections.IStructuralEquatable".
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- Ein Typ mit dem NoComparison-Attribut sollte in der Regel keine explizite Implementierung von "System.IComparable", "System.IComparable<_>" oder "System.Collections.IStructuralComparable" aufweisen. Deaktivieren Sie diese Warnung, wenn diese Implementierung aus Interoperabilitätsgründen beabsichtigt ist.
+ Ein Typ mit dem NoComparison-Attribut sollte in der Regel keine explizite Implementierung von "System.IComparable" , "System.IComparable<_>" oder "System.Collections.IStructuralComparable" aufweisen. Deaktivieren Sie diese Warnung, wenn diese Implementierung aus Interoperabilitätsgründen beabsichtigt ist.
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- System.Void kann in F# nur als "typeof<System.Void>" verwendet werden.
+ "System.Void" kann in F# nur als "typeof<System.Void>" verwendet werden.
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- [<ReflectedDefinition>]-Begriffe dürfen keinen Präfix-Splice-Operator "%" enthalten.
+ [< ReflectedDefinition >]-Begriffe dürfen keinen Präfix-Splice-Operator "%" enthalten.
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Unvollständiger bedingter Ausdruck. Es wurde 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>' erwartet.
+ Unvollständige Bedingung. Erwartet wird: "if <expr> then <expr>" oder "if <expr> then <expr> else <expr>".'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- assert darf nicht als Wert der ersten Klasse verwendet werden. Verwenden Sie stattdessen "assert <Ausdruck>".
+ "assert" kann nicht als erster Klassenwert verwendet werden. Verwenden Sie stattdessen "assert <expr>".
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- Die Syntax "(typ,...,typ) ident" wird im F#-Code nicht verwendet. Verwenden Sie stattdessen "ident<typ,...,typ>".
+ Die Syntax "(typ,...,typ) ident" wird nicht in F#-Code verwendet. Verwenden Sie stattdessen "ident<typ,...,typ>".
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- Konstanten ungleich null dürfen keine generischen Einheiten aufweisen. Für eine generische Null schreiben Sie "0.0<_>".
+ Konstanten, deren Wert ungleich 0 ist, dürfen keine generischen Einheiten enthalten. Schreiben Sie "0.0<_>" für generische Nullen.
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- Ein Parameter mit Attributen muss auch einen Namen erhalten, z.B. "[<Attribut>] Name : Type".
+ Ein Parameter mit Attributen muss auch einen Namen besitzen, z.B. "[<Attribute>] Name : Type"
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- Der Struktur-, Datensatz- oder Union-Typ "{0}" implementiert die System.IComparable<_>-Schnittstelle explizit. Sie müssen das CustomComparison-Attribut auf den Typ anwenden und sollten außerdem eine einheitliche Implementierung der nicht generischen System.IComparable-Schnittstelle bereitstellen.
+ Der Struktur-, Datensatz- oder Union-Typ "{0}" implementiert die "System.IComparable<_>"-Schnittstelle explizit. Sie müssen das CustomComparison-Attribut auf den Typ anwenden und sollten außerdem eine einheitliche Implementierung der nicht generischen System.IComparable-Schnittstelle bereitstellen.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- Die für diesen Wert per Rückschluss abgeleiteten Typparameter sind beim Löschen von Typabkürzungen nicht stabil. Dies ist auf die Verwendung von Typabkürzungen zurückzuführen, die Typparameter löschen oder neu anordnen, z.B. \n\ttype taggedInt<'a> = int oder\n\ttype swap<'a,'b> = 'b * 'a.\nDeklarieren Sie die Typparameter für diesen Wert explizit, z.B.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ Die für diesen Wert per Rückschluss abgeleiteten Typparameter sind beim Löschen von Typabkürzungen nicht stabil. Dies ist auf die Verwendung von Typabkürzungen zurückzuführen, die Typparameter löschen oder neu anordnen, z.B. "\n\ttype taggedInt<'a> = int" oder "\n\ttype swap<'a,'b> = 'b * 'a".\nDeklarieren Sie die Typparameter für diesen Wert explizit, z.B. "\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)".
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- Der Typ "{0}" ist kein Typ, dessen Werte mit dieser Syntax aufgelistet werden können, er ist daher weder mit "seq<_>" noch mit "IEnumerable<_>" oder "IEnumerable" kompatibel und verfügt über keine GetEnumerator-Methode.
+ Die Werte des Typs "{0}" können nicht mit dieser Syntax enumeriert werden, d.h., er ist nicht mit "seq<_>, IEnumerable<_>" oder "IEnumerable" kompatibel und besitzt keine GetEnumerator-Methode.
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- Eine enum-Einschränkung muss das Format "enum<Typ>" aufweisen.
+ Eine "enum"-Einschränkung muss das Format "enum<type>" aufweisen.
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- Diese Eigenschaft hat einen ungültigen Typ. Eigenschaften, die mehrere Indexerargumente akzeptieren, sollten Typen im Format "ty1 * ty2 -> ty3" aufweisen. Eigenschaften, die Funktionen zurückgeben, sollten Typen im Format "(ty1 -> ty2)" aufweisen.
+ Diese Eigenschaft weist einen ungültigen Typ auf. Eigenschaften mit mehreren Indexerargumenten sollten Typen im Format "ty1 * ty2 -> ty3" aufweisen. Eigenschaften, die Funktionen aufweisen, sollten Typen im Format "(ty1 -> ty2)" aufweisen.Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- Ein Maßeinheitenparameter wurde erwartet, kein Typparameter. Explizite Maßeinheitenparameter müssen mit dem [<Measure>]-Attribut markiert werden.
+ Es wurde ein Maßeinheitparameter, kein Typparameter erwartet. Explizite Maßeinheitparameter müssen mit dem [<Measure>]-Attribut gekennzeichnet werden.
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- Nicht primitive numerische Literalkonstanten können nicht für Mustervergleiche verwendet werden, weil sie mithilfe eines NumericLiteral-Moduls mehreren verschiedenen Typen zugeordnet werden können. Ersetzen Sie sie durch eine Variable, und verwenden Sie am Ende der Vergleichsklausel "<Variable> = <Konstante>".
+ Nicht primitive numerische Literalkonstanten können nicht für Mustervergleiche verwendet werden, weil sie mithilfe eines NumericLiteral-Moduls mehreren verschiedenen Typen zugeordnet werden können. Ersetzen Sie sie durch eine Variable, und verwenden Sie am Ende der Vergleichsklausel "when <Variable> = <Konstante>".
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- Änderbare Funktionswerte sollten im Format "let mutable f = (fun args -> ...)" angegeben werden.
+ Änderbare Werte sollten im Format "let mutable f = (fun args -> ...)" geschrieben werden.
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Ein Literalwert kann nicht mit den Attributen "[<ThreadStatic>]" oder "[<ContextStatic>]" versehen werden.
+ Die Attribute [<ThreadStatic>] und [<ContextStatic>] können keinem Literalwert zugewiesen werden.
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- Use-Bindungen müssen das Format "use <var> = <Ausdruck>" aufweisen.
+ "use"-Bindungen müssen das Format "use <var> = <expr>" aufweisen.
@@ -3494,12 +3494,12 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Eine Deklaration darf nur dann als [<Literal>]-Attribut verwendet werden, wenn auch ein Konstantenwert angegeben wird, z.B. "val x : int = 1".
+ Eine Deklaration kann nur dem [<Literal>]-Attribut entsprechen, wenn auch ein konstanter Wert angegeben ist, z.B. "val x : int =1".A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- Einer Deklaration kann nur dann ein Wert in einer Signatur zugewiesen werden, wenn die Deklaration mit dem [<Literal>]-Attribut versehen ist.
+ Eine Deklaration darf nur einen Wert in der Signatur aufweisen, wenn das Attribut "[<Literal>]" vorhanden ist.
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- Nicht initialisierte val-Felder müssen änderbar sein und mit dem [<DefaultValue>]-Attribut versehen werden. Verwenden Sie eine let-Bindung anstelle eines val-Felds.
+ Nicht initialisierte "val"-Felder müssen änderbar und mit dem Attribut "[<DefaultValue>]" gekennzeichnet sein. Verwenden Sie eine "let"-Bindung statt einem "val"-Feld.Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- Statische val-Felder in Typen müssen änderbar und privat sein und mit dem [<DefaultValue>]-Attribut versehen werden. Sie werden mit dem NULL- oder 0-Wert für ihren Typ initialisiert. Verwenden Sie ggf. zusätzlich eine "static let mutable"-Bindung in einem Klassentyp.
+ Statische "val"-Felder in Typen müssen änderbar, privat und mit dem "[<DefaultValue>]"-Attribut gekennzeichnet sein. Sie werden mit dem "NULL"- oder "0"-Wert ihres Typs initalisiert. Verwenden Sie eine "static let mutable"-Bindung in einem Klassentyp.
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- Explizite Typdeklarationen für Konstruktoren müssen im Format "ty1 * ... * tyN -> resTy" angegeben werden. Möglicherweise muss "resTy" in Klammern gesetzt werden.
+ Explizite Typdeklarationen für Konstruktoren müssen der Form "ty1 * ... * tyN -> resTy" entsprechen. Klammern um "resTy" können erforderlich sein.
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- Der Struktur-, Datensatz- oder Union-Typ "{0}" implementiert die System.IEquatable<_>-Schnittstelle explizit. Wenden Sie das CustomEquality-Attribut auf den Typ an, und stellen Sie eine einheitliche Implementierung der nicht generischen System.Object.Equals(obj)-Überschreibung bereit.
+ Der Struktur-, Datensatz oder Union-Typ "{0}" implementiert die Schnittstelle "System.IEquatable<_>" explizit. Wenden Sie das "CustomEquality"-Attribut auf den Typ an, und stellen Sie eine konsistente Implementierung des nicht generischen überschriebenen Objekts "System.Object.Equals(obj)" bereit.
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- Die Darstellung dieses Typs ist hinter der Signatur verborgen. Sie muss mit einem Attribut wie "[<Sealed>]", "[<Class>]" oder "[<Interface>]" versehen werden, um die Merkmale des Typs anzugeben.
+ Die Darstellung dieses Typs wird durch die Signatur versteckt. Dem Typ muss ein Attribut wie [<Sealed>], [<Class>] oder [<Interface>] hinzugefügt werden, um dessen Merkmale anzugeben.
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- Delegatspezifikationen müssen das Format "typ -> typ" aufweisen.
+ Delegierte Spezifikationen müssen das Format "typ -> typ" aufweisen.Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Delegatspezifikationen dürfen keine Currytypen sein. Verwenden Sie "typ * ... * typ -> typ" für Delegaten mit mehreren Argumenten und "typ -> (typ -> typ)" für Delegaten, die Funktionswerte zurückgeben.
+ Delegatspezifikationen dürfen keine Currytypen sein. Verwenden Sie " typ * ... * typ -> typ" für Delegaten mit mehreren Argumenten und " typ -> (typ -> typ)" für Delegaten, die Funktionswerte zurückgeben.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- Die Syntax "type X with ..." ist für Augmentationen reserviert. Typen, deren Darstellung verborgen ist, die aber Member aufweisen, werden jetzt mithilfe von "type X = ..." in Signaturen deklariert. Möglicherweise müssen Sie der Typdefinition in der Signatur auch das [<Sealed>]-Attribut hinzufügen.
+ Die Syntax "type X with ..." ist für Augmentationen reserviert. Typen, deren Darstellung verborgen ist, die aber Member aufweisen, werden jetzt mithilfe von " type X = ..." in Signaturen deklariert. Möglicherweise müssen Sie der Typdefinition in der Signatur auch das [<Sealed>]-Attribut hinzufügen.
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- Angegebene Ressource mit dieser Assembly verknüpfen; Resinfo-Format: <Datei>[,<Zeichenfolgenname>[,public|private]]
+ Verknüpfen Sie die angegebene Ressource mit der Assembly, die das resinfo-Format "<file>[,<string name>[,public|private]]" aufweist.
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- Das {0}-Ereignis hat einen nicht standardmäßigen Typ. Falls dieses Ereignis in einer anderen CLI-Sprache deklariert wurde, müssen Sie ggf. mithilfe der expliziten {1}- und {2}-Methoden für das Ereignis darauf zugreifen. Falls das Ereignis in F# deklariert wurde, definieren Sie den Ereignistyp als Instanziierung von "IDelegateEvent<_>" oder "IEvent<_,_>".
+ Das Ereignis "{0}" enthält einen Nichtstandardtyp. Wenn dieses Ereignis in einer anderen CLI-Sprache deklariert ist, müssen Sie auf dieses Ereignis über die expliziten {1}- und {2}-Methoden für das Ereignis zugreifen. Wenn dieses Ereignis in F# deklariert ist, sollten Sie den Typ des Ereignisses auf eine Instanziierung von "IDelegateEvent<_>" oder "IEvent<_,_>" festlegen.
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Typparameter müssen direkt neben dem Typnamen platziert werden, z.B. \"type C<'T>\", nicht type \"C <'T>\".
+ Entfernen Sie die Leerzeichen zwischen dem Typnamen und dem Typparameter, z. B. "\"type C<'T>\"", statt "type \"C <'T>\"". Typparameter müssen direkt an den Typnamen angeschlossen werden.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Typargumente müssen direkt neben dem Typnamen platziert werden. Beispiel: \"C<'T>\", nicht \"C <'T>\".
+ Entfernen Sie die Leerzeichen zwischen dem Typnamen und Typparameter, z. B. "\"C<'T>\"" statt "\"C <'T>\"". Typparameter müssen direkt an den Typnamen angeschlossen werden.The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- Die Verwendung der Typsyntax "int C" und "C <int>" ist an dieser Stelle nicht zulässig. Passen Sie die Typangabe im Format "C<int>" an.
+ Die Verwendung der Typsyntax "int C" und "C <int>" ist hier nicht zulässig. Passen Sie den Typ an das Format "C<int>" an.
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- Beim Parameter "{0}" wird angenommen, dass er über den byref-Typ verfügt. Für Parameter mit dem byref-Typ muss eine explizite Typanmerkung angegeben werden. Beispiel: "x1: byref<int>". Wenn er verwendet wird, wird ein byref-Parameter implizit dereferenziert.
+ Der Parameter "{0}" wurde mit dem Typ "byref" abgeleitet. Parametern vom Typ "byref" muss eine explizite Typanmerkung hinzugefügt werden, z.B. "x1: byref<int>". Wenn ein byref-Parameter verwendet wird, wird dieser explizit dereferenziert.
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- Das aktive Muster "{0}" besitzt einen Ergebnistyp mit Typvariablen, die nicht von der Eingabe bestimmt werden. Häufige Ursache: Es ist kein Ergebnisfall angegeben. Beispiel: "let (|A|B|) (x:int) = A x". Dieses Problem kann mithilfe einer Typeinschränkung behoben werden. Beispiel: "let (|A|B|) (x:int) : Choice<int,unit> = A x"
+ Das aktive Muster "{0}" weist einen Ergebnistyp auf, der Typvariablen enthält, die nicht durch die Eingabe festgelegt werden. Häufig liegt die Ursache darin, dass kein Ergebnisfall erwähnt wird, z.B. "let (|A|B|) (x:int) = A x". Dies kann mit einer Typbeschränkung behoben werden, z.B. "let (|A|B|) (x:int) : Choice<int,unit> = A x".
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- Der Name der MDB-Datei muss <assembly-datei-name>.mdb lauten. Die --pdb-Option wird ignoriert.
+ Der Name der MDB-Datei muss "<assembly-file-name>.mdb" lauten. Die Option "--pdb" wird ignoriert.
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- 'Use!'-Bindungen müssen das Format 'use! <pat> -> <expr>' aufweisen.
+ "use!"-Bindungen müssen das Format "use! <var> = <expr>" aufweisen.
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- Keine Entsprechung für '<'. Schließendes '>' erwartet
+ Keine Übereinstimmung für "<". Schließendes ">"-Zeichen erwartet.Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- Unerwarteter Anführungszeichen-Operator '<@' in der Typdefinition. Wenn eine ausführliche Zeichenfolge als statisches Argument an einen Typanbieter übergeben werden soll, fügen Sie zwischen den Zeichen '<' und '@' eine Leerstelle ein.
+ Unerwarteter Anführungszeichen-Operator "< @" in der Typdefinition. Wenn eine ausführliche Zeichenfolge als statisches Argument an einen Typanbieter übergeben werden soll, fügen Sie zwischen den Zeichen "<" und "@" eine Leerstelle ein.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- Das Übergeben einer RESX-Datei ({0}) als Quelldatei an den Compiler ist veraltet. Verwenden Sie "resgen.exe", um die RESX-Datei in eine RESOURCES-Datei zu transformieren, um eine --resource-Option zu übergeben. Bei der Verwendung von MSBuild kann dies über ein <EmbeddedResource>-Element in der .fsproj-Projektdatei erfolgen.
+ Das Übergeben einer RESX-Datei ({0}) als Quelldatei an den Compiler ist veraltet. Verwenden Sie "resgen.exe", um die RESX-Datei in eine RESOURCES-Datei zu konvertieren, die mit der Option "--resource" übergeben werden. Wenn Sie MSBuild verwenden, kann dies über ein <EmbeddedResource>-Element in der FSPROJECT-Projektdatei durchgeführt werden.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- Es ist kein direkter Verweis zum generierten Typ '{0}' zulässig. Verwenden Sie stattdessen eine Typdefinition, z. B. TypeAlias = <path>. Dies weist darauf hin, dass ein Typanbieter Ihrer Assembly generierte Typen hinzufügt.
+ Ein direkter Verweis auf den generierten Typ "{0}" ist nicht zulässig. Verwenden Sie stattdessen die Typdefinition wie "type TypeAlias = <path>". Dadurch wird angegeben, dass ein Typanbieter Ihrer Assembly generierte Typen hinzufügt.
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- Der statische Parameter "{0}" vom angegebenen Typ oder der angegebenen Methode "{1}" benötigt einen Wert. Statische Parameter zu Typanbietern können optional mithilfe von benannten Argumenten angegeben werden, z. B. "{2}<{3}=...>".
+ Der statische Parameter "{0}" vom angegebenen Typ "{1}" erfordert einen Wert. Statische Parameter zu Typanbietern können optional angegeben werden mithilfe von benannten Argumenten, z. b. "{2}<{3}=...>".
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- Keine Entsprechung für "[<". Schließendes ">]" erwartet
+ Keine Übereinstimmung für "[<". Schließendes >]-Zeichen wird erwartet.Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Unerwartetes Eingabeende im 'match'-Ausdruck. Es wurde 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...' erwartet.
+ Unerwartetes Ende der Eingabe im "match"-Ausdruck. Erwartet wird "match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...".Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- Unerwartetes Eingabeende im 'try'-Ausdruck. Es wurde 'try <expr> with <rules>' or 'try <expr> finally <expr>' erwartet.
+ Unerwartetes Ende der Eingabe im "try"-Ausdruck. Erwartet wird: "try <expr> with <rules>" oder "try <expr> finally <expr>".Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- Unerwartetes Eingabeende im 'while'-Ausdruck. Es wurde 'while <expr> do <expr>' erwartet.
+ Unerwartetes Ende der Eingabe im "while"-Ausdruck. Erwartet wird: "while <expr> do <expr>".Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Unerwartetes Eingabeende im 'for'-Ausdruck. Es wurde 'for <pat> in <expr> do <expr>' erwartet.
+ Unerwartetes Ende der Eingabe im "for"-Ausdruck. Erwartet wird: "for <pat> in <expr> do <expr>".
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Unerwartetes Eingabeende in der 'then'-Verzweigung des bedingten Ausdrucks. Es wurde 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>' erwartet.
+ Unerwartetes Ende der Eingabe im "then"-Branch des bedingten Ausdrucks. Erwartet wird: "if <expr> then <expr>" oder "if <expr> then <expr> else <expr>".Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Unerwartetes Eingabeende in der 'else'-Verzweigung des bedingten Ausdrucks. Es wurde 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>' erwartet.
+ Unerwartetes Ende der Eingabe im "else"-Branch des bedingten Ausdrucks. Erwartet wird: "if <expr> then <expr>" oder "if <expr> then <expr> else <expr>".Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Unerwartetes Eingabeende im Text des lambda-Ausdrucks. Es wurde 'fun <pat> ... <pat> -> <expr>' erwartet.
+ Unerwartetes Ende der Eingabe im Text des Lambdaausdrucks. Erwartet wird: "fun <pat> ... <pat> -> <expr>".
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- Fehlendes 'do' in 'while'-Ausdruck. Es wurde 'while <expr> do <expr>' erwartet.
+ Fehlendes "do"-Element" im "while"-Ausdruck. Erwartet wird: "while <expr> do <expr>".Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Fehlendes 'do' in 'for'-Ausdruck. Es wurde 'for <pat> in <expr> do <expr>' erwartet.
+ "do" fehlt in "for"-Ausdruck. Erwartet wird: "for <pat> in <expr> do <expr>".Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Ungültige Joinbeziehung in '{0}'. Es wurde 'expr <op> expr' erwartet, wobei <op> =, =?, ?= oder ?=? ist.
+ Ungültige Joinbeziehung in "{0}". Es wird "expr <op> expr" erwartet. Hierbei sollte "<op>" dem Operator =, =?, ?= oder ?=? entsprechen.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- Typ '{0}' ist unzulässig, da T in byref<T> keine byref-Typen enthalten darf.
+ Der Typ "{0}" ist nicht zulässig, da "T" in "byref<T>" keine byref-Typen enthalten kann.
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- Argumente für Abfrageoperatoren erfordern möglicherweise Klammern, z. B. 'where (x > y)' oder 'groupBy (x.Length / 10)'.
+ Argumente für Abfrageoperatoren erfordern möglicherweise Klammern, z. B. "where (x > y)" oder "groupBy (x.Length / 10)".
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- Union-Fall/Ausnahme '{0}' verfügt nicht über ein Feld mit dem Namen '{1}'.
+ Union-Fall "{0}" verfügt nicht über ein Feld mit dem Namen "{1}".
@@ -6349,7 +6349,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- Dies ist kein gültiger literaler Ausdruck. Das [<Literal>]-Attribut wird ignoriert.
+ Dies ist kein gültiger Literalausdruck. Das [<Literal>]-Attribut wird ignoriert.
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Wird in asynchronen Workflows verwendet, um einen Namen an das Ergebnis einer asynchronen Berechnung zu binden, oder in anderen Berechnungsausdrücken, um einen Namen an ein Ergebnis vom Berechnungstyp zu binden.
+ Wird in Berechnungsausdrücken verwendet, um einen Namen an das Ergebnis eines anderen Berechnungsausdrucks zu binden.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Wird verwendet, um einen Wert anzugeben, der als Ergebnis eines Berechnungsausdrucks auszugeben ist.
+ Wird verwendet, um einen Wert für das Ergebnis des Berechnungsausdrucks anzugeben.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Wird verwendet, um einen Berechnungsausdruck anzugeben, der bei der Auswertung das Ergebnis ausgibt, welches den Berechnungsausdruck enthält.
+ Wird verwendet, um einen Wert für das Ergebnis des Berechnungsausdrucks bereitzustellen. Hierbei stammt dieser Wert aus dem Ergebnis eines anderen Berechnungsausdrucks.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Wird anstelle von "let!" in asynchronen Workflows und anderen Berechnungsausdrücken für Werte verwendet, bei denen die "Dispose" zum Freigeben von Ressourcen erforderlich ist.
+ Wird anstelle von "let!" in Berechnungsausdrücken für Ergebnisse von Berechnungsausdrücken verwendet, die "IDisposable" verwenden.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Ein von einer Funktion oder Methode zurückgegebener byref-Zeiger wird ab F# 4.5 implizit dereferenziert. Um den Rückgabewert als Zeiger abzurufen, verwenden Sie den Operator "address-of", z. B. "&f(x)" oder "&obj.Method(arg1, arg2)".
+ Ein byref-Zeiger, der von einer Funktion oder Methode zurückgegeben wird, wird explizit als von F# 4.5 stammend dereferenziert. Verwenden Sie den &-Operator (z.B. "&f(x)" oder "&obj.Method(arg1, arg2)"), um den Rückgabewert als Zeiger abzurufen.A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Ein Typ mit der Anmerkung "IsByRefLike" muss auch eine Struktur sein. Ziehen Sie in Betracht, dem Typ das Attribut "[<Struct>]" hinzuzufügen.
+ Ein mit "IsByRefLike" versehener Typ muss ebenfalls eine Struktur sein. Fügen Sie das [<Struct>]-Attribut zum Typ hinzu.
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Ein Typ mit der Anmerkung "IsReadOnly" muss auch eine Struktur sein. Ziehen Sie in Betracht, dem Typ das Attribut "[<Struct>]" hinzuzufügen.
+ Ein Typ mit der Anmerkung "IsReadOnly" muss ebenfalls eine Struktur sein. Fügen Sie das [<Struct>]-Attribut zum Typ hinzu.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ Keine Entsprechung für "{{" .anonymous record field
- anonymous record field
+ Feld für anonyme DatensätzeThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ Die Ausnahme "{0}" enthält kein Feld namens "{1}".Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Aktive Muster besitzen keine Felder. Diese Syntax ist ungültig.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ Der Konstruktor hat kein Feld namens "{0}".Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Zwei anonyme Datensatztypen stammen aus verschiedenen Assemblys: "{0}" und "{1}".Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Zwei anonyme Datensatztypen weisen die nicht übereinstimmenden Feldnamen "{0}" und "{1}" auf.Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ Die ByRef-Erweiterungsmethode "{0}" kann nicht aufgerufen werden. Für den ersten Parameter muss der Wert änderbar sein oder einem nicht schreibgeschützten ByRef-Typ entsprechen.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ ByRef-Typen dürfen keine optionalen Typerweiterungen aufweisen.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ Die Erweiterungsmethode "{0}" kann nicht teilweise angewendet werden, da der erste Parameter ein Byref-Typ ist.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Dieser Typ erbt keine Attribute und kann nicht mit anderen .NET-Sprachen verwendet werden.Invalid anonymous record expression
- Invalid anonymous record expression
+ Ungültiger anonymer DatensatzausdruckInvalid anonymous record type
- Invalid anonymous record type
+ Ungültiger anonymer DatensatztypThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ Die Eingabe in einen Ausdruck für das Kopieren und Aktualisieren, der einen anonymen Datensatz erstellt, muss entweder ein anonymer Datensatz oder ein Datensatz sein.The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ Der Parameter "{0}" weist einen ungültigen Typ "{1}" auf. Dies ist gemäß den Regeln von Common IL unzulässig.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ Die Funktion oder Methode weist einen ungültigen Rückgabetyp "{0}" auf. Dies ist gemäß den Regeln von Common IL unzulässig.
diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf
index 2b1ad2daaa8..8096c1c64c1 100644
--- a/src/fsharp/xlf/FSComp.txt.es.xlf
+++ b/src/fsharp/xlf/FSComp.txt.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Todas las ramas de una expresión de constructor de lista deben tener el mismo tipo. Se esperaba que esta expresión tuviera el tipo "{0}", pero aquí tiene el tipo "{1}".
+ Todas las ramas de una expresión de constructor de lista deben tener el mismo tipo. Se esperaba que esta expresión tuviera el tipo "{0}", pero aquí tiene el tipo "{1}".All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Todos los elementos de una expresión de constructor de matriz deben tener el mismo tipo. Se esperaba que esta expresión tuviera el tipo "{0}", pero aquí tiene el tipo "{1}".
+ Todos los elementos de una expresión de constructor de matriz deben tener el mismo tipo. Se esperaba que esta expresión tuviera el tipo "{0}", pero aquí tiene el tipo "{1}".This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- La expresión "if" no tiene una rama "else". La rama "then" tiene el tipo '{0}'. Dado que "if" es una expresión y no una instrucción, agregue una rama "else" que devuelva un valor del mismo tipo.
+ La expresión "if" no tiene una rama "else". La rama "then" tiene el tipo '{0}'. Dado que "if" es una expresión y no una instrucción, agregue una rama "else" que devuelva un valor del mismo tipo.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Todas las ramas de una expresión "if" deben devolver el mismo tipo. Se esperaba que esta expresión tuviera el tipo "{0}", pero aquí tiene el tipo "{1}".
+ Todas las ramas de una expresión "if" deben devolver el mismo tipo. Se esperaba que esta expresión tuviera el tipo "{0}", pero aquí tiene el tipo "{1}".All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devuelve un valor de tipo "{0}", pero esta rama devuelve un valor de tipo "{1}".
+ Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devolvió un valor de tipo "{0}", pero esta rama devolvió un valor de tipo "\{1 \}".
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Directiva no válida. Se esperaba '#I \"<ruta de acceso>\"'.
+ Directiva no válida. Se esperaba "#I \"<path>\".Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Directiva no válida. Se esperaba '#r \"<archivo-o-ensamblado>\"'.
+ Directiva no válida. Se esperaba "'#r \"<file-or-assembly>\"'.Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Directiva no válida. Se esperaba '#load \"<archivo>\" ... \"<archivo>\"'.
+ Directiva no válida. Se espera "#load \"<file>\" ... \"<file>\".
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- El módulo "{0}" contiene\n {1} \npero su signatura especifica\n {2} \nLos parámetros genéricos de la signatura y la implementación tienen tipos diferentes. Puede que falte un atributo [<Measure>].
+ El módulo "{0}" contiene\n {1} \npero su firma especifica\n {2} \nLos parámetros genéricos en la firma y aplicación tienen diversas clases. Quizá falte un atributo [<Measure>].Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- El módulo '{0}' contiene\n {1} \npero su signatura especifica\n {2} \nLas aridades de la signatura y la implementación difieren. La signatura especifica que '{3}' es una definición de función o una expresión lambda que acepta al menos {4} argumentos, pero la implementación es un valor de función calculado. Para declarar que un valor de función calculado es una implementación permitida, simplemente ponga entre paréntesis el tipo en la signatura; por ejemplo\n\tval {5}: int -> (int -> int)\nen lugar de\n\tval {6}: int -> int -> int.
+ El módulo "{0}" contiene\n {1} \npero su signatura especifica\n {2} \nLas aridades de la signatura y la implementación difieren. La signatura especifica que "{3}" es una definición de función o una expresión lambda que acepta al menos {4} argumentos, pero la implementación es un valor de función calculado. Para declarar que un valor de función calculado es una implementación permitida, simplemente ponga entre paréntesis el tipo en la signatura; por ejemplo\n\tval {5}: int -> (int -> int)\nen lugar de\n\tval {6}: int -> int -> int.
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- Las definiciones de {0} para el tipo "{1}" en la signatura y la implementación no son compatibles porque el tipo de implementación está sellado y la signatura implica que no lo esté. Considere agregar el atributo [<Sealed>] a la signatura.
+ Las definiciones {0} para el tipo "{1}" en la firma y la implementación no son compatibles porque el tipo de implementación está sellado pero la firma implica que no lo está. Considere agregar el atributo [<Sealed>] a la firma.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- Las definiciones de {0} para el tipo "{1}" en la signatura y la implementación no son compatibles porque el tipo de implementación no está sellado y la signatura implica que lo esté. Considere agregar el atributo [<Sealed>] a la implementación.
+ Las definiciones {0} para el tipo "{1}" en la firma y la implementación no son compatibles porque el tipo de implementación no está sellado pero la firma implica que lo está. Considere agregar el atributo [<Sealed>] a la implementación.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- Las definiciones de {0} para el tipo "{1}" en la signatura y la implementación no son compatibles porque la implementación es una clase abstracta pero la signatura no. Considere agregar el atributo [<AbstractClass>] a la signatura.
+ Las definiciones de {0} de tipo "{1}" en la firma y la aplicación no son compatibles porque la aplicación es una clase abstracta, pero la firma no los es. Considere agregar el atributo [<AbstractClass>] a la firma.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- Las definiciones de {0} para el tipo "{1}" en la signatura y la implementación no son compatibles porque la signatura es una clase abstracta pero la implementación no. Considere agregar el atributo [<AbstractClass>] a la implementación.
+ Las definiciones {0} para el tipo "{1}" en la firma y la implementación no son compatibles porque la firma es una clase abstracta, pero la implementación no lo es. Considere agregar el atributo [<AbstractClass>] a la implementación.
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Un tipo con el atributo 'ReferenceEquality' no puede tener una implementación explícita de 'Object.Equals(obj)', 'System.IEquatable<_>' o 'System.Collections.IStructuralEquatable'.
+ Un tipo con el atributo "ReferenceEquality" no puede tener una implementación explícita de "Object.Equals(obj)", "System.IEquatable<_>" o "System.Collections.IStructuralEquatable"A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Un tipo con el atributo 'CustomEquality' debe tener una implementación explícita de al menos uno de 'Object.Equals(obj)', 'System.IEquatable<_>' o 'System.Collections.IStructuralEquatable'.
+ Un tipo con atributo "CustomEquality" debe tener una implementación explícita de al menos uno de "Object.Equals (obj)", "System.IEquatable<_>"' o "System.Collections.IStructuralEquatable"
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- Normalmente, un tipo con el atributo 'NoComparison' no debe tener una implementación explícita de 'System.IComparable', 'System.IComparable<_>' o 'System.Collections.IStructuralComparable'. Deshabilite esta advertencia si esto es intencionado con fines de interoperabilidad.
+ Un tipo con el atributo "NoComparison" normalmente no debería tener una implementación explícita de "System.IComparable", "System.IComparable & lt; _ & gt;" o "System.Collections.IStructuralComparable". Deshabilite esta advertencia si es intencional para fines de interoperabilidad
@@ -1154,7 +1154,7 @@
The byref-typed variable '{0}' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions.
- La variable '{0}' de tipo byref se usa de forma no válida. Los tipos byref no pueden ser capturados por clausuras ni pasados a funciones internas.
+ La variable "{0}" de tipo byref se usa de una forma no válida. Los tipos byref no pueden ser capturados por clausuras ni pasados a funciones internas.
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- 'System.Void' se puede usar sólo como 'typeof<System.Void>' en F#.
+ "System.Void" solo puede utilizarse como "'typeof<System.Void>" en F#
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- Los términos [<ReflectedDefinition>] no pueden contener usos del operador de inserción de prefijo "%"
+ Los términos de [< ReflectedDefinition >] no pueden contener usos del operador de inserción de prefijo "%"
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Condicional incompleto. Se esperaba 'if <expr> then <expr>' o 'if <expr> then <expr> else <expr>'.
+ Condicional incompleta. Se esperaba "if <expr> then <expr>" o "if <expr> then <expr> else <expr>".'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- No se puede usar 'assert' como valor de primera clase. Use 'assert <expr>' en su lugar.
+ "assert" no puede utilizarse como un valor de primera clase. Utilice mejor "assert <expr>".
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- El uso de '->' en expresiones de secuencia y de cómputo está limitado a la forma 'for pat in expr -> expr'. Use la sintaxis 'for ... in ... do ... yield...' para generar elementos en expresiones de secuencia más complejas.
+ El uso de "->" en secuencia y las expresiones de cálculo se limitan a la forma "for pat in expr -> expr". Use la sintaxis "for ... in ... do ... yield..." para generar elementos en expresiones de secuencia más complejas.
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- La sintaxis '(typ,...,typ) ident' no se usa en el código de F#. Considere el uso de 'ident<typ,...,typ>' en su lugar.
+ La sintaxis "(typ,..., typ) ident" no se utiliza en código de F #. Considere el uso de "ident<typ,...,typ>" en lugar
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- Las constantes distintas de cero no pueden tener unidades genéricas. Para un cero genérico, escriba 0.0<_>.
+ Las constantes diferentes de cero no pueden tener unidades genéricas. Para cero genérico, escriba 0.0<_>.
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- A un parámetro con atributos se le debe dar también un nombre; por ejemplo, "[<Atributo>] Nombre : Tipo".
+ Un parámetro con atributos debe también tener un nombre, por ejemplo "[<Attribute>] Name : Type"
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- El tipo de struct, registro o unión '{0}' implementa la interfaz 'System.IComparable<_>' de forma explícita. Debe aplicar el atributo 'CustomComparison' al tipo y proporcionar también una implementación coherente de la interfaz no genérica System.IComparable.
+ El tipo de estructura, registro o unión "{0}" implementa la interfaz "System.IComparable<_>" explícitamente. Debe aplicar el atributo "CustomComparison" al tipo y también debe proporcionar una implementación coherente de la interfaz no genérica System.IComparable.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- Los parámetros de tipo inferidos para este valor no son estables al borrar las abreviaciones de tipo. Esto se debe al uso de abreviaciones de tipo que colocan o reordenan parámetros de tipo; por ejemplo: \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsidere declarar los parámetros de tipo para este valor de forma explícita; por ejemplo: \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ Los parámetros de tipo inferidos para este valor no son estables en la eliminación de las abreviaturas de tipo. Esto se debe al uso de abreviaturas de tipo que eliminan o reordenan los parámetros de tipo, por ejemplo,\n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsidere declarar explícitamente los parámetros de tipo para este valor, por ejemplo, \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- El tipo '{0}' no es un tipo cuyos valores se puedan enumerar con esta sintaxis, es decir, no es compatible con seq<_>, IEnumerable<_> o IEnumerable y no tiene un método GetEnumerator.
+ El tipo "{0}" no es un tipo cuyos valores se puedan enumerar con esta sintaxis; es decir, no es compatible con seq<_>, IEnumerable<_> or IEnumerable y no tiene un método GetEnumerator
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- Una restricción 'enum' debe tener el formato 'enum<tipo>'.
+ Una restricción "enum" debe tener el formato "enum<type>"
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- Esta propiedad tiene un tipo no válido. Las propiedades que toman varios argumentos de indizador deben tener tipos con el formato 'ty1 * ty2 -> ty3'. Las propiedades que devuelven funciones deben tener tipos con el formato '(ty1 -> ty2)'.
+ Esta propiedad tiene un tipo no válido. Las propiedades que toman múltiples argumentos de indexador deben tener tipos de la forma "ty1 * ty2 -> ty3". Las propiedades que devuelven funciones deben tener tipos de la forma "(ty1 -> ty2)".Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- Se esperaba un parámetro de unidad de medida, no un parámetro de tipo. Los parámetros de unidad de medida explícitos deben marcarse con el atributo [<Measure>].
+ Se esperaba un parámetro de unidad de medida, no un parámetro de tipo. Los parámetros explícitos de unidad de medida deben marcarse con el atributo[<Measure>].
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- No se pueden usar constantes de literal numérico no primitivas en detecciones de patrones porque se pueden asignar a varios tipos diferentes mediante un módulo NumericLiteral. Considere el uso del reemplazo con una variable y use 'when <variable> = <constante>' al final de la cláusula de coincidencia.
+ Las constantes literales numéricas no primitivas no se pueden usar en las coincidencias de patrones porque se pueden asignar a varios tipos diferentes mediante el uso de un módulo NumericLiteral. Considere la posibilidad de reemplazar por una variable, y usar "when <variable> = <constant>" al final de la cláusula de coincidencia.
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- Los constructores deben aplicarse a argumentos y no pueden usarse como valores de primera clase. Si es necesario, use una función anónima '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
+ Los constructores deben aplicarse a argumentos y no pueden usarse como valores de primera clase. Si es necesario, use una función anónima "(fun arg1 ... argN -> new Type(arg1,...,argN))".
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- Los valores de función mutable deben escribirse con el formato 'let mutable f = (fun args -> ...)'.
+ Los valores de función mutables deben escribirse "let mutable f = (fun args -> ...)"
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- A un valor de literal no se le pueden dar los atributos [<ThreadStatic>] o [<ContextStatic>].
+ Un valor literal no puede recibir los atributos [<ThreadStatic>] o [<ContextStatic>]
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- Los enlaces 'use' deben tener el formato 'use <var> = <expr>'.
+ Los enlaces de "use" deben tener el formato "use <var> = <expr>"
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Una declaración puede ser solo el atributo [<Literal>] si se proporciona también un valor constante; por ejemplo, "val x : int = 1".
+ Una declaración solo puede ser el atributo [<Literal>] si también se proporciona un valor constante, por ejemplo, "val x: int = 1"A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- A una declaración se le puede dar solo un valor en una signatura si la declaración tiene el atributo [<Literal>].
+ A una declaración solo se le puede dar un valor en una firma si la declaración tiene el atributo [<Literal>]Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- Las variables ThreadStatic y ContextStatic deben ser estáticas y se les debe proporcionar el atributo [<DefaultValue>] para indicar que el valor se inicializa con el valor predeterminado en cada nuevo subproceso.
+ Las variables estáticas de subproceso y estáticas de contexto deben ser estáticas y proporcionarse al atributo [<DefaultValue>] para indicar que el valor se inicializa al valor predeterminado en cada nuevo subproceso
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- Los campos "val" no inicializados deben ser mutables y estar marcados con el atributo "[<DefaultValue>]". Considere el uso de un enlace "let" en lugar de un campo "val".
+ Los campos "val" sin inicializar deben ser mutables y marcarse con el atributo "[<DefaultValue>]". Considere la posibilidad de usar un enlace "let" en lugar de un campo "val".Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- Los campos "val" estáticos en tipos deben ser mutables, privados y estar marcados con el atributo "[<DefaultValue>]". Se inicializan con el valor "null" o "cero" para su tipo. Considere también el uso de un enlace "static let mutable" en un tipo de clase.
+ Los campos "val" estáticos en los tipos deben ser mutables y privados y estar marcados con el atributo "[& lt; DefaultValue & gt;]". Se inicializan en el valor "null" o "zero" para su tipo. Considere también usar un enlace "static let mutable" en un tipo de clase.
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- Las declaraciones de tipos explícitos para constructores deben tener el formato 'ty1 * ... * tyN -> resTy'. Pueden ser necesarios paréntesis en 'resTy'.
+ Las declaraciones de tipo explícito para constructores deben tener el formato ''ty1 * ... * tyN -> resTy". Se podrían requerir paréntesis alrededor de "resTy".
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- El tipo de struct, registro o unión '{0}' implementa la interfaz 'System.IEquatable<_>' de forma explícita. Aplique el atributo 'CustomEquality' al tipo y proporcione una implementación coherente de la invalidación no genérica 'System.Object.Equals(obj)'.
+ El tipo de estructura, registro o unión "{0}'"implementa la interfaz "System.IEquatable<_>" explícitamente. Aplique el atributo "CustomEquality" al tipo y proporcione una implementación coherente de la anulación no genérica "System.Object.Equals(obj)".
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Esta abreviación de tipo tiene uno o varios parámetros de tipo declarados que no aparecen en el tipo que se va a abreviar. Las abreviaciones de tipo deben usar todos los parámetros de tipo declarados en el tipo que se va a abreviar. Considere quitar uno o varios parámetros de tipo o use una definición de tipo concreto que contenga un tipo subyacente, como 'type C<'a> = C of ...'.
+ Esta abreviatura de tipo tiene uno o varios parámetros de tipo declarados que no aparecen en el tipo que se está abreviando. Las abreviaturas de tipo deben utilizar todos los parámetros de tipo declarado en el tipo que se está abreviando. Considere la eliminación de uno o más parámetros de tipo, o utilice una definición de tipo concreta que envuelva un tipo subyacente, como "type C<'a> = C of ...".
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- La signatura oculta la representación de este tipo. Debe proporcionársele un atributo como [<Sealed>], [<Class>] o [<Interface>] para indicar las características del tipo.
+ La representación de este tipo está oculta por la firma. Debe recibir un atributo como [<Sealed>], [<Class>] o [<Interface>] para indicar las características del tipo.
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- Las especificaciones de delegado deben tener el formato 'typ -> typ'.
+ Las especificaciones del delegado deben tener el formato "typ -> typ"Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Las especificaciones de delegado no deben ser tipos currificados. Use 'typ * ... * typ -> typ' para delegados con varios argumentos y, 'typ -> (typ -> typ)', para delegados que devuelven valores de función.
+ Las especificaciones del delegado no deben ser tipos currificados. Utilice "typ * ... * typ -> typ" para delegados de argumentos múltiples, y "typ -> (typ -> typ)" para delegados que devuelven valores de función.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- La sintaxis "type X with ..." está reservada para aumentos. Los tipos cuyas representaciones están ocultas pero que tienen miembros se declaran ahora en signaturas con "type X = ...". También puede ser necesario agregar el atributo "[<Sealed>]" a la definición de tipos en la signatura.
+ La sintaxis "type X with ..." está reservada a las ampliaciones. Los tipos cuyas representaciones están ocultas pero que tienen miembros se declaran ahora en firmas utilizando "type X = ...". Puede que también necesite agregar el atributo "[<Sealed>]" a la definición del tipo de la firma
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- Vincular el recurso especificado a este ensamblado donde el formato de resinfo es <archivo>[,<nombre de cadena>[,public|private]].
+ Vincular el recurso especificado a este ensamblado donde el formato resinfo es <file>[,<string name>[,public|private]]
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- El evento '{0}' tiene un tipo no estándar. Si este evento está declarado en otro lenguaje CLI, puede ser necesario obtener acceso a este evento usando los métodos explícitos {1} y {2} para el evento. Si este evento está declarado en F#, convierta el tipo del evento en una creación de instancia de 'IDelegateEvent<_>' o 'IEvent<_,_>'.
+ El evento "{0}" tiene un tipo no estándar. Si este evento se declara en otro lenguaje CLI, puede que necesite acceder a este evento con los métodos {1} y {2} explícitos para el evento. Si este evento se declara en F #, cree instancias del evento de "IDelegateEvent<_>" o "IEvent<_,_>".
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Los parámetros de tipo se deben colocar directamente adyacentes al nombre de tipo; por ejemplo, \"type C<'T>\", no type \"C <'T>\".
+ Quite los espacios entre el nombre de tipo y el parámetro de tipo, por ejemplo, \"type C<'T>\", no tipo \"C <'T>\". Los parámetros de tipo deben colocarse justo al lado del nombre de tipo.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Los argumentos de tipo se deben colocar directamente adyacentes al nombre de tipo; por ejemplo, \"C<'T>\", no \"C <'T>\".
+ Quite los espacios entre el nombre de tipo y el parámetro de tipo, por ejemplo, \"C<'T>\", not \"C <'T>\". Los parámetros de tipo deben colocarse justo al lado del nombre de tipo.The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- Aquí no se permite el uso de la sintaxis de tipos 'int C' y 'C <int>'. Considere ajustar este tipo para escribirlo con el formato 'C<int>'.
+ El uso de la sintaxis de tipo "int C" y "C <int>" no se permite aquí. Considere el ajuste de este tipo para que se escriba en el formato "C<int>"
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- Se ha inferido que el parámetro '{0}' tiene el tipo byref. A los parámetros de tipo byref se les debe dar una anotación de tipo explícita; por ejemplo, 'x1: byref<int>'. Cuando se usa un parámetro byref, se desreferencia de forma implícita.
+ Se infirió que el parámetro "{0}" tiene un tipo byref. Los parámetros de tipo byref deben recibir una anotación de tipo explícita, por ejemplo,"'x1: byref<int>". Cuando se usa, la referencia de un parámetro byref se elimina de forma implícita.
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- El patrón activo '{0}' tiene un tipo de resultado que contiene variables de tipo no determinadas por la entrada. La causa habitual es que no se menciona un caso de resultado; por ejemplo, 'let (|A|B|) (x:int) = A x'. Esto se puede corregir con una restricción de tipo; por ejemplo, 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
+ El modelo activo "{0}" tiene un tipo de resultado que contiene las variables de tipo que no están determinadas por la entrada. La causa común es cuando un caso de resultado no se menciona, por ejemplo, "let (|A|B|) (x:int) = A x". Esto se puede solucionar con una restricción de tipo, por ejemplo, "let (|A|B|) (x:int) : Choice<int,unit> = A x"
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- El nombre del archivo MDB debe ser <ensamblado-archivo-nombre>.mdb. La opción --pdb se omitirá.
+ El nombre del archivo MDB debe ser <nombre de archivo de ensamblado>.mdb. Se omitirá la opción--pdb.
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- Los enlaces 'use!' deben tener el formato 'use! <var> = <expr>'.
+ Los enlaces "use!" deben tener el formato "use! <var> = <expr>".
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- '<' desemparejado. Se esperaba un elemento '>' de cierre.
+ Falta el valor correspondiente de "<". Se esperaba el cierre ">"Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- Operador de expresión de código delimitada '<@' inesperado en la definición de tipo. Si desea pasar una cadena textual como argumento estático a un proveedor de tipos, incluya un espacio entre los caracteres '<' y '@'.
+ Operador de cita inesperada "<@" en definición de tipo. Si desea pasar una cadena textual como un argumento estático a un proveedor de tipos, ponga un espacio entre los caracteres "<" y "@".
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- El paso de un archivo .resx ({0}) como archivo de código fuente al compilador está en desuso. Use resgen.exe para transformar el archivo .resx en un archivo .resources, que se pasará como opción --resource. Si usa MSBuild, esta operación se puede realizar mediante un elemento <recursoIncrustado> en el archivo de proyecto .fsproj.
+ Pasar un archivo .resx ({0}) como archivo de origen al compilador está en desuso. Use resgen.exe para transformar el archivo .resx en un archivo .resources para pasarlo como una opción --resource. Si está utilizando MSBuild, esto se puede hacer a través de un elemento <EmbeddedResource> en el archivo de proyecto .fsproj.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- No se permite una referencia directa al tipo '{0}' generado. En su lugar, use una definición de tipo, por ejemplo, "type TypeAlias = <rutaAcceso>". Esto indica que un proveedor de tipos agrega tipos generados al ensamblado.
+ No se permite una referencia directa al tipo generado "{0}". En su lugar, utilice una definición de tipo, por ejemplo "type TypeAlias = <path>". Esto indica que un proveedor de tipo agrega tipos generados a su ensamblado.
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- El parámetro estático "{0}" del tipo o del método "{1}" proporcionado requiere un valor. Los parámetros estáticos para proveedores de tipo se pueden especificar opcionalmente mediante argumentos con nombre, p. ej. "{2}<{3}=...>".
+ El parámetro estático "{0}" del tipo o método proporcionado "{1}" requiere un valor. Los parámetros estáticos para los proveedores de tipos pueden especificarse opcionalmente usando argumentos con nombre, por ejemplo, "{2}<{3}=...>".
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- "[<'' desemparejado. Se esperaba un elemento ">]" de cierre.
+ Falta el elemento correspondiente de "[<". Se esperaba un ">]" de cierreUnexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Final de entrada inesperado en una expresión 'match'. Se esperaba 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
+ Final inesperado de la entrada en la expresión "match". Se esperaba "'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...".Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- Final de entrada inesperado en la expresión 'try'. Se esperaba 'try <expr> with <reglas>' o 'try <expr> finally <expr>'.
+ Final inesperado en la expresión "try". Se esperaba "try <expr> with <rules>" o "try <expr> finally <expr>".Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- Final de entrada inesperado en la expresión 'while'. Se esperaba 'while <expr> do <expr>'.
+ Fin de entrada inesperado en la expresión "while". Se esperaba "while <expr> do <expr>".Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Final de entrada inesperado en una expresión 'for'. Se esperaba 'for <pat> in <expr> do <expr>'.
+ Final inesperado de la entrada en la expresión "for". Se esperaba "for <pat> in <expr> do <expr>".
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Final de entrada inesperado en la bifurcación 'then' de la expresión condicional. Se esperaba 'if <expr> then <expr>' o 'if <expr> then <expr> else <expr>'.
+ Final inesperado de la entrada en la rama "then" de la expresión condicional. Se esperaba "if <expr> then <expr>" o "if <expr> then <expr> else <expr>".Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Final de entrada inesperado en la bifurcación 'else' de la expresión condicional. Se esperaba 'if <expr> then <expr>' o 'if <expr> then <expr> else <expr>'.
+ Fin de entrada inesperado en la rama "else" de la expresión condicional. Se esperaba "'if <expr> then <expr>" o "if <expr> then <expr> else <expr>".Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Final de entrada inesperado en el cuerpo de una expresión lambda. Se esperaba 'fun <pat> ... <pat> -> <expr>'.
+ Final inesperado de la entrada en el cuerpo de la expresión lambda. Se esperaba "fun <pat> ... <pat> -> <expr>".
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- Falta 'do' en la expresión 'while'. Se esperaba 'while <expr> do <expr>'.
+ Falta "do" en la expresión "while". Se esperaba "while <expr> do <expr>".Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Falta 'do' en la expresión 'for'. Se esperaba 'for <pat> in <expr> do <expr>'.
+ Falta "do" en la expresión "for". Se espera "for <pat> in <expr> do <expr>".Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Relación de combinación no válida en '{0}'. Se esperaba 'expr <op> expr', donde <op> es =, =?, ?= o ?=?.
+ Relación de combinación no válida en "{0}". Se esperaba "expr <op> expr", donde <op> es =, =?, ?= o ?=?.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- El tipo '{0}' no es válido porque T no puede contener tipos byref en byref<T>.
+ El tipo "{0}" no es válido porque en byref<T>, T no puede contener tipos byref.
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- Los argumentos para operadores de consulta pueden requerir paréntesis; por ejemplo, 'where (x > y)' o 'groupBy (x.Length / 10)'.
+ Los argumentos de los operadores de consulta pueden requerir paréntesis, por ejemplo, "where (x > y)' or 'groupBy (x.Length / 10)"
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- La excepción o el caso de unión '{0}' no tiene un campo denominado '{1}'.
+ El caso de unión "{0}" no tiene un campo denominado "{1}".
@@ -6349,7 +6349,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- Esta no es una expresión literal válida. El atributo [<Literal>] se omitirá.
+ Esta no es expresión una literal. Se omitirá el atributo [<Literal>].
@@ -6394,7 +6394,7 @@
An error occurred while reading the F# metadata node at position {0} in table '{1}' of assembly '{2}'. The node had no matching declaration. Please report this warning. You may need to recompile the F# assembly you are using.
- Error al leer el nodo de metadatos de F# en la posición {0} de la tabla '{1}' del ensamblado '{2}'. El nodo no tiene ninguna declaración coincidente. Informe de esta advertencia. Es posible que necesite volver a compilar el ensamblado de F# que esté usando.
+ Error al leer el nodo de metadatos de F# en la posición {0} de la tabla "{1}" del ensamblado "{2}". El nodo no tiene ninguna declaración coincidente. Informe de esta advertencia. Es posible que necesite volver a compilar el ensamblado de F# que está usando.
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- La conversión de {0} a {1} es una conversión a tipo básico segura en tiempo de compilación, no una conversión a tipo heredado. Considere la posibilidad de usar el operador :> (upcast) en lugar del operador :?> (downcast).
+ La conversión de {0} a {1} es una conversión de tipo básico segura en tiempo de compilación, no una conversión de tipo heredado. Considere la posibilidad de usar el operador :> (conversión de tipo básico) en lugar del operador :?> (conversión de tipo heredado).
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Se usa en flujos de trabajo asincrónicos para enlazar un nombre al resultado de un cálculo asincrónico o, en otras expresiones de cálculo, se usa para enlazar un nombre a un resultado, que es del tipo de cálculo.
+ Utilizado en expresiones de cálculo para enlazar un nombre al resultado de otra expresión de cálculo.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Se usa para indicar un valor que se va a proporcionar como resultado de una expresión de cálculo.
+ Utilizado para proporcionar un valor para el resultado de la expresión de cálculo que contiene.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Se usa para indicar una expresión de cálculo que, cuando se evalúa, proporciona el resultado de la expresión de cálculo que contiene.
+ Se utiliza para proporcionar un valor para el resultado de la expresión de cálculo que contiene, donde ese propio valor procede del resultado de otra expresión de cálculo.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Se usa en lugar de let! en flujos de trabajo asincrónicos y otras expresiones de cálculo para los valores que requieren que se llame a Dispose para liberar recursos.
+ Utilizado en lugar de let! en expresiones de cálculo para resultados de expresiones de cálculo que implementan IDisposable.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- A partir de F# 4.5, un puntero byref devuelto por una función o un método se desreferencia de forma implícita. Para obtener el valor devuelto en forma de puntero, use el operador address-of; por ejemplo, “&f(x)” o “&obj.Method(arg1, arg2)”.
+ La referencia de un puntero byref devuelto por una función o un método se elimina implícitamente a partir de F # 4.5. Para adquirir el valor de retorno como un puntero, use el operador address-of, por ejemplo, "&f(x)' or '&obj.Method(arg1, arg2)".A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Un tipo anotado con IsByRefLike debe ser también una estructura. Considere la posibilidad de agregar el atributo [<Struct>] al tipo.
+ Un tipo anotado con IsByRefLike también debe ser una estructura. Considere agregar el atributo [<Struct>] al tipo.
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Un tipo anotado con IsReadOnly debe ser también una estructura. Considere la posibilidad de agregar el atributo [<Struct>] al tipo.
+ Un tipo anotado con IsReadOnly también debe ser una estructura. Considere agregar el atributo [<Struct>] al tipo.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ A "{{|" le falta el otro elemento correspondienteanonymous record field
- anonymous record field
+ campo de registro anónimoThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ La excepción "{0}" no tiene un campo denominado "{1}".Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Los patrones activos no tienen campos. Esta sintaxis no es válida.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ El constructor no tiene un campo denominado "{0}".Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Dos tipos de registro anónimos provienen de diferentes ensamblados "{0}" y "{1}"Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Dos tipos de registros anónimos tienen conjuntos de nombres de campo que no coinciden "{0}" y "{1}"Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ No se puede llamar al método de extensión de byref "{0}". El primer parámetro requiere que el valor sea mutable o un tipo de byref que no sea de solo lectura.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Los tipos de ByRef no pueden tener extensiones de tipo opcional.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ No se puede aplicar parcialmente el método de extensión "{0}" porque el primer parámetro es un tipo byref.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Este tipo no hereda el atributo, que no funciona correctamente con otros lenguajes. NET.Invalid anonymous record expression
- Invalid anonymous record expression
+ Expresión no válida de registro anónimoInvalid anonymous record type
- Invalid anonymous record type
+ Tipo de registro anónimo no válidoThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ La entrada a una expresión de copia y actualización que crea un registro anónimo debe ser un registro anónimo o un registroThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ El parámetro "{0}" tiene un tipo no válido "{1}". Esto no está permitido por las reglas de Common IL.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ La función o método tiene un tipo de valor devuelto no válido "{0}". Esto no está permitido por las reglas de Common IL.
diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf
index ec1569c439e..99600babd65 100644
--- a/src/fsharp/xlf/FSComp.txt.fr.xlf
+++ b/src/fsharp/xlf/FSComp.txt.fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Tous les éléments d'une expression comportant un constructeur de liste doivent avoir le même type. Cette expression était censée avoir le type '{0}', mais elle a ici le type '{1}'.
+ Tous les éléments d'une expression comportant un constructeur de liste doivent avoir le même type. Cette expression était censée avoir le type '{0}', mais elle a ici le type '{1}'.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Tous les éléments d'une expression comportant un constructeur de tableau doivent avoir le même type. Cette expression était censée avoir le type '{0}', mais elle a ici le type '{1}'.
+ Tous les éléments d'une expression comportant un constructeur de tableau doivent avoir le même type. Cette expression était censée avoir le type '{0}', mais elle a ici le type '{1}'.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- Il manque à l'expression 'if' une branche 'else'. La branche 'then' a le type '{0}'. Dans la mesure où 'if' est une expression, et non une instruction, ajoutez une branche 'else' qui retourne une valeur du même type.
+ Il manque à l'expression 'if' une branche 'else'. La branche 'then' a le type '{0}'. Dans la mesure où 'if' est une expression, et non une instruction, ajoutez une branche 'else' qui retourne une valeur du même type.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Toutes les branches d'une expression 'if' doivent avoir le même type. Cette expression était censée avoir le type '{0}', mais elle a ici le type '{1}'.
+ Toutes les branches d'une expression 'if' doivent avoir le même type. Cette expression était censée avoir le type '{0}', mais elle a ici le type '{1}'.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Toutes les branches d'une expression de correspondance de modèle doivent retourner des valeurs du même type. La première branche a retourné une valeur de type « {0} », mais cette branche a retourné une valeur de type « {1} ».
+ Toutes les branches d'une expression comportant des critères spéciaux doivent retourner des valeurs du même type. La première branche a retourné une valeur de type '{0}', mais cette branche a retourné une valeur de type '{1}'.
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Directive non valide. '#I \"<chemin>\"' attendu.
+ Directive non valide. Attendu '#I \"<chemin>\"'.Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Directive non valide. '#r \"<fichier-ou-assembly>\"' attendu
+ Directive non valide. Attendu '#r \"<fichier_ou_assembly>\"'.Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Directive non valide. '#load \"<fichier>\" ... \"<fichier>\"' attendu.
+ Directive non valide. Attendu '#load \"<file>\" ... \"<file>\"'.
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- Le module '{0}' contient\n {1} \nmais sa signature spécifie\n {2} \nLes paramètres génériques ne sont pas du même genre entre la signature et l'implémentation. Il est possible que l'attribut [<Measure>] soit manquant.
+ Le module '{0}' contient\n {1}, \nmais sa signature spécifie\n {2} \nLes paramètres génériques dans la signature et l'implémentation ont des genres différents. Un attribut [<Measure>] est peut-être manquant.Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- Le module '{0}' contient\n {1} \nmais sa signature spécifie\n {2} \nLes arités sont différentes entre la signature et l'implémentation. La signature spécifie que '{3}' est une définition de fonction ou une expression lambda qui accepte au moins {4} argument(s) mais l'implémentation est une valeur de fonction calculée. Pour déclarer qu'une valeur de fonction calculée est une implémentation autorisée, mettez simplement son type entre parenthèses dans la signature, par exemple\n\tval {5}: int -> (int -> int)\nau lieu de\n\tval {6}: int -> int -> int.
+ Le module '{0}' contient\n {1}, \nmais sa signature spécifie\n {2} \nLes arités sont différentes dans la signature et dans l'implémentation. La signature spécifie que '{3}' est une définition de fonction ou une expression lambda qui accepte au moins {4} argument(s), mais l'implémentation est une valeur de fonction calculée. Pour déclarer qu'une valeur de fonction calculée est une implémentation autorisée, mettez simplement entre parenthèses son type dans la signature, par ex.\n\tval {5}: int -> (int -> int)\nau lieu de\n\tval {6}: int -> int -> int.
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- Les {0} définitions du type '{1}' dans la signature et l'implémentation ne sont pas compatibles, car le type de l'implémentation est sealed alors que la signature implique le contraire. Ajoutez l'attribut [<Sealed>] à la signature.
+ Les définitions {0} du type '{1}' dans la signature et l'implémentation ne sont pas compatibles, car le type d'implémentation est sealed et la signature suggère qu'il ne l'est pas. Ajoutez l'attribut [<Sealed>] à la signature.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- Les {0} définitions du type '{1}' dans la signature et l'implémentation ne sont pas compatibles, car le type de l'implémentation n'est pas sealed alors que la signature implique le contraire. Ajoutez l'attribut [<Sealed>] à l'implémentation.
+ Les définitions {0} du type '{1}' dans la signature et l'implémentation ne sont pas compatibles, car le type d'implémentation n'est pas sealed et la signature suggère qu'il l'est. Ajoutez l'attribut [<Sealed>] à l'implémentation.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- Les {0} définitions du type '{1}' de la signature et de l'implémentation ne sont pas compatibles, car l'implémentation est une classe abstraite, contrairement à la signature. Ajoutez l'attribut [<AbstractClass>] à la signature.
+ Les définitions {0} du type '{1}' dans la signature et l'implémentation ne sont pas compatibles, car l'implémentation est une classe abstraite et la signature ne l'est pas. Ajoutez l'attribut [<AbstractClass>] à la signature.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- Les {0} définitions du type '{1}' de la signature et de l'implémentation ne sont pas compatibles, car la signature est une classe abstraite, contrairement à l'implémentation. Ajoutez l'attribut [<AbstractClass>] à l'implémentation.
+ Les définitions {0} pour le type '{1}' dans la signature et l'implémentation ne sont pas compatibles, car la signature est une classe abstraite et l'implémentation ne l'est pas. Ajoutez l'attribut [<AbstractClass>] à l'implémentation.
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Un type avec l'attribut 'ReferenceEquality' ne peut pas avoir une implémentation explicite de 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'
+ Un type avec l'attribut 'ReferenceEquality' ne peut pas avoir d'implémentation explicite de 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Un type avec l'attribut 'CustomEquality' doit avoir au moins une implémentation explicite de 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'
+ Un type avec l'attribut 'CustomEquality' doit avoir une implémentation explicite d'au moins un des éléments 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- Un type avec l'attribut 'NoComparison' ne doit généralement pas avoir une implémentation explicite de 'System.IComparable', 'System.IComparable<_>' ou 'System.Collections.IStructuralComparable'. Désactivez cet avertissement s'il résulte d'une action intentionnelle à des fins d'interopérabilité
+ Un type avec l'attribut 'NoComparison' ne doit généralement pas avoir d'implémentation explicite de 'System.IComparable', 'System.IComparable<_>' ou 'System.Collections.IStructuralComparable'. Désactivez cet avertissement si l'implémentation est intentionnelle ou à des fins d'interopérabilité
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- 'System.Void' ne peut être utilisé que sous la forme 'typeof<System.Void>' en F#
+ 'System.Void' peut uniquement être utilisé sous la forme 'typeof<System.Void>' dans F#
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- Les termes [<ReflectedDefinition>] ne peuvent pas contenir d'utilisations de l'opérateur d'ajout de préfixe '%'
+ Les conditions de [<ReflectedDefinition>] ne peuvent pas contenir d'utilisations de l'opérateur d'ajout de préfixe '%'
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Expression conditionnelle incomplète. 'if <expr> then <expr>' ou 'if <expr> then <expr> else <expr>' était attendu.
+ Expression conditionnelle incomplète. Attendu 'if <expr> then <expr>' ou 'if <expr> then <expr> else <expr>'.'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- 'assert' ne peut pas être utilisé en tant que valeur de première classe. Utilisez 'assert <expr>' à la place.
+ 'assert' ne doit pas être utilisé dans une valeur de première classe. Utilisez 'assert <expr>' à la place.
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- L'utilisation de '->' dans les expressions de séquence et de calcul est limitée à la forme 'for pat in expr -> expr'. Utilisez la syntaxe 'for ... in ... do ... yield...' pour générer des éléments dans des expressions de séquence plus complexes.
+ L'utilisation de '->' dans des expressions de séquence et de calcul est limitée à la forme 'for pat in expr -> expr'. Utilisez la syntaxe 'for ... in ... do ... yield...' pour générer des éléments dans des expressions de séquence plus complexes.
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- La syntaxe '(typ,...,typ) ident' n'est pas utilisée pour le code F#. Utilisez 'ident<typ,...,typ>' à la place
+ La syntaxe '(typ,...,typ) ident' n'est pas utilisée dans le code F#. Utilisez 'ident<typ,...,typ>' à la place
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- Les constantes différentes de zéro ne peuvent pas avoir d'unités génériques. Pour un zéro générique, écrivez 0.0<_>.
+ Les constantes non nulles ne peuvent pas avoir d'unités génériques. Pour un zéro générique, écrivez 0.0<_>.
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- Un paramètre avec des attributs doit également être nommé, par exemple '[<Attribute>] Name : Type'
+ Un paramètre avec des attributs doit aussi avoir un nom, par ex. '[<Attribute>] Name : Type'
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- Le type struct, enregistrement ou union '{0}' implémente explicitement l'interface 'System.IComparable<_>'. Vous devez appliquer l'attribut 'CustomComparison' au type et fournir une implémentation cohérente de l'interface non générique System.IComparable.
+ Le type de struct, d'enregistrement ou d'union '{0}' implémente l'interface 'System.IComparable<_>' explicitement. Vous devez appliquer l'attribut 'CustomComparison' au type et fournir une implémentation cohérente de l'interface non générique System.IComparable.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- Les paramètres de type déduits pour cette valeur ne sont pas stables sous l'action de suppression des abréviations de type. Cela est dû à l'utilisation des abréviations de type qui suppriment ou réorganisent les paramètres de type, par exemple \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nDéclarez explicitement les paramètres de type pour cette valeur, par exemple\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ Les paramètres de type déduits pour cette valeur ne sont pas stables après l'effacement des abréviation de type. C'est parce que l'utilisation des abréviations de type supprime ou réorganise les paramètres de type, par ex. \n\ttype taggedInt<'a> = int ou\n\ttype swap<'a,'b> = 'b * 'a.\nDéclarez les paramètres de type explicitement pour cette valeur, par ex.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- Le type '{0}' n'est pas un type dont les valeurs peuvent être énumérées avec cette syntaxe. En d'autres termes, il n'est pas compatible avec seq<_>, IEnumerable<_> ou IEnumerable, et n'a pas de méthode GetEnumerator
+ Le type '{0}' n'est pas un type dont les valeurs peuvent être énumérées avec cette syntaxe, par ex. il n'est pas compatible avec seq<_>, IEnumerable<_> ou IEnumerable et n'a pas de méthode GetEnumerator
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- Une contrainte 'enum' doit être sous la forme 'enum<type>'
+ Une contrainte 'enum' doit être de la forme 'enum<type>'
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- Cette propriété a un type non valide. Les propriétés qui acceptent plusieurs arguments d'indexeur doivent avoir des types sous la forme 'ty1 * ty2 -> ty3'. Les propriétés qui retournent des fonctions doivent avoir des types sous la forme '(ty1 -> ty2)'.
+ Cette propriété a un type non valide. Les propriétés qui prennent plusieurs arguments d'indexeur doivent avoir des types de la forme 'ty1 * ty2 -> ty3'. Les propriétés qui retournent des fonctions doivent avoir des types de la forme '(ty1 -> ty2)'.Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- Paramètre d'unité de mesure attendu à la place d'un paramètre de type. Les paramètres d'unité de mesure explicites doivent être marqués avec l'attribut [<Measure>].
+ Paramètre d'unité de mesure attendu et non un paramètre de type. Les paramètres d'unité de mesure explicites doivent être marqués avec l'attribut [<Measure>].
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- Impossible d'utiliser les constantes littérales numériques non primitives dans les critères spéciaux, car elles peuvent être mappées à plusieurs types différents via l'utilisation d'un module NumericLiteral. Utilisez une variable en remplacement et utilisez 'when <variable> = <constante>' à la fin de la clause de correspondance.
+ Les constantes littérales numériques non primitives ne peuvent pas être utilisées dans les correspondances de modèle, car elles ne peuvent pas être mappées à plusieurs types différents à l'aide d'un module NumericLiteral. Remplacez-les par une variable et utilisez 'when <variable> = <constante>' à la fin de la clause de correspondance.
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- Les constructeurs doivent être appliqués aux arguments et ne peuvent pas être utilisés en tant que valeurs de première classe. Si nécessaire, utilisez une fonction anonyme '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
+ Les constructeurs doivent être appliqués aux arguments et ne peuvent pas être utilisés comme des valeurs de première classe. Si nécessaire, utilisez une fonction anonyme '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Impossible de donner à une valeur littérale les attributs [<ThreadStatic>] ou [<ContextStatic>]
+ Une valeur littérale ne peut pas avoir les attributs [<ThreadStatic>] ou [<ContextStatic>]
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- Les liaisons 'use' doivent être sous la forme 'use <var> = <expr>'
+ Les liaisons 'use' doivent être de la forme 'use <var> = <expr>'
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Une déclaration ne peut être que l'attribut [<Literal>] si une valeur de constante est également fournie, par exemple 'val x : int = 1'
+ Une déclaration peut seulement être l'attribut [<Literal>] si une valeur constante est aussi donnée, par ex. 'val x : int = 1'A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- Une déclaration ne peut recevoir de valeur dans une signature que si la déclaration a l'attribut [<Literal>]
+ Une déclaration peut uniquement recevoir une valeur dans une signature si elle a l'attribut [<Literal>]Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- Les variables static de thread et de contexte doivent être statiques et recevoir l'attribut [<DefaultValue>] pour indiquer que la valeur est initialisée à l'aide de la valeur par défaut pour chaque nouveau thread
+ Les variables static de thread et de contexte doivent être statiques et avoir l'attribut [<DefaultValue>] pour indiquer que la valeur est initialisée sur la valeur par défaut sur chaque nouveau thread
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- Les champs 'val' non initialisés doivent être mutables et marqués avec l'attribut '[<DefaultValue>]'. Utilisez une liaison 'let' à la place d'un champ 'val'.
+ Les champs 'val' non initialisés doivent être mutables et marqués avec l'attribut '[<DefaultValue>]'. Utilisez une liaison 'let' au lieu d'un champ 'val'.Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- Les champs 'val' statiques des types doivent être mutables, privés et marqués avec l'attribut '[<DefaultValue>]'. Ils sont initialisés avec la valeur 'null' ou 'zero' pour leur type. Utilisez également une liaison 'static let mutable' dans un type classe.
+ Les champs 'val' statiques dans les types doivent être mutables, privés et marqués avec l'attribut '[<DefaultValue>]'. Ils sont initialisés sur la valeur 'null' ou 'zero' pour leur type. Utilisez aussi une liaison 'static let mutable' dans un type de classe.
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- Les déclarations de type explicite pour les constructeurs doivent être sous la forme 'ty1 * ... * tyN -> resTy'. Des parenthèses peuvent être requises autour de 'resTy'
+ Les déclarations de type explicites pour les constructeurs doivent être de la forme 'ty1 * ... * tyN -> resTy'. Des parenthèses peuvent être nécessaires autour de 'resTy'
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- Le type struct, enregistrement ou union '{0}' implémente explicitement l'interface 'System.IEquatable<_>'. Appliquez l'attribut 'CustomEquality' au type et fournissez une implémentation cohérente de la substitution non générique 'System.Object.Equals(obj)'.
+ Le type de struct, d'enregistrement ou d'union '{0}' implémente l'interface 'System.IEquatable<_>' explicitement. Appliquez l'attribut 'CustomEquality' au type et fournissez une implémentation cohérente du remplacement non générique 'System.Object.Equals(obj)'.
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Cette abréviation de type a un ou plusieurs paramètres de type déclarés qui n'apparaissent pas dans le type abrégé. Les abréviations de type doivent utiliser tous les paramètres de type déclarés dans le type abrégé. Supprimez un ou plusieurs paramètres de type, ou utilisez une définition de type concret qui inclut dans un wrapper un type sous-jacent, par exemple 'type C<'a> = C of ...'.
+ Cette abréviation de type a un ou plusieurs paramètres de type déclarés qui n'apparaissent pas dans le type abrégé. Les abréviations de type doivent utiliser tous les paramètres de type déclarés dans le type abrégé. Supprimez un ou plusieurs paramètres de type ou utilisez une définition de type concrète qui encapsule un type sous-jacent, par ex. 'type C<'a> = C of ...'.
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- La représentation de ce type est masquée par la signature. Un attribut tel que [<Sealed>], [<Class>] ou [<Interface>] doit lui être fourni pour indiquer les caractéristiques du type.
+ La représentation de ce type est masquée par la signature. Elle doit avoir un attribut de type [<Sealed>], [<Class>] ou [<Interface>] pour indiquer les caractéristiques du type.
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- Les spécifications des délégués doivent être sous la forme 'typ -> typ'
+ Les spécifications de délégué doivent être de la forme 'typ -> typ'Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Les spécifications des délégués ne doivent pas être des types curryfiés. Utilisez 'typ * ... * typ -> typ' pour les délégués à arguments multiples et 'typ -> (typ -> typ)' pour les délégués qui retournent des valeurs de fonction.
+ Les spécifications de délégué ne doivent pas être des types curryfiés. Utilisez 'typ * ... * typ -> typ' pour les délégués multiarguments et 'typ -> (typ -> typ)' pour les délégués qui retournent des valeurs de fonction.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- La syntaxe 'type X with ...' est réservée aux augmentations. Les types dont les représentations sont masquées mais qui comportent des membres sont désormais déclarés dans les signatures via 'type X = ...'. Vous devrez peut-être également ajouter l'attribut '[<Sealed>] à la définition de type dans la signature
+ La syntaxe 'type X with ...' est réservée aux augmentations. Les types dont les représentations sont masquées, mais qui ont des membres sont maintenant déclarés dans des signatures à l'aide de 'type X = ...'. Vous pouvez avoir besoin d'ajouter l'attribut '[<Sealed>] à la définition de type dans la signature
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- Lier la ressource spécifiée à cet assembly où le format resinfo est <fichier>[,<nom de chaîne>[,public|private]]
+ Lier la ressource spécifiée à cet assembly où le format resinfo est <fichier>[,<nom de la chaîne>[,public|private]]
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- L'événement '{0}' a un type non standard. Si cet événement est déclaré dans un autre langage CLI, vous pouvez accéder à cet événement à l'aide des méthodes explicites {1} et {2} de l'événement. Si cet événement est déclaré en F#, faites du type de l'événement une instanciation de 'IDelegateEvent<_>' ou 'IEvent<_,_>'.
+ L'événement '{0}' a un type non standard. Si cet événement est déclaré dans un autre langage CLI, vous pouvez avoir besoin d'y accéder à l'aide des méthodes explicites {1} et {2} pour l'événement. Si cet événement est déclaré en F#, le type de l'événement doit être une instanciation de 'IDelegateEvent<_>' ou 'IEvent<_,_>'.
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Les paramètres de type doivent être directement adjacents au nom de type, par exemple \"type C<'T>\" et non type \"C <'T>\"
+ Supprimez les espaces entre le nom et le paramètre de type, par ex. \"type C<'T>\" et non \"C <'T>\". Les paramètres de type doivent être juxtaposés au nom de type.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Les arguments de type doivent être directement adjacents au nom de type, par exemple \"C<'T>\" et non \"C <'T>\"
+ Supprimez les espaces entre le nom et le paramètre de type, par ex. \"C<'T>\" et non \"C <'T>\". Les paramètres de type doivent être juxtaposés au nom de type.The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- L'utilisation de la syntaxe de type 'int C' et 'C <int>' n'est pas autorisée ici. Modifiez ce type en l'écrivant sous la forme 'C<int>'
+ L'utilisation de la syntaxe de type 'int C' et 'C <int>' n'est pas autorisée ici. Ajustez ce type en l'écrivant de la forme 'C<int>'
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- Le paramètre '{0}' a été déduit pour avoir un type byref. Les paramètres de type byref doivent avoir une annotation de type explicite, par exemple 'x1: byref<int>'. Lorsqu'il est utilisé, un paramètre byref est déréférencé implicitement.
+ Le type byref a été attribué au paramètre '{0}' par déduction. Les paramètres de type byref doivent recevoir une annotation de type explicite, par ex. 'x1: byref<int>'. Quand il est utilisé, un paramètre byref est implicitement déréférencé.
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- Le modèle actif '{0}' a un type de résultat contenant des variables de type qui ne sont pas déterminées par l'entrée. Un cas de résultat n'est probablement pas mentionné, par ex. 'let (|A|B|) (x:int) = A x'. Cela peut être corrigé avec une contrainte de type, par ex. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
+ Le modèle actif '{0}' a un type de résultat contenant des variables de type non déterminées par l'entrée. Souvent, il s'agit d'un cas de résultat non mentionné, par ex. 'let (|A|B|) (x:int) = A x'. Le problème peut être corrigé avec une contrainte de type, par ex. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- Le nom du fichier MDB doit être <nom-fichier-assembly>.mdb. L'option --pdb sera ignorée.
+ Le nom du fichier MDB doit être <nom_fichier_assembly>.mdb. L'option --pdb est ignorée.
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- Les liaisons 'use!' doivent respecter le format 'use! <var> = <expr>'
+ Les liaisons 'use!' doivent être de la forme 'use! <var> = <expr>'
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- '<' sans correspondance. Une '>' fermante était attendue
+ '<' sans correspondance. '>' fermant attenduUnexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- Opérateur de citation inattendu '<@' dans la définition de type. Si vous envisagez de passer une chaîne textuelle en tant qu'argument statique à un fournisseur de type, insérez un espace entre les caractères '<' et '@'.
+ Opérateur de citation inattendu '<@' dans la définition de type. Si vous voulez passer une chaîne textuelle comme argument statique à un fournisseur de type, insérez un espace entre les caractères '<' et '@'.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- Le passage d'un fichier .resx ({0}) en tant que fichier source au compilateur est déconseillé. Utilisez resgen.exe pour transformer le fichier .resx file en fichier .resources devant être passé en tant qu'option --resource. Si vous utilisez MSBuild, vous pouvez effectuer cette opération via un élément <EmbeddedResource> dans le fichier de projet .fsproj.
+ Le passage d'un fichier .resx ({0}) comme fichier source au compilateur est déprécié. Utilisez resgen.exe pour transformer le fichier .resx en fichier .resources à passer comme option --resource. Si vous utilisez MSBuild, vous pouvez le faire avec un élément <EmbeddedResource> dans le fichier projet .fsproj.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- Une référence directe au type généré '{0}' n'est pas autorisée. À la place, utilisez une définition de type, par exemple 'type TypeAlias = <chemin>'. Ceci indique qu'un fournisseur de type ajoute les types générés à votre assembly.
+ Une référence directe au type généré '{0}' n'est pas autorisée. Utilisez plutôt une définition de type, par ex. 'type TypeAlias = <chemin>'. Cela indique qu'un fournisseur de type ajoute des types générés à votre assembly.
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- Le paramètre statique '{0}' du type ou de la méthode fournie '{1}' nécessite une valeur. Les paramètres statiques des fournisseurs de type peuvent être spécifiés de manière facultative à l'aide d'arguments nommés, par exemple '{2}<{3}=...>'.
+ Le paramètre statique '{0}' de la méthode ou du type fourni '{1}' nécessite une valeur. Les paramètres statiques envoyés aux fournisseurs de type peuvent éventuellement être spécifiés à l'aide d'arguments nommés, par ex. '{2}<{3}=...>'.
@@ -5909,17 +5909,17 @@
{0} var in collection {1} (outerKey = innerKey). Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey). Notez que les parenthèses sont obligatoires après '{2}'
+ var {0} dans la collection {1} (outerKey = innerKey). Notez que les parenthèses sont obligatoires après '{2}'{0} var in collection {1} (outerKey = innerKey) into group. Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey) dans le groupe. Notez que les parenthèses sont obligatoires après '{2}'
+ var {0} dans la collection {1} (outerKey = innerKey) au sein du groupe. Notez que les parenthèses sont obligatoires après '{2}'{0} var in collection
- {0} var in collection
+ var {0} dans la collection
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- Caractères '[<' non appariés. Les caractères '>]' de fermeture était attendus
+ '[<' sans correspondance. '>]' fermant attenduUnexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Fin d'entrée inattendue dans l'expression 'match'. 'match <expr> with | <pat> -> <expr> | <pat> -> <expr>…' était attendu.
+ Fin d'entrée inattendue dans l'expression 'match'. Attendu 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- Fin d'entrée inattendue dans l'expression 'try'. 'try <expr> with <rules>' ou 'try <expr> finally <expr>' était attendu.
+ Fin d'entrée inattendue dans l'expression 'try'. Attendu 'try <expr> with <rules>' ou 'try <expr> finally <expr>'.Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- Fin d'entrée inattendue dans l'expression 'while'. 'while <expr> do <expr>' était attendu.
+ Fin d'entrée inattendue dans l'expression 'while'. Attendu 'while <expr> do <expr>'.Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Fin d'entrée inattendue dans l'expression 'for'. 'for <pat> in <expr> do <expr>' était attendu.
+ Fin d'entrée inattendue dans l'expression 'for'. Attendu 'for <pat> in <expr> do <expr>'.
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Fin d'entrée inattendue dans la branche 'then' d'une expression conditionnelle. 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>' était attendu.
+ Fin d'entrée inattendue dans la branche 'then' de l'expression conditionnelle. Attendu 'if <expr> then <expr>' ou 'if <expr> then <expr> else <expr>'.Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Fin d'entrée inattendue dans la branche 'else' d'une expression conditionnelle. 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>' était attendu.
+ Fin d'entrée inattendue dans la branche 'else' de l'expression conditionnelle. Attendu 'if <expr> then <expr>' ou 'if <expr> then <expr> else <expr>'.Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Fin d'entrée inattendue dans le corps de l'expression lambda. 'fun <pat> … <pat> -> <expr>' était attendu.
+ Fin d'entrée inattendue dans le corps d'une expression lambda. Attendu 'fun <pat> ... <pat> -> <expr>'.
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- 'do' est manquant dans l'expression 'while'. 'while <expr> do <expr>' était attendu.
+ 'do' est manquant dans l'expression 'while'. Attendu 'while <expr> do <expr>'.Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'do' est manquant dans l'expression 'for'. 'for <pat> in <expr> do <expr>' était attendu.
+ 'do' manquant dans l'expression 'for'. Attendu 'for <pat> in <expr> do <expr>'.Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Relation de jointure non valide dans '{0}'. 'expr <op> expr' où <op> est =, =?, ?= ou ?=? était attendu.
+ Relation de jointure non valide dans '{0}'. Attendu 'expr <op> expr', où <op> est =, =?, ?= ou ?=?.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- Le type '{0}' est interdit, car dans byref<T>, T ne peut pas contenir de types byref.
+ Le type '{0}' n'est pas autorisé, car il se trouve dans byref<T>, T ne peut pas contenir de types byref.
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- Les arguments des opérateurs de requête nécessitent des parenthèses, par exemple where (x > y)' ou 'groupBy (x.Length / 10)'
+ Les arguments des opérateurs de requête peuvent nécessiter des parenthèses, par ex. 'where (x > y)' ou 'groupBy (x.Length / 10)'
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- Le cas ou l'exception d'union '{0}' ne possède pas de champ nommé '{1}'.
+ Le cas d'union '{0}' n'a pas de champ nommé '{1}'.
@@ -6349,7 +6349,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- Ceci n'est pas une expression littérale valide. L'attribut [<Literal>] va être ignoré.
+ Cette expression n'est pas une expression littérale valide. L'attribut [<Literal>] est ignoré.
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- La conversion de {0} en {1} est un cast sécurisé d'un type dérivé en l'une de ses classes de base au moment de la compilation, et non un cast d'une classe de base en une classe dérivée. Utilisez l'opérateur :> (upcast) à la place de l'opérateur :?> (downcast).
+ La conversion de {0} en {1} est un hyperonyme sécurisé et non un hyponyme. Utilisez l'opérateur :> (hyperonyme) au lieu de l'opérateur :?> (hyponyme).
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Utilisé dans les flux de travail asynchrones pour lier un nom au résultat d'un calcul asynchrone ou, dans d'autres expressions de calcul, pour lier un nom à un résultat, qui correspond au type de calcul.
+ Utilisé dans les expressions de calcul pour lier un nom au résultat d'une autre expression de calcul.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Permet d'indiquer une valeur à fournir en tant que résultat d'une expression de calcul.
+ Utilisé pour fournir une valeur au résultat de l'expression de calcul conteneur.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Permet d'indiquer une expression de calcul qui, une fois évaluée, fournit le résultat de l'expression de calcul qui la contient.
+ Utilisé pour fournir une valeur au résultat de l'expression de calcul conteneur, où cette valeur provient du résultat d'une autre expression de calcul.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Utilisé à la place de let! dans les flux de travail asynchrones et autres expressions de calcul pour les valeurs qui nécessitent l'appel de Dispose pour libérer des ressources.
+ Utilisé au lieu de let! dans les expressions de calcul pour des résultats d'expression de calcul qui implémentent IDisposable.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Un pointeur byref retourné par une fonction ou une méthode est déréférencé implicitement à compter de F# 4.5. Pour acquérir la valeur de retour comme pointeur, utilisez l'opérateur &. Par exemple : '&f(x)' ou '&obj.Method(arg1, arg2)'.
+ Un pointeur byref retourné par une fonction ou une méthode est implicitement déréférencé à partir de F# 4.5. Pour acquérir la valeur de retour sous forme de pointeur, utilisez l'opérateur d'adresse, par ex. '&f(x)' ou '&obj.Method(arg1, arg2)'.A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Un type annoté avec IsByRefLike doit également être un struct. Ajoutez l'attribut [<Struct>] au type.
+ Un type annoté avec IsByRefLike doit aussi être un struct. Ajoutez l'attribut [<Struct>] au type.
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Un type annoté avec IsReadOnly doit également être un struct. Ajoutez l'attribut [<Struct>] au type.
+ Un type annoté avec IsReadOnly doit aussi être un struct. Ajoutez l'attribut [<Struct>] au type.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ '{{|' incompatibleanonymous record field
- anonymous record field
+ champ d'enregistrement anonymeThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ L'exception '{0}' n'a pas pas de champ nommé '{1}'.Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Les modèles actifs n'ont pas de champ. Cette syntaxe n'est pas valide.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ Le constructeur n'a pas de champ nommé '{0}'.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Deux types d'enregistrement anonyme proviennent d'assemblys différents '{0}' et '{1}'Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Deux types d'enregistrement anonyme ont des ensembles de noms de champ incompatibles '{0}' et '{1}'Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ Impossible d’appeler la méthode d’extension byref « {0} ». Le premier paramètre nécessite que la valeur soit mutable ou un type byref autre qu'en lecture seule.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Les types ByRef ne sont pas autorisés à avoir des extensions de type en option.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ Impossible d'appliquer partiellement la méthode d’extension « {0} » car le premier paramètre est un type byref.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Ce type n'hérite pas d'attribut, il ne fonctionne pas correctement avec d'autres langages .NET.Invalid anonymous record expression
- Invalid anonymous record expression
+ Expression d'enregistrement anonyme non valideInvalid anonymous record type
- Invalid anonymous record type
+ Type d'enregistrement anonyme non valideThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ L'entrée d'une expression de copie et mise à jour qui crée un enregistrement anonyme doit être un enregistrement anonyme ou un enregistrementThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ Le paramètre « {0} » a un type non valide (« {1} »), ce qui n'est pas autorisé par les règles de Common IL.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ La méthode ou la fonction a un type de retour non valide (« {0} »), ce qui n’est pas autorisé par les règles de Common IL.
diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf
index 3de0fd7964f..b41008e3c99 100644
--- a/src/fsharp/xlf/FSComp.txt.it.xlf
+++ b/src/fsharp/xlf/FSComp.txt.it.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Il tipo di tutti gli elementi di un'espressione di costruttore di elenco deve essere lo stesso. Il tipo previsto di questa espressione è '{0}', ma quello effettivo è '{1}'.
+ Il tipo di tutti gli elementi di un'espressione di costruttore di elenco deve essere lo stesso. Il tipo previsto di questa espressione è '{0}', ma quello effettivo è '{1}'.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Il tipo di tutti gli elementi di un'espressione di costruttore di matrice deve essere lo stesso. Il tipo previsto di questa espressione è '{0}', ma quello effettivo è '{1}'.
+ Il tipo di tutti gli elementi di un'espressione di costruttore di matrice deve essere lo stesso. Il tipo previsto di questa espressione è '{0}', ma quello effettivo è '{1}'.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- Nell'espressione 'if' manca un ramo 'else'. Il tipo del ramo 'then' è '{0}'. Dal momento che 'if' è un'espressione e non un'istruzione, aggiungere un ramo 'else' che restituisca un valore dello stesso tipo.
+ Nell'espressione 'if' manca un ramo 'else'. Il tipo del ramo 'then' è '{0}'. Dal momento che 'if' è un'espressione e non un'istruzione, aggiungere un ramo 'else' che restituisca un valore dello stesso tipo.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Il tipo di tutti i rami di un'espressione 'if' deve essere lo stesso. Il tipo previsto di questa espressione è '{0}', ma quello effettivo è '{1}'.
+ Il tipo di tutti i rami di un'espressione 'if' deve essere lo stesso. Il tipo previsto di questa espressione è '{0}', ma quello effettivo è '{1}'.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Tutti i rami di un'espressione di criteri di ricerca devono restituire valori dello stesso tipo. Il primo ramo ha restituito un valore di tipo '{0}', ma questo ramo ha restituito un valore di tipo '{1}'.
+ Tutti i rami di un'espressione di criteri di ricerca devono restituire valori dello stesso tipo. Il primo ramo ha restituito un valore di tipo '{0}', ma questo ramo ha restituito un valore di tipo '{1}'.
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Direttiva non valida. Previsto '#I \"<percorso>\"'.
+ Direttiva non valida. È previsto '#I \"<percorso>\"'.Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Direttiva non valida. Previsto '#r \"<file-oppure-assembly>\"'.
+ Direttiva non valida. È previsto '#r \"<file-oppure-assembly>\"'.Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Direttiva non valida. Previsto '#load \"<file>\" ... \"<file>\"'.
+ Direttiva non valida. È previsto '#load \"<file>\" ... \"<file>\"'.
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- Il modulo '{0}' contiene\n {1} \nma nella relativa firma è indicato\n {2} \nI parametri generici nella firma e nell'implementazione sono di tipo diverso. È possibile che manchi l'attributo [<Measure>].
+ Il modulo '{0}' contiene\n {1} \nma la relativa firma specifica\n {2} \nI parametri generici nella firma e nell'implementazione sono di tipo diverso. È possibile che manchi l'attributo [<Measure>].Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- Il modulo '{0}' contiene\n {1} \ntuttavia la relativa firma specifica\n {2} \nI gradi nella firma e nell'implementazione sono diversi. La firma specifica che '{3}' è una definizione di funzione o un'espressione lambda che accetta un numero di argomenti almeno pari a {4}, tuttavia l'implementazione è un valore di funzione calcolato. Per dichiarare che un valore di funzione calcolato è un'implementazione consentita, è sufficiente racchiudere in parentesi il relativo tipo nella firma, ad esempio\n\tval {5}: int -> (int -> int)\ninvece di\n\tval {6}: int -> int -> int.
+ Il modulo '{0}' contiene\n {1} \nma la relativa firma specifica\n {2} \nI gradi nella firma e nell'implementazione sono diversi. La firma specifica che '{3}' è una definizione di funzione o un'espressione lambda che accetta un numero di argomenti almeno pari a {4}, tuttavia l'implementazione è un valore di funzione calcolato. Per dichiarare che un valore di funzione calcolato è un'implementazione consentita, è sufficiente racchiudere tra parentesi il relativo tipo nella firma, ad esempio\n\tval {5}: int -> (int -> int)\ninvece di\n\tval {6}: int -> int -> int.
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- Un tipo con attributo 'NoComparison' non deve avere in genere un'implementazione esplicita di 'System.IComparable', 'System.IComparable<_>' o 'System.Collections.IStructuralComparable'. Disabilitare questo avviso se ciò è intenzionale a fini di interoperabilità
+ Un tipo con attributo 'NoComparison' non deve avere in genere un'implementazione esplicita di 'System.IComparable', 'System.IComparable<_>' o 'System.Collections.IStructuralComparable'. Disabilitare questo avviso se questa scelta è intenzionale per garantire l'interoperabilità
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- 'System.Void' può essere utilizzato solo come 'typeof<System.Void>' in F#
+ 'System.Void' può essere usato solo come 'typeof<System.Void>' in F#
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- I termini [<ReflectedDefinition>] non possono contenere utilizzi dell'operatore di splicing del prefisso '%'
+ I termini [<ReflectedDefinition>] non possono contenere usi dell'operatore di splicing del prefisso '%'
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Espressione condizionale incompleta. Previsto 'if <expr> then <expr>' o 'if <expr> then <expr> else <expr>'.
+ Espressione condizionale incompleta. È previsto 'if <expr> then <expr>' o 'if <expr> then <expr> else <expr>'.'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- Non è più possibile utilizzare 'assert' come valore di prima classe. Utilizzare invece 'assert <expr>'.
+ Non è possibile usare 'assert' come valore di prima classe. Usare 'assert <expr>'.
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- L'utilizzo di '->' in espressioni sequenza e di calcolo è limitato al formato 'for crit in expr -> expr'. Utilizzare la sintassi 'for ... in ... do ... yield...' per generare elementi in espressioni sequenza più complesse.
+ L'uso di '->' in espressioni sequenza e di calcolo è limitato al formato 'for crit in expr -> expr'. Usare la sintassi 'for ... in ... do ... yield...' per generare elementi in espressioni sequenza più complesse.
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- La sintassi '(typ,...,typ) ident' non è utilizzata nel codice F#. Provare a utilizzare invece 'ident<typ,...,typ>'
+ La sintassi '(typ,...,typ) ident' non è usata nel codice F#. Provare a usare 'ident<typ,...,typ>'
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- I parametri di tipo dedotti per il valore non sono stabili nell'ambito della cancellazione di abbreviazioni di tipo. Questa condizione è dovuta all'utilizzo di abbreviazioni di tipo che eliminano o riordinano i parametri di tipo, ad esempio \n\ttype taggedInt<'a> = int o\n\ttype swap<'a,'b> = 'b * 'a.\nProvare a dichiarare i parametri di tipo per questo valore in modo esplicito, ad esempio \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ I parametri di tipo dedotti per il valore non sono stabili nell'ambito della cancellazione di abbreviazioni di tipo. Questa condizione è dovuta all'uso di abbreviazioni di tipo che eliminano o riordinano i parametri di tipo, ad esempio \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nProvare a dichiarare i parametri di tipo per questo valore in modo esplicito, ad esempio \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
@@ -2634,7 +2634,7 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- La proprietà contiene un tipo non valido. Le proprietà che utilizzano più argomenti di indicizzatore devono avere tipi nel formato 'ti1 * ti2 -> ti3'. Le proprietà che restituiscono funzioni devono avere tipi nel formato '(ti1 -> ti2)'.
+ La proprietà contiene un tipo non valido. Le proprietà che usano più argomenti di indicizzatore devono avere tipi nel formato 'ty1 * ty2 -> ty3'.. Le proprietà che restituiscono funzioni devono avere tipi nel formato '(ti1 -> ti2)'.
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- I costruttori devono essere applicati ad argomenti e non possono essere utilizzati come valori di prima classe. Se necessario, utilizzare una funzione anonima '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
+ I costruttori devono essere applicati ad argomenti e non possono essere usati come valori di prima classe. Se necessario, usare una funzione anonima '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Non è possibile assegnare gli attributi [<ThreadStatic>] o [<ContextStatic>] a un valore letterale
+ Non è possibile assegnare l'attributo [<ThreadStatic>] o [<ContextStatic>] a un valore letterale
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Questa abbreviazione di tipo ha uno o più parametri di tipo dichiarati non inclusi nel tipo da abbreviare. Le abbreviazioni di tipo devono utilizzare tutti i parametri di tipo dichiarati nel tipo da abbreviare. Provare a rimuovere uno o più parametri di tipo oppure a utilizzare una definizione di tipo concreto che esegue il wrapping di un tipo sottostante, ad esempio 'type C<'a> = C of ...'.
+ Questa abbreviazione di tipo ha uno o più parametri di tipo dichiarati non inclusi nel tipo da abbreviare. Le abbreviazioni di tipo devono usare tutti i parametri di tipo dichiarati nel tipo da abbreviare. Provare a rimuovere uno o più parametri di tipo oppure a usare una definizione di tipo concreto che esegue il wrapping di un tipo sottostante, ad esempio 'type C<'a> = C of ...'.
@@ -3869,7 +3869,7 @@
Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Le specifiche di delegato non devono essere tipi sottoposti a currying. Utilizzare 'typ * ... * typ -> typ' per delegati con più argomenti e 'typ -> (typ -> typ)' per delegati che restituiscono valori di funzione.
+ Le specifiche di delegato non devono essere tipi sottoposti a currying. Usare 'typ * ... * typ -> typ' per delegati con più argomenti e 'typ -> (typ -> typ)' per delegati che restituiscono valori di funzione.
@@ -5119,12 +5119,12 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- I parametri di tipo devono trovarsi immediatamente accanto al nome del tipo, ad esempio \"type C<'T>\", non type \"C <'T>\"
+ Rimuovere gli spazi tra il nome del tipo e il parametro di tipo, ad esempio \"type C<'T>\", non \"type C <'T>\". I parametri di tipo devono essere direttamente adiacenti al nome del tipo.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Gli argomenti tipo devono trovarsi immediatamente accanto al nome del tipo, ad esempio \"C<'T>\", non \"C <'T>\"
+ Rimuovere gli spazi tra il nome del tipo e il parametro di tipo, ad esempio \"C<'T>\", non \"C <'T>\". I parametri di tipo devono essere direttamente adiacenti al nome del tipo.
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- Per il parametro '{0}' è stato dedotto il tipo byref. Ai parametri di tipo byref deve essere associata un'annotazione di tipo esplicita, ad esempio 'x1: byref<int>'. Se utilizzato, un parametro byref viene dereferenziato in modo implicito.
+ Per il parametro '{0}' è stato dedotto il tipo byref. Ai parametri di tipo byref deve essere associata un'annotazione di tipo esplicita, ad esempio 'x1: byref<int>'. Se usato, un parametro byref viene dereferenziato in modo implicito.
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- '<' senza corrispondenza. Previsto '>' di chiusura
+ '<' non corrispondente. È previsto '>' di chiusuraUnexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- Operatore di quotation '<@' imprevisto nella definizione di tipo. Se si vuole passare una stringa verbatim come argomento statico a un provider di tipi, inserire uno spazio tra i caratteri '<' e '@'.
+ Operatore di quotation '<@' imprevisto nella definizione di tipo. Se si vuole passare una stringa verbatim come argomento statico a un provider di tipi, mettere uno spazio tra i caratteri '<' e '@'.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- Il passaggio di un file con estensione resx ({0}) come file di origine al compilatore è deprecato. Utilizzare resgen.exe per trasformare il file con estensione resx in un file con estensione resources da passare come opzione --resource. Se si utilizza MSBuild, tale operazione può esser eseguita mediante un elemento <EmbeddedResource> nel file di progetto con estensione fsproj.
+ Il passaggio di un file con estensione resx ({0}) come file di origine al compilatore è deprecato. Usare resgen.exe per trasformare il file con estensione resx in un file con estensione resources da passare come opzione --resource. Se si usa MSBuild, tale operazione può esser eseguita mediante un elemento <EmbeddedResource> nel file di progetto con estensione fsproj.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- Un riferimento diretto al tipo generato '{0}' non è consentito. Utilizzare invece una definizione di tipo, ad esempio 'type TypeAlias = <path>'. Questa definizione indica che un provider di tipi aggiunge tipi generati all'assembly utilizzato.
+ Un riferimento diretto al tipo generato '{0}' non è consentito. Usare invece una definizione di tipo, ad esempio 'type TypeAlias = <path>'. Questa definizione indica che un provider di tipi aggiunge tipi generati all'assembly usato.
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- '[<' senza corrispondenza. Previsto '>]' di chiusura
+ [<' non corrispondente. È previsto '>]' di chiusuraUnexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Fine dell'input imprevista nell'espressione 'match'. Previsto 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
+ Fine dell'input imprevista nell'espressione 'match'. È previsto 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- Fine dell'input imprevista nell'espressione 'try'. Previsto 'try <expr> with <rules>' o 'try <expr> finally <expr>'.
+ Fine dell'input imprevista nell'espressione 'try'. È previsto 'try <expr> with <rules>' o 'try <expr> finally <expr>'.Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- Fine dell'input imprevista nell'espressione 'while'. Previsto 'while <expr> do <expr>'.
+ Fine dell'input imprevista nell'espressione 'while'. È previsto 'while <expr> do <expr>'.Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Fine dell'input imprevista nell'espressione 'for'. Previsto 'for <pat> in <expr> do <expr>'.
+ Fine dell'input imprevista nell'espressione 'for'. È previsto 'for <pat> in <expr> do <expr>'.
@@ -5994,7 +5994,7 @@
Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Fine dell'input imprevista nel corpo dell'espressione lambda. Previsto 'fun <pat> ... <pat> -> <expr>'.
+ Fine dell'input imprevista nel corpo dell'espressione lambda. È previsto 'fun <pat> ... <pat> -> <expr>'.
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- 'do' mancante nell'espressione 'while'. Previsto 'while <expr> do <expr>'.
+ 'do' mancante nell'espressione 'while'. È previsto 'while <expr> do <expr>'.Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'do' mancante nell'espressione 'for'. Previsto 'for <pat> in <expr> do <expr>'.
+ 'do' mancante nell'espressione 'for'. È previsto 'for <pat> in <expr> do <expr>'.Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Relazione join non valida in '{0}'. Previsto 'expr <op> expr', dove <op> è =, =?, ?= o ?=?.
+ Relazione join non valida in '{0}'. È previsto 'expr <op> expr', dove <op> è =, =?, ?= o ?=?.
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- Il case di unione/eccezione '{0}' non contiene il campo denominato '{1}'.
+ Il case di unione '{0}' non include un campo denominato '{1}'.
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Usata nei flussi di lavoro asincroni per eseguire il binding di un nome al risultato di un calcolo asincrono, o, in altre espressioni di calcolo, usata per eseguire il binding di un nome a un risultato, che corrisponde al tipo di calcolo.
+ Usata nelle espressioni di calcolo per associare un nome al risultato di un'altra espressione di calcolo.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Usata per indicare un valore da fornire come risultato di un'espressione di calcolo.
+ Usata per specificare un valore per il risultato dell'espressione di calcolo contenitore.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Usata per indicare un'espressione di calcolo che, una volta valutata, fornisce il risultato dell'espressione di calcolo contenitore.
+ Usata per specificare un valore per il risultato dell'espressione di calcolo contenitore, in cui tale valore proviene dal risultato di un'altra espressione di calcolo.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Usata al posto di let! nei flussi di lavoro asincroni e altre espressioni di calcolo dei valori con i quali è necessario chiamare Dispose per liberare risorse.
+ Usata al posto di let! in espressioni di calcolo per risultati di espressioni di calcolo che implementano IDisposable.
@@ -6994,7 +6994,7 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Un puntatore byref restituito da una funzione o da un metodo è deferenziato in modo implicito a partire da F# 4.5. Per acquisire il valore restituito come puntatore, usare l'operatore address-of, ad esempio '&f(x)' o '&obj.Method(arg1, arg2)'.
+ Un puntatore byref restituito da una funzione o da un metodo è deferenziato in modo implicito a partire da F# 4.5. Per acquisire il valore restituito come puntatore, usare l'operatore address-of, ad esempio '&f(x)' or '&obj.Method(arg1, arg2)'.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ '{{|' senza corrispondenzaanonymous record field
- anonymous record field
+ campo del record anonimoThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ L'eccezione '{0}' non include un campo denominato '{1}'.Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Non esistono campi per i criteri attivi. Questa sintassi non è valida.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ Il costruttore non include un campo denominato '{0}'.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Due tipi di record anonimo provengono da assembly diversi, '{0}' e '{1}'Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Due tipi di record anonimo contengono set di nomi di campo '{0}' e '{1}' non corrispondentiCannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ Non è possibile chiamare il metodo di estensione byref '{0}. Il valore del primo parametro deve essere modificabile oppure un tipo byref non di sola lettura.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Con i tipi byref non sono consentite estensioni di tipo facoltative.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ Non è possibile applicare parzialmente il metodo di estensione '{0}' perché il primo parametro è un tipo byref.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Questo tipo non eredita Attribute e non funzionerà correttamente con altri linguaggi .NET.Invalid anonymous record expression
- Invalid anonymous record expression
+ L'espressione del record anonimo non è validaInvalid anonymous record type
- Invalid anonymous record type
+ Il tipo di record anonimo non è validoThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ Il valore di input di un'espressione di copia e aggiornamento che crea un record anonimo deve essere un record anonimo o un recordThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ Il parametro '{0}' contiene un tipo non valido '{1}'. Questo comportamento non è consentito dalle regole di Common IL.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ La funzione o il metodo contiene un tipo restituito non valido '{0}'. Questo comportamento non è consentito dalle regole di Common IL.
diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf
index 3266c305a3a..a21f99416d1 100644
--- a/src/fsharp/xlf/FSComp.txt.ja.xlf
+++ b/src/fsharp/xlf/FSComp.txt.ja.xlf
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- リスト コンストラクター式のすべての要素は同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。
+ リスト コンストラクター式のすべての要素は同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- 配列コンストラクター式の要素はすべて同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。
+ 配列コンストラクター式の要素はすべて同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- 'if' 式に 'else' ブランチがありません。'then' ブランチは型 '{0}' です。'if' はステートメントではなく式であるため、同じ型の値を返す 'else' ブランチを追加してください。
+ 'if' 式に 'else' ブランチがありません。'then' ブランチは型 '{0}' です。'if' はステートメントではなく式であるため、同じ型の値を返す 'else' ブランチを追加してください。
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- if' 式のすべてのブランチは同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。
+ if' 式のすべてのブランチは同じ型である必要があります。この式に必要な型は '{0}' ですが、ここでは型 '{1}' になっています。All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- パターン一致式のすべてのブランチは同じ型の値を返す必要があります。最初のブランチは、型 '{0}' の値を返しましたが、このブランチは型 '{1}' の値を返しました。
+ パターン マッチ式のすべてのブランチは、同じ型の値を返す必要があります。最初のブランチが返した値の型は '{0}' ですが、このブランチが返した値の型は '{1}' です。
@@ -284,7 +284,7 @@
Invalid directive. Expected '#I \"<path>\"'.
- ディレクティブが無効です。'#I \"<path>\"' という形式で指定する必要があります。
+ ディレクティブが無効です。'#I \"<path>\"' が必要でした。
@@ -294,7 +294,7 @@
Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- ディレクティブが無効です。'#load \"<file>\" ... \"<file>\"' という形式で指定する必要があります。
+ ディレクティブが無効です。'#load \"<file>\" ... \"<file>\"' が必要でした。
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- モジュール '{0}' には\n {1} \nが含まれますが、シグネチャには\n {2} \nを指定しています。シグネチャと実装のジェネリック パラメーターは種類が異なります。[<Measure>] 属性を指定していない可能性があります。
+ モジュール '{0}' には\n {1} \nが含まれていますが、シグネチャで指定されているのは\n {2} です \nシグネチャと実装の汎用パラメーターの種類が異なります。[<Measure>] 属性が欠落している可能性があります。Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- モジュール '{0}' には\n {1} \nが含まれますが、シグネチャでは\n {2} \nを指定しています。シグネチャと実装の項数が異なります。シグネチャは、'{3}' が {4} 個以上の引数を受け入れる関数定義またはラムダ式であると指定していますが、実装は計算された関数値です。計算された関数値が許可された実装であることを宣言するには、シグネチャの型をかっこで囲んでください。たとえば、\n\tval {6}: int -> int -> int\nではなく、次のように指定します。\n\tval {5}: int -> (int -> int)
+ モジュール '{0}' には\n {1} が含まれていますが、 \nシグネチャでは\n {2} が指定されています \nシグネチャと実装の項数が異なります。シグネチャは、'{3}' が {4} 個以上の引数を受け入れる関数定義またはラムダ式であると指定していますが、実装は計算された関数値です。計算された関数値が許可された実装であることを宣言するには、シグネチャの型をかっこで囲んでください。たとえば、\n\tval {6}: int -> int -> int ではなく、\n\tval {5}: int -> (int -> int) と指定します。
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- 実装の型はシールドですが、シグネチャではシールドではないと考えられるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません。シグネチャに [<Sealed>] 属性を追加してください。
+ シグネチャと実装の型 '{1}' の {0} 定義に互換性がありません。実装の種類はシールドですが、シグネチャではシールドが暗黙的に示されていません。シグネチャに [<Sealed>] 属性を追加してください。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- 実装の型はシールドですが、シグネチャではシールドではないと考えられるため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません。実装に [<Sealed>] 属性を追加してください。
+ シグネチャと実装の種類 '{1}' の {0} 定義に互換性がありません。実装の種類はシールド型ではありませんが、シグネチャは暗黙的にシールド型に設定されています。実装に [<Sealed>] 属性を追加することを検討してください。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- 実装は抽象クラスですが、シグネチャは抽象クラスではないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません。シグネチャに [<AbstractClass>] 属性を追加してください。
+ シグネチャと実装の型 '{1}' の {0} 定義に互換性がありません。実装は抽象クラスですが、シグネチャは抽象クラスではありません。シグネチャに [<AbstractClass>] 属性を追加してください。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- シグネチャは抽象クラスですが、実装は抽象クラスではないため、シグネチャおよび実装内の型 '{1}' の {0} 定義は互換性がありません。実装に [<AbstractClass>] 属性を追加してください。
+ シグネチャと実装の型 '{1}' の {0} の定義には互換性がありません。シグネチャは抽象クラスですが、実装は抽象クラスではありません。実装に [<AbstractClass>] 属性を追加してください。
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 'ReferenceEquality' 属性を持つ型には、'Object.Equals(obj)'、'System.IEquatable<_>'、または 'System.Collections.IStructuralEquatable' を明示的に実装することはできません
+ 'ReferenceEquality' 属性が含まれる型に 'Object.Equals(obj)'、'System.IEquatable<_>'、または 'System.Collections.IStructuralEquatable' の明示的な実装を含めることはできませんA type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 'CustomEquality' 属性を持つ型には、’Object.Equals(obj)’、'System.IEquatable<_>' または 'System.Collections.IStructuralEquatable' の少なくとも 1 つの明示的な実装が必要です
+ 'CustomEquality' 属性が含まれる型には、'Object.Equals(obj)'、'System.IEquatable<_>'、'System.Collections.IStructuralEquatable' の少なくとも 1 つの明示的な実装が含まれていなければなりません
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- 通常、'NoComparison' 属性を持つ型には、'System.IComparable'、'System.IComparable<_>'、または 'System.Collections.IStructuralComparable' を明示的に実装しません。相互運用性のために意図的に実装した場合、この警告は無効にしてください。
+ 'NoComparison' 属性が含まれる型には 'System.IComparable'、'System.IComparable<_>'、または 'System.Collections.IStructuralComparable' の明示的な実装を通常は含めるべきではありません。相互運用のために意図的な場合には、この警告を無効にします
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- F# では、'System.Void' は 'typeof<System.Void>' としてのみ使用できます
+ F# では 'System.Void' は 'typeof<System.Void>' としてのみ使用できます
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 条件が不完全です。'if <expr> then <expr>' または 'if <expr> then <expr> else <expr>' という形式にしてください。
+ 不完全な条件です。'if <expr> then <expr>' や 'if <expr> then <expr> else <expr>' が必要でした。'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- 'assert' はファースト クラス値として使用できません。代わりに 'assert <expr>' を使用してください。
+ 'assert' をファースト クラス値として使用することはできません。代わりに 'assert <expr>' を使用します。
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- シーケンス式およびコンピュテーション式で、'->' の使用は 'for pat in expr -> expr' の形式に制限されています。より複雑なシーケンス式で要素を生成するには、構文 'for ... in ... do ... yield...' を使用してください。
+ シーケンス式または計算式で '->' を使用する場合、'for pat in expr -> expr' という形式にするよう制限されています。より複雑なシーケンス式でエレメントを生成するには、'for ... in ... do ... yield...' 構文を使用します。
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- F# コードでは、構文 '(typ,...,typ) ident' は使用されません。'ident<typ,...,typ>' を使用してください。
+ 構文 '(typ,...,typ) ident' は F# コードでは使用されません。代わりに、'ident<typ,...,typ>' を使用してください
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- 0 でない定数にジェネリック ユニットは使用できません。ジェネリックな 0 の場合、0.0<_> と記述してください。
+ ゼロではない定数に汎用ユニットを含めることはできません。汎用ゼロの場合、0.0<_> とします。
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- 属性を持つパラメーターには名前を指定してください (たとえば、'[<Attribute>] Name : Type')
+ 属性のパラメーターにも名前を指定する必要があります。例: '[<Attribute>] Name : Type'
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- 構造体型、レコード型、または共用体型の '{0}' は、インターフェイス 'System.IComparable<_>' を明示的に実装しています。この型には 'CustomComparison' 属性を適用し、さらに整合性のある非ジェネリック インターフェイス System.IComparable の実装を用意する必要があります。
+ 構造体型、レコード型、または共用体型の '{0}' はインターフェース 'System.IComparable<_>' を明示的に実装しています。この型には 'CustomComparison' 属性を適用し、さらに整合性のある非ジェネリック インターフェース System.IComparable の実装を用意する必要があります。
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- この値で推論された型パラメーターは、型略称がなくなると安定しません。これは、型パラメーターの脱落や順序の変更を行う型略称を使用しているためです。次に例を示します。\n\ttype taggedInt<'a> = int または\n\ttype swap<'a,'b> = 'b * 'a\nこの値の型パラメーターを明示的に宣言してください。次に例を示します。\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)
+ この値に推論される型パラメーターは、型の省略形を無効にすると安定しません。型パラメーターをドロップまたは並び替える型の省略形を使用していることが原因です (例: \n\ttype taggedInt<'a> = int または\n\ttype swap<'a,'b> = 'b * 'a)。\nこの値の型パラメーターを明示的に宣言してください (例: \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x))。
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- 型 '{0}' は、この構文で列挙できる値を持つ型ではありません。つまり、seq<_>、IEnumerable<_>、または IEnumerable のいずれとも互換性がなく、GetEnumerator メソッドを含みません。
+ 型 '{0}' は、この構文で列挙できる値の型ではありません。つまり、seq<_>, IEnumerable<_> とも IEnumerable とも互換性がなく、GetEnumerator メソッドがありません
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- 'enum' 制約は 'enum<type>' という形式で指定する必要があります
+ 'enum' 制約の形式は 'enum<type>' にする必要があります
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- このプロパティの型は無効です。複数のインデクサー引数を使用するプロパティには、'ty1 * ty2 -> ty3' という形式の型を使用してください。関数を返すプロパティには、'(ty1 -> ty2)' という形式の型を使用してください。
+ このプロパティに無効な型があります。複数のインデクサー引数を取るプロパティの型の形式は 'ty1 * ty2 -> ty3' でなければなりません。関数を返すプロパティの型の形式は '(ty1 -> ty2)' にする必要があります。Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- 型パラメーターではなく単位パラメーターを指定してください。明示的な単位パラメーターは [<Measure>] 属性でマークする必要があります。
+ 必要なのは型パラメーターではなく測定単位パラメーターです。明示的な測定単位パラメーターは、[<Measure>] 属性でマークされている必要があります。
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- コンストラクターは引数に割り当てる必要があります。また、コンストラクターをファーストクラスの値として使用することはできません。必要に応じて、匿名関数 '(fun arg1 ... argN -> new Type(arg1,...,argN))' を使用してください。
+ コンストラクターは引数に適用する必要があり、ファースト クラス値として使用することはできません。必要な場合には、匿名関数 '(fun arg1 ... argN -> new Type(arg1,...,argN))' を使用します。
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- 変更可能な関数値は 'let mutable f = (fun args -> ...)' と記述してください
+ 関数値を変更可能にするには 'let mutable f = (fun args -> ...)' が必要です
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- リテラル値に [<ThreadStatic>] 属性または [<ContextStatic>] 属性を指定することはできません
+ リテラル値を [<ThreadStatic>] 属性または [<ContextStatic>] 属性に指定することはできません
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- 'use' 束縛の形式は 'use <var> = <expr>' にしてください
+ 'use' バインディングの形式は 'use <var> = <expr>' でなければなりません
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- 定数値も指定する場合、宣言は [<Literal>] 属性にしてください (たとえば、'val x : int = 1')
+ 定数値も指定する場合には宣言を [<Literal>] 属性のみにできます。例: 'val x : int = 1'A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- 宣言に [<Literal>] 属性がある場合、その宣言に指定できるのはシグネチャ内の値のみです。
+ 宣言に [<Literal>] 属性が設定されている場合には宣言によって値を指定できるのはシグネチャ内のみですThread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- thread-static 変数および context-static 変数は静的にし、[<DefaultValue>] 属性を指定して、新しいスレッドごとに値が既定値に初期化されることを示してください
+ Thread-static 変数および context-static 変数は静的にし、[<DefaultValue>] 属性を指定し、新しいスレッドごとに値が既定値に初期化されることを示す必要があります
@@ -3514,12 +3514,13 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- 初期化されていない 'val' フィールドは変更可能にし、'[<DefaultValue>]' 属性でマークする必要があります。'val' フィールドの代わりに 'let' 束縛をご使用ください。
+ 初期化されていない 'val' フィールドは変更可能で、'[<DefaultValue>]' 属性によってマークされている必要があります。'val' フィールドの代わりに 'let'
+バインディングの使用を検討してください。Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- 型の静的 'val' フィールドは、変更可能で、プライベートにし、さらに '[<DefaultValue>]' 属性でマークしてください。フィールドはその型の 'null' 値または 'zero' 値に初期化されます。また、クラス型の 'static let mutable' 束縛もご使用ください。
+ 型の静的な 'val' フィールドは変更可能で、プライベートで、さらには'[<DefaultValue>]' 属性でマークされている必要があります。これらの型では、'null' 値または 'zero' 値に初期化されます。クラス型で 'static let mutable' バインディングを使用することも検討してください。
@@ -3534,7 +3535,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- コンストラクターの明示的な型宣言は、'ty1 * ... * tyN -> resTy' という形式にする必要があります。必要に応じて、'resTy' をかっこで囲んでください。
+ コンストラクタ―の明示的な型宣言の形式は 'ty1 * ... * tyN -> resTy' でなければなりません。'resTy' をかっこで囲まなければならない場合があります
@@ -3684,7 +3685,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- 構造体型、レコード型、または共用体型の '{0}' は、インターフェイス 'System.IEquatable<_>' を明示的に実装しています。この型には 'CustomEquality' 属性を適用し、さらに整合性のある非ジェネリック オーバーライド 'System.Object.Equals(obj)' の実装を用意してください。
+ 構造体型、レコード型、共用体型の '{0}' がインターフェース 'System.IEquatable<_>' を明示的に実装しています。この型に 'CustomEquality' 属性を適用し、非ジェネリック オーバーライド 'System.Object.Equals(obj)' の整合性のある実装を用意します。
@@ -3749,7 +3750,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- この型略称では、省略される型に出現しない型パラメーターが 1 つまたは複数宣言されました。型略称には、省略される型のすべての宣言済み型パラメーターを使用する必要があります。1 つまたは複数のパラメーターを削除するか、基底となる型をラップする具象型定義を使用してください (たとえば、'type C<'a> = C of ...')。
+ この型の省略形では、省略される型に出現しない型パラメーターが 1 つまたは複数宣言されました。型の省略形には、省略される型のすべての宣言済み型パラメーターを使用する必要があります。1 つまたは複数のパラメーターを削除するか、基底となる型をラップする具象型定義を使用してください (たとえば、'type C<'a> = C of ...')。
@@ -3784,7 +3785,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- この型の表現はシグネチャによって隠ぺいされています。型の特性を示すために、[<Sealed>]、[<Class>]、[<Interface>] などの属性を指定する必要があります。
+ この種の表現は、シグネチャによって非表示になります。この種の特性を示すには、[<Sealed>]、[<Class>]、または [<Interface>] などの属性を指定する必要があります。
@@ -3864,7 +3865,7 @@
Delegate specifications must be of the form 'typ -> typ'
- デリゲートは 'typ -> typ' という形式で指定する必要があります
+ デリゲート仕様の形式は、'typ -> typ' でなければなりません
@@ -3889,7 +3890,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- 構文 'type X with ...' は拡張のために予約されています。表現が隠ぺいされていてメンバーがある型が、'type X = ...' を使用するシグネチャで宣言されています。必要に応じて、シグネチャ内の型定義に '[<Sealed>]' 属性も追加してください。
+ 構文 'type X with ...' は拡張用に予約されています。これらは非表示になっていますが、'type X = ...' を使用してシグネチャでメンバーが宣言されています。シグネチャの型定義に '[<Sealed>] 属性を追加しなければならない場合があります
@@ -4199,7 +4200,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- 指定したリソースをこのアセンブリにリンクします。このとき、リソース情報の形式は <ファイル>[,<文字列名>[,public|private]] です。
+ 指定されたリソースを、resinfo 形式が <file>[,<string name>[,public|private]] のこのアセンブリにリンクします
@@ -4614,7 +4615,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- イベント '{0}' が標準以外の型です。このイベントが別の CLI 言語で宣言された場合、イベントにアクセスするには、このイベントに明示的な {1} メソッドや {2} メソッドを使用する必要があります。このイベントが F# で宣言された場合、イベントの型を IDelegateEvent<_>' または 'IEvent<_,_>' のインスタンス化にします。
+ イベント '{0}' には非標準の型が含まれています。このイベントが別の CLI 言語で宣言されると、イベントの明示的な {1} メソッドと {2} メソッドを使用してこのイベントにアクセスしなければならない場合があります。このイベントが F# で宣言される場合には、イベントの種類を 'IDelegateEvent<_>' または 'IEvent<_,_>' のどちらかのインスタンスにします。
@@ -5119,17 +5120,18 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 型パラメーターと型名は隣接している必要があります。たとえば、type \"C <'T>\" ではなく \"type C<'T>\" と指定します。
+ 型名と型パラメーター間のスペースを削除します。たとえば、\"C <'T>\" ではなく \"type C<'T>\" と入力します。型パラメーターは型名に隣接していなければなりません。Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 型引数と型名は隣接している必要があります。たとえば、\"C <'T>\" ではなく \"C<'T>\" と指定します。
+ 型名と型パラメーターの間のスペースを削除します。たとえば、
+\"C <'T>\" ではなく \"C<'T>\" とします。型パラメーターは型名に隣接して配置する必要があります。The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- 'int C' および 'C <int>' という型の構文は、ここでは使用できません。'C<int>' という形式でこの型を記述してください。
+ ここでは、型構文 'int C' と 'C <int>' を使用することはできません。この型を 'C<int>' という形式に調整することを検討してください。
@@ -5154,7 +5156,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- パラメーター '{0}' は byref 型であると推論されました。byref 型のパラメーターには、明示的な型の注釈を付ける必要があります ('x1: byref<int>' など)。byref パラメーターは、使用時に暗黙的に逆参照されます。
+ byre 型に設定するためにパラメーター '{0}' が継承されました。byref 型のパラメーターには明示的な型注釈を指定する必要があります (例: 'x1: byref<int>')。使用すると、byref パラメーターが暗黙的に逆参照されます。
@@ -5219,7 +5221,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- アクティブ パターン '{0}' に、入力によって決定されない型変数を含む結果の型があります。一般的な原因は、結果の型が記述されていないことです (例: 'let (|A|B|) (x:int) = A x')。この場合は、型の制約によって問題を解決できます (例: 'let (|A|B|) (x:int) : Choice<int,unit> = A x')。
+ アクティブ パターン '{0}' には、入力によって判別されていない型変数が含まれる結果型があります。一般に考えられる原因は、'let (|A|B|) (x:int) = A x' のように、結果ケースが言及されていない場合です。これは、'let (|A|B|) (x:int) : Choice<int,unit> = A x' などのように型制約を使用して解決できます
@@ -5244,7 +5246,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- MDB ファイルの名前は、<アセンブリ ファイルの名前>.mdb にする必要があります。--pdb オプションは無視されます。
+ MDB ファイルの名前は <assembly-file-name>.mdb でなければなりません、--pdb オプションは無視されます。
@@ -5294,7 +5296,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- 'use!' 束縛は 'use! <var> = <expr>' という形式にする必要があります
+ 'use!' バインディングの形式は 'use! <var> = <expr>' でなければなりません
@@ -5329,7 +5331,7 @@
Unmatched '<'. Expected closing '>'
- '<' が対応しません。対応する '>' が必要です
+ '<' が対応していません。対応する '>' が必要です
@@ -5524,7 +5526,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- .resx ファイル ({0}) をソース ファイルとしてコンパイラに渡す処理は非推奨です。resgen.exe を使用して、.resx ファイルを .resources ファイルに変換し、--resource オプションで渡してください。MSBuild を使用する場合は、.fsproj プロジェクト ファイル内の <EmbeddedResource> 項目を使用して、この変換を実行できます。
+ .resx ファイル ({0}) をコンパイラにソース ファイルとして渡す操作は非推奨です。resgen.exe を使用して .resx ファイルから .resources ファイル (--resource オプションで渡すファイル) に変換します。MSBuild を使用している場合には、.fsproj プロジェクト ファイルの <EmbeddedResource> 項目を使用して変換を実行できます。
@@ -5689,7 +5691,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- 生成された型 '{0}' への直接参照は許可されていません。型定義を使用してください (たとえば、'type TypeAlias = <path>')。この例では、生成された型が型プロバイダーによってアセンブリに追加されます。
+ 生成された型 '{0}' への直接参照は許可されていません。代わりに型定義 (例: 'type TypeAlias = <path>') を使用します。型プロバイダーがアセンブリに生成された型を追加することを示します。
@@ -5844,7 +5846,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- 指定された型またはメソッド '{1}' の静的パラメーター '{0}' には値が必要です。型プロバイダーの静的パラメーターは、名前付き引数 (例: '{2}<{3}=...>') を使用してオプションで指定できます。
+ 指定された型またはメソッド '{1}' の静的パラメーター '{0}' には値が必要です。型プロバイダーへの静的パラメーターは、名前付き引数を使用して任意で指定できます (例: '{2}<{3}=...>')。
@@ -5909,12 +5911,12 @@
{0} var in collection {1} (outerKey = innerKey). Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey)。'{2}' の後ろにはかっこが必要です。
+ {0} var in collection {1} (outerKey = innerKey)。'{2}' の後にかっこが必要であることに注意してください{0} var in collection {1} (outerKey = innerKey) into group. Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey) into group。'{2}' の後ろにかっこが必要です
+ コレクション {1} (outerKey = innerKey) の {0} をグループに var 宣言します。'{2}' の後にかっこが必要であることに注意してください
@@ -5954,27 +5956,27 @@
Unmatched '[<'. Expected closing '>]'
- '[<' が対応しません。対応する '>]' が必要です
+ '[<' が対応していません。対応する '>]' が必要ですUnexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- 'match' 式に予期しない入力の終わりが見つかりました。'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...' という形式を使用する必要があります。
+ 'match' 式の入力が予期しない形式で終了しています。'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...' が必要でした。Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- 'try' 式に予期しない入力の終わりが見つかりました。'try <expr> with <rules>' または 'try <expr> finally <expr>' という形式を使用する必要があります。
+ 'try' 式の入力が予期しない形式で終了しています。'try <expr> with <rules>' または 'try <expr> finally <expr>' が必要でした。Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- 'while' 式に予期しない入力の終わり見つかりました。'while <expr> do <expr>' という形式を使用する必要があります。
+ 'while' 式の入力が予期しない形式で終了しています。'while <expr> do <expr>' が必要でした。Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'for' 式の中に予期しない入力の終わりが見つかりました。'for <pat> in <expr> do <expr>' という形式を使用する必要があります。
+ 'for' 式の入力が予期しない形式で終了しています。'for <pat> in <expr> do <expr>' が必要でした。
@@ -5984,17 +5986,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 条件式の 'then' 分岐に予期しない入力の終わりが見つかりました。'if <expr> then <expr>' または 'if <expr> then <expr> else <expr>' という形式を使用する必要があります。
+ 条件式の 'then' 分岐の入力が予期しない形式で終了しています。'if <expr> then <expr>' または 'if <expr> then <expr> else <expr>' が必要でした。Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 条件式の 'else' 分岐で予期しない入力の終わりが見つかりました。'if <expr> then <expr>' または 'if <expr> then <expr> else <expr>' という形式を使用する必要があります。
+ 条件式の 'else' 分岐の入力が予期しない形式で終了しています。'if <expr> then <expr>' または 'if <expr> then <expr> else <expr>' が必要でした。Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- ラムダ式の本体に予期しない入力の終わりが見つかりました。'fun <pat> ... <pat> -> <expr>' という形式を使用する必要があります。
+ ラムダ式本体の入力末尾が予期されたものと異なります。必要な入力末尾は、'fun <pat> ... <pat> -> <expr>' です。
@@ -6054,17 +6056,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- 'while' 式に 'do' がありません。'while <expr> do <expr>' という形式を使用する必要があります。
+ 'while' 式に 'do' がありません。'while <expr> do <expr>' が必要でした。Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'for' 式の中に 'do' がありません。'for <pat> in <expr> do <expr>' という形式にしてください。
+ 'for' 式で 'do' がありません。'for <pat> in <expr> do <expr>' が必要でした。Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- '{0}' に無効な結合関係が含まれています。'expr <op> expr' という形式を使用する必要があります (<op> は =、=?、?=、または ?=? です)。
+ '{0}' に無効な結合関係があります。'expr <op> expr' が必要でした。<op> は、=、=?、?=、?=? のいずれかです。
@@ -6129,7 +6131,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- byref<T> では T に byref 型を含めることができないため、型 '{0}' は正しくありません。
+ 型 '{0}' が正しくありません。byref<T> では、T は byref 型を含めることができません。
@@ -6209,7 +6211,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- クエリ演算子に対する引数には、たとえば 'where (x > y)' や 'groupBy (x.Length / 10)' のように、かっこが必要です
+ クエリ演算子への引数にはかっこが必要な場合があります。例: 'where (x > y)' または 'groupBy (x.Length / 10)'
@@ -6324,7 +6326,7 @@
The union case '{0}' does not have a field named '{1}'.
- 共用体ケース/例外 '{0}' には、'{1}' という名前のフィールドがありません。
+ 共用体ケース '{0}' には '{1}' という名前のフィールドはありません。
@@ -6349,7 +6351,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- これは有効な定数式ではありません。[<Literal>] 属性は無視されます。
+ 有効なリテラル式ではありません。[<Literal>] 属性は無視されます。
@@ -6464,7 +6466,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- {0} から {1} への変換は、コンパイル時のダウンキャストではなく、セーフ アップキャストです。:?> (ダウンキャスト) 演算子の代わりに :> (アップキャスト) 演算子を使うことを検討してください。
+ {0} から {1} への変換はコンパイル時のダウンキャストではなく、セーフ アップキャストです。?> (downcast) 演算子ではなく、:> (upcast) 演算子を使用してください。
@@ -6704,7 +6706,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- 非同期コンピュテーションの結果に名前をバインドする非同期ワークフローで使用します。また別のコンピュテーション式では、そのコンピュテーション型を示す名前を結果にバインドします。
+ 計算式で別の計算式の結果に名前をバインドするために使用されます。
@@ -6784,12 +6786,12 @@
Used to provide a value for the result of the containing computation expression.
- コンピュテーション式の結果として提供される値を示すために使用します。
+ 含まれるコンピュテーション式の結果値を示すために使用します。Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- コンピュテーション式を示し、評価されたときはそのコンピュテーション式の結果を示すために使用します。
+ コンピュテーション式を含む結果の値を示すために使用されます。この値自体は、別のコンピュテーション式の結果です。
@@ -6839,7 +6841,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- 非同期ワークフロー、および Dispose を呼び出してリソースを解放する必要のある値のその他のコンピュテーション式で let! の代わりに使用します。
+ IDisposable を実装する計算式の結果に、計算式で let! の代わりに使用されます。
@@ -6994,12 +6996,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- F# 4.5 の時点で、関数またはメソッドから返される byref ポインターは、暗黙的に逆参照されます。戻り値をポインターとして取得するには、演算子のアドレスを使用してください。例: '&f(x)' または '&obj.Method(arg1, arg2)'。
+ 関数またはメソッドによって返される byref ポインターが F# 4.5 の時点では暗黙的に逆参照されています。ポインターとして返り値を取得するには、address-of 演算子を使用して '&f(x)' または '&obj.Method(arg1, arg2)' などとします。A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- IsByRefLike で注釈を付けられた型は、構造体でもある必要があります。型に [<Struct>] 属性を追加することを検討してください。
+ IsByRefLike の注釈が付けられた型は構造体でもなければなりません。型に [<Struct>] 属性を追加することを検討してください。
@@ -7019,7 +7021,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- IsReadOnly で注釈を付けられた型は、構造体でもある必要があります。型に [<Struct>] 属性を追加することを検討してください。
+ IsReadOnly の注釈が付いた型も構造体にする必要があります。型に [<Struct>] 属性を追加してください。
@@ -7054,82 +7056,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ '{{|' が対応しませんanonymous record field
- anonymous record field
+ 匿名レコード フィールドThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ 例外 '{0}' には '{1}' という名前のフィールドはありません。Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ アクティブなパターンにフィールドがありません。この構文は無効です。The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ コンストラクターには '{0}' という名前のフィールドはありませんTwo anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ 2 つの匿名レコードの種類は、'{0}' と '{1}' の異なるアセンブリからのものですTwo anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ 2 種類の匿名レコードのフィールド名 '{0}' と '{1}' が一致しませんCannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ byref 拡張メソッド '{0} を呼び出すことはできません。最初のパラメーターでは、値を変更可能な byref 型または読み取り専用以外の byref 型にする必要があります。Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ byref 型には、オプションの型拡張子を指定することはできません。Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ 最初のパラメーターは byref 型なので、拡張メソッド '{0}' を部分的に適用することはできません。This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ この型は属性を継承しません。他の .NET 言語で正しく動作しません。Invalid anonymous record expression
- Invalid anonymous record expression
+ 無効な匿名レコード式Invalid anonymous record type
- Invalid anonymous record type
+ 無効な匿名レコードの種類The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ 匿名レコードを作成する copy-and-update 式への入力には匿名レコードまたはレコードを 1 つ含める必要がありますThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ パラメーター '{0}' には無効な型 '{1}' が指定されています。これは Common IL の規則では許可されていません。The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ 関数またはメソッドには、無効な戻り値の型 '{0}' が指定されています。これは Common IL の規則では許可されていません。
diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf
index 960ddb40761..9f31e7112d4 100644
--- a/src/fsharp/xlf/FSComp.txt.ko.xlf
+++ b/src/fsharp/xlf/FSComp.txt.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- 목록 생성자의 모든 요소는 동일한 형식이어야 합니다. 이 식에는 '{0}' 형식이 필요하지만 여기에서는 '{1}' 형식이 지정되었습니다.
+ 목록 생성자의 모든 요소는 동일한 형식이어야 합니다. 이 식에는 '{0}' 형식이 필요하지만 여기에서는 '{1}' 형식이 지정되었습니다.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- 배열 생성자의 모든 요소는 동일한 형식이어야 합니다. 이 식에는 '{0}' 형식이 필요하지만 여기에서는 '{1}' 형식이 지정되었습니다.
+ 배열 생성자의 모든 요소는 동일한 형식이어야 합니다. 이 식에는 '{0}' 형식이 필요하지만 여기에서는 '{1}' 형식이 지정되었습니다.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- 'if' 식에 'else' 분기가 누락되었습니다. 'then' 분기의 형식은 '{0}'입니다. 'if'는 문이 아니라 식이므로 동일한 형식의 값을 반환하는 'else' 분기를 추가하세요.
+ 'if' 식에 'else' 분기가 누락되었습니다. 'then' 분기의 형식은 '{0}'입니다. 'if'는 문이 아니라 식이므로 동일한 형식의 값을 반환하는 'else' 분기를 추가하세요.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- if' 식의 모든 분기는 동일한 형식이어야 합니다. 이 식에는 '{0}' 형식이 필요하지만 여기에서는 '{1}' 형식이 지정되었습니다.
+ if' 식의 모든 분기는 동일한 형식이어야 합니다. 이 식에는 '{0}' 형식이 필요하지만 여기에서는 '{1}' 형식이 지정되었습니다.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- 패턴 일치 식의 모든 분기는 동일한 형식의 값을 반환해야 합니다. 첫 번째 분기는 '{0}' 형식의 값을 반환했지만, 이 분기는 '{1}' 형식의 값을 반환했습니다.
+ 패턴 일치 식의 모든 분기는 동일한 형식의 값을 반환해야 합니다. 첫 번째 분기는 '{0}' 형식의 값을 반환했지만 이 분기는 '{1}' 형식의 값을 반환했습니다.
@@ -234,12 +234,12 @@
Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration.
- 라이브러리 또는 다중 파일 응용 프로그램의 파일은 네임스페이스 또는 모듈 선언으로 시작해야 합니다(예: 'namespace SomeNamespace.SubNamespace' 또는 'module SomeNamespace.SomeModule'). 응용 프로그램의 마지막 소스 파일만 선언이 없어도 됩니다.
+ 라이브러리 또는 다중 파일 애플리케이션의 파일은 네임스페이스 또는 모듈 선언으로 시작해야 합니다(예: 'namespace SomeNamespace.SubNamespace' 또는 'module SomeNamespace.SomeModule'). 애플리케이션의 마지막 소스 파일만 선언이 없어도 됩니다.Files in libraries or multiple-file applications must begin with a namespace or module declaration. When using a module declaration at the start of a file the '=' sign is not allowed. If this is a top-level module, consider removing the = to resolve this error.
- 라이브러리 또는 다중 파일 응용 프로그램의 파일은 네임스페이스 또는 모듈 선언으로 시작해야 합니다. 파일 시작에 모듈 선언을 사용하는 경우 '=' 기호를 사용할 수 없습니다. 최상위 모듈인 경우 =를 제거하여 이 오류를 해결하세요.
+ 라이브러리 또는 다중 파일 애플리케이션의 파일은 네임스페이스 또는 모듈 선언으로 시작해야 합니다. 파일 시작에 모듈 선언을 사용하는 경우 '=' 기호를 사용할 수 없습니다. 최상위 모듈인 경우 =를 제거하여 이 오류를 해결하세요.
@@ -529,7 +529,7 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- {0}' 모듈에\n {1}이(가) 포함되어 있지만 \n해당 시그니처는\n {2}을(를) 지정합니다. \n시그니처와 구현의 인자 수가 서로 다릅니다. 시그니처는 '{3}'이(가) {4}개 이상의 인수를 적용하는 함수 정의 또는 람다 식임을 지정하지만 구현은 계산된 함수 값입니다. 계산된 함수 값이 허용되는 구현임을 선언하려면 시그니처에서 해당 형식을 괄호로 묶기만 하면 됩니다(예: \n\tval {6}: int -> int -> int\n대신\n\tval {5}: int -> (int -> int)).
+ '{0}' 모듈에\n {1}이(가) 포함되어 있지만 \n해당 시그니처는\n {2}을(를) 지정합니다. \n시그니처와 구현의 인자 수가 서로 다릅니다. 시그니처는 '{3}'이(가) {4}개 이상의 인수를 적용하는 함수 정의 또는 람다 식임을 지정하지만 구현은 계산된 함수 값입니다. 계산된 함수 값이 허용되는 구현임을 선언하려면 시그니처에서 해당 형식을 괄호로 묶기만 하면 됩니다(예: \n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int).
@@ -619,7 +619,7 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- 구현 형식이 봉인되어 있지만 시그니처는 봉인되어 있지 않음을 암시하므로 시그니처 및 구현의 '{1}' 형식에 대한 {0} 정의가 호환되지 않습니다. 시그니처에 [<Sealed>] 특성을 추가해 보세요.
+ 구현 형식이 봉인되어 있지만 시그니처는 봉인되어 있지 않음을 암시하므로 시그니처 및 구현의 '{1}' 형식 {0} 정의가 호환되지 않습니다. 시그니처에 [<Sealed>] 특성을 추가하세요.
@@ -1039,7 +1039,7 @@
A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 특성 'CustomEquality'가 지정된 형식에는 'Object.Equals(obj)', 'System.IEquatable<_>' 또는 'System.Collections.IStructuralEquatable' 중 하나 이상에 대한 명시적 구현이 있어야 합니다.
+ 'CustomEquality' 특성이 지정된 형식에는 'Object.Equals(obj)', 'System.IEquatable<_>' 또는 'System.Collections.IStructuralEquatable' 중 하나 이상에 대한 명시적 구현이 있어야 합니다.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- 이 값에 대해 유추된 형식 매개 변수는 형식 약어를 지울 경우 불안정적인 상태가 됩니다. 이는 형식 매개 변수를 삭제 또는 다시 정렬하는 형식 약어를 사용했기 때문입니다(예: \n\ttype taggedInt<'a> = int 또는 \n\ttype swap<'a,'b> = 'b * 'a).\n이 값에 대한 형식 매개 변수를 명시적으로 선언하십시오(예: \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)).
+ 이 값에 대해 유추된 형식 매개 변수는 형식 약어를 지울 경우 불안정한 상태가 됩니다. 이는 형식 매개 변수를 삭제 또는 다시 정렬하는 형식 약어를 사용했기 때문입니다(예: \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a).\n이 값에 대한 형식 매개 변수를 명시적으로 선언하세요(예: \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)).
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- 'use' 바인딩의 형식은 'use <var> = <expr>'이어야 합니다.
+ 'use' 바인딩은 'use <var> = <expr>' 형식이어야 합니다.
@@ -3499,7 +3499,7 @@
A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- 선언에 [<Literal>] 특성이 있는 경우에만 선언의 시그니처에 값을 지정할 수 있습니다.
+ [<Literal>] 특성이 있는 경우에만 선언의 시그니처에 값을 지정할 수 있습니다.
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- 이 형식 약어에는 간략화되는 형식에 나타나지 않는 하나 이상의 선언된 형식 매개 변수가 있습니다. 형식 약어는 간략화되는 형식에 있는 모든 선언된 형식 매개 변수를 사용해야 합니다. 하나 이상의 형식 매개 변수를 제거하거나 내부 형식을 래핑하는 구체적인 형식 정의(예: 'type C<'a> = C of ...')를 사용하세요.
+ 이 형식 약어에는 간략화되는 형식에 나타나지 않는 하나 이상의 선언된 형식 매개 변수가 있습니다. 형식 약어는 간략화되는 형식에 있는 모든 선언된 형식 매개 변수를 사용해야 합니다. 하나 이상의 형식 매개 변수를 제거하거나 내부 형식을 래핑하는 구체적인 형식 정의(예: 'type C<'a> = C of ...'.)를 사용하세요.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- 'type X with ...' 구문은 확대를 위해 예약되었습니다. 표현이 숨겨져 있지만 멤버를 가지고 있는 형식은 이제 'type X = ...'를 사용하여 시그니처에 선언됩니다. 시그니처에 있는 형식 정의에 '[<Sealed>] 특성을 추가해야 할 수도 있습니다.
+ 구문은 확대를 위해 예약되었습니다. 표현이 숨겨져 있지만 멤버를 가지고 있는 형식은 이제 'type X = ...'를 사용하여 시그니처에 선언됩니다. 시그니처에 있는 형식 정의에 '[<Sealed>] 특성을 추가해야 할 수도 있습니다.
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- resinfo 형식이 <file>[,<string name>[,public|private]]인 경우 지정한 리소스를 이 어셈블리에 링크합니다.
+ resinfo 형식이 <file>[,<string name>[,public|private]]인 경우 지정한 리소스를 이 어셈블리에 연결합니다.
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- {0}' 이벤트에 비표준 형식이 있습니다. 이 이벤트가 다른 CLI 언어로 선언된 경우 이벤트에 대한 명시적 {1} 및 {2} 메서드를 사용하여 이 이벤트에 액세스해야 할 수 있습니다. 이 이벤트가 F#으로 선언된 경우에는 이벤트의 형식을 'IDelegateEvent<_>' 또는 'IEvent<_,_>'의 인스턴스로 만드세요.
+ '{0}' 이벤트에 비표준 형식이 있습니다. 이 이벤트가 다른 CLI 언어로 선언된 경우 이벤트에 대한 명시적 {1} 및 {2} 메서드를 사용하여 이 이벤트에 액세스해야 할 수 있습니다. 이 이벤트가 F#으로 선언된 경우에는 이벤트의 형식을 'IDelegateEvent<_>' 또는 'IEvent<_,_>'의 인스턴스로 만드세요.
@@ -5119,12 +5119,12 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 형식 매개 변수는 형식 이름 바로 옆에 배치해야 합니다(예: type \"C <'T>\"가 아니라 \"type C<'T>\").
+ 형식 이름과 형식 매개 변수 사이의 공백을 제거하세요(예: type \"C <'T>\"가 아니라 \"type C<'T>\"). 형식 매개 변수는 형식 이름 바로 옆에 배치해야 합니다.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 형식 인수는 형식 이름 바로 옆에 배치해야 합니다(예: \"C <'T>\"가 아니라 \"C<'T>\").
+ 형식 이름과 형식 매개 변수 사이의 공백을 제거하세요(예: \"C <'T>\"가 아니라 \"C<'T>\"). 형식 매개 변수는 형식 이름 바로 옆에 배치해야 합니다.
@@ -5329,7 +5329,7 @@
Unmatched '<'. Expected closing '>'
- '<'가 일치하지 않습니다. 닫는 '>'가 필요합니다.
+ '<'의 짝이 맞지 않습니다. 닫는 '>'가 필요합니다.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- 더 이상 .resx 파일({0})이 컴파일러에 소스 파일로 사용되지 않습니다. resgen.exe를 사용하여 .resx 파일을 .resources 파일로 변환해 --resource 옵션으로 전달하세요. MSBuild를 사용하는 경우 .fsproj 프로젝트 파일의 <EmbeddedResource> 항목을 통해 이 작업을 수행할 수 있습니다.
+ 더 이상 .resx 파일({0})이 컴파일러에 소스 파일로 전달되지 않습니다. resgen.exe를 사용하여 .resx 파일을 .resources 파일로 변환해 --resource 옵션으로 전달하세요. MSBuild를 사용하는 경우 .fsproj 프로젝트 파일의 <EmbeddedResource> 항목을 통해 이 작업을 수행할 수 있습니다.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- 생성된 형식 '{0}'을(를) 직접 참조할 수는 없습니다. 형식 정의를 사용하십시오(예: 'type TypeAlias = <path>'). 이 정의는 형식 공급자가 생성된 형식을 어셈블리에 추가함을 나타냅니다.
+ 생성된 형식 '{0}'을(를) 직접 참조할 수는 없습니다. 대신 형식 정의를 사용하세요(예: 'type TypeAlias = <path>'). 이 정의는 형식 공급자가 생성된 형식을 어셈블리에 추가함을 나타냅니다.
@@ -5909,7 +5909,7 @@
{0} var in collection {1} (outerKey = innerKey). Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey). '{2}' 다음에 괄호가 필요합니다.
+ {0} var in collection {1} (outerKey = innerKey). '{2}' 뒤에 괄호가 필요합니다.
@@ -5989,7 +5989,7 @@
Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 조건식의 'else' 분기에 예기치 않은 입력의 끝이 있습니다. 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'이 필요합니다.
+ 조건식의 'else' 분기에 예기치 않은 입력의 끝이 있습니다. 'if <expr> then <expr>' 또는 'if <expr> then <expr> else <expr>'이 필요합니다.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- byref<T>에서 T는 byref 형식을 포함할 수 없으므로 '{0}' 형식은 잘못되었습니다.
+ '{0}' 형식은 byref<T>에서 안에 있을 수 없습니다. T는 byref 형식을 포함할 수 없기 때문입니다.
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- 공용 구조체 케이스/예외 '{0}'에 이름이 '{1}'인 필드가 없습니다.
+ 공용 구조체 케이스 '{0}'에 '{1}' 필드가 없습니다.
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- {0}에서 {1}(으)로의 변환은 컴파일 시간에 안전한 업캐스트이며 다운캐스트가 아닙니다. :?>(다운캐스트) 연산자가 아닌 :>(업캐스트) 연산자를 사용하세요.
+ {0}에서 {1}(으)로의 변환은 컴파일 시간에 안전한 업캐스트이며 다운캐스트가 아닙니다. :?> (다운캐스트) 연산자가 아닌 :?> (업캐스트) 연산자를 사용하세요.
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- 비동기 워크플로에 사용되어 비동기 계산 결과에 이름을 바인딩하거나, 기타 계산 식에서 계산 형식인 결과에 이름을 바인딩하는 데 사용됩니다.
+ 계산 식에 사용되어 다른 계산 식 결과에 이름을 바인딩합니다.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- 계산 식의 결과로 제공하는 값을 나타내는 데 사용됩니다.
+ 포함하는 계산 식의 결과에 대한 값을 제공하는 데 사용됩니다.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- 계산할 때, 포함하는 계산 식의 결과를 제공하는 계산 식을 나타내는 데 사용됩니다.
+ 포함하는 계산 식의 결과에 대한 값을 제공하는 데 사용되지만, 값 자체는 다른 계산 식의 결과에서 가져온 것입니다.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- 무료 리소스로 호출하기 위해 Dispose가 필요한 값에 대해 기타 계산 식 및 비동기 워크플로에서 let! 대신 사용됩니다.
+ IDisposable을 구현하는 계산 식 결과를 위해 계산 식에서 let! 대신 사용됩니다.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ '{{|'의 짝이 맞지 않습니다.anonymous record field
- anonymous record field
+ 무명 레코드 필드The exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ '{0}' 예외에 '{1}'(이)라는 필드가 없습니다.Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ 활성 패턴에 필드가 없습니다. 이 구문은 유효하지 않습니다.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ 생성자에 '{0}'(이)라는 필드가 없습니다.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ 두 무명 레코드 형식은 서로 다른 어셈블리 '{0}' 및 '{1}'에서 가져왔습니다.Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ 두 무명 레코드 형식의 필드 이름 '{0}' 및 '{1}' 집합이 일치하지 않습니다.Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ byref 확장 메서드 '{0}'을(를) 호출할 수 없습니다. 첫 번째 매개 변수는 변경할 수 있거나 읽기 전용이 아닌 byref 형식인 값이 필요합니다.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ byref 형식에는 선택적 형식 확장을 사용할 수 없습니다.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ 첫 번째 매개 변수가 byref 형식이므로 '{0}' 확장 메서드를 부분적으로 적용할 수 없습니다.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ 이 형식을 특성을 상속하지 않으므로 다른 .NET 언어에서 올바로 작동하지 않습니다.Invalid anonymous record expression
- Invalid anonymous record expression
+ 잘못된 무명 레코드 식Invalid anonymous record type
- Invalid anonymous record type
+ 잘못된 무명 레코드 형식The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ 무명 레코드를 만드는 복사 및 업데이트 식의 입력은 무명 레코드이거나 레코드여야 합니다.The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ '{0}' 매개 변수에 잘못된 형식 '{1}'이(가) 있습니다. 이 형식은 공통 IL의 규칙에서 허용하지 않습니다.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ 함수 또는 메서드에 잘못된 반환 형식 '{0}'이(가) 있습니다. 이는 공통 IL의 규칙에서 허용하지 않습니다.
diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf
index 4ec0bfecf78..05a58d5d960 100644
--- a/src/fsharp/xlf/FSComp.txt.pl.xlf
+++ b/src/fsharp/xlf/FSComp.txt.pl.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Wszystkie elementy wyrażenia konstruktora listy muszą mieć ten sam typ. Oczekiwano, że to wyrażenie będzie miało typ „{0}”, ale tutaj ma typ „{1}”.
+ Wszystkie elementy wyrażenia konstruktora listy muszą mieć ten sam typ. Oczekiwano, że to wyrażenie będzie miało typ „{0}”, ale tutaj ma typ „{1}”.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Wszystkie elementy wyrażenia konstruktora tablicy muszą mieć ten sam typ. Oczekiwano, że to wyrażenie będzie miało typ „{0}”, ale tutaj ma typ „{1}”.
+ Wszystkie elementy wyrażenia konstruktora tablicy muszą mieć ten sam typ. Oczekiwano, że to wyrażenie będzie miało typ „{0}”, ale tutaj ma typ „{1}”.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- W wyrażeniu „if” brakuje gałęzi „else”. Gałąź „then” ma typ „{0}”. Jako że „if” jest wyrażeniem, a nie instrukcją, dodaj gałąź „else”, która będzie zwracać wartość tego samego typu.
+ W wyrażeniu „if” brakuje gałęzi „else”. Gałąź „then” ma typ „{0}”. Jako że „if” jest wyrażeniem, a nie instrukcją, dodaj gałąź „else”, która będzie zwracać wartość tego samego typu.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Wszystkie gałęzie wyrażenia „if” muszą mieć ten sam typ. Oczekiwano, że to wyrażenie będzie miało typ „{0}”, ale tutaj ma typ „{1}”.
+ Wszystkie gałęzie wyrażenia „if” muszą mieć ten sam typ. Oczekiwano, że to wyrażenie będzie miało typ „{0}”, ale tutaj ma typ „{1}”.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Wszystkie gałęzie wyrażenia dopasowywania wzorca muszą zwracać wartości tego samego typu. Pierwsza gałąź zwróciła wartość typu „{0}”, ale ta gałąź zwróciła wartość typu „{1}”.
+ Wszystkie gałęzie wyrażenia dopasowania do wzorca muszą zwracać wartości tego samego typu. Pierwsza gałąź zwróciła wartość typu „{0}”, ale ta gałąź zwróciła wartość typu „{1}”
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Nieprawidłowa dyrektywa. Oczekiwano „#I \"<ścieżka>\"„.
+ Nieprawidłowa dyrektywa. Oczekiwano dyrektywy „#I \"<ścieżka>\"”.Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Nieprawidłowa dyrektywa. Oczekiwano „#r \"<plik-lub-zestaw>\"”.
+ Nieprawidłowa dyrektywa. Oczekiwano dyrektywy „#r \"<plik-lub-zestaw>\"”.Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Nieprawidłowa dyrektywa. Oczekiwano „#load \"<plik>\" ... \"<plik>\"”.
+ Nieprawidłowa dyrektywa. Oczekiwano dyrektywy „#load \"<plik>\" ... \"<plik>\"”.
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- Moduł „{0}” zawiera element\n {1} \nale jego sygnatura określa element\n {2} \nParametry ogólne w sygnaturze i implementacji są różnego rodzaju. Być może brakuje atrybutu [<Measure>].
+ Moduł „{0}” zawiera element\n {1}, \nale jego podpis określa element\n {2} \nParametry ogólne w podpisie i implementacji są różnego rodzaju. Być może brakuje atrybutu [<Measure>].Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- Moduł „{0}” zawiera element\n {1}, \nale jego sygnatura określa element\n {2} \nLiczby argumentów w sygnaturze i implementacji są różne. Sygnatura określa, że „{3}” to definicja funkcji lub wyrażenie lambda akceptujące liczbę argumentów wynoszącą co najmniej {4}, ale implementacja jest obliczaną wartością funkcji. Aby zadeklarować, że obliczana wartość funkcji to dozwolona implementacja, po prostu umieść w nawiasach okrągłych jej typ w sygnaturze, np.\n\tval {5}: int -> (int -> int)\nzamiast\n\tval {6}: int -> int -> int.
+ Moduł „{0}” zawiera element\n {1}, \nale jego podpis określa element\n {2} \nLiczby argumentów w podpisie i implementacji są różne. Podpis określa, że „{3}” to definicja funkcji lub wyrażenie lambda akceptujące liczbę argumentów wynoszącą co najmniej {4}, ale implementacja jest obliczaną wartością funkcji. Aby zadeklarować, że obliczana wartość funkcji to dozwolona implementacja, po prostu w podpisie umieść jej typ w nawiasie, np.\n\tval {5}: int -> (int -> int)\nzamiast\n\tval {6}: int -> int -> int.
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- Definicje {0} dla typu „{1}” w sygnaturze i implementacji są niezgodne, ponieważ typ implementacji jest zapieczętowany, ale sygnatura sugeruje, że nie jest zapieczętowany. Rozważ dodanie atrybutu [<Sealed>] do sygnatury.
+ Definicje {0} dla typu „{1}” w podpisie i implementacji są niezgodne, ponieważ typ implementacji jest zapieczętowany, ale podpis sugeruje, że nie jest zapieczętowany. Rozważ dodanie atrybutu [<Sealed>] do podpisu.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- Definicje {0} dla typu „{1}” w sygnaturze i implementacji są niezgodne, ponieważ typ implementacji nie jest zapieczętowany, ale sygnatura sugeruje, że jest zapieczętowany. Rozważ dodanie atrybutu [<Sealed>] do implementacji.
+ Definicje {0} dla typu „{1}” w podpisie i implementacji są niezgodne, ponieważ typ implementacji nie jest zapieczętowany, ale sygnatura sugeruje, że jest zapieczętowany. Rozważ dodanie atrybutu [<Sealed>] do implementacji.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- Definicje {0} dla typu „{1}” w sygnaturze i implementacji są niezgodne, ponieważ implementacja jest klasą abstrakcyjną, ale sygnatura nią nie jest. Rozważ dodanie atrybutu [<AbstractClass>] do sygnatury.
+ Definicje {0} dla typu „{1}” w podpisie i implementacji są niezgodne, ponieważ implementacja jest klasą abstrakcyjną, a podpis nie. Rozważ dodanie atrybutu [<AbstractClass>] do podpisu.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- Definicje {0} dla typu „{1}” w sygnaturze i implementacji są niezgodne, ponieważ sygnatura jest klasą abstrakcyjną, a implementacja nią nie jest. Rozważ dodanie atrybutu [<AbstractClass>] do implementacji.
+ Definicje {0} typu „{1}” w podpisie i implementacji są niezgodne, ponieważ podpis jest klasą abstrakcyjną, a implementacja nią nie jest. Rozważ dodanie atrybutu [<AbstractClass>] do implementacji.
@@ -1034,7 +1034,7 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Typ z atrybutem „ReferenceEquality” nie może mieć jawnej implementacji metody „Object.Equals(obiekt)”, interfejsu „System.IEquatable<_>” lub interfejsu „System.Collections.IStructuralEquatable”
+ Typ z atrybutem „ReferenceEquality” nie może mieć jawnej implementacji metody „Object.Equals(obiekt)”, interfejsu „System.IEquatable<_>” ani interfejsu „System.Collections.IStructuralEquatable”
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- Typ z atrybutem „NoComparison” nie powinien zwykle mieć jawnej implementacji interfejsu „System.IComparable”, interfejsu „System.IComparable<_>” lub interfejsu „System.Collections.IStructuralComparable”. Wyłącz to ostrzeżenie, jeśli jest to zamierzone do celów związanych z międzyoperacyjnością
+ Typ z atrybutem „NoComparison” nie powinien zwykle mieć jawnej implementacji interfejsu „System.IComparable”, interfejsu „System.IComparable<_>” ani interfejsu „System.Collections.IStructuralComparable”. Wyłącz to ostrzeżenie, jeśli jest to zamierzone na potrzeby współdziałania
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- Warunki [<ReflectedDefinition>] nie mogą zawierać zastosowań operatora łączenia prefiksów „%”
+ W warunkach [<ReflectedDefinition>] nie można używać operatora łączenia prefiksu „%”
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Niekompletna instrukcja warunkowa. Oczekiwano konstrukcji „if <wyrażenie> then <wyrażenie>” lub „if <wyrażenie> then <wyrażenie> else <wyrażenie>”.
+ Niekompletne wyrażenie warunkowe. Oczekiwano konstrukcji „if <wyrażenie> then <wyrażenie>” lub „if <wyrażenie> then <wyrażenie> else <wyrażenie>”.'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- Element „assert” nie może być używany jako wartość pierwszoklasowa. Użyj elementu „assert <wyrażenie>”.
+ Element „assert” nie może być używany jako wartość pierwszej klasy. Zamiast tego użyj elementu „assert <wyrażenie>”.
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- Użycie konstrukcji „->” w wyrażeniach obliczenia i sekwencji jest ograniczone do postaci „for wzorzec in wyrażenie -> wyrażenie”. Użyj składni „for ... in ... do ... yield...”, aby wygenerować elementy w bardziej złożonych wyrażeniach sekwencji.
+ Użycie konstrukcji „->” w wyrażeniach obliczeń i sekwencji jest ograniczone do postaci „for wzorzec in wyrażenie -> wyrażenie”. Użyj składni „for ... in ... do ... yield...”, aby wygenerować elementy w bardziej złożonych wyrażeniach sekwencji.
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- Składnia „(typ,...,typ) ident” nie jest używana w kodzie języka F#. Rozważ użycie składni „ident<typ,...,typ>”
+ Składnia „(typ,...,typ) identyfikator” nie jest używana w kodzie F#. Rozważ użycie zamiast tego składni „identyfikator<typ,...,typ>”
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- Parametr z atrybutami musi mieć też nazwę, na przykład „[<Atrybut>] nazwa : typ”
+ Parametrowi z atrybutami należy również nadać nazwę, np. „[<atrybut>] nazwa : typ”
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- Typ „{0}” nie jest typem, którego wartości mogą być wyliczane przy użyciu tej składni. Oznacza to, że nie jest zgodny z elementem seq<_>, IEnumerable<_> lub IEnumerable i nie ma metody GetEnumerator
+ Typ „{0}” nie jest typem, którego wartości mogą być wyliczane przy użyciu tej składni. Oznacza to, że nie jest on zgodny z elementem seq<_>, IEnumerable<_> ani IEnumerable i nie ma metody GetEnumerator
@@ -2639,7 +2639,7 @@
Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- Oczekiwano parametru jednostki miary, a nie parametru typu. Jawne parametry jednostki miary muszą być oznaczone za pomocą atrybutu [<Measure>].
+ Oczekiwano parametru jednostki miary, a nie parametru typu. Jawne parametry jednostki miary muszą być oznaczone atrybutem [<Measure>].
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- Konstruktory muszą być stosowane do argumentów i nie mogą być używane jako wartości pierwszoklasowe. Jeśli to konieczne, użyj funkcji anonimowej „(fun arg1 ... argN -> new Typ(arg1,...,argN))”.
+ Konstruktory muszą być stosowane do argumentów i nie mogą być używane jako wartości pierwszej klasy. Jeśli to konieczne, użyj funkcji anonimowej „(fun argument1 ... argumentN -> new Type(argument1,...,argumentN))”.
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- Modyfikowalne wartości funkcji powinny mieć postać „let mutable f = (fun args -> ...)”
+ Modyfikowalne wartości funkcji powinny mieć postać „let mutable f = (fun argumenty -> ...)”
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Wartość literału nie może mieć atrybutu [<ThreadStatic>] lub [<ContextStatic>]
+ Wartości literału nie można przypisać atrybutu [<ThreadStatic>] ani [<ContextStatic>]
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Deklaracja może mieć postać atrybutu [<Literal>] tylko wtedy, gdy jest też podana wartość stałej, na przykład „val x : int = 1”
+ Deklaracja może być atrybutem [<Literal>] tylko wtedy, gdy zostanie również podana wartość stała, np. „val x : int = 1”A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- Deklaracja może mieć określoną wartość w sygnaturze tylko wtedy, gdy deklaracja zawiera atrybut [<Literal>]
+ Deklaracja może otrzymać wartość w podpisie tylko wtedy, gdy ma atrybut [<Literal>]Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- Zmienne ze statycznymi wątkami i kontekstami muszą być statyczne i mieć określony atrybut [<DefaultValue>] w celu określenia, że wartość została zainicjowana w każdym nowym wątku przy użyciu wartości domyślnej
+ Zmienne statyczne dla wątku i kontekstu muszą być określone jako statyczne i mieć atrybut [<DefaultValue>] w celu wskazania, że wartość jest inicjowana w każdym nowym wątku przy użyciu wartości domyślnej
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- Jawne deklaracje typów w przypadku konstruktorów muszą mieć postać „typ1 * ... * typN -> typWynikowy”. Może być konieczne ujęcie elementu „typWynikowy” w nawiasy
+ Jawne deklaracje typów w przypadku konstruktorów muszą mieć postać „ty1 * ... * tyN -> resTy”. Może być konieczne ujęcie ciągu „resTy” w nawias
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- Typ struktury, rekordu lub unii „{0}” zawiera jawną implementację interfejsu „System.IEquatable<_>”. Zastosuj atrybut „CustomEquality” do typu i określ spójną implementację nieogólnego przesłonięcia „System.Object.Equals(obj)”.
+ Typ struktury, rekordu lub unii „{0}” zawiera jawną implementację interfejsu „System.IEquatable<_>”. Zastosuj atrybut „CustomEquality” do typu i określ spójną implementację nieogólnego przesłonięcia „System.Object.Equals(obiekt)”.
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Ten skrót typu zawiera co najmniej jeden zadeklarowany parametr typu, który nie występuje w skracanym typie. Skróty typu muszą używać wszystkich zadeklarowanych parametrów typu w skracanym typie. Rozważ usunięcie co najmniej jednego parametru typu lub użyj konkretnej definicji typu, która opakowuje odpowiedni typ, na przykład „type C<'a> = C of ...”.
+ Ten skrót typu zawiera co najmniej jeden zadeklarowany parametr typu, który nie występuje w skracanym typie. Skróty typu muszą używać wszystkich zadeklarowanych parametrów typu w skracanym typie. Rozważ usunięcie co najmniej jednego parametru typu lub użyj konkretnej definicji typu, która opakowuje typ podstawowy, na przykład „type C<'a> = C of ...”.
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- Reprezentacja tego typu została ukryta przez sygnaturę. W celu wskazania charakterystyki typu musi ona zawierać atrybut, taki jak [<Sealed>], [<Class>] lub [<Interface>].
+ Reprezentacja tego typu została ukryta przez podpis. W celu wskazania charakterystyki typu musi ona zawierać atrybut, taki jak [<Sealed>], [<Class>] lub [<Interface>].
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- Specyfikacje delegatów muszą mieć postać „typ -> typ”.
+ Specyfikacje delegatów muszą mieć postać „typ -> typ”Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Specyfikacje delegatów nie mogą być typu curried. Użyj konstrukcji „typ * ... * typ -> typ” w przypadku delegatów z wieloma argumentami i konstrukcji „typ -> (typ -> typ)” w przypadku delegatów zwracających wartości funkcji..
+ Specyfikacje delegatów nie mogą być typu curried. Użyj konstrukcji „typ * ... * typ -> typ” w przypadku delegatów z wieloma argumentami i konstrukcji „typ -> (typ -> typ)” w przypadku delegatów zwracających wartości funkcji.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- Składnia „type X with ...” jest zarezerwowana dla powiększeń. Typy, które mają ukryte reprezentacje, ale zawierają elementy członkowskie, są obecnie deklarowane w sygnaturach przy użyciu składni „type X = ...”. Może być też konieczne dodanie atrybutu [<Sealed>] do definicji typu w sygnaturze
+ Składnia „type X with ...” jest zarezerwowana dla rozszerzeń. Typy, które mają ukryte reprezentacje, ale zawierają składowe, są obecnie deklarowane w podpisach przy użyciu składni „type X = ...”. Może być też konieczne dodanie atrybutu [<Sealed>] do definicji typu w podpisie
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- Połącz określony zasób z tym zestawem, gdzie format informacji o zasobie to <plik>[,<nazwa_ciągu>[,public|private]]
+ Połącz określony zasób z tym zestawem, gdzie format informacji o zasobie to <plik>[,<nazwa ciągu>[,public|private]]
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- Zdarzenie „{0}” ma niestandardowy typ. Jeśli to zdarzenie zadeklarowano w innym języku infrastruktury CLI, może być konieczne uzyskanie dostępu do tego zdarzenia przy użyciu jawnych metod {1} i {2} zdarzenia. Jeśli to zdarzenie zadeklarowano w języku F#, utwórz dla typu zdarzenia wystąpienie interfejsu „IDelegateEvent<_>” lub interfejsu „IEvent<_,_>”.
+ Zdarzenie „{0}” ma niestandardowy typ. Jeśli to zdarzenie zadeklarowano w innym języku interfejsu CLI, może być konieczne uzyskanie dostępu do tego zdarzenia przy użyciu jawnych metod {1} i {2} zdarzenia. Jeśli to zdarzenie zadeklarowano w języku F#, określ typ zdarzenia jako wystąpienie interfejsu „IDelegateEvent<_>” lub „IEvent<_,_>”.
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Parametry typu muszą być umieszczone w bezpośrednim sąsiedztwie nazwy typu (np. \"type C<'T>\", a nie type \"C <'T>\")
+ Usuń spacje między nazwą i parametrem typu, np. \"type C<'T>\", a nie type \"C <'T>\". Parametry typów muszą bezpośrednio przylegać do nazw typów.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Argumenty typu muszą być umieszczone w bezpośrednim sąsiedztwie nazwy typu (np. \"C<'T>\", a nie \"C <'T>\")
+ Usuń spacje między nazwą i parametrem typu, np. \"C<'T>\", a nie \"C <'T>\". Parametry typów muszą bezpośrednio przylegać do nazw typów.The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- Użycie składni typu „int C” i „C <int>” jest tutaj niedozwolone. Rozważ dopasowanie tego typu w celu zapisania go w postaci „C<int>”
+ Użycie składni typu „int C” i „C <int>” nie jest tutaj dozwolone. Rozważ dopasowanie tego typu w celu zapisania go w postaci „C<int>”
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- Aktywny wzorzec „{0}” ma typ wyniku zawierający zmienne typu, które nie są określone przez dane wejściowe. Częstą przyczyną jest brak podanego przypadku wyniku (np. „let (|A|B|) (x:int) = A x”). Można to naprawić za pomocą ograniczenia typu (np. „let (|A|B|) (x:int) : Choice<int,unit> = A x”)
+ Aktywny wzorzec „{0}” ma typ wyniku zawierający zmienne typu, które nie są określone przez dane wejściowe. Częstą przyczyną jest brak podanego przypadku wyniku, np. „let (|A|B|) (x:int) = A x”. Można to naprawić za pomocą ograniczenia typu, np. „let (|A|B|) (x:int) : Choice<int,unit> = A x”
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- Nazwa pliku MDB musi mieć postać: <nazwa-pliku-zestawu>.mdb. Opcja --pdb zostanie zignorowana.
+ Plik MDB musi mieć nazwę <nazwa-pliku-zestawu>.mdb. Opcja --pdb zostanie zignorowana.
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- Powiązania „use!” muszą mieć postać „use! <var> = <expr>”
+ Powiązania „use!” muszą mieć format „use! <zmienna> = <wyrażenie>”
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- Przekazywanie pliku .resx ({0}) jako pliku źródłowego do kompilatora jest przestarzałe. Użyj programu resgen.exe, aby przekształcić plik .resx w plik .resources w celu przekazania go w opcji --resource. Jeśli używasz narzędzia MSBuild, może to zostać zrealizowane za pośrednictwem elementu <EmbeddedResource> w pliku projektu .fsproj.
+ Przekazywanie pliku resx ({0}) jako pliku źródłowego do kompilatora jest przestarzałe. Użyj programu resgen.exe, aby przekształcić plik resx w plik resources w celu przekazania go w opcji --resource. Jeśli używasz narzędzia MSBuild, można to zrobić za pośrednictwem elementu <EmbeddedResource> w pliku projektu fsproj.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- Bezpośrednie odwołanie do wygenerowanego typu „{0}” jest niedozwolone. Użyj definicji typu (np. „type AliasTypu = <ścieżka>”). Wskazuje to, że dostawca typów dodaje wygenerowane typy do używanego zestawu.
+ Bezpośrednie odwołanie do wygenerowanego typu „{0}” nie jest dozwolone. Zamiast tego użyj definicji typu, np. „type TypeAlias = <ścieżka>”. Wskazuje to, że dostawca typów dodaje wygenerowane typy do używanego zestawu.
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- Parametr statyczny „{0}” podanego typu lub podanej metody „{1}” wymaga wartości. Parametry statyczne dostawców typów mogą być opcjonalnie określane przy użyciu argumentów nazwanych (np. „{2}<{3}=...>”).
+ Parametr statyczny „{0}” podanego typu lub podanej metody „{1}” wymaga wartości. Parametry statyczne dostawców typów mogą być opcjonalnie określane przy użyciu argumentów nazwanych, np. „{2}<{3}=...>”.
@@ -5954,12 +5954,12 @@
Unmatched '[<'. Expected closing '>]'
- Niedopasowane znaki „[<”. Oczekiwano znaków zamykających „>]”
+ Niedopasowany element „[<”. Oczekiwano elementu zamykającego „>]”Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Nieoczekiwane zakończenie danych wejściowych w wyrażeniu „match”. Oczekiwana wartość: „match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...”.
+ Nieoczekiwane zakończenie danych wejściowych w wyrażeniu „match”. Oczekiwano konstrukcji „match <wyrażenie> with | <wzorzec> -> <wyrażenie> | <wzorzec> -> <wyrażenie> ...”.
@@ -5974,7 +5974,7 @@
Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Nieoczekiwane zakończenie danych wejściowych w wyrażeniu „for”. Oczekiwana wartość: „for <pat> in <expr> do <expr>”.
+ Nieoczekiwane zakończenie danych wejściowych w wyrażeniu „for”. Oczekiwano konstrukcji „for <wzorzec> in <wyrażenie> do <wyrażenie>”.
@@ -5984,12 +5984,12 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Nieoczekiwane zakończenie danych wejściowych w rozgałęzieniu „then” wyrażenia warunkowego. Oczekiwano konstrukcji „if <wyrażenie> then <wyrażenie>” lub „if <wyrażenie> then <wyrażenie> else <wyrażenie>”.
+ Nieoczekiwane zakończenie danych wejściowych w gałęzi „then” wyrażenia warunkowego. Oczekiwano konstrukcji „if <wyrażenie> then <wyrażenie>” lub „if <wyrażenie> then <wyrażenie> else <wyrażenie>”.Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Nieoczekiwany koniec danych wejściowych w rozgałęzieniu „else” wyrażenia warunkowego. Oczekiwano instrukcji „if <wyrażenie> then <wyrażenie>” lub „if <wyrażenie> then <wyrażenie> else <wyrażenie>”.
+ Nieoczekiwane zakończenie danych wejściowych w gałęzi „else” wyrażenia warunkowego. Oczekiwano konstrukcji „if <wyrażenie> then <wyrażenie>” lub „if <wyrażenie> then <wyrażenie> else <wyrażenie>”.
@@ -6059,12 +6059,12 @@
Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Brak instrukcji „do” w wyrażeniu „for”. Oczekiwano konstrukcji „for <wzorzec> in <wyrażenie> do <wyrażenie>”.
+ Brak powiązania „do” w wyrażeniu „for”. Oczekiwano konstrukcji „for <wzorzec> in <wyrażenie> do <wyrażenie>”.Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Nieprawidłowa relacja połączenia w elemencie „{0}”.Oczekiwany ciąg: „expr <op> expr”, gdzie <op> to =, =?, ?= lub ?=?.
+ Nieprawidłowa relacja sprzężenia w elemencie „{0}”. Oczekiwano konstrukcji „wyrażenie <operator> wyrażenie”, gdzie <operator> to =, =?, ?= lub ?=?.
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- Argumenty operatorów zapytania mogą wymagać nawiasów, na przykład „where (x > y)” lub „groupBy (x.Length / 10)”
+ Argumenty operatorów zapytań mogą wymagać nawiasów, np. „where (x > y)” lub „groupBy (x.Length / 10)”
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- Przypadek unii/wyjątek „{0}” nie ma pola o nazwie „{1}”.
+ Przypadek unii „{0}” nie ma pola o nazwie „{1}”.
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Używane w asynchronicznych przepływach pracy do powiązywania nazwy z wynikiem obliczenia asynchronicznego lub w innych wyrażeniach obliczenia do powiązywania nazwy z wynikiem, którego typ to obliczenie.
+ Używane w wyrażeniach obliczeń, aby powiązać nazwę z wynikiem innego wyrażenia obliczenia.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Używane do wskazywania wartości do podania jako wyniku wyrażenia obliczenia.
+ Używane do udostępniania wartości dla wyniku zawierającego wyrażenia obliczenia.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Używane do wskazywania wyrażenia obliczenia, które po obliczeniu udostępnia wynik zawartego wyrażenia obliczenia.
+ Używane do udostępniania wyniku zawierającego wyrażenia obliczenia, gdy ta wartość pochodzi z wyniku innego wyrażenia obliczenia.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Używane zamiast instrukcji let! w asynchronicznych przepływach pracy i innych wyrażeniach obliczenia na potrzeby wartości, które wymagają wywołania operacji Dispose w celu zwolnienia zasobów.
+ Używane zamiast powiązania let! w wyrażeniach obliczeń, aby uzyskać wyniki wyrażenia obliczeń implementujące interfejs IDisposable.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Wskaźnik byref zwracany przez funkcję lub metodę jest niejawnie wyłuskiwany, począwszy od wersji 4.5 języka F#. Aby pobrać wartość zwracaną jako wskaźnik, użyj operatora address-of, np. „&f(x)” lub „&obj.Method(arg1, arg2)”.
+ Wskaźnik byref zwracany przez funkcję lub metodę jest niejawnie wyłuskiwany w języku F# 4.5 i nowszych. Aby uzyskać wartość zwracaną jako wskaźnik, użyj operatora address-of, np. „&f(x)” lub „&obj.Method(argument1, argument2)”.A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Typ z adnotacją IsByRefLike musi również być strukturą. Rozważ dodanie atrybutu [<Struct>] do tego typu.
+ Typ z adnotacją IsByRefLike musi być również strukturą. Rozważ dodanie atrybutu [<Struct>] do typu.
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Typ z adnotacją IsReadOnly musi również być strukturą. Rozważ dodanie atrybutu [<Struct>] do tego typu.
+ Typ z adnotacją IsReadOnly musi również być strukturą. Rozważ dodanie atrybutu [<Struct>] do typu.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ Niedopasowany element „{{|”anonymous record field
- anonymous record field
+ pole rekordu anonimowegoThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ Wyjątek „{0}” nie ma pola o nazwie „{1}”.Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Aktywne wzorce nie mają pól. Składnia jest nieprawidłowa.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ Konstruktor nie ma pola o nazwie „{0}”.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Dwa typy rekordów anonimowych pochodzą z różnych zestawów: „{0}” i „{1}”Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Dwa typy rekordów anonimowych mają niezgodne zestawy nazw pól „{0}” i „{1}”Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ Nie można wywołać metody rozszerzenia byref „{0}”. Pierwszy parametr wymaga, aby wartość była typem byref zmiennym lub innym niż tylko do odczytu.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Typy Byref nie mogą mieć opcjonalnych rozszerzeń typu.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ Nie można częściowo zastosować metody rozszerzenia „{0}”, ponieważ pierwszy parametr jest typu byref.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Ten typ nie dziedziczy atrybutu, więc nie będzie działać prawidłowo z innymi językami .NET.Invalid anonymous record expression
- Invalid anonymous record expression
+ Nieprawidłowe wyrażenie rekordu anonimowegoInvalid anonymous record type
- Invalid anonymous record type
+ Nieprawidłowy typ rekordu anonimowegoThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ Dane wejściowe wyrażenia kopiowania i aktualizowania, które tworzy rekord anonimowy, muszą być rekordem lub rekordem anonimowymThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ Parametr „{0}” ma nieprawidłowy typ „{1}”. Nie jest to dozwolone przez reguły języka Common IL.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ Funkcja lub metoda ma nieprawidłowy zwracany typ „{0}”. Nie jest to dozwolone przez reguły języka Common IL.
diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf
index 042c8ec9f27..a09a2b4d8b4 100644
--- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf
+++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Todos os elementos de uma expressão do construtor de lista devem ter o mesmo tipo. Essa expressão deveria ter o tipo '{0}', mas aqui tem o tipo '{1}'.
+ Todos os elementos de uma expressão do construtor de lista devem ter o mesmo tipo. Essa expressão deveria ter o tipo '{0}', mas aqui tem o tipo '{1}'.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Todos os elementos de uma expressão do construtor de matriz devem ter o mesmo tipo. Essa expressão deveria ter o tipo '{0}', mas aqui tem o tipo '{1}'.
+ Todos os elementos de uma expressão do construtor de matriz devem ter o mesmo tipo. Essa expressão deveria ter o tipo '{0}', mas aqui tem o tipo '{1}'.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- A expressão 'if' está sem uma ramificação 'else'. A ramificação 'then' tem tipo '{0}'. Como 'if' é uma expressão e não uma instrução, adicione uma ramificação 'else' que retorna um valor do mesmo tipo.
+ A expressão 'if' está sem uma ramificação 'else'. A ramificação 'then' tem tipo '{0}'. Como 'if' é uma expressão e não uma instrução, adicione uma ramificação 'else' que retorna um valor do mesmo tipo.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Todas as ramificações de uma expressão 'if' devem ter o mesmo tipo. Essa expressão deveria ter o tipo '{0}', mas aqui tem o tipo '{1}'.
+ Todas as ramificações de uma expressão 'if' devem ter o mesmo tipo. Essa expressão deveria ter o tipo '{0}', mas aqui tem o tipo '{1}'.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Todos as ramificações de uma expressão de correspondência de padrão devem retornar valores do mesmo tipo. A primeira ramificação retornou um valor de tipo '{0}', mas este ramo retornou um valor de tipo '{1}'.
+ Todos os branches de uma expressão correspondente ao padrão precisam retornar valores do mesmo tipo. O primeiro branch retornou um valor do tipo '{0}', mas este branch retornou um valor do tipo '{1}'.
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Diretiva inválida. '#I \"<caminho>\"' era esperado.
+ Diretiva inválida. Esperado '#I \"<path>\"'.Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Diretiva inválida. '#r \"<arquivo-ou-assembly>\"' era esperado.
+ Diretiva inválida. Esperado '#r \"<file-or-assembly>\"'.Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Diretiva inválida. Esperado '#load \"<arquivo>\" ... \"<arquivo>\"'.
+ Diretiva inválida. Esperado '#load \"<file>\" ... \"<file>\"'.
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- O módulo '{0}' contém\n {1} \n, mas sua assinatura especifica\n {2} \nOs parâmetros genéricos na assinatura e na implementação têm tipos diferentes. Talvez exista um atributo [<Measure>] ausente.
+ O módulo '{0}' contém\n {1} \nmas sua assinatura especifica\n {2} \nOs parâmetros genéricos na assinatura e na implementação apresentam tipos diferentes. Talvez haja um atributo [<Measure>] ausente.Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- O módulo '{0}' contém\n {1} \ n, mas sua assinatura especifica\n {2} \nAs aridades diferem na assinatura e na implementação. A assinatura especifica que '{3}' é definição de função ou expressão lambda aceitando pelo menos {4} argumentos, mas a implementação é um valor de função computado. Para declarar que um valor de função computado é uma implementação permitida, basta colocar seu tipo entre parênteses na assinatura, por exemplo:\n\tval {5}: int -> (int -> int)\nao invés de\n\tval {6}: int -> int -> int.
+ O módulo '{0}' contém\n {1} \n,mas sua assinatura especifica\n {2} \nAs aridades diferem na assinatura e na implementação. A assinatura especifica que '{3}' é definição de função ou expressão lambda aceitando pelo menos {4} argumentos, mas a implementação é um valor de função computado. Para declarar que um valor de função computado é uma implementação permitida, basta colocar seu tipo entre parênteses na assinatura, por exemplo,\n\tval {5}: int -> (int -> int)\nem vez de\n\tval {6}: int -> int -> int.
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- As definições {0} para o tipo '{1}' na assinatura e implementação não são compatíveis, pois o tipo de implementação é selado, mas a assinatura implica que ele não é. Considere adicionar o atributo [<Sealed>] à assinatura.
+ As definições de {0} para o tipo '{1}' na assinatura e na implementação não são compatíveis, porque o tipo de implementação é selado, mas a assinatura implica que não é. Adicione o atributo [<Sealed>] à assinatura.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- As definições {0} para o tipo '{1}' na assinatura e implementação não são compatíveis, pois o tipo de implementação não é selado, mas a assinatura implica que ele é. Considere adicionar o atributo [<Sealed>] à implementação.
+ As definições de {0} para o tipo '{1}' na assinatura e na implementação não são compatíveis, porque o tipo de implementação não é selado, mas a assinatura implica que é. Adicione o atributo [<Sealed>] à implementação.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- As definições {0} para o tipo '{1}' na assinatura e implementação não são compatíveis, pois a implementação é uma classe abstrata e a assinatura não. Considere adicionar o atributo [<AbstractClass>] à assinatura.
+ As definições de {0} para o tipo '{1}' na assinatura e na implementação não são compatíveis, porque a implementação é uma classe abstrata, mas a assinatura não é. Adicione o atributo [< AbstractClass>] para a assinatura.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- As definições {0} para o tipo '{1}' na assinatura e implementação não são compatíveis, pois a assinatura é uma classe abstrata, mas a implementação não. Considere adicionar o atributo [<AbstractClass>] à implementação.
+ As definições de {0} para o tipo '{1}' na assinatura e na implementação não são compatíveis, porque a assinatura é uma classe abstrata, mas a implementação não é. Adicione o atributo [<AbstractClass>] à implementação.
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Um tipo com atributo 'ReferenceEquality' não pode ter uma implementação explícita de 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'
+ Um tipo com o atributo 'ReferenceEquality' não pode ter uma implementação explícita de 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Um tipo com atributo 'CustomEquality' deve ter uma implementação explícita de pelo menos 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'
+ Um tipo com o atributo 'CustomEquality' deve ter uma implementação explícita de pelo menos um dos 'Object.Equals(obj)', 'System.IEquatable<_>' ou 'System.Collections.IStructuralEquatable'
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- Geralmente um tipo com o atributo 'NoComparison' não deve ter uma implementação explícita de 'System.IComparable', 'System.IComparable<_>' ou 'System.Collections.IStructuralComparable'. Desabilite este aviso caso a intenção seja obter interoperabilidade
+ Um tipo com o atributo 'NoComparison' não deve normalmente ter uma implementação explícita de 'System.IComparable', 'System.IComparable<_>' ou 'System.Collections.IStructuralComparable'. Desabilite esse aviso se isso for intencional para fins de interoperabilidade
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- 'System.Void' só pode ser usado como 'typeof <system.void>' em F#
+ 'System.Void' só pode ser usado como 'typeof<System.Void>' em F#
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- Os termos [<ReflectedDefinition>] não podem conter usos de operador da união pré-fixo '%'
+ Termos [<ReflectedDefinition>] não podem conter usos de operador da união pré-fixo '%'
@@ -2124,7 +2124,7 @@
'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- 'assert' não pode ser usado como um valor de primeira classe. Em vez disso, use 'assert <expr>'.
+ 'assert' não pode ser usado como um valor de primeira classe. Use 'assert <expr>'.
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- O uso de '->' em sequência e expressões computacionais é limitado à forma 'for pat in expr -> expr'. Use a sintaxe 'for ... in ... do ... yield...' para gerar elementos em expressões de sequência mais complexas.
+ O uso de '->' em expressões de computação e sequência é limitado ao formulário 'for pat in expr -> expr'. Use a sintaxe 'for... in... do... yield...' para gerar elementos em expressões mais complexas de sequência.
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- A sintaxe '(typ,...,typ) ident' não é usada em código F#. Considere o uso de 'ident<typ,...,typ>' ao invés dela
+ A sintaxe '(typ,...,typ) ident' não é usada no código F#. Use 'ident<typ,...,typ>'
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- Um parâmetro com atributos também deve receber um nome, por exemplo, '[<Atributo>] Nome : Tipo'
+ Um parâmetro com atributos também deve receber um nome, ex.: '[<Attribute>] Name : Type'
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- O tipo de struct, registro ou união '{0}' implementa explicitamente a interface 'System.IComparable<_>'. Você deve aplicar o atributo 'CustomComparison' ao tipo, além de fornecer uma implementação consistente da interface não genérica System.IComparable.
+ O struct, registro ou tipo de união '{0}' implementa a interface 'System.IComparable<_>' explicitamente. Você deve aplicar o atributo 'CustomComparison' ao tipo e fornecer uma implementação consistente da interface não genérica System.IComparable.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- Os parâmetros de tipo inferidos para este valor não são estáveis sob a eliminação de abreviações de tipo. Isso ocorre devido ao uso de abreviações de tipo que cancelam ou reorganizam os parâmetros de tipo, isto é \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsidere declarar os parâmetros de tipo para este valor explicitamente, isto é\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ Os parâmetros de tipo inferidos para este valor não são estáveis sob o apagamento das abreviações de tipo. Isto é devido ao uso de abreviações de tipo que soltam ou reordenem parâmetros de tipo, ex.: \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nDeclare os parâmetros de tipo para este valor explicitamente, ex.:\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- O tipo '{0}' não é um tipo cujos valores possam ser enumerados com esta sintaxe, ou seja, não é compatível com seq<_>, IEnumerable<_> ou IEnumerable e não tem um método GetEnumerator
+ O tipo '{0}' não é um tipo cujos valores podem ser enumerados com esta sintaxe, ou seja, não é compatível com seq<_>, IEnumerable<_> nem IEnumerable e não tem um método GetEnumerator
@@ -2634,7 +2634,7 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- Esta propriedade possui um tipo inválido. Propriedades que pegam argumentos de indexador múltiplo devem ter tipos da forma 'ty1 * ty2 -> ty3'. Propriedades que retornam funções devem ter tipos da seguinte forma '(ty1 -> ty2)'.
+ Essa propriedade tem um tipo inválido. Propriedades que usam vários argumentos do indexador devem ter tipos da forma 'ty1 * ty2 -> ty3'. Propriedades retornando funções devem ter tipos da forma '(ty1 -> ty2)'.
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- Restrições de literais numéricos não primitivos não podem ser usadas em correspondências padrões porque podem ser mapeadas para multiplicar tipos diferentes através do uso de um módulo NumericLiteral. Considere substituir por uma variável e use 'when <variável> = <constante>' no final da cláusula de correspondência.
+ Constantes literais numéricas não-primitivas não podem ser usadas em correspondências de padrões porque elas podem ser mapeadas para vários tipos diferentes através do uso de um módulo NumericLiteral. Substitua por uma variável e use 'when <variable> = <constant>' no fim da cláusula de correspondência.
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- Construtores devem ser aplicados aos argumentos e não podem ser usados como valores de primeira classe. Se for necessário, use uma função anônima '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
+ Construtores devem ser aplicados a argumentos e não podem ser usados como valores de primeira classe. Se necessário, use uma função anônima '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Atributos [<ThreadStatic>] ou [<ContextStatic>] não podem ser dados a um valor literal
+ Não é possível atribuir um valor literal aos atributos [<ThreadStatic>] ou [<ContextStatic>]
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- Associações 'use' devem estar no formato 'use <var> = <expr>'
+ as associações 'use' devem ser da forma 'use <var> = <expr>'
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Uma declaração só poderá ser o atributo [<Literal>] se um valor constante também for dado, por exemplo 'val x : int = 1'
+ Uma declaração só pode ser o atributo [<Literal>] se um valor constante também é dado, ex.:' val x: int = 1'A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- Uma declaração só poderá receber um valor a uma assinatura se a declaração tiver o atributo [<Literal>]
+ Uma declaração só pode receber um valor em uma assinatura se a declaração tiver o atributo [<Literal>]Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- Variáveis de thread estático e de contexto estático devem ser estáticas e receber o atributo [<DefaultValue>] para indicar que o valor é inicializado como valor padrão a cada novo thread
+ As variáveis de contexto estático e de thread estático devem ser estáticas e dado o atributo [<DefaultValue>] para indicar que o valor é inicializado para o valor padrão em cada novo thread
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- Campos 'val' não inicializados devem ser mutáveis, particulares e marcados com o atributo '[<DefaultValue>]'. Considere usar uma associação 'let' em vez de um campo 'val'.
+ Campos 'val' não inicializados devem ser mutáveis e marcados com o atributo '[<DefaultValue>]'.Use uma associação 'let' em vez de um campo 'val'.Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- Campos 'val' estáticos em tipos devem ser mutáveis, particulares e marcados com o atributo '[<DefaultValue>]'. Eles são iniciados com o valor 'null' ou 'zero' para seus tipos. Também considere usar uma associação 'static let mutable' em um tipo de classe.
+ Os campos estáticos 'val' nos tipos devem ser mutáveis, particulares e marcados com o atributo '[<DefaultValue>]'. Eles são inicializados com o valor 'null' ou 'zero' para seu tipo. Use também uma associação 'static let mutable' em um tipo de classe.
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- O tipo de struct, registro ou união '{0}' implementa explicitamente a interface 'System.IEquatable<_>' . Aplique o atributo 'CustomEquality' ao tipo e forneça uma implementação consistente da substituição não genérica 'System.Object.Equals(obj)'.
+ O tipo de struct, registro ou união '{0}' implementa a interface 'System.IEquatable<_>' explicitamente. Aplique o atributo 'CustomEquality' ao tipo e forneça uma implementação consistente da substituição não genérica 'System.Object.Equals(obj)'.
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Esta abreviação de tipo possui um ou mais parâmetros que não aparecem no tipo sendo abreviado. Abreviações de tipo usam todos os parâmetros de tipo declarados no tipo que está sendo abreviado. Considere remover um ou mais parâmetro de tipo ou usar uma definição de tipo concreto que encapsula um tipo adjacente, como 'type C<'a> = C of ...'.
+ Essa abreviação de tipo tem um ou mais parâmetros de tipo declarados que não aparecem no tipo que está sendo abreviado. Abreviações de tipo devem usar todos os parâmetros de tipo declarados no tipo que está sendo abreviado. Remova um ou mais parâmetros de tipo ou use uma definição de tipo concreta que envolva um tipo subjacente, como 'type C<'a> = C of ...'.
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- A representação deste tipo está oculta pela assinatura. Ela deve receber um atributo como [<Sealed>], [<Class>] ou [<Interface>] para indicar as características deste tipo.
+ A representação deste tipo está oculta pela assinatura. Deve ser dado um atributo como [<Sealed>], [<Class>] ou [<Interface>] para indicar as características do tipo.
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- A especificação de delegado deve ser da forma 'typ -> typ'
+ As especificações de delegado devem ser da forma 'typ -> typ'Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Especificações de delegado não devem ser do tipo curried. Use 'typ * ... * typ -> typ' para delegados de múltiplos argumentos e 'typ -> (typ -> typ)' para delegados que retornam valores de função.
+ Especificações de delegado não devem ser tipos de representante via currying. Use 'typ * ... * typ -> typ' para delegados multi-argumento e 'typ -> (typ -> typ)' para delegados que retornam valores de função.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- A sintaxe 'type X with ...' é reservada para aumentos. Tipos cujas representações são ocultas, mas têm membros, agora são declarados em assinaturas usando 'type X = ...'. Talvez também seja necessário adicionar o atributo '[<Sealed>] à definição de tipo na assinatura
+ A sintaxe 'type X with ...' é reservada para aumentos. Os tipos cujas representações estão ocultas, mas que possuem membros, são agora declarados em assinaturas usando 'type X = ...'. Você também pode precisar adicionar o atributo '[<Sealed>] à definição de tipo na assinatura
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- Vincule o recurso especificado a este assembly, em que o formato resinfo é <arquivo>[,<nome da cadeia de caracteres>[,public|private]]
+ Vincule o recurso especificado a esse assembly em que o formato resinfo é <file>[,<string name>[,public|private]]
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- O evento '{0}' possui um tipo não padrão. Se este evento for declarado em outra linguagem CLI, você pode precisar acessar este evento com o uso de {1} explícito e métodos {2} para ele. Se este evento estiver declarado em F#, faça o tipo de evento também ser uma instanciação de 'IDelegateEvent<_>' ou 'IEvent<_,_>'.
+ O evento '{0}' tem um tipo não padrão. Se este evento for declarado em outra linguagem CLI, você poderá precisar acessar este evento com o uso de {1} explícito e métodos {2} para ele. Se este evento estiver declarado em F#, faça o tipo de evento também ser uma instanciação de 'IDelegateEvent<_>' ou 'IEvent<_,_>'.
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Parâmetros de tipo devem ser colocados diretamente ao lado do nome do tipo, por exemplo: \"type C<'T>\", não type \"C <'T>\"
+ Remova os espaços entre o nome de tipo e o parâmetro de tipo, ex.: \"digite C<'T>\", não digite \"C <'T>\". Parâmetros de tipo devem ser colocados diretamente adjacentes ao nome de tipo.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Argumentos de tipo devem ser colocados diretamente ao lado do nome do tipo, por exemplo: \"C<'T>\", não \"C <'T>\"
+ Remova os espaços entre o nome de tipo e o parâmetro de tipo, ex.: \"C<'T>\", not \"C <'T>\". Os parâmetros de tipo devem ser colocados diretamente adjacentes ao nome do tipo.The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- O uso da sintaxe de tipo 'int C' e 'C <int>' não é permitido aqui. Considere adaptar este tipo para ser gravado na forma 'C<int>'
+ O uso da sintaxe dos tipos 'int C' e 'C <int>' não é permitido aqui. Ajuste este tipo para ser escrito na forma 'C<int>'
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- O parâmetro '{0}' foi inferido para ter o tipo byref. Parâmetros de tipo byref devem receber uma anotação de tipo explícito, por exemplo 'x1: byref<int>'. Ao ser usado, um parâmetro byref é desreferenciado implicitamente.
+ O parâmetro '{0}' foi inferido para ter o tipo byref. Os parâmetros do tipo byref devem receber uma anotação de tipo explícito, ex.: 'x1: byref<int>'. Quando usado, um parâmetro byref é implicitamente desreferenciado.
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- O padrão ativo '{0}' possui um tipo de resultado contendo variáveis de tipo que não são determinadas pela entrada. A causa comum é a falta da menção ao caso de resultado, por exemplo 'let (|A|B|) (x:int) = A x'. Isto pode ser corrigido com uma restrição de tipo, por exemplo 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
+ O padrão ativo '{0}' tem um tipo de resultado que contém variáveis de tipo que não são determinadas pela entrada. A causa mais comum é quando um caso de resultado não é mencionado, ex.: 'let (|A|B|) (x:int) = A x'. Isso pode ser corrigido com uma restrição de tipo, ex.: 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- O nome do arquivo MDB deve ser <nome-do-arquivo-do-assembly>.mdb. A opção --pdb será ignorada.
+ O nome do arquivo MDB deve ser <assembly-file-name>.mdb. A opção --pdb será ignorada.
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- Associações 'use!' devem estar no formato 'use! <var> = <expr>'
+ associações 'use!' devem ser da forma 'use! <var> = <expr>'
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- '<' sem correspondência. '>' de fechamento esperado
+ '<'. Fechamento esperado '>' incompatívelUnexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- Operador de cotação inesperado '<@' na definição do tipo. Se você pretende passar uma cadeia de caracteres textual como argumento estático para um provedor de tipos, coloque um espaço entre os caracteres '<' e '@'.
+ Operador de cotação inesperado '<@' na definição de tipo. Se deseja passar uma cadeia de caracteres textual como um argumento estático para um provedor de tipos, coloque um espaço entre os caracteres '<' e '@'.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- A passagem de um arquivo .resx ({0}) como arquivo de origem para o compilador foi preterida. Use o resgen.exe para transformar o arquivo .resx em um arquivo .resources para passar como uma opção --resource. Se você estiver usando o MSBuild, isso poderá ser feito via um item <EmbeddedResource> no arquivo de projeto .fsproj.
+ Passar um arquivo. resx ({0}) como um arquivo de origem para o compilador é preterido. Use resgen.exe para transformar o arquivo .resx em um arquivo .resources para passar como uma opção --resource.Se você estiver usando MSBuild, isso poderá ser feito por meio de um item <EmbeddedResource> no arquivo de projeto. fsproj.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- Uma referência direta ao tipo gerado '{0}' não é permitida. Em vez disso, use uma definição de tipo, por exemplo, 'type TypeAlias = <caminho>'. Isso indica que um provedor de tipos adiciona tipos gerados ao seu assembly.
+ Uma referência direta para o tipo gerado '{0}' não é permitida. Use uma definição de tipo, por exemplo, 'type TypeAlias = <path>'. Isso indica que um provedor de tipos adiciona tipos gerados para seu assembly.
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- O parâmetro estático '{0}' do tipo fornecido ou método '{1}' requer um valor. Parâmetros estáticos para provedores de tipos podem, opcionalmente, ser especificados usando argumentos nomeados, por exemplo, e.g. '{2}<{3}=...>'.
+ O parâmetro estático '{0}' do tipo ou método fornecido '{1}' exige um valor. Parâmetros estáticos para provedores de tipos podem ser especificados opcionalmente usando argumentos nomeados, ex.: '{2}<{3}=...>'.
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- '[<' sem correspondência. '>]' de fechamento esperado
+ [<'. Fechamento esperado '>]' incompatívelUnexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Fim inesperado de entrada na expressão 'match'. 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...' esperado.
+ Fim inesperado da entrada na expressão 'match'. Esperado 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- Fim inesperado de entrada na expressão 'try'. 'try <expr> with <regras>' ou 'try <expr> finally <expr>' esperado.
+ Fim inesperado da entrada na expressão 'try'. Esperado 'try <expr> with <rules>' ou 'try <expr> finally <expr>'.Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- Fim inesperado de entrada na expressão 'while'. 'while <expr> do <expr>' esperado.
+ Fim inesperado da entrada na expressão 'while'. Esperado 'while <expr> do <expr>'.Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Fim inesperado de entrada na expressão 'for'. 'for <pat> in <expr> do <expr>' esperado.
+ Fim inesperado de entrada na expressão 'for'. Esperado 'for <pat> in <expr> do <expr>'.
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Fim inesperado de entrada em ramificação 'then' de expressão condicional. 'if <expr> then <expr>' ou 'if <expr> then <expr> else <expr>' esperado.
+ Fim inesperado da entrada no branch 'then' da expressão condicional. Esperado 'if <expr> then <expr>' ou 'if <expr> then <expr> else <expr>'.Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Fim inesperado de entrada em ramificação 'else' de expressão condicional. 'if <expr> then <expr>' ou 'if <expr> then <expr> else <expr>' esperado.
+ Fim inesperado de entrada no branch 'else' da expressão condicional. Esperado 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Fim inesperado de entrada no corpo da expressão lambda. 'fun <pat> ... <pat> -> <expr>' esperado.
+ Fim inesperado de entrada no corpo da expressão lambda. Esperado 'fun <pat> ... <pat> -> <expr>'.
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- 'do' ausente em expressão 'while'. 'while <expr> do <expr>' esperado.
+ 'do' ausente na expressão 'while'. Esperado 'while <expr> do <expr>'.Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'do' ausente em expressão 'for'. Esperado 'for <pat> in <expr> do <expr>'.
+ 'do' ausente na expressão 'for'. Esperado 'for <pat> in <expr> do <expr>'.Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Relação de junção inválida em '{0}'. 'expr <op> expr' é esperado, onde <op> é =, =?, ?= ou ?=?.
+ Relação de associação inválida em '{0}'. Esperado 'expr <op> expr', onde <op> for =, =?, ?= ou ?=?.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- O tipo '{0}' é inválido porque o byref<T>, T não pode conter tipos byref.
+ O tipo '{0}' é ilegal porque o byref<T>, não pode conter tipos byref.
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- Argumentos de operadores de consultas podem exigir parênteses, por exemplo, 'where (x > y)' ou 'groupBy (x.Length / 10)'
+ Argumentos para operadores de consulta podem exigir parênteses, ex.: 'where (x > y)' ou 'groupBy (x.Length / 10)'
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- O caso união/exceção '{0}' não possui um campo chamado '{1}'.
+ O caso união '{0}' não tem um campo nomeado '{1}'.
@@ -6349,7 +6349,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- Expressão literal inválida. O atributo [<Literal>] será ignorado.
+ Esta não é uma expressão literal válida. O atributo [<Literal>] será ignorado.
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- A conversão de {0} para {1} é o upcast de segurança de tempo de compilação, não um downcast. Considere usar o operador :> (upcast) em vez do operador :?> (downcast).
+ A conversão de {0} para {1} é um upcast seguro em tempo de compilação, não um downcast. Use o operador:> (upcast) em vez do operador :?> (downcast).
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Usado em fluxos de trabalho assíncronos para associar um nome ao resultado de uma computação assíncrona ou, em outras expressões de cálculo, usado para associar um nome a um resultado, que é do tipo de computação.
+ Usado em expressões de computação para associar um nome ao resultado de outra expressão de computação.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Usado para indicar o valor a ser fornecido como o resultado de uma expressão de computação.
+ Usado para fornecer um valor para o resultado da expressão de computação que a contém.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Usado para indicar uma expressão de computação que, quando avaliada, fornece o resultado da expressão de computação que a contém.
+ Usado para fornecer um valor para o resultado da expressão de computação contida, em que esse próprio valor vem do resultado da expressão de computação que a contém.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Usado ao invés de let! em fluxos de trabalho assíncronos e outras expressões de computação para valores que necessitam que Dispose seja chamado para liberar recursos.
+ Usado em vez de let! em expressões de computação para resultados de expressão de computação que implementam IDisposable.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Um ponteiro byref retornado por uma função ou um método é implicitamente desreferenciado de F # 4.5. Para adquirir o valor retornado como um ponteiro, utilize o operador de endereços, por exemplo, '&f(x)' ou '&obj.Method(arg1, arg2)'.
+ Um ponteiro byref retornado por uma função ou um método é implicitamente desreferenciado a partir de F# 4.5. Para adquirir o valor de retorno como um ponteiro, use o operador de endereço, por exemplo, '&f(x)' ou '&obj.Method(arg1, arg2)'.A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Um tipo anotado com IsByRefLike também deve ser um struct. Considere adicionar o atributo [<Struct>] ao tipo.
+ Um tipo anotado com IsByRefLike também deve ser um struct. Adicione o atributo [<Struct>] ao tipo.
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Um tipo anotado com IsReadOnly também deve ser um struct. Considere adicionar o atributo [<Struct>] ao tipo.
+ Um tipo anotado com IsReadOnly também deve ser um struct. Adicione o atributo [<Struct>] ao tipo.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ '{{|' incompatívelanonymous record field
- anonymous record field
+ campo de registro anônimoThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ A exceção '{0}' não tem um campo nomeado '{1}'.Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Padrões ativos não têm campos. Essa sintaxe é inválida.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ O construtor não tem um campo nomeado '{0}'.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Dois tipos de registro anônimos são de diferentes assemblies '{0}' e '{1}'Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Dois tipos de registro anônimos têm conjuntos incompatíveis de nomes de campos '{0}' e '{1}'Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ Não é possível chamar o método de extensão de byref '{0}. O primeiro parâmetro requer que o valor seja mutável ou não seja byref somente leitura.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Tipos de ByRef não podem ter extensões de tipo opcionais.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ Não é possível aplicar parcialmente o método de extensão '{0}' porque o primeiro parâmetro é um tipo de byref.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Este tipo não herda atributo, ele não funcionará corretamente com outras linguagens .NET.Invalid anonymous record expression
- Invalid anonymous record expression
+ Expressão de registro anônimo inválidaInvalid anonymous record type
- Invalid anonymous record type
+ Tipo de registro anônimo inválidoThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ A entrada para uma expressão de copiar-e-atualizar que cria um registro anônimo deve ser um registro ou um registro anônimoThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ O parâmetro '{0}' tem um tipo inválido '{1}'. Isso não é permitido pelas regras do IL comum.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ A função ou método tem um tipo de retorno inválido '{0}'. Isso não é permitido pelas regras do IL Comum.
diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf
index bf2c051ff87..5ddbc854a80 100644
--- a/src/fsharp/xlf/FSComp.txt.ru.xlf
+++ b/src/fsharp/xlf/FSComp.txt.ru.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Все элементы выражения конструктора списка должны иметь один и тот же тип. В этом выражении ожидалось использование типа "{0}", но используется тип "{1}".
+ Все элементы выражения конструктора списка должны иметь один и тот же тип. В этом выражении ожидалось использование типа "{0}", но используется тип "{1}".All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Все элементы выражения конструктора массива должны иметь один и тот же тип. В этом выражении ожидалось использование типа "{0}", но используется тип "{1}".
+ Все элементы выражения конструктора массива должны иметь один и тот же тип. В этом выражении ожидалось использование типа "{0}", но используется тип "{1}".This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- Выражение "if" не содержит ветвь "else". Ветвь "then" включает тип "{0}". Так как "if" является выражением, а не оператором, добавьте ветвь "else", которая возвращает значение того же типа.
+ Выражение "if" не содержит ветвь "else". Ветвь "then" включает тип "{0}". Так как "if" является выражением, а не оператором, добавьте ветвь "else", которая возвращает значение того же типа.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Все ветви выражения "if" должны иметь один и тот же тип. В этом выражении ожидалось использование типа "{0}", но используется тип "{1}".
+ Все ветви выражения "if" должны иметь один и тот же тип. В этом выражении ожидалось использование типа "{0}", но используется тип "{1}".All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Все ветви выражения сопоставления шаблона должны возвращать значения одного и того же типа. Первая ветвь возвратила значение типа "{0}", однако эта ветвь возвратила выражение типа "{1}".
+ Все ветви выражения сопоставления шаблонов должны возвращать значения одного типа. Первая ветвь возвратила значение типа "{0}", а эта ветвь — типа "{1}".
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Недопустимая директива. Требуется ''#I \"<путь>\"''.
+ Недопустимая директива. Ожидается '#I \"<путь>\"'.Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Недопустимая директива. Требуется ''#r \"<файл_или_сборка>\"''.
+ Недопустимая директива. Ожидаемая директива: '#r \"<file-or-assembly>\"'.Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Недопустимая директива. Требуется ''#load \"<файл>\" ... \"<файл>\"''.
+ Недопустимая директива. Ожидаемая директива: '#load \"<файл>\" ... \"<файл>\"'.
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- Модуль "{0}" содержит\n {1} \nНо его сигнатура задает\n {2} \nВ сигнатуре и реализации указаны универсальные параметры разного вида. Возможно, отсутствует атрибут [<Measure>].
+ Модуль "{0}" содержит\n {1}, \nно в его подписи указано\n {2} \nУниверсальные параметры в подписи и реализации имеют различные типы. Возможно, отсутствует атрибут [<Measure>].Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- Модуль "{0}" содержит\n {1} \nоднако его сигнатура задает\n {2} \nАрности в сигнатуре и реализации различаются. Сигнатура указывает, что "{3}" является определением функции или лямбда-выражением, принимающим по крайней мере {4} аргументов, однако реализация является вычисляемым значением функции. Чтобы объявить, что вычисляемое значение функции является разрешенной реализацией, просто возьмите в круглые скобки его тип в сигнатуре, например:\n\tval {5}: int -> (int -> int)\nвместо\n\tval {6}: int -> int -> int.
+ Модуль '{0}' содержит\n {1}, \nно в его подписи указано\n {2} \nКоличество аргументов в подписи и реализации различаются. В подписи указано, что '{3}' является определением функции или лямбда-выражением, которое принимает не менее {4} аргументов, но в реализации это значение является значением вычисляемой функции. Чтобы объявить, что в реализации может использоваться значение вычисляемой функции, просто заключите его в скобки в подписи, например, \n\tval {5}: int -> (int -> int)\nвместо\n\tval {6}: int -> int -> int.
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- Определения {0} для типа "{1}" в сигнатуре и реализации несовместимы, так как тип реализации запечатан, а сигнатура неявно предполагает обратное. Попробуйте добавить в сигнатуру атрибут [<Sealed>].
+ Определения {0} типа '{1}' в подписи и реализации несовместимы, так как тип реализации закрыт, но он не должен быть закрыт согласно подписи. Добавьте в подпись атрибут [<Sealed>].The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- Определения {0} для типа "{1}" в сигнатуре и реализации несовместимы, так как тип реализации не запечатан, а сигнатура неявно предполагает обратное. Попробуйте добавить в реализацию атрибут [<Sealed>].
+ Определения {0} типа '{1}' в подписи и реализации несовместимы, так как тип реализации не закрыт, однако в соответствии с подписью он должен быть закрыт. Добавьте атрибут [<Sealed>] в реализацию.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- Определения {0} для типа "{1}" в сигнатуре и реализации несовместимы, так как реализация является абстрактным классом, а сигнатура — нет. Попробуйте добавить в сигнатуру атрибут [<AbstractClass>].
+ Определения {0} типа '{1}' в подписи и реализации несовместимы, так как реализация представляет собой абстрактный класс, а подпись — нет. Добавьте атрибут [<AbstractClass>] к подписи.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- Определения {0} для типа "{1}" в сигнатуре и реализации несовместимы, так как сигнатура является абстрактным классом, а реализация — нет. Попробуйте добавить в реализацию атрибут [<AbstractClass>].
+ Определения {0} для типа '{1}' в подписи и реализации несовместимы, так как подпись является абстрактным классом, а реализация — нет. Добавьте атрибут [<AbstractClass>] к реализации.
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Тип с атрибутом "ReferenceEquality" не может содержать явную реализацию метода "Object.Equals(obj)" либо интерфейса "System.IEquatable<_>" или "System.Collections.IStructuralEquatable"
+ Тип с атрибутом 'ReferenceEquality' не может иметь явную реализацию 'Object.Equals(obj)', 'System.IEquatable<_>' или 'System.Collections.IStructuralEquatable'A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- Тип с атрибутом "CustomEquality" должен как минимум содержать явную реализацию метода "Object.Equals(obj)", интерфейса "System.IEquatable<_>" или "System.Collections.IStructuralEquatable"
+ Тип с атрибутом 'CustomEquality' должен иметь явную реализацию с одним из выражений 'Object.Equals(obj)', 'System.IEquatable<_>' или 'System.Collections.IStructuralEquatable'
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- Тип с атрибутом "NoComparison" обычно не должен содержать явную реализацию интерфейсов "System.IComparable", "System.IComparable<_>" или "System.Collections.IStructuralComparable". Если эта операция выполняется в целях обеспечения совместимости, отключите это предупреждение
+ Тип с атрибутом 'NoComparison' обычно не должен иметь явной реализации 'System.IComparable', 'System.IComparable<_>' или 'System.Collections.IStructuralComparable'. Отключите это предупреждение, если это сделано намеренно для целей взаимодействия
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- В языке F# System.Void можно использовать только в виде typeof<System.Void>
+ 'System.Void' может использоваться только как 'typeof<System.Void>' в F#
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- Условия [<ReflectedDefinition>] не могут включать использование оператора соединения префикса "%"
+ В условиях [<ReflectedDefinition>] не может использоваться оператор объединения префикса '%'
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Незавершенное условное выражение. Ожидалось "if <выражение> then <выражение>" или "if <выражение> then <выражение> else <выражение>".
+ Неполное условие. Ожидается 'if <expr> then <expr>' или 'if <expr> then <expr> else <expr>'.'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- assert нельзя использовать в качестве значения первого класса. Вместо этого используйте "assert <expr>".
+ 'assert' не может использоваться как значение первого класса. Используйте 'assert <expr>'.
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- Использование "->" в выражениях последовательности и вычисления ограничивается формой "for pat in expr -> expr". Использование синтаксиса "for ... in ... do ... yield..." для создания элементов в более сложных выражениях последовательности.
+ Конструкция '->' в последовательностях и вычисляемых выражениях может использоваться только в виде 'for pat in expr -> expr'. Используйте синтаксис 'for ... in ... do ... yield...' для создания элементов в более сложных выражениях последовательностей.
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- Синтаксис "(typ,...,typ) ident" не используется в коде F#. Вместо этого рекомендуется использовать синтаксис "ident<typ,...,typ>"
+ Синтаксис '(typ,...,typ) ident' не используется в коде F#. Используйте синтаксис 'ident<typ,...,typ>'
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- Ненулевые константы не могут иметь базовых единиц. Для базового нуля введите 0.0<_>.
+ Ненулевые константы не могут иметь универсальных единиц измерения. Для универсальных нулевых констант используйте 0.0<_>.
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- Также обязательно укажите имя параметра с атрибутами, например "[<Attribute>] Имя : Тип"
+ Необходимо также указать имя параметра с атрибутами, например, '[<Атрибут>] имя : тип'
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- Тип структуры, записи или объединения "{0}" явно реализует интерфейс "System.IComparable<_>". К типу необходимо применить атрибут "CustomComparison", а также предоставить постоянную реализацию небазового интерфейса System.IComparable.
+ Тип структуры, записи или объединения '{0}' явно реализует интерфейс 'System.IComparable<_>'. Необходимо применить атрибут 'CustomComparison' к типу и подготовить постоянную реализацию необщего интерфейса System.IComparable.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- Параметры типа, логически выведенные для данного значения, нестабильны при удалении сокращений типов. Это происходит из-за использования сокращений типов, которые удаляют или реорганизуют параметры типа, напр. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nРекомендуется явно объявить параметры типа для данного значения, напр.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ Параметры типа, полученные для этого значения, не являются стабильными в случае удаления сокращенных обозначений типа. Это вызвано использованием сокращенных обозначений типа, которые удаляются или вызывают изменение порядка параметров типа, например, \n\ttype taggedInt<'a> = int или\n\ttype swap<'a,'b> = 'b * 'a.\nОбъявите параметры типа для этого значения явным образом, например, \n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- Тип "{0}" не является типом, элементы которого могут быть перечислены с помощью данного синтаксиса, напр., несовместимы с seq<_>, IEnumerable<_> или с IEnumerable, а также не имеют метода GetEnumerator
+ Значения типа "{0}" не могут быть перечислены с помощью этого синтаксиса, так как этот тип не совместим с seq<_>, IEnumerable<_> и IEnumerable и не содержит метода GetEnumerator
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- Ограничение "enum" должно иметь форму "enum<type>"
+ Ограничение 'enum' должно иметь вид 'enum<type>'
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- Это свойство имеет недопустимый тип. Свойства, принимающие множественные аргументы индексатора, должны иметь типы формы "ty1 * ty2 -> ty3". Свойства, принимающие множественные аргументы индексатора, должны иметь типы формы "(ty1 -> ty2)".
+ Это свойство имеет недопустимый тип. Свойства, принимающие несколько аргументов индексатора, должны иметь типы 'ty1 * ty2 -> ty3'. Свойства, возвращающие функции, должны иметь типы '(ty1 -> ty2)'.Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- Ожидается параметр единицы измерения, а не параметр типа. Заданные в явном виде параметры единицы измерения должны быть помечены атрибутом [<Measure>].
+ Ожидается параметр единицы измерения, а не параметр типа. Явные параметры единиц измерения должны быть помечены атрибутом [<Measure>].
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- Непримитивные числовые константы-литералы не могут использоваться в сопоставлении шаблонов, так как они могут сопоставляться с несколькими различными типами через использование модуля NumericLiteral. Рекомендуется произвести замену переменной, а в конце конструкции сопоставления использовать "when <variable> = <constant>"
+ Непримитивные числовые символьные константы не могут использоваться в выражениях сопоставления шаблонов, так как они могут быть сопоставлены различным типам с использованием модуля NumericLiteral. Замените эти константы на переменные, указав конструкцию 'when <переменная> = <константа>' в конце выражения сопоставления.
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- Конструкторы должны применяться к аргументам и не должны использоваться как значения первого класса. При необходимости используйте анонимную функцию "(fun arg1 ... argN -> new Type(arg1,...,argN))".
+ Конструкторы должны применяться к аргументам и не могут использоваться как значения первого класса. При необходимости используйте анонимную функцию '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- Изменяемые значения функции должны записываться, как "let mutable f = (fun args -> ...)"
+ Изменяемые значения функций должны быть доступны для записи: 'let mutable f = (fun args -> ...)'
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Значение литерала не может получить атрибуты [<ThreadStatic>] или [<ContextStatic>]
+ Атрибутам [<ThreadStatic>] и [<ContextStatic>] не может быть присвоено значение литерала
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- привязки "use" должны иметь форму "use <var> = <expr>"
+ Привязки 'use' должны иметь вид 'use <var> = <expr>'
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Определение может быть атрибутом [<Literal>], только если также указано постоянное значение, например "val x : int = 1"
+ Объявление может представлять собой только атрибут [<Literal>], если указано значение константы, например, 'val x : int = 1'A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- Объявление может получать в сигнатуре значение, только если у объявления есть атрибут [<Literal>]
+ Объявление может быть указано только в том случае, если в объявлении есть атрибут [<Literal>]Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- Потоко- и контекстностатические переменные должны быть статическими, и им нужно присвоить атрибут [<DefaultValue>], который указывает, что они инициализируются со значением по умолчанию в каждом новом потоке
+ Статические переменные потока и контекста должны быть статическими, и для них необходимо указать атрибут [<DefaultValue>], чтобы подчеркнуть, что их значение инициализируется значением по умолчанию для каждого нового потока
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- Неинициализированные поля "val" должны быть изменяемыми и должны быть помечены атрибутом "[<DefaultValue>]". Попробуйте использовать вместо поля "val" привязку "let".
+ Неинициализированные поля 'val' должны быть изменяемыми и должны быть помечены атрибутом '[<DefaultValue>]'. Используйте привязку 'let' вместо поля 'val'.Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- Статические поля ''val'' в типах должны быть изменяемыми, частными и помеченными атрибутом ''[<DefaultValue>]". Они инициализируются со значением "NULL" или "zero" для своего типа. Попробуйте также использовать в типе класса привязку "static let mutable".
+ Статические поля 'val' в типах должны быть изменяемыми, закрытыми и должны быть помечены атрибутом '[<DefaultValue>]'. Они инициализируются значениями 'null' или 'zero' для своего типа. Вы также можете использовать привязку 'static let mutable' в типе класса.
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- Явные объявления типа для конструкторов должны иметь форму "ty1 * ... * tyN -> resTy". Вокруг "resTy" могут потребоваться круглые скобки.
+ Объявления явных типов для конструкторов должны иметь вид 'ty1 * ... * tyN -> resTy'. Может потребоваться заключить 'resTy' в скобки
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- Тип структуры, записи или объединения "{0}" явно реализует интерфейс "'System.IEquatable<_>". К типу необходимо применить атрибут "CustomEquality", а также предоставить постоянную реализацию небазового переопределения "System.Object.Equals(obj)".
+ Тип структуры, записи или объединения '{0}' явно реализует интерфейс 'System.IEquatable<_>'. Примените к типу атрибут 'CustomEquality' и укажите согласованную реализацию для неуниверсальной перегрузки 'System.Object.Equals(obj)'.
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Сокращение данного типа имеет один или несколько объявленных параметров типа, не находящихся в сокращаемом типе. Сокращения типов должны использовать все объявленные параметры в сокращаемом типе. Рекомендуется удалить один или несколько параметров типа либо использовать определение конкретного типа, переносящего основной тип, такое как "type C<'a> = C of ...".
+ Сокращенная форма типа содержит один или несколько объявляемых параметров типа, которые не появляются в сокращаемом типе. В сокращенных формах типа должны использоваться все объявляемые параметры типа для сокращаемого типа. Удалите один или несколько параметров типа или используйте определение типа, включающее базовый тип, например, 'type C<'a> = C of ...'.
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- Представление этого типа скрыто сигнатурой. Ему нужно присвоить атрибут, такой как [<Sealed>], [<Class>] или [<Interface>], чтобы указать характеристики типа.
+ Представление этого типа скрыто в подписи. Необходимо добавить атрибут, например, [<Sealed>], [<Class>] или [<Interface>], чтобы указать характеристики типа.
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- Спецификации делегатов должны иметь форму "typ -> typ"
+ Спецификации делегатов должны иметь вид 'typ -> typ'Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Спецификации делегатов не должны являться переданными типами. Используйте "typ * ... * typ -> typ" для мульти-аргументных делегатов, и "typ -> (typ -> typ)" для делегатов, возвращающих значения функций.
+ Спецификации делегата не могут иметь каррированные типы. Используйте 'typ * ... * typ -> typ' для делегатов с несколькими аргументами и 'typ -> (typ -> typ)' для делегатов, возвращающих значения функций.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- Синтаксис "type X with …" зарезервирован для приращений. Типы, представления которых скрыты, но при этом имеющие элементы, теперь объявляются в сигнатурах с использованием "type X = …". Возможно, к определению типа в сигнатуре также нужно будет добавить атрибут "[<Sealed>]".
+ Синтаксис 'type X with ...' зарезервирован для дополнений. Типы, представления которых скрыт, но у которых есть участники, теперь объявляются в подписях с использованием синтаксиса 'type X = ...'. Также может потребоваться добавить атрибут '[<Sealed>] в определение типа в подписи
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- Связать указанный ресурс с этой сборкой, где формат resinfo: <файл>[,<имя_строки>[,public|private]]
+ Привязка указанного ресурса к этой сборке, где формат resinfo имеет следующий вид: <файл>[,<имя строки>[,public|private]]
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- Событие "{0}" имеет нестандартный тип. Если это событие объявлено в другом языке CLI, для доступа к нему может потребоваться использование методов {1} и {2} события. Если это событие объявлено в языке F#, используйте в качестве типа события экземпляр "IDelegateEvent<_>" или "IEvent<_,_>".
+ Событие "{0}" имеет нестандартный тип. Если это событие объявлено на другом языке CLI, для доступа к этому событию могут потребоваться явные методы {1} и {2}. Если это событие объявлено на языке F #, укажите тип инициализации события 'IDelegateEvent<_>' или 'IEvent<_,_>'.
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Параметры типа необходимо указывать непосредственно после имени типа, например, \"type C<'T>\", но не type \"C <'T>\"
+ Удалите пробелы между именем типа и параметром типа, например, \"type C<'T>\" вместо \"C <'T>\". Параметры типа должны размещаться рядом с именем типа.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Аргументы типа необходимо указывать непосредственно после имени типа, например \"C<'T>\", но не \"C <'T>\"
+ Удалите пробелы между именем типа и параметром типа, например, \"C<'T>\" вместо \"C <'T>\". Параметры типа должны указываться рядом с названием типа.The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- Использование синтаксиса "int C" и "C <int>" не допускается. Рекомендуется изменить форму типа на "C<int>"
+ Использование синтаксиса типа 'int C' и 'C <int>' не допускается. Измените этот тип на 'C<int>'
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- Предполагается, что параметр "{0}" имеет тип byref. Параметры типа byref должны сопровождаться явной аннотацией типа, например "x1: byref<int>". При использовании параметра byref происходит неявное разыменование ссылки.
+ Для параметра '{0}' был определен тип byref. Для параметров типа byref необходимо явно объявить тип, например, 'x1: byref<int>'. При использовании параметра byref выполняется разрешение ссылки неявным образом.
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- Активный шаблон "{0}" имеет тип результата, содержащий переменные типа, которые не определены входными данными. Обычно эта ошибка возникает, когда не упоминается тестовый случай результата, например "let (|A|B|) (x:int) = A x". Для ее устранения можно ввести ограничение типа, например "let (|A|B|) (x:int) : Choice<int,unit> = A x"
+ Активный шаблон " {0}" имеет тип результата, содержащий переменные типа, которые не определены входными данными. Обычно эта ошибка возникает, когда не упоминается тестовый случай результата, например, 'let (|A|B|) (x:int) = A x'. Чтобы исправить эту ошибку, можно ввести ограничение типа, например, 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- MDB-файл должен иметь имя <имя_файла_сборки>.mdb. Параметр --pdb будет проигнорирован.
+ MDB-файл должен иметь имя <assembly-file-name>.mdb. Параметр --pdb будет проигнорирован.
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- Привязки "use!" должны иметь форму "use! <переменная> = <выражение>"
+ Привязки 'use!' должны иметь вид 'use! <var> = <expr>'
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- Непарная скобка "<". Ожидалась закрывающая скобка ">"
+ Отсутствует парная скобка для '<'. Ожидается закрывающая скобка '>'Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- Непредвиденный оператор цитирования "<@" в определении типа. Если планируется передать строку verbatim в качестве статического аргумента поставщику типов, вставьте пробел между символами "<" и "@".
+ Неожиданный оператор цитирования '<@' в определении типа. Если вы хотите передать дословную строку в качестве статического аргумента поставщику типа, разделите символы '<' и '@' пробелом.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- Не рекомендуется передавать RESX-файл ({0}) компилятору в качестве исходного файла. С помощью программы resgen.exe преобразуйте RESX-файл в RESOURCES-файл для передачи с параметром --resource. При использовании MSBuild это можно сделать с помощью элемента <EmbeddedResource> в FSPROJ-файле проекта.
+ Передача файла .resx ({0}) в качестве исходного файла компилятору больше не поддерживается. Используйте resgen.exe, чтобы преобразовать файл .resx в файл .resources, который необходимо передать с помощью параметра --resource. Если вы используете MSBuild, это можно сделать, указав элемент <EmbeddedResource> в файл проекта .fsproj.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- Прямые ссылки на создаваемый тип "{0}" запрещены. Вместо этого следует использовать определение типа, напр. "type TypeAlias = <path>". Оно показывает, что поставщик типов добавляет создаваемые типы в сборку.
+ Прямые ссылки на созданные типы "{0}" не допускаются. Вместо них используйте определение типа, например, 'type TypeAlias = <путь>'. При этом поставщик типа добавит созданные типы в сборку.
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- Для статического параметра "{0}" предоставленного типа или метода "{1}" требуется значение. Статические параметры поставщиков типов могут задаваться с помощью именованных аргументов, например: "{2}<{3}=...>".
+ Необходимо указать значение статического параметра '{0}' указанного типа или метода '{1}'. Статические параметры для поставщиков типа можно указать с помощью именованных аргументов, например, '{2}<{3}=...>'.
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- Нет парной скобки у "[<". Ожидалась закрывающая скобка ">]"
+ Отсутствует парная скобка для '[<'. Ожидается закрывающая скобка '>]'Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- Непредвиденный конец входных данных в выражении match. Ожидалось "match <выражение> with | <шаблон> -> <выражение> | <шаблон> -> <выражение> ...".
+ Неожиданное завершение входных данных в выражении 'match'. Ожидаемое завершение: 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- Непредвиденный конец входных данных в выражении try. Ожидалось "try <выражение> with <правила>" или "try <выражение> finally <выражение>".
+ Неожиданное завершение входных данных в выражении 'try'. Ожидаемые варианты: 'try <expr> with <rules>' или 'try <expr> finally <expr>'.Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- Непредвиденный конец входных данных в выражении while. Ожидалось "while <выражение> do <выражение>".
+ Неожиданное завершение входных данных в выражении 'while'. Ожидаемое завершение: 'while <expr> do <expr>'.Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- Непредвиденный конец входных данных в выражении for. Ожидалось "for <шаблон> in <выражение> do <выражение>".
+ Неожиданное завершение входных данных для выражения 'for'. Ожидаемое завершение: 'for <pat> в <expr> do <expr>'.
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Непредвиденный конец входных данных в ветви then условного выражения. Ожидалось "if <выражение> then <выражение>" или "if <выражение> then <выражение> else <выражение>".
+ Неожиданное завершение входных данных в ветви 'then' условного выражения. Ожидаемое завершение: 'if <expr> then <expr>' или 'if <expr> then <expr> else <expr>'.Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Непредвиденный конец входных данных в ветви else условного выражения. Ожидалось "if <выражение> then <выражение>" или "if <выражение> then <выражение> else <выражение>".
+ Неожиданное завершение входных данных ветви 'else' условного выражения. Ожидаемое завершение: 'if <expr> then <expr>' или 'if <expr> then <expr> else <expr>'.Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Непредвиденный конец входных данных в теле лямбда-выражения. Ожидалось "fun <шаблон> ... <шаблон> -> <выражение>".
+ Неожиданное завершение входных данных лямбда-выражения. Ожидаемое завершение: 'fun <pat> ... <pat> -> <expr>'.
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- В выражении while отсутствует do. Ожидалось "while <выражение> do <выражение>".
+ В выражении "while" отсутствует "do". Ожидаемый синтаксис: 'while <expr> do <expr>'.Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- В выражении for отсутствует do. Ожидалось "for <шаблон> in <выражение> do <выражение>".
+ Отсутствует выражение 'do' в выражении 'for'. Ожидается 'for <pat> in <expr> do <expr>'.Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- Недопустимое отношение соединения в "{0}". Ожидалось "expr <оператор> expr", где в качестве <оператор> может использоваться =, =?, ?= или ?=?.
+ Недопустимое отношение соединения '{0}'. Ожидаемое отношение: 'expr <оператор> expr', где <оператор> is =, =?, ?= or ?=?.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- Тип "{0}" является недопустимым, поскольку в byref<T> T не может содержать типы byref.
+ Тип '{0}' является недопустимым, так как byref<T>, T не может содержать типы byref.
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- Аргументы операторов запросов могут требовать использования скобок, напр. "where (x > y)" или "groupBy (x.Length / 10)"
+ Аргументы в операторах запроса может потребоваться заключить в скобки, например, 'where (x > y)' или 'groupBy (x.Length / 10)'
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- Ветвь объединения/исключение "{0}" не содержит поля с именем "{1}".
+ Ветвь объединения '{0}' не содержит поля с именем '{1}'.
@@ -6349,7 +6349,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- Недопустимое выражение литерала. Атрибут [<Literal>] будет пропущен.
+ Это выражение не является литеральным. Атрибут [<Literal>] будет проигнорирован.
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- Преобразование {0} в {1} является безопасным повышением времени компиляции, а не понижением. Рекомендуется использовать оператор :> (upcast) вместо оператора :?> (downcast).
+ Преобразование {0} в {1} является безопасным повышением времени компиляции, а не понижением. Рекомендуется использовать :> (upcast) вместо :?> (downcast).
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Используется в асинхронных рабочих процессах для привязки к результату асинхронного вычисления или (в других вычислительных выражениях) для привязки имени к результату, который имеет тип вычисления.
+ Используется в вычислительных выражениях для привязки имени к результату другого вычислительного выражения.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Используется для указания значения, предоставляемого как результат вычислительного выражения.
+ Используется для указания значения для результата, содержащего вычислительное выражение.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Используется для обозначения вычислительного выражения, при вычислении которого выдается результат содержащего его вычислительного выражения.
+ Используется для указания значения результата вычислительного выражения, если это значение поступает из результата другого вычислительного выражения.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Используется вместо let! в асинхронных рабочих процессах и других вычислительных выражениях для значений, требующих вызова Dispose для освобождения ресурсов.
+ Используется вместо let! в вычислительных выражениях для вычисления результатов выражения, которые реализуют интерфейс IDisposable.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Указатель byref, возвращаемый функцией или методом, неявным образом разыменовывается в F# 4.5. Для получения возвращаемого значения в виде указателя используйте оператор address-of, например &f(x) или &obj.Method(arg1, arg2).
+ Указатель на byref, возвращаемый функцией или методом, в F# 4.5 разрешается неявно. Чтобы получить возвращаемое значение в виде указателя, используйте оператор адреса, например, '&f(x)' или '&obj.Method(arg1, arg2)'.A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Тип с аннотацией IsByRefLike также должен быть структурой. Рекомендуется добавить к типу атрибут [<Struct>].
+ Тип, помеченный аннотацией IsByRefLike, обязательно должен быть структурой. Добавьте атрибут [<Struct>] к типу.
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- Тип с аннотацией IsReadOnly также должен быть структурой. Рекомендуется добавить к типу атрибут [<Struct>].
+ Тип с аннотацией IsReadOnly должен быть структурой. Добавьте к этому типу атрибут [<Struct>].
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ Отсутствует парная скобка для '{{|'anonymous record field
- anonymous record field
+ поле анонимной записиThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ Исключение "{0}" не содержит поля с именем "{1}".Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Активные шаблоны не имеют полей. Этот синтаксис является недопустимым.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ Конструктор не содержит поля с именем '{0}'.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ Два типа анонимных записей принадлежат различным сборкам '{0}' и '{1}'Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ Два анонимных типа записей содержат несоответствующие наборы имен полей '{0}' и '{1}'Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ Не удается вызвать метод расширения byref "{0}". В качестве первого параметра необходимо указать изменяемое значение или значение типа byref, доступное не только для чтения.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Типы byref не могут иметь расширения необязательного типа.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ Не удается частично применить метод расширения "{0}", так как первый параметр имеет тип byref.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Этот тип не наследует атрибут (Attribute), он не будет корректно взаимодействовать с другими языками .NET.Invalid anonymous record expression
- Invalid anonymous record expression
+ Недопустимое выражение анонимной записиInvalid anonymous record type
- Invalid anonymous record type
+ Недопустимый анонимный тип записиThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ Входные данные для выражения копирования и обновления, создающего анонимную запись, должны представлять собой анонимную или обычную записьThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ Параметр "{0}" имеет недопустимый тип "{1}". Это не допускается правилами общего промежуточного языка.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ Функция или метод имеет недопустимый возвращаемый тип "{0}". Это не допускается правилами общего промежуточного языка.
diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf
index fae96aa4edb..93a4509caee 100644
--- a/src/fsharp/xlf/FSComp.txt.tr.xlf
+++ b/src/fsharp/xlf/FSComp.txt.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Bir list constructor ifadesinin tüm öğeleri aynı türe sahip olmalıdır. Bu ifadenin '{0}' türünde olması bekleniyordu ancak burada '{1}' türünde.
+ Bir list constructor ifadesinin tüm öğeleri aynı türe sahip olmalıdır. Bu ifadenin '{0}' türünde olması bekleniyordu ancak burada '{1}' türünde.All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- Bir array constructor ifadesinin tüm öğeleri aynı türe sahip olmalıdır. Bu ifadenin '{0}' türünde olması bekleniyordu ancak burada '{1}' türünde.
+ Bir array constructor ifadesinin tüm öğeleri aynı türe sahip olmalıdır. Bu ifadenin '{0}' türünde olması bekleniyordu ancak burada '{1}' türünde.This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- 'if' ifadesinde bir 'else' dalı eksik. 'then' dalı '{0}' türünde. 'if' bir ifade değil deyim olduğundan, aynı türde değer döndüren bir 'else' dalı eklemeniz gerekir.
+ 'if' ifadesinde bir 'else' dalı eksik. 'then' dalı '{0}' türünde. 'if' bir ifade değil deyim olduğundan, aynı türde değer döndüren bir 'else' dalı eklemeniz gerekir.
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Bir 'if' ifadesinin tüm dalları aynı türe sahip olmalıdır. Bu ifadenin '{0}' türünde olması bekleniyordu ancak burada '{1}' türünde.
+ Bir 'if' ifadesinin tüm dalları aynı türe sahip olmalıdır. Bu ifadenin '{0}' türünde olması bekleniyordu ancak burada '{1}' türünde.All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- Desen eşleştirme ifadesinin tüm dalları aynı türde değerler döndürmelidir. İlk dal '{0}' türünde değer döndürdü ancak bu dal '{1}' türünde değer döndürdü.
+ Bir desen eşleştirme ifadesinin tüm dalları aynı türdeki değerleri döndürmelidir. Birinci dal '{0}' türünde bir değer döndürdü ancak bu dal '{1}' türünde bir değer döndürdü.
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- Geçersiz yönerge. Beklenen: '#I \"<yol>\"'.
+ Geçersiz yönerge. '#I \"<path>\"' bekleniyordu.Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- Geçersiz yönerge. Beklenen: '#r \"<dosya-veya-bütünleştirilmiş kod>\"'.
+ Geçersiz yönerge. '#r \"<file-or-assembly>\"' bekleniyordu.Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- Geçersiz yönerge. Beklenen: '#load \"<dosya>\" ... \"<dosya>\"'.
+ Geçersiz yönerge. '#load \"<file>\" ... \"<file>\"' bekleniyordu.
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- '{0}' modülü\n {1} \niçeriyor ancak imzasında\n {2} \nbelirtiliyor. İmzadaki ve uygulamadaki genel parametrelerin çeşitleri farklı. Eksik bir [<Measure>] özniteliği olabilir.
+ '{0}' modülü\n {1} \niçeriyor, ancak modülün imzası tarafından\n {2} belirtiliyor \nİmzadaki ve uygulamadaki genel parametrelerin türleri farklı. Bir [<Measure>] özniteliği eksik olabilir.Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- {0}' modülü\n {1} \niçeriyor ancak imzasında\n {2} \nbelirtiliyor. İmzadaki parametre sayısı ile uygulamadaki farklı. İmzada '{3}' öğesinin en az {4} bağımsız değişken kabul eden bir işlem tanımı veya lambda ifadesi olduğu belirtiliyor, ancak uygulama hesaplanan bir işlev değeri. Hesaplanan işlev değerinin izin verilen bir uygulama olduğunu tanımlamak için imzada türünü ayraç içine almak yeterlidir, örn.\n\tval {6}: int -> int -> int\nyerine\n\tval {5}: int -> (int -> int).
+ '{0}' modülü\n {1} \niçeriyor, ancak imzasında şu belirtiliyor:\n {2} \nİmzadaki parametre sayısı ile uygulamadaki farklı. İmzada '{3}' öğesinin en az {4} bağımsız değişken kabul eden bir işlem tanımı veya lambda ifadesi olduğu belirtiliyor, ancak uygulama hesaplanan bir işlev değeri. Hesaplanan işlev değerinin izin verilen bir uygulama olduğunu bildirmek için imzada türünü ayraç içine almak yeterlidir, ör. \n\tval {6}: int -> int -> int yerine \n\tval {5}: int -> (int -> int)\n.
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- Uygulama türü mühürlü olmasına rağmen imza korumalı olmadığını belirttiğinden, imza ve uygulamadaki '{1}' türü için {0} tanımları uyumlu değil. İmzaya [<Sealed>] özniteliğini eklemeyi düşünün.
+ Uygulama türü mühürlü olduğu halde imza mühürlü olmadığını işaret ettiğinden, '{1}' türü için imzadaki ve uygulamadaki {0} tanımları uyumsuz. İmzaya [<Sealed>] özniteliğini eklemeyi göz önünde bulundurun.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- Uygulama türü mühürlü olmamasına rağmen imza korumalı olduğunu belirttiğinden, imza ve uygulamadaki '{1}' türü için {0} tanımları uyumlu değil. Uygulamaya [<Sealed>] özniteliğini eklemeyi düşünün.
+ Uygulama türü mühürlü olmadığı halde imza mühürlü olduğunu işaret ettiğinden, '{1}' türü için imzadaki ve uygulamadaki {0} tanımları uyumsuz. İmzaya [<Sealed>] özniteliğini eklemeyi göz önünde bulundurun.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- Uygulama bir soyut sınıf olmasına rağmen imza soyut sınıf olmadığından, imza ve uygulamadaki '{1}' türü için {0} tanımları uyumlu değil. İmzaya [<AbstractClass>] özniteliğini eklemeyi düşünün.
+ Uygulama soyut bir sınıf olduğu halde imza soyut sınıf olmadığından '{1}' türü için imzadaki ve uygulamadaki {0} tanımları uyumlu değil. İmzaya [<AbstractClass>] özniteliğini eklemeyi göz önünde bulundurun.The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- İmza bir soyut sınıf olmasına rağmen uygulama soyut sınıf olmadığından, imza ve uygulamadaki '{1}' türü için {0} tanımları uyumlu değil. Uygulamaya [<AbstractClass>] özniteliğini eklemeyi düşünün.
+ İmza soyut bir sınıf olduğu halde uygulama soyut sınıf olmadığından '{1}' türü için imzadaki ve uygulamadaki {0} tanımları uyumlu değil. Uygulamaya [<AbstractClass>] özniteliğini eklemeyi göz önünde bulundurun.
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 'ReferenceEquality' özniteliği olan bir türde, 'Object.Equals(obj)', 'System.IEquatable<_>' veya 'System.Collections.IStructuralEquatable' metotları açık olarak uygulanmış olamaz
+ 'ReferenceEquality' özniteliğine sahip bir tür, açık bir 'Object.Equals(obj)', 'System.IEquatable<_>' veya 'System.Collections.IStructuralEquatable' uygulamasına sahip olamazA type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 'CustomEquality' özniteliği olan bir türde, 'Object.Equals(obj)', 'System.IEquatable<_>' veya 'System.Collections.IStructuralEquatable' metotlarından en az biri açık olarak uygulanmış olmalıdır
+ 'CustomEquality' özniteliğine sahip bir aracın en az bir 'Object.Equals(obj)', 'System.IEquatable<_>' veya 'System.Collections.IStructuralEquatable' için açık bir uygulaması olmalıdır
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- 'NoComparison' özniteliği olan bir türde, genellikle açık olarak uygulanmış 'System.IComparable', 'System.IComparable<_>' veya 'System.Collections.IStructuralComparable' yöntemleri olmamalıdır. Bu birlikte çalışabilme amacıyla bilerek yapılmışsa bu uyarıyı devre dışı bırakın
+ 'NoComparison' özniteliğine sahip bir tür genellikle açık bir 'System.IComparable', 'System.IComparable<_>' veya 'System.Collections.IStructuralComparable' uygulamasına sahip olmamalıdır. Bunu birlikte çalışabilirlik amacıyla bilerek yaptıysanız bu uyarıyı devre dışı bırakın
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- 'System.Void', F# dilinde yalnızca 'typeof<System.Void>' olarak kullanılabilir
+ F# dilinde 'System.Void' yalnızca 'typeof<System.Void>' olarak kullanılabilir
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- [<ReflectedDefinition>] terimleri ön ek ekleme işleci '%' kullanımı içeremez
+ [<ReflectedDefinition>] terimleri, '%' ön ek birleştirme işlecinin kullanımını içeremez
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Eksik koşul. 'if <ifade> then <ifade>' veya 'if <ifade> then <ifade> else <ifade>' bekleniyordu.
+ Eksik koşullu. 'if <expr> then <expr>' veya 'if <expr> then <expr> else <expr>' bekleniyordu.'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- 'assert' birinci sınıf değer olarak kullanılamaz. Onun yerine 'assert <ifade>' kullanın.
+ 'assert' birinci sınıf değer olarak kullanılamaz. Bunun yerine 'assert <expr>' değerini kullanın.
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- Dizi ve hesaplama ifadelerinde '->' kullanımı 'for pat in expr -> expr' biçimiyle sınırlıdır. Daha karmaşık dizi ifadelerinde öğeler oluşturmak için 'for ... in ... do ... yield...' sözdizimini kullanın.
+ Dizi ve hesaplama ifadelerinde '->' kullanımı, 'for pat in expr -> expr' biçimiyle sınırlıdır. Daha karmaşık dizi ifadelerinde öğe oluşturmak için 'for ... in ... do ... yield...' söz dizimini kullanın.
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- '(typ,...,typ) ident' sözdizimi F# kodunda kullanılmaz. Onun yerine 'ident<typ,...,typ>' kullanmayı düşünün
+ F# kodunda '(typ,...,typ) ident' söz dizimi kullanılmaz . Bunun yerine 'ident<typ,...,typ>' söz dizimini kullanmayı göz önünde bulundurun
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- Sıfır olmayan sabitlerin genel birimleri olamaz. Genel sıfır için 0.0<_> yazın.
+ Sıfır olmayan sabit değerlerin genel birimleri olamaz. Genel sıfır için 0.0<_> yazın.
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- Özniteliklere sahip bir parametreye ayrıca bir ad verilmelidir, örn. '[<Attribute>] Ad : Tür'
+ Öznitelikleri olan bir parametreye ad da verilmelidir, ör. '[<Attribute>] Name : Type'
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- Yapı, kayıt veya birleşim türü '{0}', 'System.IComparable<_>' arabirimini açık olarak uyguluyor. Türe 'CustomComparison' özniteliğini uygulamanız ve aynı zamanda genel olmayan System.IComparable arabiriminin tutarlı bir uygulamasını sağlamanız gerekir.
+ Yapı, kayıt veya birleşim türü '{0}', 'System.IComparable<_>' arabirimini açıkça uyguluyor. Türe 'CustomComparison' özniteliğini uygulamalı ve aynı zamanda genel olmayan System.IComparable arabiriminin tutarlı bir uygulamasını sağlamalısınız.
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- Bu değer için çıkartılan tür parametreleri tür kısaltmalarının silinmesi altında kararlı değil. Bunun nedeni, tür parametrelerini bırakan veya yeniden sıralayan tür kısaltmalarının kullanılmasıdır, örn. \n\ttype taggedInt<'a> = int veya\n\ttype swap<'a,'b> = 'b * 'a.\nBu değerin parametrelerini açık olarak tanımlamayı düşünün, örn.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
+ Bu değer için çıkarsanan tür parametreleri, tür kısaltmalarının silinmesi halinde kararlı değildir. Bunun nedeni, tür parametrelerini bırakan veya yeniden sıralayan tür kısaltmalarının kullanımıdır, ör. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nBu değer için tür parametrelerini açıkça bildirmeyi deneyin, ör.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- '{0}' türü, değerleri bu sözdizimiyle sabit listesi oluşturabilen bir tür değildir, yani seq<_>, IEnumerable<_> veya IEnumerable ile uyumlu değildir ve GetEnumerator metodu yoktur
+ '{0}' türü, değerleri bu söz dizimiyle numaralandırılabilecek bir tür değil, yani seq<_>, IEnumerable<_> veya IEnumerable ile uyumlu değil ve bir GetEnumerator metodu yok
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- 'enum' kısıtlaması 'enum<tür>' biçiminde olmalıdır
+ Bir 'enum' kısıtlaması, 'enum<type>' biçiminde olmalıdır
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- Bu özellikte geçersiz bir tür var. Birden çok dizin erişimcisi bağımsız değişkeni alan özelliklerin 'ty1 * ty2 -> ty3' biçiminde türleri olmalıdır. İşlev döndüren özelliklerin '(ty1 -> ty2)' biçiminde türleri olmalıdır.
+ Bu özelliğin türü geçersiz. Birden çok dizin oluşturucu bağımsız değişkeni alan özellikler 'ty1 * ty2 -> ty3' biçiminde olmalıdır. İşlev döndüren özellikler, '(ty1 -> ty2)' biçiminde türlere sahip olmalıdır.Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- Tür parametresi değil ölçü birimi parametresi bekleniyordu. Açık ölçü birimi parametreleri [<Measure>] özniteliğiyle işaretlenmelidir.
+ Tür parametresi değil unit-of-measure parametresi bekleniyordu. Açık unit-of-measure parametreleri [<Measure>] özniteliğiyle işaretlenmelidir.
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- Temel olmayan sayısal sabit değer sabitleri NumericLiteral modülünün kullanılması aracılığıyla birçok farklı türe eşlenebileceği için desen eşlemelerinde kullanılamazlar. Bir değişkenle değiştirmeyi ve eşleştirme yan tümcesinin sonunda 'when <variable> = <constant>' kullanmayı düşünün.
+ Temel olmayan sayısal sabit değerler bir NumericLiteral kullanılarak birden çok farklı türle eşleştirilemediğinden desen eşleştirmelerinde kullanılamaz. Bunu bir değişkenle değiştirmeyi ve eşleşme yan tümcesinin sonunda 'when <variable> = <constant>' kullanmayı göz önünde bulundurun.
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- Oluşturucular bağımsız değişkenlere uygulanmalıdır ve birinci sınıf değer olarak kullanılamazlar. Gerekirse anonim bir işlev kullanın: '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
+ Oluşturucular bağımsız değişkenlere uygulanmalıdır ve birinci sınıf değerler olarak kullanılamaz. Gerekirse anonim bir işlev '(fun arg1 ... argN -> new Type(arg1,...,argN))' kullanın.
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- Değişebilir işlev değerleri 'let mutable f = (fun args -> ...)' şeklinde yazılmalıdır
+ Değiştirilebilir işlev değerleri şu şekilde yazılmalıdır: 'let mutable f = (fun args -> ...)'
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- Bir sabit değere [<ThreadStatic>] veya [<ContextStatic>] öznitelikleri verilemez
+ Sabit bir değere [<ThreadStatic>] veya [<ContextStatic>] öznitelikleri verilemez
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- 'use!' bağlamaları 'use <var> = <expr>' biçiminde olmalıdır
+ 'use' bağlamaları 'use <var> = <expr>' biçiminde olmalıdır
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- Sabit değer de verilmişse bir bildirim yalnızca [<Literal>] özniteliği olabilir, örn. 'val x : int = 1'
+ Bir sabit değer de sağlanmışsa bildirim yalnızca [<Literal>] özniteliği olabilir, ör. 'val x : int = 1'A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- Bir bildirime, imzası içinde yalnızca o bildirimin [<Literal>] özniteliği varsa değer verilebilir
+ Bir bildirime yalnızca bildirim [<Literal>] özniteliğine sahipse bir imzada değer verilebilirThread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- Statik iş parçacıklı ve statik bağlamlı değişkenler statik olmalıdır ve her yeni iş parçacığında değerin varsayılan değerle başlatıldığını belirtmek için [<DefaultValue>] özniteliği verilmelidir
+ Thread-static ve context-static değişkenleri statik olmalı ve değerin her yeni iş parçacığında varsayılan değer olarak başlatıldığının gösterilmesi için bunlara [<DefaultValue>] özniteliği verilmelidir
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- Başlatılmamış 'val' alanları değişebilir olmalı ve '[<DefaultValue>]' özniteliğiyle işaretlenmelidir. 'val' alanı yerine 'let' bağlaması kullanmayı düşünün.
+ Başlatılmamış 'val' alanları değiştirilebilir olmalı ve '[<DefaultValue>]' özniteliğiyle işaretlenmelidir. Bir 'val' alanı yerine 'let' kullanmayı göz önünde bulundurun.Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- Türlerdeki statik 'val' alanları değiştirilebilir, özel ve '[<DefaultValue>]' özniteliğiyle işaretlenmiş olmalıdır. Bunlar, türlerine yönelik olarak 'null' veya 'zero' ile başlatılır. Ayrıca sınıf türünde 'static let mutable' bağlaması kullanmayı düşünün.
+ Türlerdeki statik 'val' alanları değiştirilebilir, özel olmalı ve '[<DefaultValue>]' özniteliğiyle işaretlenmelidir. Bunlar türleri için 'null' veya 'zero' değerine başlatılır. Bir sınıf türünde 'static let mutable' bağlamasını kullanmayı da göz önünde bulundurun.
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- Oluşturucuların açık tür bildirimleri 'ty1 * ... * tyN -> resTy' biçiminde olmalıdır. 'resTy' etrafında ayraç gerekebilir
+ Oluşturuculara yönelik açık tür bildirimleri 'ty1 * ... * tyN -> resTy' biçiminde olmalıdır. 'resTy' ifadesinin parantez içine alınması gerekebilir
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- Yapı, kayıt veya birleşim türü '{0}', 'System.IEquatable<_>' arabirimini açık olarak uyguluyor. Türe 'CustomEquality' özniteliğini uygulayın ve genel olmayan 'System.Object.Equals(obj)' geçersiz kılma işleminin tutarlı bir uygulamasını sağlayın.
+ Yapı, kayıt veya birleşim türü '{0}', 'System.IEquatable<_>' arabirimini açıkça uyguluyor. Türe 'CustomEquality' özniteliğini uygulayın ve genel olmayan 'System.Object.Equals(obj)' geçersiz kılmasının tutarlı bir uygulamasını sağlayın.
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- Bu tür kısaltmasının kısaltılan türde görünmeyen bir veya daha fazla bildirilmiş tür parametresi var. Tür kısaltmaları, bildirilmiş tüm tür parametrelerini kısaltılan türde kullanmalıdır. Bir veya daha fazla tür parametresini kaldırmayı düşünün veya temel türü sarmalayan 'type C<'a> = C of ...' gibi somut bir tür tanımını kullanın.
+ Bu tür kısaltması, kısaltılan türde görünmeyen bir veya daha fazla bildirilen tür parametresine sahip. Tür kısaltmaları, kısaltılan türdeki tüm bildirilen tür parametrelerini kullanılmalıdır. Bir veya daha fazla tür parametresini kaldırmayı ya da temel bir türü sarmalayan 'type C<'a> = C of ...' gibi somut bir tür kullanmayı göz önünde bulundurun.
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- Bu türün gösterimi imza ile gizlenir. Türün özelliğini belirtmek için [<Sealed>], [<Class>] veya [<Interface>] gibi bir öznitelik verilmelidir.
+ Bu türün temsili imza tarafından gizlenmiş. Türün özelliklerinin belirtilmesi için türe [<Sealed>], [<Class>] veya [<Interface>] gibi bir öznitelik verilmelidir.
@@ -3869,7 +3869,7 @@
Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- Temsilci belirtimleri eksiltimli türler olmamalıdır. Çok bağımsız değişkenli temsilciler için 'typ * ... * typ -> typ' ve işlev değerleri döndüren temsilciler için 'typ -> (typ -> typ)' kullanın.
+ Temsilci belirtimleri Curry biçimli türler olmamalıdır. Birden çok bağımsız değişken temsilcisi için 'typ * ... * typ -> typ', işlev değerleri döndüren temsilciler için 'typ -> (typ -> typ)' kullanın.
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- 'type X with ...' söz dizimi genişletmeler için ayrılmıştır. Gösterimleri gizli olan ancak üyeleri olan türler artık 'type X = ...' kullanılarak imzalarda bildirilmektedir. İmzadaki tür tanımına '[<Sealed>] özniteliğini de eklemeniz gerekebilir
+ 'type X with ...' söz dizimi genişletmelere ayrılmıştır. Temsilleri gizli olan ancak üyeleri olan türler artık imzada 'type X = ...' kullanılarak bildirilir. İmzada tür tanımına '[<Sealed>] özniteliğini de eklemeniz gerekebilir
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- Belirtilen kaynağı bu bütünleştirilmiş koda bağlayın. Burada resinfo biçimi: <dosya>[,<dize adı>[,public|private]]
+ Belirtilen kaynağı, resinfo biçimi <file>[,<string name>[,public|private]] olacak şekilde bu derlemeye bağlayın
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- {0}' olayı standard olmayan türe sahip. Bu olay başka bir CLI dilinde tanımlanıyorsa olayın açık {1} ve {2} metotlarını kullanarak bu olaya erişmeniz gerekebilir. Bu olay F# dilinde tanımlanıyorsa, olayın türünü bir 'IDelegateEvent<_>' veya 'IEvent<_,_>' örneklemesi yapın.
+ '{0}' olayının standart olmayan bir türü var. Bu olay başka bir CLI dilinde bildirilmişse, bu olaya olay için açık {1} ve {2} metotlarını kullanarak erişmeniz gerekebilir. Bu olay F# dilinde belirtilmişse olayın türünü 'IDelegateEvent<_>' veya 'IEvent<_,_>' örnek oluşturması yapın.
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Tür parametreleri doğrudan tür adının bitişiğine yerleştirilmelidir, örn. type \"C <'T>\" değil \"type C<'T>\"
+ Tür adı ile tür parametresi arasındaki boşlukları kaldırın, ör. \"C <'T>\" değil \"type C<'T>\". Tür parametreleri doğrudan tür adına bitişik olarak yerleştirilmelidir.Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- Tür bağımsız değişkenleri doğrudan tür adının bitişiğine yerleştirilmelidir, örn. \"C <'T>\" değil \"C<'T>\"
+ Tür adı ile tür parametresi arasındaki boşlukları kaldırın (ör. \"C <'T>\" değil \"C<'T>\". Tür parametreleri doğrudan tür adına bitişik olarak yerleştirilmelidir.The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- 'int C' ve 'C <int>' tür sözdizimi kullanımına burada izin verilmez. Bu türü 'C<int>' biçiminde yazılacak şekilde ayarlamayı düşünün
+ Burada 'int C' ve 'C <int>' tür söz diziminin kullanılmasına izin verilmiyor. Bu türü şu biçimde yazılacak şekilde değiştirmeyi göz önünde bulundurun: 'C<int>'
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- '{0}' parametresinin byref türüne sahip olduğu çıkartıldı. byref türündeki parametrelerin açık bir türün ek açıklamasında verilmesi gerekir, örn. 'x1: byref<int>'. Kullanıldığında, örtük olarak byref parametresinin başvurusu kaldırılır.
+ '{0}' parametresinin byref türüne sahip olduğu çıkarsandı. Byref türündeki parametrelere açık bir tür ek açıklaması verilmelidir, ör. 'x1: byref<int>'. Bir byref parametresi kullanılırsa parametre başvurusu örtük olarak kaldırılır.
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- '{0}' etkin deseninde, giriş tarafından belirlenmeyen tür değişkenleri içeren bir sonuç türü var. Sonuç örneğinin belirtilmemesi bunun yaygın görülen nedenidir, örn. 'let (|A|B|) (x:int) = A x'. Bu durum, tür kısıtlaması ile düzeltilebilir, örn. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
+ '{0}' etkin deseninin, giriş tarafından belirlenmeyen tür değişkenleri içeren bir sonuç türü var. Genellikle bunun nedeni, bir sonuç durumunun (ör. 'let (|A|B|) (x:int) = A x') belirtilmemesidir. Bu bir tür kısıtlamasıyla düzeltilebilir, ör. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- MDB dosyasının adı <bütünleştirilmiş kod-dosyası-adı>.mdb olmalıdır. --pdb seçeneği yok sayılacak.
+ MDB dosyasının adı <assembly-file-name>.mdb olmalıdır. --pdb seçeneği yoksayılacak.
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- Eşleşmeyen '<'. Kapanış karakteri '>' bekleniyordu
+ Eşleşmeyen '<'. Expected closing '>'Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- Tür tanımında beklenmeyen alıntı işleci '<@'. Statik bağımsız değişken olarak bir tam dizeyi tür sağlayıcısına geçirmeyi düşünüyorsanız '<' ve '@' karakterleri arasına boşluk koyun.
+ Tür tanımında beklenmeyen '<@' alıntı işleci. Bir tür sağlayıcısına bir harf dizisini statik bağımsız değişken olarak geçirmek istiyorsanız '<' ile '@' karakterinin arasına bir boşluk koyun.
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- .resx dosyasını ({0}) kaynak dosya olarak derleyiciye geçirmek kullanım dışı bırakıldı. .resx dosyasını bir --resource seçeneği olarak geçirmek üzere .resources dosyasına dönüştürmek için resgen.exe kullanın. MSBuild kullanıyorsanız, .fsproj proje dosyasındaki <EmbeddedResource> öğesi aracılığıyla bu yapılabilir.
+ Bir resx dosyasını ({0}) derleyiciye kaynak dosyası olarak geçirme işlemi kullanımdan kaldırılmıştır. .resx dosyasını bir --resource seçeneği olarak geçirmek için resgen.exe aracını kullanarak dosyayı bir .resources dosyasına dönüştürün. MSBuild kullanıyorsanız bu işlem .fsproj proje dosyasındaki bir <EmbeddedResource> öğesi aracılığıyla gerçekleştirilebilir.
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- '{0}' oluşturulmuş türüne doğrudan başvuruya izin verilmez. Onun yerine tür tanımını kullanın. örn. 'type TypeAlias = <yol>'. Bu, oluşturulmuş türleri bütünleştirilmiş kodunuza bir tür sağlayıcısının eklediğini gösterir.
+ Oluşturulan '{0}' türüne doğrudan başvuruya izin verilmez. Bunun yerine bir tür tanımı (ör. 'type TypeAlias = <path>') kullanın. Bu, bir tür sağlayıcısının derlemeniz için oluşturulmuş türler eklediğini gösterir.
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- {1}' sağlanan tür veya metodunun '{0}' statik parametresi için bir değer gerekiyor. Tür sağlayıcılarının statik parametreleri adlandırılmış bağımsız değişkenler kullanılarak isteğe göre belirtilebilir: Örn. '{2}<{3}=...>'.
+ Sağlanan '{1}' türünün veya metodunun '{0}' statik parametresi bir değer gerektirir. İsteğe bağlı olarak, tür sağlayıcılarına yönelik statik parametreler adlandırılmış bağımsız değişkenler kullanılarak belirtilebilir, ör. '{2}<{3}=...>'.
@@ -5954,17 +5954,17 @@
Unmatched '[<'. Expected closing '>]'
- Eşleşmeyen '[<'. Kapanış karakteri '>]' bekleniyordu
+ Eşleşmeyen '[<'. '>]' kapanışı bekleniyorduUnexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- 'match' ifadesinde beklenmeyen giriş sonu. 'match <ifade> with | <pat> -> <ifade> | <pat> -> <ifade> ...' bekleniyordu.
+ 'match' ifadesinde beklenmeyen giriş sonu. 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...' bekleniyordu.Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- 'try' ifadesinde beklenmeyen giriş sonu. 'try <ifade> with <kurallar>' veya 'try <ifade> finally <ifade>' bekleniyordu.
+ 'try' ifadesinde beklenmeyen giriş sonu. 'try <expr> with <rules>' veya 'try <expr> finally <expr>' bekleniyordu.
@@ -5974,7 +5974,7 @@
Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'for' ifadesinde beklenmeyen giriş sonu. 'for <pat> in <ifade> do <ifade>' bekleniyordu.
+ 'for' ifadesinde beklenmeyen giriş sonu. 'for <pat> in <expr> do <expr>' bekleniyordu.
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Koşullu ifadenin 'then' dalında beklenmeyen giriş sonu. 'if <ifade> then <ifade>' veya 'if <ifade> then <ifade> else <ifade>' bekleniyordu.
+ Koşullu ifadenin 'then' dalında beklenmeyen giriş sonu. 'if <expr> then <expr>' veya 'if <expr> then <expr> else <expr>' bekleniyordu.Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- Koşullu ifadenin 'else' dalında beklenmeyen giriş sonu. 'if <ifade> then <ifade>' veya 'if <ifade> then <ifade> else <ifade>' bekleniyordu.
+ Koşullu ifadenin 'else' dalında beklenmeyen giriş sonu. 'if <expr> then <expr>' veya 'if <expr> then <expr> else <expr>' bekleniyordu.Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Lambda ifadesi gövdesinde beklenmeyen giriş sonu. 'fun <pat> ... <pat> -> <ifade>' bekleniyordu.
+ Lambda ifadesinin gövdesinde beklenmeyen giriş sonu. 'fun <pat> ... <pat> -> <expr>' bekleniyordu.
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- 'while' ifadesinde eksik 'do'. 'while <ifade> do <<ifade>' bekleniyordu.
+ 'while' ifadesinde 'do' eksik. 'while <expr> do <expr>' bekleniyordu.Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'for' ifadesinde eksik 'do'. 'for <pat> in <ifade> do <ifade>' bekleniyordu.
+ 'for' ifadesinde 'do' eksik. <expr> do <expr>' içinde 'for <pat> bekleniyordu.Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- '{0}' öğesinde geçersiz join ilişkisi. 'expr <op> expr' bekleniyordu, burada <op> ifadesi: =, =?, ?= veya ?=?.
+ '{0}' içinde geçersiz birleştirme ilişkisi. <op> değerinin =, =?, ?= veya ?=? olduğu 'expr <op> expr' bekleniyordu.
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- '{0}' türü byref<T> içinde olduğu için geçersiz, T byref türlerini içeremez.
+ byref<T>, içindeki T byref türleri içeremeyeceğinden '{0}' türü geçersizdir.
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- Sorgu işleçlerinin bağımsız değişkenleri ayraç gerektirebilir, örn. 'where (x > y)' veya 'groupBy (x.Length / 10)'
+ Sorgu işleçlerine yönelik bağımsız değişkenler parantez gerektirebilir, ör. 'where (x > y)' veya 'groupBy (x.Length / 10)'
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- {0}' birleşim durumu/özel durumunda '{1}' adlı alan yok.
+ '{0}' birleşim durumunun '{1}' adlı bir alanı yok.
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- {0} türünden {1} türüne dönüştürme, bir alt türe çevirme değil, derleme zamanında güvenli bir üst türe çevirmedir. :?> (alt türe çevirme) işleci yerine :> (üst türe çevirme) işlecini kullanmayı düşünün.
+ {0}-{1} dönüşümü bir alt türe çevirme değil, derleme zamanında güvenli bir üst türe çevirmedir. :?> (alt türe çevirme) işleci yerine :> (üst türe çevirme) işlecini kullanmayı göz önünde bulundurun.
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- Zaman uyumsuz iş akışlarında adı zaman uyumsuz hesaplamanın sonucuna bağlamak için veya diğer hesaplama ifadelerinde adı hesaplama türünden bir sonuca bağlamak için kullanılır.
+ Hesaplama ifadelerinde bir adın başka bir hesaplama ifadesinin sonucuna bağlanması için kullanılır.
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- Bir hesaplama ifadesinin sonucu olarak sağlanacak değeri belirtmek için kullanılır.
+ Öğeyi içeren hesaplama ifadesinin sonucuna yönelik bir değer sağlanması için kullanılır.Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- Değerlendirildiğinde, içerdiği hesaplama ifadesinin sonucu veren bir hesaplama ifadesini belirtmek için kullanılır.
+ Öğeyi içeren hesaplama ifadesinin sonucuna yönelik bir değer sağlanması için kullanılır ve bu değerin kendisi, başka bir hesaplama ifadesinin sonucundan gelir.
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- Zaman uyumsuz iş akışlarında ve diğer hesaplama ifadelerinde Dispose'un boş kaynaklara çağrılmasını gerektiren değerler için let! yerine kullanılır.
+ IDisposable uygulayan hesaplama ifadesi sonuçları için hesaplama ifadelerinde let! yerine kullanılır.
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- Bir işlev veya metot tarafından döndürülen bir byref işaretçisinin başvurusu F# 4.5 itibarıyla örtük olarak kaldırıldı. Dönüş değerini bir işaretçi olarak edinmek için address-of işlecini kullanın. Örn. '&f(x)' veya '&obj.Method(arg1, arg2)'.
+ F# 4.5 sürümüyle birlikte, bir işlev veya metot tarafından döndürülen bir byref işaretçisinin referansı örtük olarak kaldırılır. Döndürülen değeri bir işaretçi olarak edinmek için address-of işlecini kullanın, ör. '&f(x)' veya '&obj.Method(arg1, arg2)'.A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- IsByRefLike ek açıklaması eklenmiş bir tür aynı zamanda bir yapı olmalıdır. Türe [<Struct>] özniteliğini eklemeyi göz önünde bulundurun.
+ IsByRefLike ek açıklamasına sahip bir tür, aynı zamanda bir yapı olmalıdır. Türe [<Struct>] özniteliğini eklemeyi göz önünde bulundurun.
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- IsReadOnly ek açıklaması eklenmiş bir tür aynı zamanda bir yapı olmalıdır. Türe [<Struct>] özniteliğini eklemeyi göz önünde bulundurun.
+ IsReadOnly ek açıklamasına sahip bir tür, aynı zamanda bir yapı olmalıdır. Türe [<Struct>] özniteliğini eklemeyi göz önünde bulundurun.
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ Eşleşmeyen '{{|'anonymous record field
- anonymous record field
+ anonim kayıt alanıThe exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ '{0}' özel durumunun '{1}' adlı bir alanı yok.Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ Etkin desenlerin alanı olmaz. Bu söz dizimi geçersiz.The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ Oluşturucunun '{0}' adlı bir alanı yok.Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ İki anonim kayıt türü, birbirinden farklı olan '{0}' ve '{1}' derlemelerindenTwo anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ İki anonim kayıt türünün eşleşmeyen '{0}' ve '{1}' alan adı kümeleri varCannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ '{0}' byref genişletme metodu çağrılamıyor. İlk parametre, değerin değişebilir olmasını veya salt okunur olmayan bir byref türünde olmasını gerektiriyor.Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Byref türlerinin isteğe bağlı tür genişletmelerine sahip olmasına izin verilmez.Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ İlk parametre bir byref türü olduğundan '{0}' genişletme metodunu kısmi olarak uygulayamazsınız.This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ Bu tür Özniteliği devralmaz, diğer .NET dilleriyle düzgün çalışmaz.Invalid anonymous record expression
- Invalid anonymous record expression
+ Geçersiz anonim kayıt ifadesiInvalid anonymous record type
- Invalid anonymous record type
+ Geçersiz anonim kayıt türüThe input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ Anonim kayıt oluşturan bir copy-and-update ifadesinin girişi anonim bir kayıt ya da bir kayıt olmalıdırThe parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ '{0}' parametresi geçersiz '{1}' türünde. Ortak IL kuralları uyarınca buna izin verilmez.The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ İşlev veya metot geçersiz '{0}' dönüş türüne sahip. Ortak IL kuralları uyarınca buna izin verilmez.
diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf
index 8dc7a20924c..2ef473dafb2 100644
--- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf
+++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- 列表构造函数表达式的所有元素必须具有同一类型。此表达式的类型应为“{0}”,但此处类型为“{1}”。
+ 列表构造函数表达式的所有元素必须具有同一类型。此表达式的类型应为“{0}”,但此处类型为“{1}”。All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- 数组构造函数表达式的所有元素必须具有同一类型。此表达式的类型应为“{0}”,但此处类型为“{1}”。
+ 数组构造函数表达式的所有元素必须具有同一类型。此表达式的类型应为“{0}”,但此处类型为“{1}”。This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- if 表达式缺少 "else" branch。"then" branch 的类型为“{0}”。因为 "if" 是一个表达式,而非语句,请添加将返回同一类型值的 "else" branch。
+ if 表达式缺少 "else" branch。"then" branch 的类型为“{0}”。因为 "if" 是一个表达式,而非语句,请添加将返回同一类型值的 "else" branch。
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- if 表达式的所有分支必须具有同一类型。此表达式的类型应为“{0}”,但此处类型为“{1}”。
+ if 表达式的所有分支必须具有同一类型。此表达式的类型应为“{0}”,但此处类型为“{1}”。All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- 模式匹配表达式的所有分支必须返回相同类型的值。第一个分支返回类型为“{0}”的值,但此分支返回类型为“{1}”的值。
+ 模式匹配表达式的所有分支必须返回相同类型的值。第一个分支返回“{0}”类型的值,但此分支返回“{1}”类型的值。
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- 指令无效。应为“#I \"<路径>\"”。
+ 指令无效。应为 #I \"<path>\"。Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- 指令无效。应为“#r \"<文件或程序集>\"”。
+ 指令无效。应为 #r \"<file-or-assembly>\"。Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- 指令无效。应为“#load \"<文件>\" ... \"<文件>\"”。
+ 指令无效。应为 #load \"<file>\" ... \"<file>\"。
@@ -524,7 +524,7 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- 模块“{0}”包含\n {1} \n而其签名指定\n {2} \n签名和实现中的泛型参数类型不同。可能缺少 [<Measure>] 特性。
+ 模块“{0}”包含\n {1} \n而其签名指定了\n {2} \n签名和实现中的泛型参数具有不同的类型。可能是缺少 [<Measure>] 属性。
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- 签名和实现中类型“{1}”的 {0} 定义不兼容,因为实现类型已密封,但签名暗示它未密封。请考虑将 [<Sealed>] 特性添加到签名。
+ 签名和实现中类型为“{1}”的 {0} 定义不兼容,因为实现类型已密封,但签名暗示其未密封。请考虑向签名添加 [<Sealed>] 属性。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- 签名和实现中类型“{1}”的 {0} 定义不兼容,因为实现类型未密封,但签名暗示它已密封。请考虑将 [<Sealed>] 特性添加到实现。
+ 签名和实现中类型为“{1}”的 {0} 定义不兼容,因为实现类型并未密封,但签名暗示其已密封。请考虑向实现添加 [<Sealed>] 属性。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- 签名和实现中类型“{1}”的 {0} 定义不兼容,因为实现是抽象类,而签名不是。请考虑将 [<AbstractClass>] 特性添加到签名。
+ 签名和实现中类型为“{1}”的 {0} 定义不兼容,因为实现是一个抽象类,但签名不是。请考虑向签名添加 [<AbstractClass>] 属性。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- 签名和实现中类型“{1}”的 {0} 定义不兼容,因为签名是抽象类,而实现不是。请考虑将 [<AbstractClass>] 特性添加到实现。
+ 签名和实现中类型为“{1}”的 {0} 定义不兼容,因为签名是一个抽象类,但实现不是。请考虑向实现添加 [<AbstractClass>] 属性。
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 具有特性“ReferenceEquality”的类型不能显式实现“Object.Equals(obj)”、“System.IEquatable<_>”或“System.Collections.IStructuralEquatable”
+ 具有 "ReferenceEquality" 属性的类型不能具有 "Object.Equals(obj)"、"System.IEquatable<_>" 或 "System.Collections.IStructuralEquatable" 的显式实现A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 具有特性“CustomEquality”的类型必须至少显式实现“Object.Equals(obj)”、“System.IEquatable<_>”或“System.Collections.IStructuralEquatable”中的一个
+ 带有 "CustomEquality" 属性必须至少具有 "Object.Equals(obj)"、"System.IEquatable<_>" 或 "System.Collections.IStructuralEquatable" 三者之一的显式实现
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- 具有特性“NoComparison”的类型通常不应显式实现“System.IComparable”、“System.IComparable<_>”或“System.Collections.IStructuralComparable”。如果这是为了实现互操作性而特意这样做的,请禁用此警告
+ 具有 "NoComparison" 属性的类型通常不应具有 "System.IComparable"、"System.IComparable<_>" 或 "System.Collections.IStructuralComparable" 的显式实现。如果专用于互操作性用途,请禁用此警告
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- “System.Void”在 F# 中只能用作“typeof<System.Void>”
+ "System.Void" 只能在 F# 中用作 "typeof<System.Void>"
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- [<ReflectedDefinition>] 条件中不能使用前缀拼接运算符“%”
+ [<ReflectedDefinition>] 条件中不能使用前缀拼接运算符 "%"
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 条件不完整。应为“if <表达式> then <表达式>”或“if <表达式> then <表达式> else <表达式>”。
+ 条件不完整。应为 "if <expr> then <expr>" 或 "if <expr> then <expr> else <expr>"。'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- “assert”不可用作一类值。请改用“assert <表达式>”。
+ "assert" 不能用作第一类值。请改用 "assert <expr>"。
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- 在序列和计算表达式中,“->”只能用于“for pat in expr -> expr”格式。使用语法“for ... in ... do ... yield...”可在更复杂的序列表达式中生成元素。
+ 只能在序列和计算表达式中按 "for pat in expr -> expr" 格式使用 "->"。要在多个复杂的序列表达式中生成元素,请使用语法 "for ... in ... do ... yield..."。
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- 语法“(typ,...,typ) ident”不可用于 F# 代码。请考虑改用“ident<typ,...,typ>”
+ F# 代码中不使用 "(typ,...,typ) ident" 语法。请考虑改用 "ident<typ,...,typ>"
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- 非零常数不能具有泛型单位。对于泛型零,请编写 0.0<_>。
+ 非零常量不能具有泛型单位。对于泛型零,请编写 0.0<_>。
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- 还必须为具有特性的参数提供名称,例如“[<特性>] Name : Type”
+ 带属性的参数还必须具有名称,例如 "[<Attribute>] Name : Type"
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- 结构、记录或联合类型“{0}”显式实现接口“System.IComparable<_>”。您必须将“CustomComparison”特性应用于相应的类型,并且应提供对非泛型接口 System.IComparable 的一致性实现。
+ 结构、记录或联合类型“{0}”显式实现接口 "System.IComparable<_>"。必须将 "CustomComparison" 属性应用于该类型,还应提供非泛型接口 System.IComparable 的一致实现。
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- 為這個值推斷的類型參數在清除類型縮寫後會不穩定。這是因為使用類型縮寫,導致卸除或重新排列類型參數,例如 \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a。\n請考慮明確宣告這個值的類型參數,例如\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)。
+ 在清除类型缩写词的情况下,为此值推理出的类型参数不稳定。这是因为使用了将删除或记录类型参数的类型缩写词,例如\n\ttype taggedInt<'a> = int 或\n\ttype swap<'a,'b> = 'b * 'a.\n请考虑显式声明此值的类型参数,例如\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)。
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- 类型“{0}”不属于其值可使用此语法进行枚举的类型,也就是说,此类型与 seq<_>、IEnumerable<_> 或 IEnumerable 不兼容且不具有 GetEnumerator 方法
+ 类型“{0}”的值不能通过此语法进行枚举,即该类型不与 seq<_>, IEnumerable<_> 和 IEnumerable 兼容且不具备 GetEnumerator 方法
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- “enum”约束的格式必须为“enum<type>”
+ "enum" 约束必须采用 "enum<type>" 形式
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- 此属性的某个类型无效。采用多个索引器参数的属性应具有格式为“ty1 * ty2 -> ty3”的类型。返回函数的属性应具有格式为“(ty1 -> ty2)”的类型。
+ 此属性的类型无效。采用多个索引器参数的属性应具有 "ty1 * ty1-& gt; ty1" 形式的类型。返回函数的属性应具有 "(ty1 -> ty2)" 形式的类型。Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- 应为度量单位参数,而非类型参数。必须用 [<Measure>] 特性标记显式度量单位参数。
+ 应为度量单位参数,而不是类型参数。显式度量单位参数必须用 [<Measure>] 属性进行标记。
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- 非基元数值文本常数不能用于模式匹配,因为可以通过使用 NumericLiteral 模块将这些常数映射到多个不同类型。请考虑将其替换为一个变量,并在 match 子句的结尾使用“when <variable> = <constant>”。
+ 非基元数值文本常量不能用于模式匹配,因为可以通过使用 NumericLiteral 模块将这些常量映射到多个不同类型。请考虑将其替换为一个变量,并在 match 子句的结尾使用 "when <variable> = <constant>"。
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- 构造函数必须应用于参数,且不能用作第一类值。如有必要,请使用匿名函数“(fun arg1 ... argN -> new Type(arg1,...,argN))”。
+ 构造函数必须应用于参数,且不能用作第一类值。如有必要,请使用匿名函数 "(fun arg1 ... argN -> new Type(arg1,...,argN))"。
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- 应按照“let mutable f = (fun args -> ...)”格式编写可变函数值
+ 应按照 "let mutable f = (fun args -> ...)" 格式编写可变函数值
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- 不能为文本值给定 [<ThreadStatic>] 或 [<ContextStatic>] 特性
+ 无法向文本值赋予 [<ThreadStatic>] 或 [<ContextStatic>] 属性
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- “use”绑定的格式必须为“use <var> = <expr>”
+ "use" 绑定必须采用 "use <var> = <expr>" 形式。
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- 如果同时给定了常数值(例如“val x : int = 1”),则声明只能为 [<Literal>] 特性
+ 如果还给定了常量值,则声明只能是 [<Literal>] 属性,例如 "val x : int = 1"。A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- 仅在声明具有 [<Literal>] 特性时才可在签名中为声明给定值
+ 仅在声明具有 [<Literal>] 属性时, 才可在签名中为声明指定一个值Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- 线程静态和上下文静态变量必须是静态的,并且必须为二者给定 [<DefaultValue>] 特性以指示在每个新线程上将变量值初始化为默认值
+ 线程静态变量和上下文静态变量必须是静态的,并具有 [<DefaultValue>] 属性以指示该值初始化为每个新线程上的默认值
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- 未初始化的“val”字段必须是可变的,且须标记“[<DefaultValue>]”特性。请考虑使用“let”绑定,而不是“val”字段。
+ 未初始化的 "val" 字段必须是可变的且标记有 "[<DefaultValue>]" 属性。请考虑使用 "let" 绑定而不是 "val" 字段。Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- 类型中的静态“val”字段必须是可变的和私有的,且标记有“[<DefaultValue>]”特性。这些字段将被初始化为各自的类型的“null”或“零”值。请考虑在类类型中也使用“static let mutable”绑定。
+ 类型中的静态 "val" 字段必须是可变的和私有的,并标记了 "[<DefaultValue>]" 属性。这些字段将初始化为各自类型的 "null" 或“零”值。请考虑在类类型中也使用 "static let mutable" 绑定
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- 构造函数的显式类型声明的格式必须为“ty1 * ... * tyN -> resTy”。可能需要用括号将“resTy”括起来
+ 构造函数的显式类型声明必须采用 "ty1 * ... * tyN -> resTy" 格式。"resTy" 两侧可能需要加括号
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- 结构、记录或联合类型“{0}”显式实现接口“System.IEquatable<_>”。将“CustomEquality”特性应用于相应的类型,并提供对非泛型重写“System.Object.Equals(obj)”的一致性实现。
+ 结构、记录或联合类型“{0}”显式实现接口 "System.IEquatable<_>"。请将 "CustomEquality" 属性应用于该类型,并提供非泛型重写 "System.Object.Equals(obj)" 的一致实现。
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- 此类型缩写词具有一个或多个在要缩写的类型中不会显示的已声明类型参数。类型缩写词必须使用要缩写的类型中的所有已声明类型参数。请考虑删除一个或多个类型参数,或使用包装基础类型的具体类型定义,例如“type C<'a> = C of ...”。
+ 此类型缩写词的一个或多个已声明的类型参数不在要缩写的类型中显示。类型缩写词必须使用要缩写的类型中的所有已声明类型参数。请考虑删除一个或多个类型参数,或使用包装基础类型的具体类型定义,例如 "type C<'a> = C of ..."。
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- 签名会隐藏此类型的表示形式。必须为此类型给定一个特性(如 [<Sealed>]、[<Class>] 或 [<Interface>])以指示其特征。
+ 签名会隐藏此类型的表示形式。必须为此类型提供一个属性(例如 [<Sealed>]、[<Class>] 或 [<Interface>])以指定其特性。
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- 委托规范的格式必须为“typ -> typ”
+ 委托规范必须采用 "typ -> typ" 形式Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- 委托规范不得为扩充类型。请为多参数委托使用“typ * ... * typ -> typ”,并为返回函数值的委托使用“typ -> (typ -> typ)”。
+ 委托规范不得为扩充类型。请为多参数委托使用 "typ * ... * typ -> typ",并为返回函数值的委托使用 "typ -> (typ -> typ)"。
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- 已保留语法“type X with ...”以供扩大使用。对于其表示形式已隐藏但是具有成员的类型,现在将在签名中使用“type X = ...”声明这些类型。可能还需要向签名中的类型定义添加“[<Sealed>]”特性
+ 保留语法 "type X with ..." 供扩大使用。对于其表示形式已隐藏但具有成员的类型,现将在签名中使用 "type X = ..." 声明这些类型。你可能还需要向签名中的类型定义添加 [<Sealed>] 属性
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- 将指定的资源链接到此程序集,其中 resinfo 格式为“<文件>[,<字符串名称>[,public|private]]”
+ 将指定的资源链接到此程序集,其中 resinfo 格式为 <file>[,<string name>[,public|private]]
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- 事件“{0}”具有非标准类型。如果此事件是在另一种 CLI 语言中声明的,则您可能需要使用此事件的显式 {1} 和 {2} 方法来访问此事件。如果此事件是在 F# 中声明的,则使此事件的类型成为“IDelegateEvent<_>”或“IEvent<_,_>”的实例化。
+ 事件“{0}”具有非标准类型。如果此事件是在另一种 CLI 语言中声明的,则你可能需要使用此事件的显式 {1} 和 {2} 方法来访问此事件。如果此事件是在 F# 中声明的,则使此事件的类型成为 "IDelegateEvent<_>" 或 "IEvent<_,_>" 的实例化。
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 必须将类型参数直接放置到类型名称的旁边,例如 \"type C<'T>\",而非 type \"C <'T>\"
+ 删除类型名称和类型参数之间的空格,例如使用 \"type C<'T>\" 而不是 type \"C <'T>\"。类型参数必须直接放在类型名称的旁边。Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 必须将类型参数直接放置到类型名称的旁边,例如 \"C<'T>\",而非 \"C <'T>\"
+ 删除类型名称和类型参数之间的空格,例如要使用 \"C<'T>\" 而不是 \"C <'T>\"。类型参数必须直接放置在类型名称旁边。The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- 此处不允许使用类型语法“int C”和“C <int>”。请考虑将此类型调整为以格式“C<int>”编写
+ 此处不允许使用类型语法 "int C" 和 "C <int>"。请考虑调整此类型,使其按 "C<int>" 形式进行编写。
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- “{0}”参数被推断为具有 byref 类型。必须为 byref 类型的参数给定显式类型批注,例如“x1: byref<int>”。使用时,会隐式取消引用 byref 参数。
+ 据推断,参数“{0}”具有 byref 类型。必须向 byref 类型的参数提供一个显式类型注释,例如 "x1: byref<int>"。使用时,隐式取消对 byref 类型的引用。
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- 活动模式“{0}”的结果类型中包含的类型变量不是由输入确定的。常见原因是未指出结果事例,例如“let (|A|B|) (x:int) = A x”。这可以通过使用类型约束来修复,例如“let (|A|B|) (x:int) : Choice<int,unit> = A x”
+ 活动模式“{0}”的结果类型包含未由输入确定的类型变量。常见的原因是未提及结果用例,例如 "let (|A|B|) (x:int) = A x"。可采用类型约束来解决此问题,例如 "let (|A|B|) (x:int) : Choice<int,unit> = A x"
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- MDB 文件的名称必须是 <程序集文件名>.mdb。将忽略 --pdb 选项。
+ MDB 文件的名称必须是 <程序集文件名称>.mdb。将忽略 --pdb 选项。
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- “use!”绑定的格式须为“use! <变量> = <表达式>”
+ "use!" 绑定必须采用 "use! <var> = <expr>" 形式。
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- 不匹配的“<”。应为结束“>”
+ "<" 不匹配。应为 ">" 结尾Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- 类型定义中出现意外的引用运算符“<@”。如果您要将原义字符串作为静态参数传递给类型提供程序,请在“<”与“@”字符之间加一个空格。
+ 类型定义中出现意外的引用运算符 "<@"。如果旨在将原义字符串作为静态参数传递到类型提供程序,请在 "<" 和 "@" 字符之间加一个空格。
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- 不推荐将 .resx 文件({0})作为源文件传递给编译器。请使用 resgen.exe 将 .resx 文件转换为 .resources 文件以作为 --resource 选项进行传递。如果您使用的是 MSBuild,则可以通过 .fsproj 项目文件中的 <EmbeddedResource> 项完成此操作。
+ 不推荐将 .resx 文件({0})作为源文件传递给编译器。请使用 resgen.exe 将 .resx 文件转换为 .resources 文件以作为 --resource 选项进行传递。如果使用的是 MSBuild,则可通过 .fsproj 项目文件中的 <EmbeddedResource> 项完成此操作。
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- 不允许直接引用生成的类型“{0}”。而应使用类型定义,例如“type TypeAlias = <路径>”。这指示类型提供程序将生成的类型添加到您的程序集中。
+ 不允许直接引用所生成的类型“{0}”。请改用类型定义,例如 "type TypeAlias = <path>"。这表示类型提供程序会将生成的类型添加到程序集。
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- 提供的类型或方法“{1}”的静态参数“{0}”需要一个值。类型提供程序的静态参数可以选择使用命名参数指定,例如“{2}<{3}=...>”。
+ 提供的类型或方法“{1}”的静态参数“{0}”需要一个值。可以选择使用命名参数(例如 "{2}<{3}=...>")指定类型提供程序的静态参数。
@@ -5909,17 +5909,17 @@
{0} var in collection {1} (outerKey = innerKey). Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey)。请注意,“{2}”后需使用括号
+ 集合 {1} (outerKey = innerKey)中的 {0} var。请注意,“{2}”后面要使用圆括号{0} var in collection {1} (outerKey = innerKey) into group. Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey) into group。请注意,“{2}”后需使用括号。
+ 集合 {1} (outerKey = innerKey) 中的 {0} var 到组中。请注意, 在 "{2}" 之后需要圆括号{0} var in collection
- {0} var in collection
+ 集合中的 {0} var
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- 不匹配的“[<”。应为结束“>]”
+ "[<" 不匹配。应为 ">]" 结尾Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- “match”表达式中出现意外的输入结尾。应为“match <表达式> with | <分区> -> <表达式> | <分区> -> <表达式> ...”。
+ "match" 表达式中的输入意外结束。应为 "match <expr> with | <pat> -> <expr> | <pat> -> <expr> ..."。Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- “try”表达式中出现意外的输入结尾。应为“try <表达式> with <规则>”或“try <表达式> finally <表达式>”。
+ "try" 表达式中的输入意外结束。应为 "try <expr> with <rules>" 或 "try <expr> finally <expr>"。Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- “while”表达式中出现意外的输入结尾。应为“while <表达式> do <表达式>”。
+ "while" 表达式中的输入意外结束。应为 "while <expr> do <expr>"。Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- “for”表达式中出现意外的输入结尾。应为“for <模式> in <表达式> do <表达式>”。
+ "for'" 表达式中的输入意外结束。应为 "for <pat> in <expr> do <expr>"。
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 条件表达式的“then”分支中出现意外的输入结尾。应为“if <表达式> then <表达式>”或“if <表达式> then <表达式> else <表达式>”。
+ 条件表达式的 "then" 分支中的输入意外结束。应为 "if <expr> then <expr>" 或 "if <expr> then <expr> else <expr>"。Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 条件表达式的“else”分支中出现意外的输入结尾。应为“if <表达式> then <表达式>”或“if <表达式> then <表达式> else <表达式>”。
+ 条件表达式的 "else" 分支中的输入意外结束。应为 ''if <expr> then <expr>" 或 "if <expr> then <expr> else <expr>"。Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- lambda 表达式体中出现意外的输入结尾。应为“fun <分区> ... <分区> -> <表达式>”。
+ lambda 表达式正文中的输入意外结束。应为 "fun <pat> ... <pat> -> <expr>"。
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- “while”表达式中缺少“do”。应为“while <表达式> do <表达式>”。
+ "while" 表达式中缺少 "do"。应为 "while <expr> do <expr>"。Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- “for”表达式中缺少“do”。应为“for <模式> in <表达式> do <表达式>”。
+ "for" 表达式中缺少 "do"。应为 "for <pat> in <expr> do <expr>"。Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- “{0}”中的联接关系无效。应为“expr <op> expr”,其中 <op> 为 =、=?、?= 或 ?=?。
+ “{0}”中的联接关系无效。应为 "expr <op> expr",其中 <op> 为 =、=?、?= 或 ?=?。
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- 类型“{0}”非法,因为在 byref<T> 中,T 不能包含 byref 类型。
+ 类型“{0}”是非法的,应为在 byref<T> 中,T 不能包含 byref 类型。
@@ -6209,7 +6209,7 @@
Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)'
- 查询运算符的参数可能需要括号,例如“where (x > y)”或“groupBy (x.Length / 10)”
+ 查询运算符的参数可能需要括号,例如 "where (x > y)" 或 "groupBy (x.Length / 10)"
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- 联合用例/异常“{0}”没有名为“{1}”的字段。
+ 联合用例“{0}”没有名为“{1}”的字段。
@@ -6349,7 +6349,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- 这不是有效的文本表达式。将忽略 [<Literal>] 特性。
+ 这不是有效的文本表达式。将忽略 [<Literal>] 属性。
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- 从 {0} 到 {1} 的转换是编译时安全的向上转换,而非向下转换。考虑使用 :> (向上转换)运算符,而非 :?> (向下转换)运算符。
+ 从 {0} 到 {1} 的转换是编译时安全的向上转换,而非向下转换。请考虑使用 :> (upcast) 运算符而非 :?> (downcast) 运算符。
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- 在异步工作流中用于将名称绑定到异步计算的结果,或在其他计算表达式中,用于将名称绑定到属于计算类型的结果。
+ 用于在计算表达式中将名称绑定到另一计算表达式的结果。
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- 用于表示一个可作为计算表达式的结果提供的值。
+ 用于为包含计算表达式的结果提供一个值。Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- 用于表示一种计算表达式,该表达式在计算时,提供包含计算表达式的结果。
+ 用于为包含计算表达式的结果提供一个值,其中该值本身来自另一计算表达式的结果。
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- 用于替代异步工作流和其他计算表达式中的 let!,以便要求 Dispose 的值可调用到免费资源。
+ 用于替代计算表达式中的 let! 来处理实现 IDisposable 的计算表达式结果。
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- 截至 F# 4.5,隐式取消引用函数或方法返回的 byref 指针。若要获取返回值作为指针,请使用 address-of 运算符,例如 “&f(x)” 或 “&obj.Method(arg1, arg2)”。
+ 自 F# 4.5 起,隐式取消引用由函数或方法返回的 byref 指针。要获取返回值作为指针,请使用 address-of 运算符,例如 "&f(x)" 或 "&obj.Method(arg1, arg2)"。A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- 使用 IsByRefLike 注释的类型也必须为结构。考虑将 [<Struct>] 属性添加到类型中。
+ 使用 IsByRefLike 注释的类型还必须是一个结构。请考虑向该类型添加 [<Struct>] 属性。
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- 使用 IsReadOnly 注释的类型也必须为结构。考虑将 [<Struct>] 属性添加到类型中。
+ 使用 IsReadOnly 注释的类型还必须是一个结构。请考虑向该类型添加 [<Struct>] 属性。
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ 未匹配的 "{{|"anonymous record field
- anonymous record field
+ 匿名记录字段The exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ 异常“{0}”没有名为“{1}”的字段。Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ 活动模式没有字段。此语法无效。The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ 构造函数没有名为“{0}”的字段。Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ 两个匿名记录类型来自不同的程序集“{0}”和“{1}”Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ 两个匿名记录类型具有一组不匹配的字段名称“{0}”和“{1}”Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ 无法调用 byref 扩展方法 "{0}"。第一个参数要求该值是可变的或非只读的 byref 类型。Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ 不允许 byref 类型具有可选类型扩展名。Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ 无法部分应用扩展方法 "{0}", 因为第一个参数是 byref 类型。This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ 此类型不会继承 Attribute,它在使用其他 .NET 语言时无法正常运行。Invalid anonymous record expression
- Invalid anonymous record expression
+ 匿名记录表达式无效Invalid anonymous record type
- Invalid anonymous record type
+ 匿名记录类型无效The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ 创建匿名记录的“复制和更新”表达式的输入必须是匿名记录或记录The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ 参数 "{0}" 的类型 "{1}" 无效。通用 IL 的规则不允许使用此类型。The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ 函数或方法的返回类型 "{0}" 无效。通用 IL 的规则不允许使用此类型。
diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf
index 498f48b6bd5..8ccb9fcc83a 100644
--- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf
+++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
@@ -84,17 +84,17 @@
All elements of a list must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- 清單建構函式運算式的所有分支都必須是同一種類型。此運算式應具備類型 '{0}',但卻為類型 '{1}'。
+ 清單建構函式運算式的所有分支都必須是同一種類型。此運算式應具備類型 '{0}',但卻為類型 '{1}'。All elements of an array must be of the same type as the first element, which here is '{0}'. This element has type '{1}'.
- 陣列建構函式運算式的所有項目都必須是同一種類型。此運算式應具備類型 '{0}',但卻是類型 '{1}'。
+ 陣列建構函式運算式的所有項目都必須是同一種類型。此運算式應具備類型 '{0}',但卻是類型 '{1}'。This 'if' expression is missing an 'else' branch. Because 'if' is an expression, and not a statement, add an 'else' branch which also returns a value of type '{0}'.
- 'if' 運算式遺漏 'else' 分支。'then' 分支具有類型 '{0}'。因為 'if' 為運算式而非陳述式,所以請新增會傳回的值類型相同的 'else' 分支。
+ 'if' 運算式遺漏 'else' 分支。'then' 分支具有類型 '{0}'。因為 'if' 為運算式而非陳述式,所以請新增會傳回的值類型相同的 'else' 分支。
@@ -104,12 +104,12 @@
All branches of an 'if' expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- if' 運算式的所有分支都必須是同一種類型。此運算式應具備類型 '{0}',但卻是類型 '{1}'。
+ if' 運算式的所有分支都必須是同一種類型。此運算式應具備類型 '{0}',但卻是類型 '{1}'。All branches of a pattern match expression must return values of the same type as the first branch, which here is '{0}'. This branch returns a value of type '{1}'.
- 符合運算式的所有模式分支都必須傳回相同類型的值。第一個分支傳回了類型 '{0}' 的值,但此分支卻傳回類型 '{1}' 的值。
+ 模式比對運算式的所有分支,都必須傳回相同類型的值。第一個分支傳回了類型 '{0}' 的值,但此分支卻傳回了類型 '{1}' 的值。
@@ -284,17 +284,17 @@
Invalid directive. Expected '#I \"<path>\"'.
- 無效的指示詞。必須是 '#I \"<path>\"'。
+ 指示詞無效。應為 '#I \"<path>\"'。Invalid directive. Expected '#r \"<file-or-assembly>\"'.
- 無效的指示詞。必須是 '#r \"<file-or-assembly>\"'。
+ 指示詞無效。應為 '#r \"<file-or-assembly>\"'。Invalid directive. Expected '#load \"<file>\" ... \"<file>\"'.
- 無效的指示詞。必須是 '#load \"<file>\" ... \"<file>\"'。
+ 指示詞無效。應為 '#load \"<file>\" ... \"<file>\"'。
@@ -524,12 +524,12 @@
Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [<Measure>] attribute.
- 模組 '{0}' 包含\n {1} \n但其簽章卻指定了\n {2} \n簽章與實作中泛型參數的種類不同。可能遺漏了 [<Measure>] 屬性。
+ 模組 '{0}' 包含\n {1} \n但其特徵標記指定了\n {2} \n特徵標記和實作中的泛型參數種類不同。可能缺少 [<Measure>] 屬性。Module '{0}' contains\n {1} \nbut its signature specifies\n {2} \nThe arities in the signature and implementation differ. The signature specifies that '{3}' is function definition or lambda expression accepting at least {4} argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval {5}: int -> (int -> int)\ninstead of\n\tval {6}: int -> int -> int.
- 模組 '{0}' 包含\n {1} \n但它的簽章卻指定\n {2} \n簽章與實作中的 Arity 不同。簽章指定 '{3}' 是函式定義或 Lambda 運算式,且接受至少 {4} 個引數,但實作則是計算的函式值。若要宣告計算的函式值是允許的實作,只要將簽章中它的類型括在括號內,例如\n\tval {5}: int -> (int -> int)\n而不是\n\tval {6}: int -> int -> int。
+ 模組 '{0}' 包含\n {1} \n但其特徵標記指定了\n {2} \n特徵標記和實作中的發行項不同。特徵標記會指定 '{3}' 為函式定義或 lambda 運算式,並接受至少 {4} 個引數,但實作是計算函式值。若要宣告計算函式值為允許的實作,只要在特徵標記中將其類型括在括號內即可,例如\n\tval {5}: int -> (int -> int)\n而不是\n\tval {6}: int -> int -> int。
@@ -619,22 +619,22 @@
The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [<Sealed>] attribute to the signature.
- 因為實作類型為已密封,但簽章卻將其隱含為非密封,所以簽章與實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<Sealed>] 屬性新增至簽章。
+ 因為實作類型已密封,特徵標記卻表示未密封,所以特徵標記和實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<Sealed>] 屬性新增到特徵標記。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [<Sealed>] attribute to the implementation.
- 因為實作類型為非密封,但簽章卻將其隱含為已密封,所以簽章與實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<Sealed>] 屬性新增至實作。
+ 因為實作類型未密封,但特徵標記表示其已密封,所以特徵標記和實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<Sealed>] 屬性新增到實作。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [<AbstractClass>] attribute to the signature.
- 因為實作為抽象類別,但簽章卻不是,所以簽章與實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<AbstractClass>] 屬性新增至簽章。
+ 因為實作是抽象類別,但特徵標記並不是,所以特徵標記和實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<AbstractClass>] 屬性新增到特徵標記。The {0} definitions for type '{1}' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [<AbstractClass>] attribute to the implementation.
- 因為簽章為抽象類別,但實作卻不是,所以簽章與實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<AbstractClass>] 屬性新增至實作。
+ 因為特徵標記是抽象類別。但實作並不是,所以特徵標記和實作中類型 '{1}' 的 {0} 定義不相容。請考慮將 [<AbstractClass>] 屬性新增到實作。
@@ -1034,12 +1034,12 @@
A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 具 'ReferenceEquality' 屬性的類型不能有 'Object.Equals(obj)'、'System.IEquatable<_>' 或 'System.Collections.IStructuralEquatable' 的明確實作
+ 屬性為 'ReferenceEquality' 的類型不能有 'Object.Equals(obj)'、'System.IEquatable<_>' 或 'System.Collections.IStructuralEquatable' 的明確實作A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable'
- 具 'CustomEquality' 屬性的類型必須至少有 'Object.Equals(obj)'、'System.IEquatable<_>' 或 'System.Collections.IStructuralEquatable' 其中之一的明確實作
+ 屬性為 'CustomEquality' 的類型必須至少有 'Object.Equals(obj)'、'System.IEquatable<_>' 或 'System.Collections.IStructuralEquatable' 其中之一的明確實作
@@ -1054,7 +1054,7 @@
A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes
- 具 'NoComparison' 屬性的類型通常不應該有 'System.IComparable'、'System.IComparable<_>' 或 'System.Collections.IStructuralComparable' 的明確實作。如果是為了互通性,請停用這個警告
+ 屬性為 'NoComparison' 的類型不應時常有 'System.IComparable'、'System.IComparable<_>' 或 'System.Collections.IStructuralComparable' 的明確實作。若是為了達成互通性而這樣做,則請停用此警示
@@ -1154,7 +1154,7 @@
The byref-typed variable '{0}' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions.
- ByRef 類型變數 '{0}' 的使用方式無效。ByRef 無法由關閉捕捉或傳遞到內部函式。
+ ByRef 類型變數 '{0}' 的使用方式無效。ByRef 無法由關閉擷取或傳遞到內部函式。
@@ -1174,7 +1174,7 @@
'System.Void' can only be used as 'typeof<System.Void>' in F#
- 'System.Void' 在 F# 中只能以 'typeof<System.Void>' 形式使用
+ 'System.Void' 在 F# 中只能用作 'typeof<System.Void>'
@@ -1274,7 +1274,7 @@
[<ReflectedDefinition>] terms cannot contain uses of the prefix splice operator '%'
- [<ReflectedDefinition>] 字詞不可使用前置接合運算子 '%'
+ [<ReflectedDefinition>] 字詞不能包含前置詞接合運算子 '%' 的用法
@@ -2119,12 +2119,12 @@
Incomplete conditional. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 不完整的條件式。必須是 'if <expr> then <expr>' 或 'if <expr> then <expr> else <expr>'。
+ 條件不完整。應為 'if <expr> then <expr>' 或 'if <expr> then <expr> else <expr>'。'assert' may not be used as a first class value. Use 'assert <expr>' instead.
- 'assert' 無法當做第一個類別值使用。請改用 'assert <expr>'。
+ 'assert' 不能用作第一個類別值。請改用 'assert <expr>'。
@@ -2139,7 +2139,7 @@
The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions.
- 在循序項運算式和計算運算式中使用 '->' 僅限於 'for pat in expr -> expr' 形式。使用 'for ... in ... do ... yield...' 語法可在更為複雜的循序項運算式中產生項目。
+ '->' 在序列和計算運算式中的用法只能是 'for pat in expr -> expr' 形式。請使用 'for ... in ... do ... yield...' 語法在更複雜的序列運算式中產生元素。
@@ -2209,7 +2209,7 @@
The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident<typ,...,typ>' instead
- F# 程式碼中不使用語法 '(typ,...,typ) ident'。請考慮改用 'ident<typ,...,typ>'
+ F# 程式碼中未使用 '(typ,...,typ) ident' 語法。請考慮改用 'ident<typ,...,typ>'
@@ -2289,7 +2289,7 @@
Non-zero constants cannot have generic units. For generic zero, write 0.0<_>.
- 非零常數不能有泛型單位。請將泛型的零寫成 0.0<_>。
+ 非零常數不能有泛型單位。如需泛型的零,請寫成 0.0<_>。
@@ -2319,7 +2319,7 @@
A parameter with attributes must also be given a name, e.g. '[<Attribute>] Name : Type'
- 必須為有屬性的參數指定名稱,例如 '[<Attribute>] Name : Type'
+ 具有屬性的參數也必須有名稱,例如 '[<Attribute>] Name : Type'
@@ -2404,7 +2404,7 @@
The struct, record or union type '{0}' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable.
- 結構、記錄或等位型別 '{0}' 明確實作了介面 'System.IComparable<_>'。您必須將 'CustomComparison' 屬性套用到該型別,也應該為非泛型介面 System.Icomparable 提供一致的實作。
+ 結構、記錄或等位型別 '{0}' 會明確實作介面 'System.IComparable<_>'。您必須將 'CustomComparison' 屬性套用到類型,也應提供一致的非泛型介面 System.IComparable 實作。
@@ -2454,7 +2454,7 @@
The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).
- 為這個值推斷的型別參數在清除類型縮寫後會不穩定。這是因為使用類型縮寫,導致卸除或重新排列型別參數,例如 \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a。\n請考慮明確宣告這個值的型別參數,例如\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)。
+ 為這個值推斷的類型參數在清除類型縮寫後會不穩定。這是因為使用了會卸除或重新排序類型參數的類型縮寫,例如 \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a。\n請考慮明確宣告類型參數,例如\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x)。
@@ -2599,7 +2599,7 @@
The type '{0}' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
- 類型 '{0}' 不是可以用這個語法列舉值的類型,也就是它與 seq<_>、IEnumerable<_> 或 IEnumerable 不相容,而且沒有 GetEnumerator 方法
+ 類型 '{0}' 不是可透過此語法來列舉其值的類型,也就是與 seq<_>、IEnumerable<_> 或 IEnumerable 不相容,而且沒有 GetEnumerator 方法
@@ -2624,7 +2624,7 @@
An 'enum' constraint must be of the form 'enum<type>'
- 'enum' 條件約束必須採用 'enum<type>' 形式
+ 'enum' 條件約束的形式必須為 'enum<類型>'
@@ -2634,12 +2634,12 @@
This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'.
- 這個屬性有無效的類型。接受多個索引子引數的屬性應該具有 'ty1 * ty2 -> ty3' 格式的類型。傳回函式的屬性應該具有 '(ty1 -> ty2)' 形式的類型。
+ 此屬性的類型無效。採用多個索引子引數的屬性類型形式應為 'ty1 * ty2 -> ty3'。傳回函式的屬性類型形式應為 '(ty1 -> ty2)'。Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [<Measure>] attribute.
- 必須是測量單位參數,而非型別參數。明確的測量單位參數必須標記有 [<Measure>] 屬性。
+ 應為測量單位參數,而非類型參數。必須以 [<Measure>] 屬性標示明確的測量單位參數。
@@ -2724,7 +2724,7 @@
Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when <variable> = <constant>' at the end of the match clause.
- 非基本數值常值常數不能用在模式比對中,因為它們可以透過使用 NumericLiteral 模組對應到多種不同類型。請考慮用變數取代,並在比對子句結尾使用 'when <variable> = <constant>'。
+ 因為非基本數值的常值常數可以透過使用 NumericLiteral 模組來對應到多個不同的類型,所以無法用於模式比對。請考慮以變數取代,並在比對子句的結尾使用 'when <variable> = <constant>'。
@@ -3174,7 +3174,7 @@
Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'.
- 建構函式必須套用到引數,不能做為第一級值使用。如有必要,請使用匿名函式 '(fun arg1 ... argN -> new Type(arg1,...,argN))'。
+ 建構函式必須套用到引數,且無法用作第一個類別值。如有必要,請使用匿名函式 '(fun arg1 ... argN -> new Type(arg1,...,argN))'。
@@ -3274,7 +3274,7 @@
Mutable function values should be written 'let mutable f = (fun args -> ...)'
- 可變動的函式值應該寫成 'let mutable f = (fun args -> ...)'
+ 可變動的函式值應寫成 'let mutable f = (fun args -> ...)'
@@ -3284,7 +3284,7 @@
A literal value cannot be given the [<ThreadStatic>] or [<ContextStatic>] attributes
- 無法為常值指定 [<ThreadStatic>] 或 [<ContextStatic>] 屬性
+ 不得為常值指定 [<ThreadStatic>] 或 [<ContextStatic>] 屬性
@@ -3379,7 +3379,7 @@
'use' bindings must be of the form 'use <var> = <expr>'
- 'use' 繫結必須採用 'use <var> = <expr>' 形式
+ 'use' 繫結的形式必須為 'use <var> = <expr>'
@@ -3494,17 +3494,17 @@
A declaration may only be the [<Literal>] attribute if a constant value is also given, e.g. 'val x : int = 1'
- 如果一併指定了常數值,則宣告只可為 [<Literal>] 屬性,例如 'val x : int = 1'
+ 若也提供了常數值,宣告就只能是 [<Literal>] 屬性,例如 'val x : int = 1'A declaration may only be given a value in a signature if the declaration has the [<Literal>] attribute
- 只有當宣告有 [<Literal>] 屬性時,才能為簽章中的宣告指定值
+ 若宣告有 [<Literal>] 屬性,宣告就只能有特徵標記中的值Thread-static and context-static variables must be static and given the [<DefaultValue>] attribute to indicate that the value is initialized to the default value on each new thread
- Thread-static 與 context-static 變數必須是靜態變數,且必須為其指定 [<DefaultValue>] 屬性,以表示每個新執行緒的該值都會初始化為預設值
+ 靜態執行緒和環境變數必須是靜態的,且必須為其指定 [<DefaultValue>] 屬性,以指出值會在每個新的執行緒均初始化為預設值
@@ -3514,12 +3514,12 @@
Uninitialized 'val' fields must be mutable and marked with the '[<DefaultValue>]' attribute. Consider using a 'let' binding instead of a 'val' field.
- 未初始化的 'val' 欄位必須是可變動欄位,並標記有 '[<DefaultValue>]' 屬性。請考慮使用 'let' 繫結來取代 'val' 欄位。
+ 未初始化的 'val'欄位必須是可變的,並以 '[<DefaultValue>]' 屬性標示。請考慮使用 'let' 繫結,而不使用 'val' 欄位。Static 'val' fields in types must be mutable, private and marked with the '[<DefaultValue>]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type.
- 類型中的靜態 'val' 欄位必須是可變動欄位且為私用,並標記有 '[<DefaultValue>]' 屬性。它們會始化為成其類型的 'null' 或 'zero' 值。請一併考慮在類別類型中使用 'static let mutable' 繫結。
+ 類型中的靜態 'val' 欄位必須是可變、私人的,並以 '[<DefaultValue>]' 標示。這些欄位會依據其類型,初始化為 'null' 或 'zero' 值。請考慮也在類別類型中使用 'static let mutable' 繫結。
@@ -3534,7 +3534,7 @@
Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy'
- 建構函式的明確類型宣告必須採用 'ty1 * ... * tyN -> resTy' 形式。可能必須在 'resTy' 周圍使用括號
+ 建構函式的明確類型宣告形式必須為 'ty1 * ... * tyN -> resTy'。'resTy' 前後可能需要括號
@@ -3684,7 +3684,7 @@
The struct, record or union type '{0}' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'.
- 結構、記錄或等位型別 '{0}' 明確實作了介面 'System.IEquatable<_>'。您必須將 'CustomEquality' 屬性套用到該型別,並為非泛型覆寫 'System.Object.Equals(obj)' 提供一致的實作。
+ 結構、記錄或等位型別 '{0}' 會明確實作介面 'System.IEquatable<_>'。請將 'CustomEquality' 屬性套用到類型,並提供一致的非泛型覆寫 'System.Object.Equals(obj)' 實作。
@@ -3749,7 +3749,7 @@
This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'.
- 這個類型縮寫有一個或多個未出現在所縮寫類型中的宣告型別參數。類型縮寫必須使用所縮寫類型中的所有宣告型別參數。請考慮移除一個或多個型別參數,或使用包裝基礎類型的具象類型定義,例如 'type C<'a> = C of ...'。
+ 這個類型縮寫有一或多個已宣告的類型參數未出現在接受縮寫的類型中。類型縮寫必須使用接受縮寫的類型中所有已宣告的類型參數。請考慮移除一或多個類型參數,或使用會包裝基礎類型的實體類型定義,例如 'type C<'a> = C of ...'。
@@ -3784,7 +3784,7 @@
The representation of this type is hidden by the signature. It must be given an attribute such as [<Sealed>], [<Class>] or [<Interface>] to indicate the characteristics of the type.
- 此類型的表示法已由簽章所隱藏。必須為其指定 [<Sealed>]、[<Class>] 或 [<Interface>] 一類的屬性,以指示該類型的特性。
+ 特徵標記隱藏了此類型的表示法。必須賦予其 [<Sealed>]、[<Class>] 或 [<Interface>] 這類的屬性,以指出類型的特性。
@@ -3864,12 +3864,12 @@
Delegate specifications must be of the form 'typ -> typ'
- 委派規格必須採用 'typ -> typ' 形式
+ 委派規格的形式必須為 'typ -> typ'Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values.
- 委派規格不可以是局部調用類型。請使用 'typ * ... * typ -> typ' 用於多引數委派,使用 'typ -> (typ -> typ)' 用於傳回函式值的委派。
+ 委派規格不得為局部調用的類型。若為多引數委派,請使用 'typ * ... * typ -> typ'; 若為傳回函式值的委派,則使用 'typ -> (typ -> typ)'。
@@ -3889,7 +3889,7 @@
The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[<Sealed>] attribute to the type definition in the signature
- 語法 'type X with ...' 已保留供增強指定使用。對於其表示式已隱藏,但是有成員的類型而言,現在會使用 'type X = ...' 宣告於簽章中。您也必須將 '[<Sealed>] 屬性新增至簽章中的類型定義
+ 語法 'type X with ...' 已保留以用於擴增。已隱藏表示法但有成員的類型,現在會使用 'type X = ...' 在特徵標記中宣告。您也可能必須將 '[<Sealed>] 屬性新增到特徵標記中的類型定義
@@ -4199,7 +4199,7 @@
Link the specified resource to this assembly where the resinfo format is <file>[,<string name>[,public|private]]
- 將指定的資源連結至此組件,其中 resinfo 的格式是 <檔案>[,<字串名稱>[,public|private]]
+ 將指定的資源連結到此組件,其中 resinfo 格式為 <檔案>[,<字串名稱>[,public|private]]
@@ -4614,7 +4614,7 @@
The event '{0}' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit {1} and {2} methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'.
- 事件 '{0}' 有非標準類型。如果這個事件是在另一個 CLI 語言中宣告,您必須使用這個事件的明確 {1} 和 {2} 方法來存取這個事件。如果這個事件是在 F# 中宣告,則請將事件的類型設為 'IDelegateEvent<_>' 或 'IEvent<_,_>' 的具現化。
+ 事件 '{0}' 有非標準的類型。若使用了另一種 CLI 語言宣告這個事件,您可能必須對這個事件使用明確的 {1} 和 {2} 方法加以存取。若使用了 F# 宣告這個事件,請讓事件類型成為 'IDelegateEvent<_>' 或 'IEvent<_,_>' 的具現化。
@@ -5119,17 +5119,17 @@
Remove spaces between the type name and type parameter, e.g. \"type C<'T>\", not type \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 型別參數必須放在緊鄰類型名稱的位置,例如 \"type C<'T>\",而不是 type \"C <'T>\"
+ 請移除類型名稱和類型參數之間的空格,例如 \"type C<'T>\" 而非 \"C <'T>\"。類型參數必須緊接著類型名稱。Remove spaces between the type name and type parameter, e.g. \"C<'T>\", not \"C <'T>\". Type parameters must be placed directly adjacent to the type name.
- 型別引數必須放在緊鄰類型名稱的位置,例如 \"C<'T>\",而不是 \"C <'T>\"
+ 請移除類型名稱和類型參數之間的空格,例如 \"C<'T>\" 而非 \"C <'T>\"。類型參數必須緊接著類型名稱。The use of the type syntax 'int C' and 'C <int>' is not permitted here. Consider adjusting this type to be written in the form 'C<int>'
- 此處不允許使用類型語法 'int C' 和 'C <int>'。請考慮調整這種類型,寫成 'C<int>' 形式
+ 此處不允許使用類型語法 'int C' 和 'C <int>'。請考慮將此類型調整為以 'C<int>' 形式撰寫
@@ -5154,7 +5154,7 @@
The parameter '{0}' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref<int>'. When used, a byref parameter is implicitly dereferenced.
- 參數 '{0}' 已被推斷為具有 ByRef 類型。具有 ByRef 類型的參數都必須指定明確的類型註釋,例如 'x1: byref<int>'。使用時會隱含解除對 ByRef 參數的參照。
+ 已推斷出參數 '{0}' 擁有 byref 類型。必須為 byref 類型的參數提供明確的類型註釋,例如 'x1: byref<int>'。使用時,會對 byref 參數隱含取值。
@@ -5219,7 +5219,7 @@
Active pattern '{0}' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
- 現用模式 '{0}' 的結果類型包含不是由輸入決定的類型變數。發生的原因通常是因為未提及結果案例,例如 'let (|A|B|) (x:int) = A x'。使用類型條件約束就可以修正這種情況,例如 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
+ 使用中模式 '{0}' 的結果類型包含類型變數,但輸入無法予以判斷。最常見的原因是未提及結果案例,例如 'let (|A|B|) (x:int) = A x'。您可使用類型條件約束予以修正,例如 'let (|A|B|) (x:int) : Choice<int,unit> = A x'
@@ -5244,7 +5244,7 @@
The name of the MDB file must be <assembly-file-name>.mdb. The --pdb option will be ignored.
- MDB 檔案的名稱必須是 <assembly-file-name>.mdb。將忽略 --pdb 選項。
+ MDB 檔案的名稱必須是 <組件檔名稱>.mdb。會略過 --pdb 選項。
@@ -5294,7 +5294,7 @@
'use!' bindings must be of the form 'use! <var> = <expr>'
- 'use!' 繫結的格式必須是 'use! <var> = <expr>'
+ 'use!' 繫結的形式必須為 'use! <var> = <expr>'
@@ -5329,12 +5329,12 @@
Unmatched '<'. Expected closing '>'
- 不成對的 '<'。必須有結束 '>'
+ '<' 不對稱。應有右方的 '>'Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters.
- 型別定義中不能有引號運算子 '<@'。如果您想要將逐字字串當做靜態引數傳遞至型別提供者,請在 '<' 和 '@' 字元之間加上一個空格。
+ 類型定義中有未預期的引號運算子 '<@'。若您想要以靜態引數形式將逐字字串傳遞給類型提供者,請在 '<' 和 '@' 字元之間加入空格。
@@ -5524,7 +5524,7 @@
Passing a .resx file ({0}) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an <EmbeddedResource> item in the .fsproj project file.
- 將 .resx 檔案 ({0}) 當做原始程式檔傳遞至編譯器已被取代。請使用 resgen.exe 將 .resx 檔案轉換為 .resources 檔案,然後傳遞做為 --resource 選項。如果您要使用 MSBuild,可以透過 .fsproj 專案檔中的 <EmbeddedResource> 項目來完成。
+ 以來源檔案形式將 .resx 檔案 ({0}) 傳遞到編譯器的行為已淘汰。請使用 resgen.exe 將 .resx 檔案轉換成 .resources 檔案,以 --resource 選項的形式傳遞。若您使用 MSBuild,可以透過 .fsproj 專案檔中的 <EmbeddedResource> 項目完成這個動作。
@@ -5689,7 +5689,7 @@
A direct reference to the generated type '{0}' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = <path>'. This indicates that a type provider adds generated types to your assembly.
- 不允許所產生型別 '{0}' 的直接參考。請改用型別定義,例如 'type TypeAlias = <path>'。這表示型別提供者會將產生的型別加入您的組件。
+ 不允許直接參考所產生的類型 '{0}'。請改用類型定義 'type TypeAlias = <path>'。這表示類型提供者會將所產生的類型新增到您的組件。
@@ -5844,7 +5844,7 @@
The static parameter '{0}' of the provided type or method '{1}' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '{2}<{3}=...>'.
- 所提供之類型或方法 '{1}' 的靜態參數 '{0}' 需要值。型別提供者可以選擇使用具名引數 (例如 '{2}<{3}=...>') 來指定靜態參數。
+ 所提供類型的靜態參數 '{0}' 或方法 '{1}' 需要值。您可以使用具名引數,選擇性地指定類型提供者的靜態參數,例如 '{2}<{3}=...>'。
@@ -5909,17 +5909,17 @@
{0} var in collection {1} (outerKey = innerKey). Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey)。注意: '{2}' 之後須有括號
+ 集合 {1} 中的 {0} var (outerKey = innerKey)。請注意,'{2}' 後需要括弧{0} var in collection {1} (outerKey = innerKey) into group. Note that parentheses are required after '{2}'
- {0} var in collection {1} (outerKey = innerKey) into group。注意: '{2}' 之後須有括號
+ 集合 {1} 中的 {0} var (outerKey = innerKey) 進入群組。請注意,'{2}' 後需要括弧。{0} var in collection
- {0} var in collection
+ 集合中的 {0} var
@@ -5954,27 +5954,27 @@
Unmatched '[<'. Expected closing '>]'
- '[<' 不成對。必須要有結尾的 '>]'
+ 不對稱的 '[<'。應有右方 '>]'Unexpected end of input in 'match' expression. Expected 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'.
- 'match' 運算式中不能以輸入結尾。必須是 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'。
+ 'match' 運算式中有未預期的輸入結尾。應為 'match <expr> with | <pat> -> <expr> | <pat> -> <expr> ...'。Unexpected end of input in 'try' expression. Expected 'try <expr> with <rules>' or 'try <expr> finally <expr>'.
- 'try' 運算式中不能以輸入結尾。必須是 'try <expr> with <rules>' 或 'try <expr> finally <expr>'。
+ 'try' 運算式中有未預期的輸入結尾。應為 'try <expr> with <rules>' 或 'try <expr> finally <expr>'。Unexpected end of input in 'while' expression. Expected 'while <expr> do <expr>'.
- 'while' 運算式中不能以輸入結尾。必須是 'while <expr> do <expr>'。
+ 'while' 運算式中有未預期的輸入結尾。應為 'while <expr> do <expr>'。Unexpected end of input in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'for' 運算式中不能以輸入結尾。必須是 'for <pat> in <expr> do <expr>'。
+ 'for' 運算式中有未預期的輸入結尾。應為 'for <pat> in <expr> do <expr>'。
@@ -5984,17 +5984,17 @@
Unexpected end of input in 'then' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 條件運算式的 'then' 分支中不能以輸入結尾。必須是 'if <expr> then <expr>' 或 'if <expr> then <expr> else <expr>'。
+ 條件運算式的 'then' 分支中有未預期的輸入結尾。應為 'if <expr> then <expr>' 或 'if <expr> then <expr> else <expr>'。Unexpected end of input in 'else' branch of conditional expression. Expected 'if <expr> then <expr>' or 'if <expr> then <expr> else <expr>'.
- 條件運算式的 'else' 分支中不能以輸入結尾。必須是 'if <expr> then <expr>' 或 'if <expr> then <expr> else <expr>'。
+ 條件運算式的 'else' 分支中有未預期的輸入結尾。應為 'if <expr> then <expr>' 或 'if <expr> then <expr> else <expr>'。Unexpected end of input in body of lambda expression. Expected 'fun <pat> ... <pat> -> <expr>'.
- Lambda 運算式的主體中不能以輸入結尾。必須是 'fun <pat> ... <pat> -> <expr>'。
+ Lambda 運算式的主體中有未預期的輸入結尾。應為 'fun <pat> ... <pat> -> <expr>'。
@@ -6054,17 +6054,17 @@
Missing 'do' in 'while' expression. Expected 'while <expr> do <expr>'.
- 'while' 運算式中遺漏 'do'。必須是 'while <expr> do <expr>'。
+ 'while' 運算式中缺少 'do'。應為 'while <expr> do <expr>'。Missing 'do' in 'for' expression. Expected 'for <pat> in <expr> do <expr>'.
- 'for' 運算式中遺漏 'do'。必須是 'for <pat> in <expr> do <expr>'。
+ 'for' 運算式中缺少 'do'。應為 'for <pat> in <expr> do <expr>'。Invalid join relation in '{0}'. Expected 'expr <op> expr', where <op> is =, =?, ?= or ?=?.
- '{0}' 中的聯結關聯無效。必須是 'expr <op> expr',其中 <op> 是 =、=?、?= 或 ?=?。
+ '{0}' 中的連結關聯無效。應為 'expr <op> expr',其中 <op> 為 =、=?、?= 或 ?=?。
@@ -6129,7 +6129,7 @@
Type '{0}' is illegal because in byref<T>, T cannot contain byref types.
- 類型 '{0}' 不合法,因為在 byref<T> 中,T 不能包含 byref 類型。
+ 因為在 byref<T> 中,T 不能包含 byref 類型,所以 '{0}' 類型不合法。
@@ -6324,7 +6324,7 @@
The union case '{0}' does not have a field named '{1}'.
- 等位/例外狀況 '{0}' 沒有名為 '{1}' 的欄位。
+ 聯集 '{0}' 沒有名為 '{1}' 的欄位。
@@ -6349,7 +6349,7 @@
This is not valid literal expression. The [<Literal>] attribute will be ignored.
- 這不是有效的常值運算式。將忽略 [<Literal>] 屬性。
+ 這不是有效的常值運算式。將會略過 [<Literal>] 屬性。
@@ -6464,7 +6464,7 @@
The conversion from {0} to {1} is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator.
- 從 {0} 轉換為 {1} 屬於編譯時間安全的向上轉換,而非向下轉換。請考慮使用 :> (upcast) 運算子而不使用 :?> (downcast) 運算子。
+ 從 {0} 到 {1} 的轉換在編譯時間會是安全的向上轉換,而不是向下轉換。請考慮使用 :> (向上轉換) 運算子,而不要使用 :?> (向下轉換) 運算子。
@@ -6704,7 +6704,7 @@
Used in computation expressions to bind a name to the result of another computation expression.
- 用於非同步工作流程,以將名稱繫結到非同步計算的結果,或在其他計算運算式中,用於將名稱繫結到屬於計算類型的結果。
+ 在計算運算式中用來將名稱繫結到另一個計算運算式的結果。
@@ -6784,12 +6784,12 @@
Used to provide a value for the result of the containing computation expression.
- 用以指出要作為計算運算式結果提供的值。
+ 用來為內含的計算運算式結果提供值。Used to provide a value for the result of the containing computation expression, where that value itself comes from the result another computation expression.
- 用以指出在評估時提供內含計算運算式結果的計算運算式。
+ 用來為內含的計算運算式提供值,而該值本身來自另一個計算運算式的結果。
@@ -6839,7 +6839,7 @@
Used instead of let! in computation expressions for computation expression results that implement IDisposable.
- 用來在非同步工作流程或其他計算運算式中,對需要 Dispose 才能呼叫以釋放資源的值取代 let!。
+ 在計算運算式中用來取代 let!,以得出會實作 IDisposable 的計算運算式結果。
@@ -6994,12 +6994,12 @@
A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'.
- 函式或方法所傳回的 byref 指標,隱含會取值為 F# 4.5。如需將傳回值擷取為指標,請使用 address-of 運算子,例如 '&f(x)' 或 '&obj.Method(arg1, arg2)'。
+ 自 F# 4.5 起,會對函式或方法所傳回的 byref 指標隱含取值。若要取得傳回值作為指標,請使用 address-of 運算子,例如 '&f(x)' 或 '&obj.Method(arg1, arg2)'。A type annotated with IsByRefLike must also be a struct. Consider adding the [<Struct>] attribute to the type.
- 標註有 IsByRefLike 的類型,必須是結構。請考慮對該類型新增 [<Struct>] 屬性。
+ 有 IsByRefLike 標註的類型也必須是結構。請考慮將 [<Struct>] 屬性新增到類型。
@@ -7019,7 +7019,7 @@
A type annotated with IsReadOnly must also be a struct. Consider adding the [<Struct>] attribute to the type.
- 標註有 IsReadOnly 的類型,必須是結構。請考慮對該類型新增 [<Struct>] 屬性。
+ 有 IsReadOnly 標註的類型也必須是結構。請考慮將 [<Struct>] 屬性新增到該類型。
@@ -7054,82 +7054,82 @@
Unmatched '{{|'
- Unmatched '{{|'
+ 不對稱的 '{{|'anonymous record field
- anonymous record field
+ 匿名記錄欄位The exception '{0}' does not have a field named '{1}'.
- The exception '{0}' does not have a field named '{1}'.
+ 例外狀況 '{0}' 沒有名為 '{1}' 的欄位。Active patterns do not have fields. This syntax is invalid.
- Active patterns do not have fields. This syntax is invalid.
+ 使用中的模式沒有欄位。此語法無效。The constructor does not have a field named '{0}'.
- The constructor does not have a field named '{0}'.
+ 建構函式沒有名為 '{0}' 的欄位。Two anonymous record types are from different assemblies '{0}' and '{1}'
- Two anonymous record types are from different assemblies '{0}' and '{1}'
+ 有兩個匿名的記錄類型來自不同的組件 '{0}' 和 '{1}'Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
- Two anonymous record types have mismatched sets of field names '{0}' and '{1}'
+ 兩個匿名的記錄類型有兩組不相符的欄位名稱 '{0}' 和 '{1}'Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
- Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type.
+ 無法呼叫 byref 擴充方法 '{0}。第一個參數需要值可變動,或為非唯讀 byref 類型。Byref types are not allowed to have optional type extensions.
- Byref types are not allowed to have optional type extensions.
+ Byref 類型不得有選擇性類型延伸模組。Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
- Cannot partially apply the extension method '{0}' because the first parameter is a byref type.
+ 因為第一個參數是 byref 類型,所以無法部分套用擴充方法 '{0}'。This type does not inherit Attribute, it will not work correctly with other .NET languages.
- This type does not inherit Attribute, it will not work correctly with other .NET languages.
+ 此類型不會繼承 Attribute,因此無法搭配其他 .NET 語言正確執行。Invalid anonymous record expression
- Invalid anonymous record expression
+ 匿名記錄運算式無效Invalid anonymous record type
- Invalid anonymous record type
+ 匿名記錄類型無效The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
- The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record
+ 對於會建立匿名記錄的複製並更新運算式,必須輸入匿名記錄或記錄The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
- The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL.
+ 參數 '{0}' 的類型 '{1}' 無效。Common IL 的規則不允許此狀況。The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
- The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL.
+ 函式或方法的傳回型別 '{0}' 無效。Common IL 的規則不允許此狀況。
diff --git a/src/fsharp/xlf/FSStrings.cs.xlf b/src/fsharp/xlf/FSStrings.cs.xlf
index 5b1e7457cf5..e75473b43c4 100644
--- a/src/fsharp/xlf/FSStrings.cs.xlf
+++ b/src/fsharp/xlf/FSStrings.cs.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Toto je typ abstract, protože se neimplementovali někteří abstraktní členové. Pokud je to záměr, pak do typu přidejte atribut [<AbstractClass>].
+ Tento typ je abstract, protože se neimplementovali někteří abstraktní členové. Pokud je to záměr, pak k typu přidejte atribut [<AbstractClass>].
@@ -304,7 +304,7 @@
symbol '&'
- symbol „&“
+ symbol &
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Vazby let, které jsou statické na úrovni vlákna nebo kontextu, jsou zastaralé. Použijte místo nich deklaraci ve třídě v podobě static val mutable <ident> : <type>. Přidáním atributu DefaultValue do této deklarace můžete určit, že se bude hodnota v každém novém vláknu inicializovat na výchozí hodnotu.
+ Vazby let, které jsou statické na úrovni vlákna nebo kontextu, jsou zastaralé. Použijte místo nich deklaraci ve třídě v podobě static val mutable <ident> : <typ>. Přidáním atributu DefaultValue do této deklarace můžete určit, že se bude hodnota v každém novém vláknu inicializovat na výchozí hodnotu.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- Výsledek tohoto výrazu má typ {0} a implicitně se ignoruje. Zvažte možnost použít klíčové slovo ignore, aby se tato hodnota explicitně zahodila, třeba expr |> ignore, nebo klíčové slovo let, aby se výsledek svázal s názvem, třeba let výsledek = expr.
+ Výsledek tohoto výrazu má typ {0} a implicitně se ignoruje. Zvažte možnost zahodit tuto hodnotu explicitně pomocí klíčového slova ignore (například výraz |> ignore) nebo vytvořit vazbu výsledku na název pomocí klíčového slova let (například let výsledek = výraz).
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- Výsledek tohoto výrazu rovnosti má typ {0} a implicitně se zruší. Zvažte vytvoření vazby mezi výsledkem a názvem pomocí klíčového slova let, např. let výsledek = výraz. Pokud jste chtěli nastavit hodnotu na vlastnost, použijte operátor <-, např. {1}.{2} <- výraz.
+ Výsledek tohoto výrazu rovnosti má typ {0} a implicitně se zruší. Zvažte vytvoření vazby mezi výsledkem a názvem pomocí klíčového slova let, například let výsledek = výraz. Pokud jste chtěli nastavit hodnotu na vlastnost, použijte operátor <-, například {1}.{2} <- výraz.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- Výsledek tohoto výrazu rovnosti má typ {0} a implicitně se zruší. Zvažte vytvoření vazby mezi výsledkem a názvem pomocí klíčového slova let, např. let výsledek = výraz. Pokud jste chtěli mutovat hodnotu, označte hodnotu jako mutable a použijte operátor <-, např. {1} <- výraz.
+ Výsledek tohoto výrazu rovnosti má typ {0} a implicitně se zruší. Zvažte vytvoření vazby mezi výsledkem a názvem pomocí klíčového slova let, například let výsledek = výraz. Pokud jste chtěli mutovat hodnotu, označte hodnotu jako mutable a použijte operátor <-, například {1} <- výraz.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- Výsledek tohoto výrazu rovnosti má typ {0} a implicitně se zruší. Zvažte vytvoření vazby mezi výsledkem a názvem pomocí klíčového slova let, např. let výsledek = výraz. Pokud jste chtěli mutovat hodnotu, použijte operátor <-, např. {1} <- výraz.
+ Výsledek tohoto výrazu rovnosti má typ {0} a implicitně se zruší. Zvažte vytvoření vazby mezi výsledkem a názvem pomocí klíčového slova let, například let výsledek = výraz. Pokud jste chtěli mutovat hodnotu, použijte operátor <-, například {1} <- výraz.
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- U rekurzivních odkazů na definované objekty se bude kontrolovat stabilita inicializace za běhu pomocí zpožděného odkazování. Zvažte možnost přidat do členů nebo koncového výrazu v podobě <výraz-konstruktoru> then <výraz> odkazy na sebe sama.
+ U rekurzivních odkazů na definované objekty se bude kontrolovat stabilita inicializace za běhu pomocí zpožděného odkazování. Zvažte možnost přidat odkazy na sebe sama do členů nebo koncového výrazu v podobě <výraz-konstruktoru> then <výraz>.
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ symbol {|symbol '|}'
- symbol '|}'
+ symbol |}
diff --git a/src/fsharp/xlf/FSStrings.de.xlf b/src/fsharp/xlf/FSStrings.de.xlf
index c841087efc3..7e39e99b0a7 100644
--- a/src/fsharp/xlf/FSStrings.de.xlf
+++ b/src/fsharp/xlf/FSStrings.de.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Dieser Typ ist "abstract", da einige abstrakte Member keine Implementierung erhalten haben. Falls dies beabsichtigt ist, fügen Sie dem Typ das [<AbstractClass>]-Attribut hinzu.
+ Der Typ entspricht "abstract", da einige abstrakte Member nicht mit einer Implementierung versehen wurden. Wenn dies Ihre Absicht ist, fügen Sie das [<AbstractClass>]-Attribut zu Ihrem Typ hinzu.
@@ -289,7 +289,7 @@
symbol ':?>'
- Symbol ":?>"
+ Symbol ':?>'
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Threadstatische und kontextstatische let-Bindungen sind veraltet. Verwenden Sie stattdessen eine Deklaration im Format "static val mutable <ident> : <Typ>" in einer Klasse. Fügen Sie dieser Deklaration das DefaultValue-Attribut hinzu, um anzugeben, dass der Wert bei jedem neuen Thread mit dem Standardwert initialisiert wird.
+ Threadstatische und kontextstatische "let"-Bindungen sind veraltet. Verwenden Sie stattdessen eine Deklaration im Format "static val mutable <ident> : <type>" in einer Klasse. Fügen Sie dieser Deklaration das DefaultValue-Attribut hinzu, um anzugeben, dass der Wert bei jedem neuen Thread mit dem Standardwert initialisiert wird.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- Das Ergebnis dieses Ausdrucks weist den Typ "{0}" auf und wird implizit ignoriert. Verwenden Sie ggf. "ignore", um diesen Wert explizit zu verwerfen, z. B. "expr |> ignore" oder "let" zum Binden des Ergebnisses an einen Namen, z. B. "let result = expr".
+ Das Ergebnis dieses Ausdrucks hat den Typ "{0}" und wird implizit ignoriert. Verwenden Sie "ignore", um diesen Wert explizit zu verwerfen, z.B. "expr |> ignore", oder "let", um das Ergebnis an einen Namen zu binden, z.B. "let result = expr".
@@ -1299,12 +1299,12 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- Das Ergebnis dieses Gleichheitsausdrucks weist den Typ "{0}" auf und wird implizit verworfen. Verwenden Sie ggf. "let", um das Ergebnis an einen Namen zu binden. Beispiel: "let Ergebnis = Ausdruck". Falls Sie einen Wert auf eine Eigenschaft festlegen möchten, verwenden Sie den Operator "<-". Beispiel: "{1}.{2} <-Ausdruck".
+ Das Ergebnis dieses Gleichheitsausdrucks weist den Typ "{0}" auf und wird implizit verworfen. Verwenden Sie ggf. "let", um das Ergebnis an einen Namen zu binden. Beispiel: "let Ergebnis = Ausdruck". Falls Sie einen Wert auf eine Eigenschaft festlegen möchten, verwenden Sie den Operator "<-". Beispiel: "{1}.{2} <- Ausdruck".The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- Das Ergebnis dieses Gleichheitsausdrucks weist den Typ "{0}" auf und wird implizit verworfen. Verwenden Sie ggf. "let", um das Ergebnis an einen Namen zu binden. Beispiel: "let Ergebnis = Ausdruck". Falls Sie einen Wert mutieren möchten, markieren Sie ihn als "mutable", und verwenden Sie den Operator "<-". Beispiel: "{1} <- Ausdruck".
+ Das Ergebnis dieses Gleichheitsausdrucks weist den Typ "{0}" auf und wird implizit verworfen. Verwenden Sie ggf. "let", um das Ergebnis an einen Namen zu binden. Beispiel: "let Ergebnis = Ausdruck". Falls Sie einen Wert mutieren möchten, markieren Sie ihn als "mutable", und verwenden Sie den Operator "<-" . Beispiel: "{1} <- Ausdruck".
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- Rekursive Verweise auf das definierte Objekt werden zur Laufzeit mithilfe eines verzögerten Verweises auf ihre ordnungsgemäße Initialisierung geprüft. Sie sollten in Membern oder innerhalb eines nachgestellten Ausdrucks Eigenverweise im Format "<ctor-expr>" gefolgt von "<Ausdruck>" platzieren.
+ Rekursive Verweise auf das definierte Objekt werden zur Laufzeit mithilfe eines verzögerten Verweises auf ihre ordnungsgemäße Initialisierung geprüft. Sie sollten in Membern oder innerhalb eines nachgestellten Ausdrucks Eigenverweise im Format "<ctor-expr> then <expr>" platzieren.
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ Symbol "{|"symbol '|}'
- symbol '|}'
+ Symbol "|}"
diff --git a/src/fsharp/xlf/FSStrings.es.xlf b/src/fsharp/xlf/FSStrings.es.xlf
index 94bdc6b94db..0c4041f9b9d 100644
--- a/src/fsharp/xlf/FSStrings.es.xlf
+++ b/src/fsharp/xlf/FSStrings.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Este tipo es "abstract" porque no se ha proporcionado implementación a algunos miembros abstractos. Si esto es intencionado, agregue el atributo "[<AbstractClass>]" al tipo.
+ Este tipo es "abstract" ya que a algunos miembros abstractos no se les ha dado una implementación. Si esto es intencional, agregue el atributo "[<AbstractClass>]"
@@ -254,7 +254,7 @@
symbol ':>'
- símbolo ':>'
+ símbolo ": >"
@@ -289,7 +289,7 @@
symbol ':?>'
- símbolo ':?>'
+ símbolo ":?>"
@@ -304,12 +304,12 @@
symbol '&'
- símbolo '&'
+ símbolo "&"symbol '&&'
- símbolo '&&'
+ símbolo "& &"
@@ -319,12 +319,12 @@
symbol '<'
- símbolo '<'
+ símbolo "<"symbol '>'
- símbolo '>'
+ símbolo ">"
@@ -379,7 +379,7 @@
symbol '<-'
- símbolo '<-'
+ símbolo "<-"
@@ -474,7 +474,7 @@
symbol '[<'
- símbolo '[<'
+ símbolo "[<"
@@ -484,7 +484,7 @@
symbol '{<'
- símbolo '{<'
+ símbolo "{<"
@@ -494,12 +494,12 @@
symbol '>}'
- símbolo '>}'
+ símbolo ">}"symbol '>]'
- símbolo ">]"
+ símbolo ">]'
@@ -694,7 +694,7 @@
symbol '->'
- símbolo '->'
+ símbolo "->"
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Los enlaces 'let' estáticos Thread y Context están en desuso. En su lugar, use una declaración con el formato 'static val mutable <ident> : <tipo>' en una clase. Agregue el atributo 'DefaultValue' a esta declaración para indicar que el valor se inicializa con el valor predeterminado en cada nuevo subproceso.
+ Los enlaces estáticos de subproceso y "let" estáticos de contexto están en desuso. En su lugar, utilice una declaración den el formato "static val mutable <ident> : <type>" en una clase. Agregue el atributo "DefaultValue" a esta declaración para indicar que el valor se inicializa al valor predeterminado en cada subproceso nuevo.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- Implícitamente se omite el resultado de esta expresión, que tiene el tipo "{0}". Considere el uso de "ignore" para descartar este valor explícitamente, por ejemplo, "expr |> ignore" o "let" para vincular el resultado a un nombre, por ejemplo, "let result = expr".
+ El resultado de esta expresión tiene el tipo "{0}" y se ignora implícitamente. Considere usar "ignore" para descartar este valor explícitamente, por ejemplo, "'expr |> ignore" let" para vincular el resultado a un nombre, por ejemplo, "let result = expr".
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- El resultado de esta expresión de igualdad, de tipo "{0}", se descarta de forma implícita. Considere la posibilidad de usar "let" para enlazar el resultado a un nombre, por ejemplo "let resultado = expresión". Si desea establecer un valor en una propiedad, use el operador "<-". Por ejemplo: "{1}.{2} <- expresión".
+ El resultado de esta expresión de igualdad tiene el tipo "{0}" y se descarta implícitamente. Considere el uso de "let" para enlazar el resultado a un nombre, por ejemplo, "let result = expression". Si pretende establecer un valor a una propiedad, utilice el operador "<-"; por ejemplo, "{1}.{2} <- expression".The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- El resultado de esta expresión de igualdad, de tipo "{0}", se descarta de forma implícita. Considere la posibilidad de usar "let" para enlazar el resultado a un nombre, por ejemplo "let resultado = expresión". Si desea mutar un valor, marque el valor como "mutable" y use el operador "<-". Por ejemplo: "{1} <- expresión".
+ El resultado de esta expresión de igualdad tiene el tipo "{0}" y se descarta implícitamente. Considere el uso de "let" para enlazar el resultado a un nombre, por ejemplo, "let result = expression". Si pretende mutar un valor, marque el valor "mutable" y use "<-' operator e.g. '{1} <- expression".The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- El resultado de esta expresión de igualdad, de tipo "{0}", se descarta de forma implícita. Considere la posibilidad de usar "let" para enlazar el resultado a un nombre, por ejemplo "let resultado = expresión". Si desea mutar un valor, use el operador "<-". Por ejemplo: "{1} <- expresión".
+ El resultado de esta expresión de igualdad tiene el tipo "{0}" y se descarta implícitamente. Considere el uso de "let" para vincular el resultado a un nombre, por ejemplo, "let result = expression". Si pretendía mutar un valor, use el operador "<-"; por ejemplo, "{1} <- expression".
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- Las referencias recursivas al objeto que se va a definir se comprobarán para ver si tienen inicialización silenciosa en tiempo de ejecución mediante el uso de una referencia retardada. Considere poner autorreferencias en los miembros o en una expresión final con el formato '<ctor-expr> then <expr>'.
+ Las referencias recursivas al objeto que se está definiendo se verifican para determinar la solidez de la inicialización en el tiempo de ejecución mediante el uso de una referencia en diferido. Considere la colocación de autorreferencias en miembros o dentro de una expresión final con la forma "<ctor-expr> then <expr>".
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ símbolo "{|"symbol '|}'
- symbol '|}'
+ símbolo "|}"
diff --git a/src/fsharp/xlf/FSStrings.fr.xlf b/src/fsharp/xlf/FSStrings.fr.xlf
index da8c884f9b2..76dacd3c0fc 100644
--- a/src/fsharp/xlf/FSStrings.fr.xlf
+++ b/src/fsharp/xlf/FSStrings.fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Ce type est 'abstract', car certains membres abstraits n'ont pas reçu d'implémentation. Si cela est intentionnel, ajoutez l'attribut '[<AbstractClass>]' à votre type.
+ Ce type est 'abstract', car des membres abstraits n'ont pas reçu d'implémentation. Si cela est intentionnel, ajoutez l'attribut '[<AbstractClass>]' à votre type.
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Les liaisons 'let' statiques de thread et de contexte sont déconseillées. Utilisez plutôt une déclaration sous la forme 'static val mutable <ident> : <type>' dans une classe. Ajoutez l'attribut 'DefaultValue' à cette déclaration pour indiquer que la valeur est initialisée à la valeur par défaut pour chaque nouveau thread.
+ Les liaisons static 'let' de thread et de contexte sont dépréciées. Utilisez plutôt une déclaration de la forme 'static val mutable <ident> : <type>' dans une classe. Ajoutez l'attribut 'DefaultValue' à cette déclaration pour indiquer que la valeur est initialisée sur la valeur par défaut sur chaque nouveau thread.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- Le résultat de cette expression a le type '{0}' et est implicitement ignoré. Utilisez 'ignore' pour abandonner cette valeur de manière explicite, par exemple 'expr |> ignore', ou 'let' pour lier le résultat à un nom, par exemple 'let result = expr'.
+ Le résultat de cette expression a le type '{0}' et est implicitement ignoré. Utilisez 'ignore' pour ignorer explicitement cette valeur, par ex. 'expr |> ignore', ou 'let' pour lier le résultat à un nom, par ex. 'let result = expr'.
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- Le résultat de cette expression d'égalité a le type '{0}' et est implicitement abandonné. Utilisez 'let' pour lier le résultat à un nom, par exemple 'let result = expression'. Si vous avez l'intention de définir une valeur pour une propriété, utilisez l'opérateur '<-'. Exemple : '{1}.{2} <- expression'.
+ Le résultat de cette expression d'égalité a le type '{0}' et est implicitement ignoré. Utilisez 'let' pour lier le résultat à un nom, par ex. 'let result = expression'. Si vous voulez définir une valeur sur une propriété, utilisez l'opérateur '<-', par ex. '{1}.{2} <- expression'.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- Le résultat de cette expression d'égalité a le type '{0}' et est implicitement abandonné. Utilisez 'let' pour lier le résultat à un nom, par exemple 'let result = expression'. Si vous avez l'intention de muter une valeur, marquez cette valeur à l'aide de 'mutable' et utilisez l'opérateur '<-'. Exemple : '{1} <- expression'.
+ Le résultat de cette expression d'égalité a le type '{0}' et est implicitement ignoré. Utilisez 'let' pour lier le résultat à un nom, par ex. 'let result = expression'. Si vous voulez muter une valeur, marquez la valeur avec 'mutable' et utilisez l'opérateur '<-', par ex. '{1} <- expression'.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- Le résultat de cette expression d'égalité a le type '{0}' et est implicitement abandonné. Utilisez 'let' pour lier le résultat à un nom, par exemple 'let result = expression'. Si vous avez l'intention de muter une valeur, utilisez l'opérateur '<-'. Exemple : '{1} <- expression'.
+ Le résultat de cette expression d'égalité a le type '{0}' et est implicitement ignoré. Utilisez 'let' pour lier le résultat à un nom, par ex. 'let result = expression'. Si vous voulez muter une valeur, utilisez l'opérateur '<-', par ex. '{1} <- expression'.
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- Les références récursives à l'objet défini seront soumises à un contrôle de l'initialisation au moment de l'exécution via l'utilisation d'une référence différée. Placez des auto-références dans les membres ou dans une expression de fin sous la forme '<ctor-expr> then <expr>'.
+ Les références récursives à l'objet en cours de définition sont soumises à un contrôle d'initialisation au moment de l'exécution à l'aide d'une référence différée. Placez des auto-références dans les membres ou dans une expression de fin de la forme '<ctor-expr> then <expr>'.
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ symbole '{|'symbol '|}'
- symbol '|}'
+ symbole '|}'
diff --git a/src/fsharp/xlf/FSStrings.it.xlf b/src/fsharp/xlf/FSStrings.it.xlf
index 2d190fb5862..11890ea9243 100644
--- a/src/fsharp/xlf/FSStrings.it.xlf
+++ b/src/fsharp/xlf/FSStrings.it.xlf
@@ -1,4 +1,4 @@
-
+
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- I riferimenti ricorsivi all'oggetto in fase di definizione verranno controllati per verificare la correttezza dell'inizializzazione al runtime tramite l'utilizzo di un riferimento ritardato. Provare a inserire autoriferimenti nei membri o in un'espressione finale nel formato '<ctor-expr> then <expr>'.
+ I riferimenti ricorsivi all'oggetto in fase di definizione verranno controllati per verificare la correttezza dell'inizializzazione al runtime tramite l'uso di un riferimento ritardato. Provare a inserire autoriferimenti nei membri o in un'espressione finale nel formato '<ctor-expr> then <expr>'.
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ simbolo '{|'symbol '|}'
- symbol '|}'
+ simbolo '|}'
diff --git a/src/fsharp/xlf/FSStrings.ja.xlf b/src/fsharp/xlf/FSStrings.ja.xlf
index bc6947a7672..eb91f5fb4fc 100644
--- a/src/fsharp/xlf/FSStrings.ja.xlf
+++ b/src/fsharp/xlf/FSStrings.ja.xlf
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- 一部の抽象メンバーが実装されなかったため、この型は 'abstract' です。これが意図的な場合、型に '[<AbstractClass>]' 属性を追加してください。
+ これは 'abstract' 型です。一部の抽象メンバーに実装がありません。意図的な場合には、型に '[<AbstractClass>]' 属性を追加してください。
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- thread-static および context-static の 'let' 束縛は使用されなくなりました。代わりに、クラスには 'static val mutable <ident> : <type>' という形式の宣言を使用してください。また、この宣言に 'DefaultValue' 属性を追加し、新しいスレッドごとに値が既定値に初期化されることを示してください。
+ Thread 静的および context 静的 'let' バインディングは使用されなくなりました。代わりに、クラスで 'static val mutable <ident> : <type>' という形式の宣言を使用します。新しいスレッドごとに値を既定値に初期化することを示すには、この宣言に 'DefaultValue' 属性を追加します。
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- この式の結果は型 '{0}' を持ち、暗黙的に無視されます。'expr |> ignore' のように 'ignore' を使用してこの値を明示的に破棄するか、'let result = expr' のように 'let' を使用して結果を名前にバインドすることをご考慮ください。
+ この式の結果の型は '{0}' で、暗黙的に無視されます。'ignore' を使用してこの値を明示的に破棄してください (例: 'expr |> ignore')。または 'let' を使用して結果を名前にバインドします (例: 'let result = expr')。
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- この等式の結果は型 '{0}' を持ち、暗黙的に破棄されます。'let' を使用して結果を名前にバインドすることを検討してください。例: 'let result = expression'。値をプロパティに設定する場合は、'<-' 演算子を使用します。例: '{1}.{2} <- expression'。
+ この等式の結果の種類は '{0}' で、暗黙的に破棄されます。'let' を使用して結果を名前にバインドすることを検討してください。たとえば、'let result = expression' などとします。値をプロパティに設定する場合には、'<-' 演算子を使用して '{1}.{2} <- expression' などとします。The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- この等式の結果は型 '{0}' を持ち、暗黙的に破棄されます。'let' を使用して結果を名前にバインドすることを検討してください。例: 'let result = expression'。値を変換する場合は、値 'mutable' をマークして、'<-' 演算子を使用します。例: '{1} <- expression'。
+ この等式の結果の型は '{0}' で、暗黙的に破棄されます。'let' を使用して結果に名前をバインドすることを検討してください。たとえば、'let result = expression' などとします。値を意図的に変更する場合には、値に 'mutable' というマークを付け、'<-' 演算子を使用して '{1} <- expression' などとします。The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- この等式の結果は型 '{0}' を持ち、暗黙的に破棄されます。'let' を使用して結果を名前にバインドすることを検討してください。例: 'let result = expression'。値を変換する場合は、'<-' 演算子を使用します。例: '{1} <- expression'。
+ この等式の結果の型は '{0}' で、暗黙的に破棄されます。'let' を使用して結果を名前にバインドすることを検討してください。たとえば、'let result = expression' などとします。意図的に値を変更する場合、'<-' 演算子を '{1} <- expression' などと使用します。
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- 定義されるオブジェクトに対する再帰参照は、遅延参照を使用して、実行時に初期化の正常性がチェックされます。メンバー内、または '<ctor-expr> then <expr>' 形式の後続の式内に自己参照を配置してください。
+ 定義しているオブジェクトへの再帰的参照は、遅延参照を使用して実行時に初期化の正常性がチェックされます。メンバー内、または '<ctor-expr> then <expr>' の後続の式内に自己参照を配置してください。
@@ -1609,7 +1609,7 @@
{0} (Code={1})
- {0} (Code={1})
+ {0} (コード={1})
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ シンボル '{|'symbol '|}'
- symbol '|}'
+ シンボル '|}'
diff --git a/src/fsharp/xlf/FSStrings.ko.xlf b/src/fsharp/xlf/FSStrings.ko.xlf
index abf9de4c4e2..f99c95b5242 100644
--- a/src/fsharp/xlf/FSStrings.ko.xlf
+++ b/src/fsharp/xlf/FSStrings.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -254,7 +254,7 @@
symbol ':>'
- ':>' 기호
+ 기호 ':>'
@@ -289,7 +289,7 @@
symbol ':?>'
- ':?>' 기호
+ 기호 ':?>'
@@ -304,12 +304,12 @@
symbol '&'
- '&' 기호
+ 기호 '&'symbol '&&'
- '&&' 기호
+ 기호 '&&'
@@ -319,12 +319,12 @@
symbol '<'
- '<' 기호
+ 기호 '<'symbol '>'
- '>' 기호
+ 기호 '>'
@@ -364,7 +364,7 @@
type application
- 형식 적용
+ 형식 적용
@@ -379,7 +379,7 @@
symbol '<-'
- '<-' 기호
+ 기호 '<-'
@@ -389,7 +389,7 @@
symbol '>|]'
- '>|]' 기호
+ 기호 '>|]'
@@ -474,7 +474,7 @@
symbol '[<'
- '[<' 기호
+ 기호 '[<'
@@ -484,7 +484,7 @@
symbol '{<'
- '{<' 기호
+ 기호 '{<'
@@ -494,12 +494,12 @@
symbol '>}'
- '>}' 기호
+ 기호 '>}'symbol '>]'
- '>]' 기호
+ 기호 '>]'
@@ -694,7 +694,7 @@
symbol '->'
- '->' 기호
+ 기호 '->'
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- 이 식의 결과는 ‘{0}’ 형식이며 암시적으로 무시됩니다. 'ignore'를 사용하여 이 값을 명시적으로 버리거나(예: 'expr |> ignore'), 'let'을 사용하여 결과를 이름에 바인딩하세요(예: 'let result = expr').
+ 이 식의 결과는 '{0}' 형식이며 암시적으로 무시됩니다. 'ignore'를 사용하여 이 값을 명시적으로 버리거나(예: 'expr |> ignore'), 'let'을 사용하여 결과를 이름에 바인딩하세요(예: 'let result = expr').
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- 이 같음 식의 결과는 ‘{0}’ 형식이며 암시적으로 삭제됩니다. 결과를 이름에 바인딩하려면 'let'을 사용하세요(예: 'let result = expression'). 값을 속성으로 설정하려면 '<-' 연산자를 사용하세요(예: '{1}.{2} <- expression').
+ 이 같음 식의 결과는 '{0}' 형식이며 암시적으로 삭제됩니다. 결과를 이름에 바인딩하려면 'let'을 사용하세요(예: 'let result = expression'). 값을 속성으로 설정하려면 '<-' 연산자를 사용하세요(예: '{1}.{2} <- expression').The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- 이 같음 식의 결과는 ‘{0}’ 형식이며 암시적으로 삭제됩니다. 결과를 이름에 바인딩하려면 'let'을 사용하세요(예: 'let result = expression'). 값을 변경하려면 값을 'mutable'로 표시하고 '<-' 연산자를 사용하세요(예: '{1} <- expression').
+ 이 같음 식의 결과는 '{0}' 형식이며 암시적으로 삭제됩니다. 결과를 이름에 바인딩하려면 'let'을 사용하세요(예: 'let result = expression'). 값을 변경하려면 값을 'mutable'로 표시하고 '<-' 연산자를 사용하세요(예: '{1} <- expression').The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- 이 같음 식의 결과는 ‘{0}’ 형식이며 암시적으로 삭제됩니다. 결과를 이름에 바인딩하려면 'let'을 사용하세요(예: 'let result = expression'). 값을 변경하려면 '<-' 연산자를 사용하세요(예: '{1} <- expression').
+ 이 같음 식의 결과는 '{0}' 형식이며 암시적으로 삭제됩니다. 결과를 이름에 바인딩하려면 'let'을 사용하세요(예: 'let result = expression'). 값을 변경하려면 '<-' 연산자를 사용하세요(예: '{1} <- expression').
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ 기호 '{|'symbol '|}'
- symbol '|}'
+ 기호 '|}'
diff --git a/src/fsharp/xlf/FSStrings.pl.xlf b/src/fsharp/xlf/FSStrings.pl.xlf
index ff77b583a31..346dc962602 100644
--- a/src/fsharp/xlf/FSStrings.pl.xlf
+++ b/src/fsharp/xlf/FSStrings.pl.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Ten typ ma wartość „abstract”, ponieważ niektóre abstrakcyjne elementy członkowskie nie mają określonej implementacji. Jeśli jest to zamierzone działanie, dodaj atrybut „[<AbstractClass>]” do typu.
+ Ten typ ma wartość „abstract”, ponieważ niektóre abstrakcyjne składowe nie mają określonej implementacji. Jeśli jest to zamierzone działanie, dodaj atrybut „[<AbstractClass>]” do typu.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- Wynik tego wyrażenia ma typ „{0}” i jest niejawnie ignorowany. Rozważ użycie elementu „ignore”, aby jawnie odrzucić tę wartość (np. „expr |> ignore”), lub elementu „let”, aby powiązać wynik z nazwą (np. „let result = expr”).
+ Wynik tego wyrażenia ma typ „{0}” i jest niejawnie ignorowany. Rozważ użycie elementu „ignore”, aby jawnie odrzucić tę wartość (np. „wyrażenie |> ignore”), lub elementu „let”, aby powiązać wynik z nazwą (np. „let wynik = wyrażenie”).
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- Wynik tego wyrażenia równości ma typ „{0}” i jest niejawnie odrzucany. Rozważ użycie słowa kluczowego „let” do powiązania wyniku z nazwą, np. „let wynik = wyrażenie”. Jeśli chcesz ustawić wartość właściwości, użyj operatora „<-”, np. „{1}.{2} <- wyrażenie”.
+ Wynik tego wyrażenia równości ma typ „{0}” i jest niejawnie odrzucany. Rozważ użycie słowa kluczowego „let” do powiązania wyniku z nazwą, np. „let wynik = wyrażenie”. Jeśli zamiarem było ustawienie wartości właściwości, użyj operatora „<-”, np. „{1}.{2} <- wyrażenie”.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- Wynik tego wyrażenia równości ma typ „{0}” i jest niejawnie odrzucany. Rozważ użycie słowa kluczowego „let” do powiązania wyniku z nazwą, np. „let wynik = wyrażenie”. Jeśli chcesz zmutować wartość, oznacz ją za pomocą deklaratora „mutable” i użyj operatora „<-”, np. „{1} <- wyrażenie”.
+ Wynik tego wyrażenia równości ma typ „{0}” i jest niejawnie odrzucany. Rozważ użycie słowa kluczowego „let” do powiązania wyniku z nazwą, np. „let wynik = wyrażenie”. Jeśli zamiarem było zmodyfikowanie wartości, oznacz ją za pomocą deklaratora „mutable” i użyj operatora „<-”, np. „{1} <- wyrażenie”.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- Wynik tego wyrażenia równości ma typ „{0}” i jest niejawnie odrzucany. Rozważ użycie słowa kluczowego „let” do powiązania wyniku z nazwą, np. „let wynik = wyrażenie”. Jeśli chcesz zmutować wartość, użyj operatora „<-”, np. „{1} <- wyrażenie”.
+ Wynik tego wyrażenia równości ma typ „{0}” i jest niejawnie odrzucany. Rozważ użycie słowa kluczowego „let” do powiązania wyniku z nazwą, np. „let wynik = wyrażenie”. Jeśli zamiarem było zmodyfikowanie wartości, użyj operatora „<-”, np. „{1} <- wyrażenie”.
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- Odwołania cykliczne do definiowanego obiektu zostaną sprawdzone pod kątem poprawności inicjalizacji w środowisku uruchomieniowym przy użyciu opóźnionego odwołania. Rozważ umieszczenie odwołań własnych w elementach członkowskich lub w wyrażeniu końcowym w postaci „<wyrażenie-konstruktora> then <wyrażenie>”.
+ Odwołania cykliczne do definiowanego obiektu będą sprawdzane pod kątem poprawności inicjowania w czasie wykonywania przy użyciu opóźnionego odwołania. Rozważ umieszczenie odwołań własnych w składowych lub w wyrażeniu końcowym w postaci „<wyrażenie-konstruktora> then <wyrażenie>”.
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ symbol „{|”symbol '|}'
- symbol '|}'
+ symbol „|}”
diff --git a/src/fsharp/xlf/FSStrings.pt-BR.xlf b/src/fsharp/xlf/FSStrings.pt-BR.xlf
index 51ea01ee2a5..3c2a5f22963 100644
--- a/src/fsharp/xlf/FSStrings.pt-BR.xlf
+++ b/src/fsharp/xlf/FSStrings.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Este tipo é 'abstract', uma vez que os membros abstratos não receberam uma implementação. Se esta for a intenção, adicione o atributo '[<AbstractClass>]' ao seu tipo.
+ Esse tipo é 'abstrato', pois alguns membros abstratos não receberam uma implementação. Se isso for intencional, adicione o atributo '[<AbstractClass>]' ao seu tipo.
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Associações 'let' do thread estático e do contexto estático foram preteridas. Ao invés delas, utilize uma declaração da forma 'static val mutable <ident> : <type>' na classe. Adicione o atributo 'DefaultValue' a esta declaração para indicar que o valor é iniciado com o valor padrão a cada novo thread.
+ As associações 'let' estáticas de contexto e estáticas de thread estão preteridas. Use uma declaração da forma 'static val mutable <ident> : <type>'em uma classe. Adicione o atributo 'DefaultValue' para esta declaração para indicar que o valor foi inicializado para o valor padrão em cada novo thread.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- O resultado dessa expressão contém o tipo '{0}' e é ignorado de forma implícita. Considere o uso de 'ignore' para descartar esse valor de forma explícita, por exemplo, 'expr |> ignore' ou 'let' para associar o resultado a um nome, por exemplo, 'let result = expr'.
+ O resultado dessa expressão tem o tipo '{0}' e implicitamente é ignorado. Use 'ignore' para descartar esse valor explicitamente, por exemplo, 'expr |> ignore', ou 'let' para associar o resultado a um nome, por exemplo, 'let result = expr'.
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- O resultado dessa expressão de igualdade contém o tipo '{0}' e é descartado de forma implícita. Considere o uso de 'let' para associar o resultado a um nome, por exemplo, 'let result = expression'. Se você pretende definir um valor com uma propriedade, use o operador '<-', por exemplo, '{1}.{2} <- expression'.
+ O resultado dessa expressão de igualdade tem o tipo '{0}' e é implicitamente descartado. Use 'let' para associar o resultado a um nome, por exemplo, 'let resultado = expressão'. Se você pretende modificar um valor, use o operador '<-', por exemplo, '{1}.{2} <- expressão'.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- O resultado dessa expressão de igualdade contém o tipo '{0}' e é descartado de forma implícita. Considere o uso de 'let' para associar o resultado a um nome, por exemplo, 'let result = expression'. Se você pretende alterar um valor, marque-o como 'mutable' e use o operador '<-', por exemplo, '{1} <- expression'.
+ O resultado dessa expressão de igualdade tem o tipo '{0}' e é implicitamente descartado. Use 'let' para associar o resultado a um nome, por exemplo, 'let resultado = expressão'. Se você pretende modificar um valor, use o operador '<-', por exemplo, '{1} <- expressão'.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- O resultado dessa expressão de igualdade contém o tipo '{0}' e é descartado de forma implícita. Considere o uso de 'let' para associar o resultado a um nome, por exemplo, 'let result = expression'. Se você pretende alterar um valor, use o operador '<-', por exemplo, '{1} <- expression'.
+ O resultado dessa expressão de igualdade tem o tipo '{0}' e é implicitamente descartado. Use 'let' para associar o resultado a um nome, por exemplo, 'let resultado = expressão'. Se você pretende modificar um valor, use o operador '<-', por exemplo, '{1} <- expressão'.
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- Referências recursivas ao objeto que está sendo definido terão sua solidez de inicialização verificada no tempo de execução, por meio do uso de uma referência atrasada. Considere colocar autorreferências em membros ou em expressões à direita da forma '<ctor-expr> then <expr>'.
+ Referências recursivas ao objeto que está sendo definido serão verificadas quanto à integridade da inicialização no tempo de execução através do uso de uma referência atrasada. Coloque referências próprias em membros ou em uma expressão à direita do forma '< ctor-expr > then < expr >'.
@@ -1609,7 +1609,7 @@
{0} (Code={1})
- {0} (Code={1})
+ {0} (código = {1})
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ símbolo '{|'symbol '|}'
- symbol '|}'
+ símbolo '|}'
diff --git a/src/fsharp/xlf/FSStrings.ru.xlf b/src/fsharp/xlf/FSStrings.ru.xlf
index e5d185af0df..cd7d4e5e29c 100644
--- a/src/fsharp/xlf/FSStrings.ru.xlf
+++ b/src/fsharp/xlf/FSStrings.ru.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Данный тип является "абстрактным", так как у некоторых абстрактных элементов нет реализации. Если это сделано намеренно, добавьте к своему типу атрибут "[<AbstractClass>]".
+ Этот тип является абстрактным ('abstract'), так как для нескольких абстрактных членов не указана реализация. Если это сделано намеренно, добавьте атрибут '[<AbstractClass>]' к своему типу.
@@ -254,7 +254,7 @@
symbol ':>'
- символ ":>"
+ Обозначение ':>'
@@ -289,7 +289,7 @@
symbol ':?>'
- символ ":?>"
+ Обозначение ':?>'
@@ -304,12 +304,12 @@
symbol '&'
- символ "&"
+ Обозначение '&'symbol '&&'
- символ "&&"
+ Обозначение '&&'
@@ -319,12 +319,12 @@
symbol '<'
- символ "<"
+ Обозначение '<'symbol '>'
- символ ">"
+ Обозначение '>'
@@ -379,7 +379,7 @@
symbol '<-'
- символ "<-"
+ Обозначение '<-'
@@ -389,7 +389,7 @@
symbol '>|]'
- символ ">|]"
+ Обозначение '>|]'
@@ -474,7 +474,7 @@
symbol '[<'
- символ "[<"
+ Обозначение '[<'
@@ -484,7 +484,7 @@
symbol '{<'
- символ "{<"
+ Обозначение '{<'
@@ -494,12 +494,12 @@
symbol '>}'
- символ ">}"
+ Обозначение '>}'symbol '>]'
- символ ">]"
+ Обозначение '>]'
@@ -694,7 +694,7 @@
symbol '->'
- символ "->"
+ Обозначение '->'
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Привязки статического потока и статического контекста "let" не рекомендуются к использованию. Вместо них используется объявление формы "static val mutable <ident> : <type>" в классе. Добавьте атрибут "DefaultValue", чтобы показать, что значение инициализируется как значение по умолчанию в каждом новом потоке.
+ Статические привязки потока и контекста 'let' являются устаревшими. Используйте объявление вида 'static val mutable <ident> : <type>' в классе. Добавьте атрибут 'DefaultValue' к этому объявлению, чтобы указать, что это значение инициализируется значением по умолчанию для каждого нового потока.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- Результат этого выражения имеет тип "{0}" и неявно игнорируется. Попробуйте использовать "ignore", чтобы явным образом удалить это значение (например: "expr |> ignore"), или используйте "let", чтобы привязать результат к имени (например: "let result = expr").
+ Результат этого выражения имеет тип "{0}" и неявно игнорируется. Используйте "ignore", чтобы явно отклонить это значение, например, 'expr |> ignore', или используйте "let", чтобы привязать результат к имени, например, 'let result = expr'.
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- Результат этого выражения равенства имеет тип "{0}" и неявно отбрасывается. Попробуйте использовать "let", чтобы привязать результат к имени, например "let result = expression". Если вы собирались присвоить значение свойству, используйте оператор "<-", например: "{1}.{2} <- expression".
+ Результат этого выражения равенства имеет тип '{0}' и неявно удаляется. Используйте 'let', чтобы привязать результат к имени, например, 'let result = expression'. Если вы хотите установить значение свойства, используйте оператор '<-', например, '{1}.{2} <- expression'.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- Результат этого выражения равенства имеет тип "{0}" и неявно отбрасывается. Попробуйте использовать "let", чтобы привязать результат к имени, например "let result = expression". Если вы собирались изменять значение, отметьте его как "mutable" и используйте оператор "<-", например: "{1} <- expression".
+ Результат этого выражения равенства имеет тип "{0}" и неявно отбрасывается. Используйте "let" для привязки результата к имени, например, "let result = expression". Если вы собираетесь изменять значение, пометьте значение как 'mutable' и используйте оператор '<-', например, '{1} <- expression'.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- Результат этого выражения равенства имеет тип "{0}" и неявно отбрасывается. Попробуйте использовать "let", чтобы привязать результат к имени, например "let result = expression". Если вы собирались изменять значение, используйте оператор "<-", например: "{1} <- expression".
+ Результат этого выражения равенства имеет тип "{0}" и неявно удаляется. Рекомендуем использовать "let", чтобы привязать результат к имени, например, "let result = expression" . Если вы хотите изменять значение, используйте оператор '<-', например, '{1} <- expression'.
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- Рекурсивные ссылки на определяемый объект будут проверены на правильность инициализации во время выполнения посредством использования отложенной ссылки. Попробуйте разместить рекурсивные ссылки в элементах или в завершающем выражении в форме "<ctor-expr> then <expr>".
+ Правильная инициализация рекурсивных ссылок на определяемый объект будут проверяться во время выполнения с использованием отложенных ссылок. Разместите рекурсивные ссылки в членах или в завершающем выражении в виде '<ctor-expr> then <expr>'.
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ Обозначение '{|'symbol '|}'
- symbol '|}'
+ Обозначение '|}'
diff --git a/src/fsharp/xlf/FSStrings.tr.xlf b/src/fsharp/xlf/FSStrings.tr.xlf
index 8bb5fdbeb23..f4cba2f1216 100644
--- a/src/fsharp/xlf/FSStrings.tr.xlf
+++ b/src/fsharp/xlf/FSStrings.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- Bazı soyut üyelere bir uygulama verilmediğinden bu bir 'abstract' türdür. Bu bilerek yapıldıysa, türünüze '[<AbstractClass>]' özniteliğini ekleyin.
+ Bazı soyut üyelere bir uygulama verilmediğinden bu tür 'soyut'. Bilerek yaptıysanız türünüze '[<AbstractClass>]' özniteliğini ekleyin.
@@ -254,7 +254,7 @@
symbol ':>'
- ':>' simgesi
+ sembol ':>'
@@ -289,7 +289,7 @@
symbol ':?>'
- ':?>' simgesi
+ sembol ':?>'
@@ -304,12 +304,12 @@
symbol '&'
- '&' simgesi
+ sembol '&'symbol '&&'
- '&&' simgesi
+ sembol '&&'
@@ -319,12 +319,12 @@
symbol '<'
- '<' simgesi
+ sembol '<'symbol '>'
- '>' simgesi
+ sembol '>'
@@ -379,7 +379,7 @@
symbol '<-'
- '<-' simgesi
+ sembol '<-'
@@ -389,7 +389,7 @@
symbol '>|]'
- '>|]' simgesi
+ sembol '>|]'
@@ -474,7 +474,7 @@
symbol '[<'
- '[<' simgesi
+ sembol '[<'
@@ -484,7 +484,7 @@
symbol '{<'
- '{<' simgesi
+ sembol '{<'
@@ -494,12 +494,12 @@
symbol '>}'
- '>}' simgesi
+ sembol '>}'symbol '>]'
- '>]' simgesi
+ sembol '>]'
@@ -694,7 +694,7 @@
symbol '->'
- '->' simgesi
+ sembol '->'
@@ -954,7 +954,7 @@
whitespace
- whitespace
+ boşluk
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Statik iş parçacıklı ve statik bağlamlı 'let' bağlamaları kullanım dışıdır. Onun yerine bir sınıfta 'static val mutable <ident> : <tür>' biçimindeki bildirimi kullanın. Değerin her yeni iş parçacığında varsayılan değerle başlatıldığını belirtmek için bu bildirime 'DefaultValue' özniteliğini ekleyin.
+ İş parçacığı ve bağlam açısından statik 'let' bağlamaları kullanımdan kaldırılmıştır. Bunun yerine bir sınıfta 'static val mutable <ident> : <type>' biçiminde bir bildirim kullanın. Değerin her yeni iş parçacığında varsayılan değerle başlatıldığını belirtmek için bu bildirime 'DefaultValue' özniteliğini ekleyin.
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- Bu ifadenin sonucu '{0}' türüne sahip ve örtük olarak yoksayılır. Bu değeri açıkça atmak için 'ignore' kullanmayı (örn. 'deyim |> ignore') veya sonucu bir ada bağlamak için 'let' kullanmayı (örn. 'let sonuc = deyim') deneyin.
+ Bu ifadenin sonucu '{0}' türüne sahip ve örtük olarak yoksayılıyor. Bu değeri açıkça atmak için 'ignore' öğesini (ör. 'expr |> ignore') veya sonucu bir ada bağlamak için 'let' öğesini (ör. 'let result = expr') kullanmayı göz önünde bulundurun.
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- Bu eşitlik ifadesinin sonucu '{0}' türüne sahip ve örtük olarak atılır. Sonucu bir ada bağlamak için 'let' kullanmayı düşünün (örneğin, 'let sonuc = deyim'). Bir özelliğin değerini ayarlamak istiyorsanız, '<-' işlecini kullanın (örneğin, '{1}.{2} <- deyim').
+ Bu eşitlik ifadesinin sonucu '{0}' türüne sahip ve örtük olarak atılıyor. Sonucu bir ada bağlamak için 'let' kullanmayı (ör. 'let result = expression') göz önünde bulundurun. Bir özelliğe yönelik bir değer ayarlamaya çalıştıysanız '<-' işlecini (ör. '{1}.{2} <- expression') kullanın.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- Bu eşitlik ifadesinin sonucu '{0}' türüne sahip ve örtük olarak atılır. Sonucu bir ada bağlamak için 'let' kullanmayı düşünün (örneğin, 'let sonuc = deyim'). Bir değeri değiştirmek istiyorsanız, değeri 'mutable' olarak işaretleyin ve '<-' işlecini kullanın; örneğin, '{1} <- deyim'.
+ Bu eşitlik ifadesinin sonucu '{0}' türüne sahip ve örtük olarak atılıyor. Sonucu bir ada bağlamak için 'let' kullanmayı göz önünde bulundurun, ör. 'let result = expression'. Bir değeri değiştirmeye çalıştıysanız değeri 'mutable' olarak işaretleyin ve '<-' işlecini kullanın, ör. '{1} <- expression'.The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- Bu eşitlik ifadesinin sonucu '{0}' türüne sahip ve örtük olarak atılır. Sonucu bir ada bağlamak için 'let' kullanmayı düşünün (örneğin 'let sonuc = deyim'). Bir değeri değiştirmek istiyorsanız, '<-' işlecini kullanın; örneğin, '{1} <- deyim'.
+ Bu eşitlik ifadesinin sonucu '{0}' türüne sahip ve örtük olarak atılıyor. Sonucu bir ada bağlamak için 'let' kullanmayı (ör. 'let result = expression') göz önünde bulundurun. Bir değeri değiştirmeye çalıştıysanız '<-' işlecini (ör. '{1} <- expression') kullanın.
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- Tanımlanmakta olan nesneye yapılan özyinelemeli başvurular, geç başvuru kullanımı aracılığıyla çalışma zamanında başlatma sağlamlığı açısından denetlenecek. Kendine yapılan başvuruları üyelere veya '<ctor-expr> then <expr>' biçimindeki izleyen ifadenin içine yerleştirmeyi düşünün.
+ Tanımlanmakta olan nesneye yönelik özyinelemeli başvurular, çalışma zamanında gecikmeli bir başvuru kullanılarak başlatma sağlamlığı açısından denetlenir. Üyelerin veya sondaki bir ifadenin içine '<ctor-expr> sonra <expr>' biçiminde kendi kendine başvurular yerleştirmeyi göz önünde bulundurun.
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ sembol '{|'symbol '|}'
- symbol '|}'
+ sembol '|}'
diff --git a/src/fsharp/xlf/FSStrings.zh-Hans.xlf b/src/fsharp/xlf/FSStrings.zh-Hans.xlf
index ad4a06f8c33..506c6ad1150 100644
--- a/src/fsharp/xlf/FSStrings.zh-Hans.xlf
+++ b/src/fsharp/xlf/FSStrings.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- 由于未为一些抽象成员给定实现,因此此类型为“abstract”。如果是有意为之,请为类型添加“[<AbstractClass>]”特性。
+ 由于未向一些抽象成员提供实现,因此该类型为 "abstract"。如果是故意如此,请向你的类型添加 "[<AbstractClass>]" 属性。
@@ -254,7 +254,7 @@
symbol ':>'
- 符号“:>”
+ 符号 ":>"
@@ -289,7 +289,7 @@
symbol ':?>'
- 符号“:?>”
+ 符号 ":?>"
@@ -304,12 +304,12 @@
symbol '&'
- 符号 '&'
+ 符号 "& amp;"symbol '&&'
- 符号“&&”
+ 符号 "&&"
@@ -319,12 +319,12 @@
symbol '<'
- 符号“<”
+ 符号 "<"symbol '>'
- 符号“>”
+ 符号 ">"
@@ -379,7 +379,7 @@
symbol '<-'
- 符号“<-”
+ 符号 "<-"
@@ -389,7 +389,7 @@
symbol '>|]'
- 符号“>|]”
+ 符号 ">|]"
@@ -474,7 +474,7 @@
symbol '[<'
- 符号“[<”
+ 符号 "[<"
@@ -484,7 +484,7 @@
symbol '{<'
- 符号“{<”
+ 符号 "{<"
@@ -494,12 +494,12 @@
symbol '>}'
- 符号“>}”
+ 符号 ">}"symbol '>]'
- 符号“>]”
+ 符号 ">]"
@@ -694,7 +694,7 @@
symbol '->'
- 符号“->”
+ 符号 "->"
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- 线程静态的和上下文静态的“let”绑定已弃用。请改为在类中使用“static val mutable <ident> : <type>”格式的声明。将“DefaultValue”特性添加到此声明以指示在每个新线程上将该值初始化为默认值。
+ 线程静态的和上下文静态的 "let" 绑定已弃用。请改为在类中使用 "static val mutable <ident> : <type>" 格式的声明。请将 "DefaultValue" 添加到此声明,以指示在每个新线程上将该值初始化为默认值。
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- 此表达式的结果为类型“{0}”且被隐式忽略。请考虑使用 "ignore" 显式放弃该值,例如使用 "expr |> ignore" 或 "let" 将结果绑定到名称,例如 "let result = expr"。
+ 此表达式的结果具有类型“{0}”且已被隐式忽略。请考虑使用 "ignore" 以显式弃用此值(例如 "expr |> ignore"),或使用 "let" 将结果绑定到名称上(例如 "let result = expr")。
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- 此等式表达式的结果为类型“{0}”且被隐式放弃。请考虑使用 "let" 将结果绑定到名称,例如 "let result = expression"。如果要为某属性设置值,请使用 "<-" 运算符,例如 "{1}.{2} <- expression"。
+ 此相等表达式的结果具有类型“{0}”并被隐式丢弃。请考虑使用 "let" 将结果绑定到名称,例如 "let result = expression"。如果要将值设置为属性,请使用 "<-" 运算符(例如 "{1}.{2} <- expression")。The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- 此等式表达式的结果为类型“{0}”且被隐式放弃。请考虑使用 "let" 将结果绑定到名称,例如 "let result = expression"。如果要转变某个值,则将此值标记为 "mutable" 并使用 "<-" 运算符,例如 "{1} <- expression"。
+ 此等式表达式的结果具有类型“{0}”并被隐式丢弃。请考虑使用 "let" 将结果绑定到名称,例如 "let result = expression"。如果想要转变某个值,则将此值标记为 "mutable" 并使用 "<-" 运算符(例如 "{1} <- expression")。The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- 此等式表达式的结果为类型“{0}”且被隐式放弃。请考虑使用 "let" 将结果绑定到名称,例如 "let result = expression"。如果要转变某个值,请使用 "<-" 运算符,例如 "{1} <- expression"。
+ 此相等表达式的结果具有类型“{0}”并被隐式丢弃。请考虑使用 "let" 将结果绑定到名称,例如 "let result = expression"。如果要对值进行突变, 请使用 "<-" 运算符(例如 "{1} <- expression")。
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- 将检查对要定义的对象的递归引用,以查看其在运行时能否通过使用延迟的引用来完整地进行初始化。请考虑在成员中或“<ctor-expr> then <expr>”格式的尾随表达式中放置自引用。
+ 将检查对要定义的对象的递归引用,以查看其在运行时能否通过使用延迟的引用来完整地进行初始化 。请考虑在成员中或 "<ctor-expr> then <expr>" 格式的尾随表达式中放置自引用。
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ 符号 "{|"symbol '|}'
- symbol '|}'
+ 符号 "|}"
diff --git a/src/fsharp/xlf/FSStrings.zh-Hant.xlf b/src/fsharp/xlf/FSStrings.zh-Hant.xlf
index 3dcbf9ac1e3..c895858a67f 100644
--- a/src/fsharp/xlf/FSStrings.zh-Hant.xlf
+++ b/src/fsharp/xlf/FSStrings.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
@@ -184,7 +184,7 @@
This type is 'abstract' since some abstract members have not been given an implementation. If this is intentional then add the '[<AbstractClass>]' attribute to your type.
- 因為尚未對一些抽象成員提供實作,所以此類型為「抽象」。若故意形成此情況,請將 '[<AbstractClass>]' 屬性新增至您的類型。
+ 因為未提供實作給某些抽象成員,所以此類型為 'abstract'。如果這是預期的情況,則請將 '[<AbstractClass>]' 屬性新增到您的類型。
@@ -1279,7 +1279,7 @@
Thread static and context static 'let' bindings are deprecated. Instead use a declaration of the form 'static val mutable <ident> : <type>' in a class. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread.
- Thread 靜態和 Context 靜態的 'let' 繫結已被取代。請改成在類別中使用 'static val mutable <ident> : <type>' 形式的宣告。將 'DefaultValue' 屬性加入這個宣告以表示會在每個新執行緒時將值初始化成預設值。
+ 靜態執行緒和靜態環境 'let' 繫結已淘汰。請在類別中改用 'static val mutable <ident> : <type>' 形式的宣告。將 'DefaultValue' 屬性新增到此宣告,可指出值會在每個新的執行緒均初始化為預設值。
@@ -1289,7 +1289,7 @@
The result of this expression has type '{0}' and is implicitly ignored. Consider using 'ignore' to discard this value explicitly, e.g. 'expr |> ignore', or 'let' to bind the result to a name, e.g. 'let result = expr'.
- 這個運算式的結果類型為 '{0}',已隱含略過。請考慮使用 'ignore' 以明確捨棄此值,例如 'expr |> ignore',或使用 'let' 將結果繫結至名稱,例如 'let result = expr'。
+ 這個運算式的結果有 '{0}' 類型,會隱含略過。請考慮使用 'ignore' 來明確捨棄這個值,例如 'expr |> ignore',或使用 'let' 將結果繫結到名稱,例如 'let result = expr'。
@@ -1299,17 +1299,17 @@
The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. '{1}.{2} <- expression'.
- 這個等號比較運算式的結果類型為 '{0}',已隱含捨棄。請考慮使用 'let' 將結果繫結至名稱,例如 'let result = expression'。若您要設定屬性值,請使用 '<-' 運算子,例如 '{1}.{2} <- expression'。
+ 這個等號運算式的結果有 '{0}' 類型,會隱含捨棄。請考慮使用 'let' 將結果繫結到名稱,例如 'let result = expression'。若您想要將值設為屬性,則請使用 '<-' 運算子,例如 '{1}.{2} <- expression'。The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. '{1} <- expression'.
- 這個等號比較運算式的結果類型為 '{0}',已隱含捨棄。請考慮使用 'let' 將結果繫結至名稱,例如 'let result = expression'。若您要變動值,請將值標示為「可變動」,並使用 '<-' 運算子,例如 '{1} <- expression'。
+ 這個等號運算式的結果有 '{0}' 類型,會隱含略過。請考慮使用 'let' 將結果繫結到名稱,例如 'let result = expression'。若您想要變更值,請標示 'mutable' 值並使用 '<-' 運算子,例如 '{1} <- expression'。The result of this equality expression has type '{0}' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. '{1} <- expression'.
- 這個等號比較運算式的結果類型為 '{0}',已隱含捨棄。請考慮使用 'let' 將結果繫結至名稱,例如 'let result = expression'。若您要變動值,請使用 '<-' 運算子,例如 '{1} <- expression'。
+ 這個等號運算式的結果有 '{0}' 類型,會隱含捨棄。請考慮使用 'let' 將結果繫結到名稱,例如 'let result = expression'。若您想要變更值,則請使用 '<-' 運算子,例如 '{1} <- expression'。
@@ -1344,7 +1344,7 @@
Recursive references to the object being defined will be checked for initialization soundness at runtime through the use of a delayed reference. Consider placing self-references in members or within a trailing expression of the form '<ctor-expr> then <expr>'.
- 對所定義物件的遞迴參考,將在執行階段透過使用延遲參考來檢查初始化是否正確。請考慮將自我參考放在成員中或 '<ctor-expr> then <expr>' 形式的尾端運算式內。
+ 在執行階段,會透過使用延遲參考來檢查所定義物件的遞迴參考初始設定是否正確。請考慮在成員或 '<ctor-expr> then <expr>' 形式的後置運算式中放置自我參考。
@@ -1619,12 +1619,12 @@
symbol '{|'
- symbol '{|'
+ 符號 '{|'symbol '|}'
- symbol '|}'
+ 符號 '|}'
diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs
index 55dcac8ccc0..84a0dfbfd4b 100644
--- a/src/utils/CompilerLocationUtils.fs
+++ b/src/utils/CompilerLocationUtils.fs
@@ -12,7 +12,7 @@ open System.Runtime.InteropServices
module internal FSharpEnvironment =
/// The F# version reported in the banner
- let FSharpBannerVersion = "10.2.3 for F# 4.5"
+ let FSharpBannerVersion = "10.4.0 for F# 4.6"
let versionOf<'t> =
#if FX_RESHAPED_REFLECTION
diff --git a/src/utils/prim-lexing.fs b/src/utils/prim-lexing.fs
index 07859dbec71..cfac1ee7d4f 100644
--- a/src/utils/prim-lexing.fs
+++ b/src/utils/prim-lexing.fs
@@ -2,11 +2,109 @@
#nowarn "47" // recursive initialization of LexBuffer
+namespace FSharp.Compiler.Text
+
+open System
+open System.IO
+
+type ISourceText =
+
+ abstract Item : int -> char with get
+
+ abstract GetLineString : lineIndex: int -> string
+
+ abstract GetLineCount : unit -> int
+
+ abstract GetLastCharacterPosition : unit -> int * int
+
+ abstract GetSubTextString : start: int * length: int -> string
+
+ abstract SubTextEquals : target: string * startIndex: int -> bool
+
+ abstract Length : int
+
+ abstract ContentEquals : sourceText: ISourceText -> bool
+
+ abstract CopyTo : sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit
+
+[]
+type StringText(str: string) =
+
+ let getLines (str: string) =
+ use reader = new StringReader(str)
+ [|
+ let mutable line = reader.ReadLine()
+ while not (isNull line) do
+ yield line
+ line <- reader.ReadLine()
+ if str.EndsWith("\n", StringComparison.Ordinal) then
+ // last trailing space not returned
+ // http://stackoverflow.com/questions/19365404/stringreader-omits-trailing-linebreak
+ yield String.Empty
+ |]
+
+ let getLines =
+ // This requires allocating and getting all the lines.
+ // However, likely whoever is calling it is using a different implementation of ISourceText
+ // So, it's ok that we do this for now.
+ lazy getLines str
+
+ member __.String = str
+
+ override __.GetHashCode() = str.GetHashCode()
+ override __.Equals(obj: obj) = str.Equals(obj)
+
+ interface ISourceText with
+
+ member __.Item with get index = str.[index]
+
+ member __.GetLastCharacterPosition() =
+ let lines = getLines.Value
+ if lines.Length > 0 then
+ (lines.Length, lines.[lines.Length - 1].Length)
+ else
+ (0, 0)
+
+ member __.GetLineString(lineIndex) =
+ getLines.Value.[lineIndex]
+
+ member __.GetLineCount() = getLines.Value.Length
+
+ member __.GetSubTextString(start, length) =
+ str.Substring(start, length)
+
+ member __.SubTextEquals(target, startIndex) =
+ if startIndex < 0 || startIndex >= str.Length then
+ invalidArg "startIndex" "Out of range."
+
+ if String.IsNullOrEmpty(target) then
+ invalidArg "target" "Is null or empty."
+
+ let lastIndex = startIndex + target.Length
+ if lastIndex <= startIndex || lastIndex >= str.Length then
+ invalidArg "target" "Too big."
+
+ str.IndexOf(target, startIndex, target.Length) <> -1
+
+ member __.Length = str.Length
+
+ member this.ContentEquals(sourceText) =
+ match sourceText with
+ | :? StringText as sourceText when sourceText = this || sourceText.String = str -> true
+ | _ -> false
+
+ member __.CopyTo(sourceIndex, destination, destinationIndex, count) =
+ str.CopyTo(sourceIndex, destination, destinationIndex, count)
+
+module SourceText =
+
+ let ofString str = StringText(str) :> ISourceText
// NOTE: the code in this file is a drop-in replacement runtime for Lexing.fs from the FsLexYacc repository
namespace Internal.Utilities.Text.Lexing
open Microsoft.FSharp.Core
+ open FSharp.Compiler.Text
open Microsoft.FSharp.Collections
open System.Collections.Generic
@@ -168,7 +266,23 @@ namespace Internal.Utilities.Text.Lexing
LexBuffer<'Char>.FromArrayNoCopy buffer
// Important: This method takes ownership of the array
- static member FromChars (arr:char[]) = LexBuffer.FromArrayNoCopy arr
+ static member FromChars (arr:char[]) = LexBuffer.FromArrayNoCopy arr
+
+ static member FromSourceText (sourceText: ISourceText) =
+ let mutable currentSourceIndex = 0
+ LexBuffer.FromFunction(fun (chars, start, length) ->
+ let lengthToCopy =
+ if currentSourceIndex + length <= sourceText.Length then
+ length
+ else
+ sourceText.Length - currentSourceIndex
+
+ if lengthToCopy <= 0 then 0
+ else
+ sourceText.CopyTo(currentSourceIndex, chars, start, lengthToCopy)
+ currentSourceIndex <- currentSourceIndex + lengthToCopy
+ lengthToCopy
+ )
module GenericImplFragments =
let startInterpret(lexBuffer:LexBuffer) =
diff --git a/src/utils/prim-lexing.fsi b/src/utils/prim-lexing.fsi
index 9ee890b8d19..4b4fd587171 100644
--- a/src/utils/prim-lexing.fsi
+++ b/src/utils/prim-lexing.fsi
@@ -2,6 +2,33 @@
// LexBuffers are for use with automatically generated lexical analyzers,
// in particular those produced by 'fslex'.
+
+namespace FSharp.Compiler.Text
+
+type ISourceText =
+
+ abstract Item : int -> char with get
+
+ abstract GetLineString : lineIndex: int -> string
+
+ abstract GetLineCount : unit -> int
+
+ abstract GetLastCharacterPosition : unit -> int * int
+
+ abstract GetSubTextString : start: int * length: int -> string
+
+ abstract SubTextEquals : target: string * startIndex: int -> bool
+
+ abstract Length : int
+
+ abstract ContentEquals : sourceText: ISourceText -> bool
+
+ abstract CopyTo : sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit
+
+module SourceText =
+
+ val ofString : string -> ISourceText
+
//
// NOTE: the code in this file is a drop-in replacement runtime for Lexing.fsi from the FsLexYacc repository
// and is referenced by generated code for the three FsLex generated lexers in the F# compiler.
@@ -9,6 +36,7 @@
namespace Internal.Utilities.Text.Lexing
open System.Collections.Generic
+open FSharp.Compiler.Text
open Microsoft.FSharp.Core
open Microsoft.FSharp.Control
@@ -85,6 +113,8 @@ type internal LexBuffer<'Char> =
/// Create a lex buffer that reads character or byte inputs by using the given function.
static member FromFunction: ('Char[] * int * int -> int) -> LexBuffer<'Char>
+ /// Create a lex buffer backed by source text.
+ static member FromSourceText : ISourceText -> LexBuffer
/// The type of tables for an unicode lexer generated by fslex.exe.
[]
diff --git a/src/utils/reshapedmsbuild.fs b/src/utils/reshapedmsbuild.fs
index 571edd3ae4f..657b7ed0d94 100644
--- a/src/utils/reshapedmsbuild.fs
+++ b/src/utils/reshapedmsbuild.fs
@@ -72,7 +72,8 @@ module internal MsBuildAdapters =
open Microsoft.FSharp.Core.ReflectionAdapters
///
- /// Used to specify the targeted version of the .NET Framework for some methods of ToolLocationHelper.
+ /// Used to specify the targeted version of the .NET Framework for some methods of ToolLocationHelper. This is meant to mimic
+ /// the official version here: https://source.dot.net/#q=TargetDotNetFrameworkVersion.
///
type public TargetDotNetFrameworkVersion =
| Version11 = 0
@@ -89,7 +90,7 @@ module internal MsBuildAdapters =
| Version47 = 11
| Version471 = 12
| Version472 = 13
- | VersionLatest = 8 //TargetDotNetFrameworkVersion.Version461
+ | VersionLatest = 13 //TargetDotNetFrameworkVersion.Version472
///
/// Used to specify the targeted bitness of the .NET Framework for some methods of ToolLocationHelper
@@ -118,7 +119,11 @@ module internal ToolLocationHelper =
let dotNetFrameworkVersion451 = Version(4, 5, 1)
let dotNetFrameworkVersion452 = Version(4, 5, 2)
let dotNetFrameworkVersion46 = Version(4, 6)
- let dotNetFrameworkVersion461 = Version(4, 6, 1)
+ let dotNetFrameworkVersion461 = Version(4, 6, 1)
+ let dotNetFrameworkVersion462 = Version(4, 6, 2)
+ let dotNetFrameworkVersion47 = Version(4, 7)
+ let dotNetFrameworkVersion471 = Version(4, 7, 1)
+ let dotNetFrameworkVersion472 = Version(4, 7, 2)
// visual studio versions.
let visualStudioVersion100 = new Version(10, 0);
@@ -210,6 +215,10 @@ module internal ToolLocationHelper =
| TargetDotNetFrameworkVersion.Version452 -> dotNetFrameworkVersion452
| TargetDotNetFrameworkVersion.Version46 -> dotNetFrameworkVersion46
| TargetDotNetFrameworkVersion.Version461 -> dotNetFrameworkVersion461
+ | TargetDotNetFrameworkVersion.Version462 -> dotNetFrameworkVersion462
+ | TargetDotNetFrameworkVersion.Version47 -> dotNetFrameworkVersion47
+ | TargetDotNetFrameworkVersion.Version471 -> dotNetFrameworkVersion471
+ | TargetDotNetFrameworkVersion.Version472 -> dotNetFrameworkVersion472
| _ -> raise (getArgumentException version)
let complusInstallRoot = Environment.GetEnvironmentVariable("COMPLUS_INSTALLROOT")
@@ -749,6 +758,10 @@ module internal ToolLocationHelper =
CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion452 visualStudioVersion150 // v4.5.2
CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion46 visualStudioVersion140 // v4.6
CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion461 visualStudioVersion150 // v4.6.1
+ CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion462 visualStudioVersion150 // v4.6.2
+ CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion47 visualStudioVersion150 // v4.7
+ CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion471 visualStudioVersion150 // v4.7.1
+ CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion472 visualStudioVersion150 // v4.7.2
|]
array.ToDictionary(fun spec -> spec.Version)
diff --git a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj
index fa9b74422c4..cc43c8810f8 100644
--- a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj
+++ b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj
@@ -3,8 +3,8 @@
- net46;netcoreapp2.0
- netcoreapp2.0
+ net472;netcoreapp2.1
+ netcoreapp2.1Librarytruenunit
@@ -19,7 +19,7 @@
-
+
diff --git a/tests/FSharp.Compiler.UnitTests/Compiler.fs b/tests/FSharp.Compiler.UnitTests/Compiler.fs
new file mode 100644
index 00000000000..d85aef5b404
--- /dev/null
+++ b/tests/FSharp.Compiler.UnitTests/Compiler.fs
@@ -0,0 +1,59 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace FSharp.Compiler.UnitTests
+
+open System
+open FSharp.Compiler.Text
+open FSharp.Compiler.SourceCodeServices
+
+open NUnit.Framework
+
+[]
+module Compiler =
+
+ let checker = FSharpChecker.Create()
+
+ let private defaultProjectOptions =
+ {
+ ProjectFileName = "Z:\\test.fsproj"
+ ProjectId = None
+ SourceFiles = [|"test.fs"|]
+ OtherOptions = [||]
+ ReferencedProjects = [||]
+ IsIncompleteTypeCheckEnvironment = false
+ UseScriptResolutionRules = false
+ LoadTime = DateTime()
+ UnresolvedReferences = None
+ OriginalLoadReferences = []
+ ExtraProjectInfo = None
+ Stamp = None
+ }
+
+ let AssertPass (source: string) =
+ let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
+
+ Assert.True(parseResults.Errors.Length = 0, sprintf "Parse errors: %A" parseResults.Errors)
+
+ match fileAnswer with
+ | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted")
+ | FSharpCheckFileAnswer.Succeeded(typeCheckResults) ->
+
+ Assert.True(typeCheckResults.Errors.Length = 0, sprintf "Type Check errors: %A" typeCheckResults.Errors)
+
+ let AssertSingleErrorTypeCheck (source: string) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) =
+ let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
+
+ Assert.True(parseResults.Errors.Length = 0, sprintf "Parse errors: %A" parseResults.Errors)
+
+ match fileAnswer with
+ | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted")
+ | FSharpCheckFileAnswer.Succeeded(typeCheckResults) ->
+
+ Assert.True(typeCheckResults.Errors.Length = 1, sprintf "Expected one type check error: %A" typeCheckResults.Errors)
+ typeCheckResults.Errors
+ |> Array.iter (fun info ->
+ Assert.AreEqual(FSharpErrorSeverity.Error, info.Severity)
+ Assert.AreEqual(expectedErrorNumber, info.ErrorNumber, "expectedErrorNumber")
+ Assert.AreEqual(expectedErrorRange, (info.StartLineAlternate, info.StartColumn, info.EndLineAlternate, info.EndColumn), "expectedErrorRange")
+ Assert.AreEqual(expectedErrorMsg, info.Message, "expectedErrorMsg")
+ )
\ No newline at end of file
diff --git a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj
index a1acb6f9fda..97ac752e376 100644
--- a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj
+++ b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj
@@ -3,8 +3,8 @@
- net46;netcoreapp2.0
- netcoreapp2.0
+ net472;netcoreapp2.1
+ netcoreapp2.1Librarytruenunit
@@ -17,8 +17,11 @@
+
+
+
diff --git a/tests/FSharp.Compiler.UnitTests/ILHelpers.fs b/tests/FSharp.Compiler.UnitTests/ILHelpers.fs
index 6dd894954bc..06c3794f74b 100644
--- a/tests/FSharp.Compiler.UnitTests/ILHelpers.fs
+++ b/tests/FSharp.Compiler.UnitTests/ILHelpers.fs
@@ -10,13 +10,14 @@ open NUnit.Framework
open FSharp.Compiler.SourceCodeServices
+[]
module ILChecker =
- let checker = FSharpChecker.Create()
+ let checker = Compiler.checker
let private (++) a b = Path.Combine(a,b)
- let private getfullpath workDir path =
+ let private getfullpath workDir (path: string) =
let rooted =
if Path.IsPathRooted(path) then path
else Path.Combine(workDir, path)
diff --git a/tests/FSharp.Compiler.UnitTests/Language/AnonRecords.fs b/tests/FSharp.Compiler.UnitTests/Language/AnonRecords.fs
new file mode 100644
index 00000000000..21c48417442
--- /dev/null
+++ b/tests/FSharp.Compiler.UnitTests/Language/AnonRecords.fs
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace FSharp.Compiler.UnitTests
+
+open NUnit.Framework
+
+[]
+module AnonRecords =
+
+#if !NETCOREAPP
+ []
+#endif
+ let NotStructConstraintPass() =
+ Compiler.AssertPass
+ """
+type RefClass<'a when 'a : not struct>() = class end
+let rAnon = RefClass<{| R: int |}>()
+ """
+
+#if !NETCOREAPP
+ []
+#endif
+ let StructConstraintPass() =
+ Compiler.AssertPass
+ """
+type StructClass<'a when 'a : struct>() = class end
+let sAnon = StructClass()
+ """
+
+#if !NETCOREAPP
+ []
+#endif
+ let NotStructConstraintFail() =
+ Compiler.AssertSingleErrorTypeCheck
+ """
+ type RefClass<'a when 'a : not struct>() = class end
+ let rAnon = RefClass()
+ """
+ 1
+ (3, 16, 3, 45)
+ "A generic construct requires that the type 'struct {|R : int|}' have reference semantics, but it does not, i.e. it is a struct"
+
+#if !NETCOREAPP
+ []
+#endif
+ let StructConstraintFail() =
+ Compiler.AssertSingleErrorTypeCheck
+ """
+type StructClass<'a when 'a : struct>() = class end
+let sAnon = StructClass<{| S: int |}>()
+ """
+ 1
+ (3, 12, 3, 37)
+ "A generic construct requires that the type '{|S : int|}' is a CLI or F# struct type"
+
diff --git a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs
index 1dbc2d19a1d..84d05f43e32 100644
--- a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs
+++ b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs
@@ -93,7 +93,7 @@ module TypeProviderDesignTimeComponentLoading =
let ``check tooling paths for type provider design time component loading`` () =
let expected =
[
-#if NET46 // only available on net46
+#if NET472 // only available on net472
Path.Combine("typeproviders", "fsharp41", "net461")
Path.Combine("tools", "fsharp41", "net461")
Path.Combine("typeproviders", "fsharp41", "net452")
diff --git a/tests/FSharp.Compiler.UnitTests/SourceTextTests.fs b/tests/FSharp.Compiler.UnitTests/SourceTextTests.fs
new file mode 100644
index 00000000000..e32647195b0
--- /dev/null
+++ b/tests/FSharp.Compiler.UnitTests/SourceTextTests.fs
@@ -0,0 +1,43 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace FSharp.Compiler.UnitTests
+
+open System
+open NUnit.Framework
+
+open FSharp.Compiler.Text
+
+[]
+module SourceTextTests =
+
+ []
+ let StringText () =
+ let text = "test\ntest2\r\ntest3\n\ntest4\ntest5\rtest6\n"
+ let sourceText = SourceText.ofString text
+
+ Assert.AreEqual("test", sourceText.GetLineString(0))
+ Assert.AreEqual("test2", sourceText.GetLineString(1))
+ Assert.AreEqual("test3", sourceText.GetLineString(2))
+ Assert.AreEqual("", sourceText.GetLineString(3))
+ Assert.AreEqual("test4", sourceText.GetLineString(4))
+ Assert.AreEqual("test5", sourceText.GetLineString(5))
+ Assert.AreEqual("test6", sourceText.GetLineString(6))
+ Assert.AreEqual("", sourceText.GetLineString(7))
+ Assert.AreEqual(8, sourceText.GetLineCount())
+
+ let (count, length) = sourceText.GetLastCharacterPosition()
+ Assert.AreEqual(8, count)
+ Assert.AreEqual(0, length)
+
+ Assert.True(sourceText.SubTextEquals("test", 0))
+ Assert.True(sourceText.SubTextEquals("test2", 5))
+ Assert.True(sourceText.SubTextEquals("test3", 12))
+
+ Assert.Throws(fun () -> sourceText.SubTextEquals("test", -1) |> ignore) |> ignore
+ Assert.Throws(fun () -> sourceText.SubTextEquals("test", text.Length) |> ignore) |> ignore
+ Assert.Throws(fun () -> sourceText.SubTextEquals("", 0) |> ignore) |> ignore
+ Assert.Throws(fun () -> sourceText.SubTextEquals(text + text, 0) |> ignore) |> ignore
+
+ Assert.False(sourceText.SubTextEquals("test", 1))
+ Assert.False(sourceText.SubTextEquals("test", 4))
+ Assert.False(sourceText.SubTextEquals("test", 11))
\ No newline at end of file
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj
index 31351eca6b2..9724cf930c3 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj
@@ -3,8 +3,8 @@
- net46;netcoreapp2.0
- netcoreapp2.0
+ net472;netcoreapp2.1
+ netcoreapp2.1LibraryFSharp.Core.UnitTests
diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj
index 057ff6af08f..9d505e91cf6 100644
--- a/tests/fsharp/FSharpSuite.Tests.fsproj
+++ b/tests/fsharp/FSharpSuite.Tests.fsproj
@@ -2,8 +2,8 @@
- net46;netcoreapp2.0
- netcoreapp2.0
+ net472;netcoreapp2.1
+ netcoreapp2.1win-x86;win-x64$(AssetTargetFallback);portable-net45+win8+wp8+wpa81true
diff --git a/tests/fsharp/SDKTests/tests/Test.props b/tests/fsharp/SDKTests/tests/Test.props
index b4665ec5749..8d29b210bfb 100644
--- a/tests/fsharp/SDKTests/tests/Test.props
+++ b/tests/fsharp/SDKTests/tests/Test.props
@@ -2,12 +2,12 @@
- net46
- <_TargetFrameworkVersionWithoutV Condition="'$(_TargetFrameworkVersionWithoutV)' == ''">4.6
+ net472
+ <_TargetFrameworkVersionWithoutV Condition="'$(_TargetFrameworkVersionWithoutV)' == ''">4.7.2
.NETFrameworkRelease
- $(MSBuildThisFileDirectory)..\..\..\..\artifacts\bin\FSharp.Build\$(Configuration)\net46
+ $(MSBuildThisFileDirectory)..\..\..\..\artifacts\bin\FSharp.Build\$(Configuration)\net472AnyCPU
diff --git a/tests/fsharp/core/.gitignore b/tests/fsharp/core/.gitignore
index 49d72838fd2..03d68f68b49 100644
--- a/tests/fsharp/core/.gitignore
+++ b/tests/fsharp/core/.gitignore
@@ -25,7 +25,7 @@ printing/z.output.test.*.txt
printing/z.raw.output.test.*.txt
printing/z.output.test.*.diff
-quotes/cslib.dll
+cslib*.dll
parsing/crlf.dll
parsing/crlf.pdb
diff --git a/tests/fsharp/core/byrefs/test.fsx b/tests/fsharp/core/byrefs/test.fsx
index 0eba848ec2f..5583cfa7c72 100644
--- a/tests/fsharp/core/byrefs/test.fsx
+++ b/tests/fsharp/core/byrefs/test.fsx
@@ -1491,7 +1491,15 @@ module ByrefReturnMemberTests =
module OutRefToInRefClassMethod2 =
type C() =
static member f1 (x: inref<'T>) = 1
- let f2 (x: outref<'T>) = C.f1(&x)
+ let f2 (x: outref<'T>) = C.f1(&x)
+
+ module TestStructRecord =
+ []
+ type AnItem =
+ { Link: string }
+
+ let link item =
+ { item with Link = "" }
let aa =
if !failures then (stdout.WriteLine "Test Failed"; exit 1)
diff --git a/tests/fsharp/single-test.fs b/tests/fsharp/single-test.fs
index b0a24ccb8e9..09559dc7aee 100644
--- a/tests/fsharp/single-test.fs
+++ b/tests/fsharp/single-test.fs
@@ -208,8 +208,10 @@ let singleTestBuildAndRunCore cfg copyFiles p =
let overridesFileName = Path.Combine(directory, "Directory.Overrides.targets")
let projectFileName = Path.Combine(directory, Path.GetRandomFileName() + ".fsproj")
try
+ // Clean up directory
Directory.CreateDirectory(directory) |> ignore
copyFilesToDest cfg.Directory directory
+ try File.Delete(Path.Combine(directory, "FSharp.Core.dll")) with _ -> ()
emitFile targetsFileName targetsBody
emitFile overridesFileName overridesBody
if outputType = OutputType.Exe then
diff --git a/tests/fsharp/test-framework.fs b/tests/fsharp/test-framework.fs
index 1e40e0bd3ea..b7a18df6f20 100644
--- a/tests/fsharp/test-framework.fs
+++ b/tests/fsharp/test-framework.fs
@@ -156,12 +156,12 @@ let config configurationName envVars =
let SCRIPT_ROOT = __SOURCE_DIRECTORY__
let packagesDir = Environment.GetEnvironmentVariable("USERPROFILE") ++ ".nuget" ++ "packages"
-#if NET46
- let fscArchitecture = "net46"
- let fsiArchitecture = "net46"
+#if NET472
+ let fscArchitecture = "net472"
+ let fsiArchitecture = "net472"
let fsharpCoreArchitecture = "net45"
- let fsharpBuildArchitecture = "net46"
- let fsharpCompilerInteractiveSettingsArchitecture = "net46"
+ let fsharpBuildArchitecture = "net472"
+ let fsharpCompilerInteractiveSettingsArchitecture = "net472"
#else
let fscArchitecture = "netcoreapp2.1"
let fsiArchitecture = "netcoreapp2.1"
@@ -180,7 +180,7 @@ let config configurationName envVars =
let CSC = requireFile (packagesDir ++ "Microsoft.Net.Compilers" ++ "2.7.0" ++ "tools" ++ "csc.exe")
let ILDASM = requireFile (packagesDir ++ ("runtime.win-" + architectureMoniker + ".Microsoft.NETCore.ILDAsm") ++ "2.0.3" ++ "runtimes" ++ ("win-" + architectureMoniker) ++ "native" ++ "ildasm.exe")
let coreclrdll = requireFile (packagesDir ++ ("runtime.win-" + architectureMoniker + ".Microsoft.NETCore.Runtime.CoreCLR") ++ "2.0.3" ++ "runtimes" ++ ("win-" + architectureMoniker) ++ "native" ++ "coreclr.dll")
- let PEVERIFY = requireFile (artifactsBinPath ++ "PEVerify" ++ configurationName ++ "net46" ++ "PEVerify.exe")
+ let PEVERIFY = requireFile (artifactsBinPath ++ "PEVerify" ++ configurationName ++ "net472" ++ "PEVerify.exe")
let FSI_FOR_SCRIPTS = artifactsBinPath ++ "fsi" ++ configurationName ++ fsiArchitecture ++ "fsi.exe"
let FSharpBuild = requireFile (artifactsBinPath ++ "FSharp.Build" ++ configurationName ++ fsharpBuildArchitecture ++ "FSharp.Build.dll")
let FSharpCompilerInteractiveSettings = requireFile (artifactsBinPath ++ "FSharp.Compiler.Interactive.Settings" ++ configurationName ++ fsharpCompilerInteractiveSettingsArchitecture ++ "FSharp.Compiler.Interactive.Settings.dll")
@@ -194,7 +194,7 @@ let config configurationName envVars =
let FSI = requireFile (FSI_FOR_SCRIPTS)
#if !FSHARP_SUITE_DRIVES_CORECLR_TESTS
- let FSIANYCPU = requireFile (artifactsBinPath ++ "fsiAnyCpu" ++ configurationName ++ "net46" ++ "fsiAnyCpu.exe")
+ let FSIANYCPU = requireFile (artifactsBinPath ++ "fsiAnyCpu" ++ configurationName ++ "net472" ++ "fsiAnyCpu.exe")
#endif
let FSC = requireFile (artifactsBinPath ++ "fsc" ++ configurationName ++ fscArchitecture ++ "fsc.exe")
let FSCOREDLLPATH = requireFile (artifactsBinPath ++ "FSharp.Core" ++ configurationName ++ fsharpCoreArchitecture ++ "FSharp.Core.dll")
diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs
index b109b9a8956..51c4638dfb2 100644
--- a/tests/fsharp/tests.fs
+++ b/tests/fsharp/tests.fs
@@ -414,7 +414,6 @@ module CoreTests =
fsc cfg "%s -a -o:lib.dll" cfg.fsc_flags ["lib.fs"]
- copySystemValueTuple cfg
peverify cfg "lib.dll"
fsc cfg "%s -r:lib.dll" cfg.fsc_flags ["test.fsx"]
@@ -567,8 +566,6 @@ module CoreTests =
fsc cfg "%s -a -o:lib.dll -g" cfg.fsc_flags ["lib.fs"]
- copySystemValueTuple cfg
-
peverify cfg "lib.dll"
csc cfg """/nologo /target:library /r:"%s" /r:lib.dll /out:lib2.dll /langversion:7.2""" cfg.FSCOREDLLPATH ["lib2.cs"]
@@ -873,12 +870,11 @@ module CoreTests =
let quotes () =
let cfg = testConfig "core/quotes"
+
csc cfg """/nologo /target:library /out:cslib.dll""" ["cslib.cs"]
fsc cfg "%s -o:test.exe -r cslib.dll -g" cfg.fsc_flags ["test.fsx"]
- copySystemValueTuple cfg
-
peverify cfg "test.exe"
begin
@@ -2045,7 +2041,6 @@ module TypecheckTests =
let ``sigs pos27`` () =
let cfg = testConfig "typecheck/sigs"
fsc cfg "%s --target:exe -o:pos27.exe" cfg.fsc_flags ["pos27.fs"]
- copySystemValueTuple cfg
peverify cfg "pos27.exe"
[]
@@ -2078,6 +2073,12 @@ module TypecheckTests =
fsc cfg "%s --target:exe -o:pos31.exe --warnaserror" cfg.fsc_flags ["pos31.fsi"; "pos31.fs"]
peverify cfg "pos31.exe"
+ []
+ let ``sigs pos32`` () =
+ let cfg = testConfig "typecheck/sigs"
+ fsc cfg "%s --target:library -o:pos32.dll --warnaserror" cfg.fsc_flags ["pos32.fs"]
+ peverify cfg "pos32.dll"
+
[]
let ``sigs pos23`` () =
let cfg = testConfig "typecheck/sigs"
@@ -2551,15 +2552,21 @@ module TypecheckTests =
[]
let ``type check neg109`` () = singleNegTest (testConfig "typecheck/sigs") "neg109"
- []
+ []
let ``type check neg110`` () = singleNegTest (testConfig "typecheck/sigs") "neg110"
+ []
+ let ``type check neg111`` () = singleNegTest (testConfig "typecheck/sigs") "neg111"
+
[]
let ``type check neg113`` () = singleNegTest (testConfig "typecheck/sigs") "neg113"
[]
let ``type check neg114`` () = singleNegTest (testConfig "typecheck/sigs") "neg114"
+ []
+ let ``type check neg115`` () = singleNegTest (testConfig "typecheck/sigs") "neg115"
+
[]
let ``type check neg_anon_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_anon_1"
@@ -2704,7 +2711,7 @@ open System.Runtime.InteropServices
fv.LegalTrademarks |> Assert.areEqual "CST \u2122"
#endif
-#if NET46
+#if NET472
module ProductVersionTest =
let informationalVersionAttrName = typeof.FullName
diff --git a/tests/fsharp/typecheck/sigs/neg108.fs b/tests/fsharp/typecheck/sigs/neg108.fs
index d356032b7d6..ae41ec73322 100644
--- a/tests/fsharp/typecheck/sigs/neg108.fs
+++ b/tests/fsharp/typecheck/sigs/neg108.fs
@@ -2,6 +2,3 @@ module Neg108
type Test = Test of Unit
let test : Test = Test
-
-
-
diff --git a/tests/fsharp/typecheck/sigs/neg109.fs b/tests/fsharp/typecheck/sigs/neg109.fs
index 300fc55579c..ba35fd41796 100644
--- a/tests/fsharp/typecheck/sigs/neg109.fs
+++ b/tests/fsharp/typecheck/sigs/neg109.fs
@@ -1,4 +1,4 @@
-module rec Neg109
+module Neg109
// check that a decent error is given when a type that does not inherit from System.Attribute is used as attribute
type NotAttribute() = class end
diff --git a/tests/fsharp/typecheck/sigs/neg110.bsl b/tests/fsharp/typecheck/sigs/neg110.bsl
index 084a852ba7b..60cae991283 100644
--- a/tests/fsharp/typecheck/sigs/neg110.bsl
+++ b/tests/fsharp/typecheck/sigs/neg110.bsl
@@ -1,14 +1,2 @@
-neg110.fs(2,552,2,557): typecheck error FS0039: The type 'fail1' is not defined.
-
-neg110.fs(2,552,2,557): typecheck error FS0039: The type 'fail1' is not defined.
-
-neg110.fs(3,624,3,629): typecheck error FS0039: The value or constructor 'fail2' is not defined. Maybe you want one of the following:
-
- Failure
-
- failwith
-
- failwithf
-
-neg110.fs(5,538,5,540): typecheck error FS0003: This value is not a function and cannot be applied.
+neg110.fs(5,3,5,15): typecheck error FS3242: This type does not inherit Attribute, it will not work correctly with other .NET languages.
diff --git a/tests/fsharp/typecheck/sigs/neg110.fs b/tests/fsharp/typecheck/sigs/neg110.fs
index 109f5de8402..46bdd2e9c1d 100644
--- a/tests/fsharp/typecheck/sigs/neg110.fs
+++ b/tests/fsharp/typecheck/sigs/neg110.fs
@@ -1,5 +1,8 @@
-module Neg110
-type TestDU = | A1 of string | A2 of string | A3 of string | A4 of string | A5 of string | A6 of string | A7 of string | A8 of string | A9 of string | A10 of string | A11 of string | A12 | A13 | A14 | A15 | A16 | A17 | A18 | A19 | A20 | A21 | A22 | A23 | A24 | A25 | A26 | A27 | A28 | A29 | A30 | A31 | A32 | A33 | A34 | A35 | A36 | A37 | A38 | A39 | A40 | A41 | A42 | A43 | A44 | A45 | A46 | A47 | A48 | A49 | A50 | A51 | A52 | A53 | A54 | A55 | A56 | A57 | A58 | A59 | A60 | A61 | A62 | A63 | A64 | A65 | A66 | A67AAAAAAAAAAAAAAAAAAAAAAAA of string fail1
-type TestRec = { Naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee : string; Name2 : string } member x.P = fail2
-module SomeRidiculouslyLongNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee =
- let testFunctionNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee () = () fail4
+module rec Neg110
+// check that a decent error is given when a type that does not inherit from System.Attribute is used as attribute
+type NotAttribute() = class end
+
+[]
+type T() = class end
+
+// note this test shouldn't contain any other code
diff --git a/tests/fsharp/typecheck/sigs/neg111.bsl b/tests/fsharp/typecheck/sigs/neg111.bsl
new file mode 100644
index 00000000000..afe770b8fdc
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg111.bsl
@@ -0,0 +1,14 @@
+
+neg111.fs(2,552,2,557): typecheck error FS0039: The type 'fail1' is not defined.
+
+neg111.fs(2,552,2,557): typecheck error FS0039: The type 'fail1' is not defined.
+
+neg111.fs(3,624,3,629): typecheck error FS0039: The value or constructor 'fail2' is not defined. Maybe you want one of the following:
+
+ Failure
+
+ failwith
+
+ failwithf
+
+neg111.fs(5,538,5,540): typecheck error FS0003: This value is not a function and cannot be applied.
diff --git a/tests/fsharp/typecheck/sigs/neg111.fs b/tests/fsharp/typecheck/sigs/neg111.fs
new file mode 100644
index 00000000000..02ad748a1dc
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg111.fs
@@ -0,0 +1,5 @@
+module Neg111
+type TestDU = | A1 of string | A2 of string | A3 of string | A4 of string | A5 of string | A6 of string | A7 of string | A8 of string | A9 of string | A10 of string | A11 of string | A12 | A13 | A14 | A15 | A16 | A17 | A18 | A19 | A20 | A21 | A22 | A23 | A24 | A25 | A26 | A27 | A28 | A29 | A30 | A31 | A32 | A33 | A34 | A35 | A36 | A37 | A38 | A39 | A40 | A41 | A42 | A43 | A44 | A45 | A46 | A47 | A48 | A49 | A50 | A51 | A52 | A53 | A54 | A55 | A56 | A57 | A58 | A59 | A60 | A61 | A62 | A63 | A64 | A65 | A66 | A67AAAAAAAAAAAAAAAAAAAAAAAA of string fail1
+type TestRec = { Naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee : string; Name2 : string } member x.P = fail2
+module SomeRidiculouslyLongNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee =
+ let testFunctionNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee () = () fail4
diff --git a/tests/fsharp/typecheck/sigs/neg115.bsl b/tests/fsharp/typecheck/sigs/neg115.bsl
new file mode 100644
index 00000000000..02cc368dae7
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg115.bsl
@@ -0,0 +1,2 @@
+
+neg115.fs(8,30,8,34): typecheck error FS0001: Expecting a type supporting the operator 'get_Item1' but given a tuple type
diff --git a/tests/fsharp/typecheck/sigs/neg115.fs b/tests/fsharp/typecheck/sigs/neg115.fs
new file mode 100644
index 00000000000..b99378cae23
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg115.fs
@@ -0,0 +1,9 @@
+
+module M
+
+ let inline test (arg: ^T when ^T : struct) =
+ (^T : (member Item1: _) (arg))
+
+ let f () =
+ let a = test struct (1, 2)
+ ()
\ No newline at end of file
diff --git a/tests/fsharp/typecheck/sigs/pos32.fs b/tests/fsharp/typecheck/sigs/pos32.fs
new file mode 100644
index 00000000000..2df8deebdab
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/pos32.fs
@@ -0,0 +1,9 @@
+module Pos32
+
+ let inline test (arg: ^T when ^T : struct) =
+ ()
+
+ let f () =
+ let a = test struct (1, 2)
+ ()
+
diff --git a/tests/fsharpqa/Source/Conformance/PatternMatching/Named/env.lst b/tests/fsharpqa/Source/Conformance/PatternMatching/Named/env.lst
index 63f5a897cb7..f88ce34f50b 100644
--- a/tests/fsharpqa/Source/Conformance/PatternMatching/Named/env.lst
+++ b/tests/fsharpqa/Source/Conformance/PatternMatching/Named/env.lst
@@ -21,7 +21,7 @@
SOURCE=activePatterns07.fs # activePatterns07.fs
SOURCE=activePatterns08.fs # activePatterns08.fs
- SOURCE=AsHighOrderFunc01.fs # AsHighOrderFunc01.fs
+# SOURCE=AsHighOrderFunc01.fs # AsHighOrderFunc01.fs ### FAils on coreclr 2.1.500
SOURCE=RecursiveActivePats.fs # RecursiveActivePats.fs
SOURCE=E_ActivePatterns01.fs # E_ActivePatterns01.fs
diff --git a/tests/fsharpqa/Source/run.pl b/tests/fsharpqa/Source/run.pl
index 751bcdd8935..de780ea0c86 100644
--- a/tests/fsharpqa/Source/run.pl
+++ b/tests/fsharpqa/Source/run.pl
@@ -267,7 +267,7 @@
my $scriptPath = dirname(__FILE__);
my @configurations = ("Debug", "Release");
foreach my $config (@configurations) {
- $PEVERIFY = "$scriptPath\\..\\..\\..\\artifacts\\bin\\PEVerify\\$config\\net46\\PEVerify.exe";
+ $PEVERIFY = "$scriptPath\\..\\..\\..\\artifacts\\bin\\PEVerify\\$config\\net472\\PEVerify.exe";
if (-e $PEVERIFY) {
$ENV{PEVERIFY} = $PEVERIFY;
last;
diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
index 915c0c9e106..f89e94f3e05 100644
--- a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
+++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
@@ -2,7 +2,7 @@
- net46
+ net472Exetruetrue
@@ -22,8 +22,4 @@
-
-
-
-
diff --git a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj
index 9b2a2104693..47555139254 100644
--- a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj
+++ b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj
@@ -2,7 +2,7 @@
Exe
- net46
+ net472$(NoWarn);1591
diff --git a/tests/projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0/Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj b/tests/projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0/Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj
index c02a1e398db..5581f3419b8 100644
--- a/tests/projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0/Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj
+++ b/tests/projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0/Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj
@@ -1,6 +1,7 @@
netstandard2.0
+ 4.6.*4.5.*
diff --git a/tests/projects/vs2019slow/vs2019slow.sln b/tests/projects/vs2019slow/vs2019slow.sln
new file mode 100644
index 00000000000..4b4abcf533b
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28606.126
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "vs2019slow", "vs2019slow\vs2019slow.fsproj", "{F7897B1F-2B0E-4F31-B71E-CB80F16354FF}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F7897B1F-2B0E-4F31-B71E-CB80F16354FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F7897B1F-2B0E-4F31-B71E-CB80F16354FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F7897B1F-2B0E-4F31-B71E-CB80F16354FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F7897B1F-2B0E-4F31-B71E-CB80F16354FF}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {9AD6A9F5-C754-443F-8C47-5DA32634D93A}
+ EndGlobalSection
+EndGlobal
diff --git a/tests/projects/vs2019slow/vs2019slow/App.config b/tests/projects/vs2019slow/vs2019slow/App.config
new file mode 100644
index 00000000000..56efbc7b5f1
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/projects/vs2019slow/vs2019slow/AssemblyInfo.fs b/tests/projects/vs2019slow/vs2019slow/AssemblyInfo.fs
new file mode 100644
index 00000000000..8cc011ac0bb
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/AssemblyInfo.fs
@@ -0,0 +1,41 @@
+namespace vs2019slow.AssemblyInfo
+
+open System.Reflection
+open System.Runtime.CompilerServices
+open System.Runtime.InteropServices
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+[]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// []
+[]
+[]
+
+do
+ ()
\ No newline at end of file
diff --git a/tests/projects/vs2019slow/vs2019slow/Program.fs b/tests/projects/vs2019slow/vs2019slow/Program.fs
new file mode 100644
index 00000000000..2bcf7f98990
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/Program.fs
@@ -0,0 +1,7 @@
+// Learn more about F# at http://fsharp.org
+// See the 'F# Tutorial' project for more help.
+
+[]
+let main argv =
+ printfn "%A" argv
+ 0 // return an integer exit code
diff --git a/tests/projects/vs2019slow/vs2019slow/Script.fsx b/tests/projects/vs2019slow/vs2019slow/Script.fsx
new file mode 100644
index 00000000000..0598d282d5b
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/Script.fsx
@@ -0,0 +1,18 @@
+#load "Script1.fsx"
+#load "Script2.fsx"
+#load "Script3.fsx"
+#load "Script4.fsx"
+#load "Script5.fsx"
+
+//Type some code here
+
+
+Script1.T1
+
+Script3.T11
+
+Script4.
+
+Script2.T100
+
+Script4.T11
\ No newline at end of file
diff --git a/tests/projects/vs2019slow/vs2019slow/Script1.fsx b/tests/projects/vs2019slow/vs2019slow/Script1.fsx
new file mode 100644
index 00000000000..d80c4139105
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/Script1.fsx
@@ -0,0 +1,1103 @@
+type T2331 = T1vve
+type T2 = T2
+type T3 = T3
+type T4 = T4
+type T5 = T5
+type T6 = T6
+type T7 = T7
+type T8 = T8
+type T9 = T9
+type T10 = T10
+type T11 = T11
+type T12 = T12
+type T13 = T13
+type T14 = T14
+type T15 = T15
+type T16 = T16
+type T17 = T17
+type T18 = T18
+type T19 = T19
+type T20 = T20
+type T21 = T21
+type T22 = T22
+type T23 = T23
+type T24 = T24
+type T25 = T25
+type T26 = T26
+type T27 = T27
+type T28 = T28
+type T29 = T29
+type T30 = T30
+type T31 = T31
+type T32 = T32
+type T33 = T33
+type T34 = T34
+type T35 = T35
+type T36 = T36
+type T37 = T37
+type T38 = T38
+type T39 = T39
+type T40 = T40
+type T41 = T41
+type T42 = T42
+type T43 = T43
+type T44 = T44
+type T45 = T45
+type T46 = T46
+type T47 = T47
+type T48 = T48
+type T49 = T49
+type T50 = T50
+type T51 = T51
+type T52 = T52
+type T53 = T53
+type T54 = T54
+type T55 = T55
+type T56 = T56
+type T57 = T57
+type T58 = T58
+type T59 = T59
+type T60 = T60
+type T61 = T61
+type T62 = T62
+type T63 = T63
+type T64 = T64
+type T65 = T65
+type T66 = T66
+type T67 = T67
+type T68 = T68
+type T69 = T69
+type T70 = T70
+type T71 = T71
+type T72 = T72
+type T73 = T73
+type T74 = T74
+type T75 = T75
+type T76 = T76
+type T77 = T77
+type T78 = T78
+type T79 = T79
+type T80 = T80
+type T81 = T81
+type T82 = T82
+type T83 = T83
+type T84 = T84
+type T85 = T85
+type T86 = T86
+type T87 = T87
+type T88 = T88
+type T89 = T89
+type T90 = T90
+type T91 = T91
+type T92 = T92
+type T93 = T93
+type T94 = T94
+type T95 = T95
+type T96 = T96
+type T97 = T97
+type T98 = T98
+type T99 = T99
+type T100 = T100
+
+
+type TT0 = TT0
+type TT1 = TT1
+type TT2 = TT2
+type TT3 = TT3
+type TT4 = TT4
+type TT5 = TT5
+type TT6 = TT6
+type TT7 = TT7
+type TT8 = TT8
+type TT9 = TT9
+type TT10 = TT10
+type TT11 = TT11
+type TT12 = TT12
+type TT13 = TT13
+type TT14 = TT14
+type TT15 = TT15
+type TT16 = TT16
+type TT17 = TT17
+type TT18 = TT18
+type TT19 = TT19
+type TT20 = TT20
+type TT21 = TT21
+type TT22 = TT22
+type TT23 = TT23
+type TT24 = TT24
+type TT25 = TT25
+type TT26 = TT26
+type TT27 = TT27
+type TT28 = TT28
+type TT29 = TT29
+type TT30 = TT30
+type TT31 = TT31
+type TT32 = TT32
+type TT33 = TT33
+type TT34 = TT34
+type TT35 = TT35
+type TT36 = TT36
+type TT37 = TT37
+type TT38 = TT38
+type TT39 = TT39
+type TT40 = TT40
+type TT41 = TT41
+type TT42 = TT42
+type TT43 = TT43
+type TT44 = TT44
+type TT45 = TT45
+type TT46 = TT46
+type TT47 = TT47
+type TT48 = TT48
+type TT49 = TT49
+type TT50 = TT50
+type TT51 = TT51
+type TT52 = TT52
+type TT53 = TT53
+type TT54 = TT54
+type TT55 = TT55
+type TT56 = TT56
+type TT57 = TT57
+type TT58 = TT58
+type TT59 = TT59
+type TT60 = TT60
+type TT61 = TT61
+type TT62 = TT62
+type TT63 = TT63
+type TT64 = TT64
+type TT65 = TT65
+type TT66 = TT66
+type TT67 = TT67
+type TT68 = TT68
+type TT69 = TT69
+type TT70 = TT70
+type TT71 = TT71
+type TT72 = TT72
+type TT73 = TT73
+type TT74 = TT74
+type TT75 = TT75
+type TT76 = TT76
+type TT77 = TT77
+type TT78 = TT78
+type TT79 = TT79
+type TT80 = TT80
+type TT81 = TT81
+type TT82 = TT82
+type TT83 = TT83
+type TT84 = TT84
+type TT85 = TT85
+type TT86 = TT86
+type TT87 = TT87
+type TT88 = TT88
+type TT89 = TT89
+type TT90 = TT90
+type TT91 = TT91
+type TT92 = TT92
+type TT93 = TT93
+type TT94 = TT94
+type TT95 = TT95
+type TT96 = TT96
+type TT97 = TT97
+type TT98 = TT98
+type TT99 = TT99
+type TT100 = TT100
+type TT101 = TT101
+type TT102 = TT102
+type TT103 = TT103
+type TT104 = TT104
+type TT105 = TT105
+type TT106 = TT106
+type TT107 = TT107
+type TT108 = TT108
+type TT109 = TT109
+type TT110 = TT110
+type TT111 = TT111
+type TT112 = TT112
+type TT113 = TT113
+type TT114 = TT114
+type TT115 = TT115
+type TT116 = TT116
+type TT117 = TT117
+type TT118 = TT118
+type TT119 = TT119
+type TT120 = TT120
+type TT121 = TT121
+type TT122 = TT122
+type TT123 = TT123
+type TT124 = TT124
+type TT125 = TT125
+type TT126 = TT126
+type TT127 = TT127
+type TT128 = TT128
+type TT129 = TT129
+type TT130 = TT130
+type TT131 = TT131
+type TT132 = TT132
+type TT133 = TT133
+type TT134 = TT134
+type TT135 = TT135
+type TT136 = TT136
+type TT137 = TT137
+type TT138 = TT138
+type TT139 = TT139
+type TT140 = TT140
+type TT141 = TT141
+type TT142 = TT142
+type TT143 = TT143
+type TT144 = TT144
+type TT145 = TT145
+type TT146 = TT146
+type TT147 = TT147
+type TT148 = TT148
+type TT149 = TT149
+type TT150 = TT150
+type TT151 = TT151
+type TT152 = TT152
+type TT153 = TT153
+type TT154 = TT154
+type TT155 = TT155
+type TT156 = TT156
+type TT157 = TT157
+type TT158 = TT158
+type TT159 = TT159
+type TT160 = TT160
+type TT161 = TT161
+type TT162 = TT162
+type TT163 = TT163
+type TT164 = TT164
+type TT165 = TT165
+type TT166 = TT166
+type TT167 = TT167
+type TT168 = TT168
+type TT169 = TT169
+type TT170 = TT170
+type TT171 = TT171
+type TT172 = TT172
+type TT173 = TT173
+type TT174 = TT174
+type TT175 = TT175
+type TT176 = TT176
+type TT177 = TT177
+type TT178 = TT178
+type TT179 = TT179
+type TT180 = TT180
+type TT181 = TT181
+type TT182 = TT182
+type TT183 = TT183
+type TT184 = TT184
+type TT185 = TT185
+type TT186 = TT186
+type TT187 = TT187
+type TT188 = TT188
+type TT189 = TT189
+type TT190 = TT190
+type TT191 = TT191
+type TT192 = TT192
+type TT193 = TT193
+type TT194 = TT194
+type TT195 = TT195
+type TT196 = TT196
+type TT197 = TT197
+type TT198 = TT198
+type TT199 = TT199
+type TT200 = TT200
+type TT201 = TT201
+type TT202 = TT202
+type TT203 = TT203
+type TT204 = TT204
+type TT205 = TT205
+type TT206 = TT206
+type TT207 = TT207
+type TT208 = TT208
+type TT209 = TT209
+type TT210 = TT210
+type TT211 = TT211
+type TT212 = TT212
+type TT213 = TT213
+type TT214 = TT214
+type TT215 = TT215
+type TT216 = TT216
+type TT217 = TT217
+type TT218 = TT218
+type TT219 = TT219
+type TT220 = TT220
+type TT221 = TT221
+type TT222 = TT222
+type TT223 = TT223
+type TT224 = TT224
+type TT225 = TT225
+type TT226 = TT226
+type TT227 = TT227
+type TT228 = TT228
+type TT229 = TT229
+type TT230 = TT230
+type TT231 = TT231
+type TT232 = TT232
+type TT233 = TT233
+type TT234 = TT234
+type TT235 = TT235
+type TT236 = TT236
+type TT237 = TT237
+type TT238 = TT238
+type TT239 = TT239
+type TT240 = TT240
+type TT241 = TT241
+type TT242 = TT242
+type TT243 = TT243
+type TT244 = TT244
+type TT245 = TT245
+type TT246 = TT246
+type TT247 = TT247
+type TT248 = TT248
+type TT249 = TT249
+type TT250 = TT250
+type TT251 = TT251
+type TT252 = TT252
+type TT253 = TT253
+type TT254 = TT254
+type TT255 = TT255
+type TT256 = TT256
+type TT257 = TT257
+type TT258 = TT258
+type TT259 = TT259
+type TT260 = TT260
+type TT261 = TT261
+type TT262 = TT262
+type TT263 = TT263
+type TT264 = TT264
+type TT265 = TT265
+type TT266 = TT266
+type TT267 = TT267
+type TT268 = TT268
+type TT269 = TT269
+type TT270 = TT270
+type TT271 = TT271
+type TT272 = TT272
+type TT273 = TT273
+type TT274 = TT274
+type TT275 = TT275
+type TT276 = TT276
+type TT277 = TT277
+type TT278 = TT278
+type TT279 = TT279
+type TT280 = TT280
+type TT281 = TT281
+type TT282 = TT282
+type TT283 = TT283
+type TT284 = TT284
+type TT285 = TT285
+type TT286 = TT286
+type TT287 = TT287
+type TT288 = TT288
+type TT289 = TT289
+type TT290 = TT290
+type TT291 = TT291
+type TT292 = TT292
+type TT293 = TT293
+type TT294 = TT294
+type TT295 = TT295
+type TT296 = TT296
+type TT297 = TT297
+type TT298 = TT298
+type TT299 = TT299
+type TT300 = TT300
+type TT301 = TT301
+type TT302 = TT302
+type TT303 = TT303
+type TT304 = TT304
+type TT305 = TT305
+type TT306 = TT306
+type TT307 = TT307
+type TT308 = TT308
+type TT309 = TT309
+type TT310 = TT310
+type TT311 = TT311
+type TT312 = TT312
+type TT313 = TT313
+type TT314 = TT314
+type TT315 = TT315
+type TT316 = TT316
+type TT317 = TT317
+type TT318 = TT318
+type TT319 = TT319
+type TT320 = TT320
+type TT321 = TT321
+type TT322 = TT322
+type TT323 = TT323
+type TT324 = TT324
+type TT325 = TT325
+type TT326 = TT326
+type TT327 = TT327
+type TT328 = TT328
+type TT329 = TT329
+type TT330 = TT330
+type TT331 = TT331
+type TT332 = TT332
+type TT333 = TT333
+type TT334 = TT334
+type TT335 = TT335
+type TT336 = TT336
+type TT337 = TT337
+type TT338 = TT338
+type TT339 = TT339
+type TT340 = TT340
+type TT341 = TT341
+type TT342 = TT342
+type TT343 = TT343
+type TT344 = TT344
+type TT345 = TT345
+type TT346 = TT346
+type TT347 = TT347
+type TT348 = TT348
+type TT349 = TT349
+type TT350 = TT350
+type TT351 = TT351
+type TT352 = TT352
+type TT353 = TT353
+type TT354 = TT354
+type TT355 = TT355
+type TT356 = TT356
+type TT357 = TT357
+type TT358 = TT358
+type TT359 = TT359
+type TT360 = TT360
+type TT361 = TT361
+type TT362 = TT362
+type TT363 = TT363
+type TT364 = TT364
+type TT365 = TT365
+type TT366 = TT366
+type TT367 = TT367
+type TT368 = TT368
+type TT369 = TT369
+type TT370 = TT370
+type TT371 = TT371
+type TT372 = TT372
+type TT373 = TT373
+type TT374 = TT374
+type TT375 = TT375
+type TT376 = TT376
+type TT377 = TT377
+type TT378 = TT378
+type TT379 = TT379
+type TT380 = TT380
+type TT381 = TT381
+type TT382 = TT382
+type TT383 = TT383
+type TT384 = TT384
+type TT385 = TT385
+type TT386 = TT386
+type TT387 = TT387
+type TT388 = TT388
+type TT389 = TT389
+type TT390 = TT390
+type TT391 = TT391
+type TT392 = TT392
+type TT393 = TT393
+type TT394 = TT394
+type TT395 = TT395
+type TT396 = TT396
+type TT397 = TT397
+type TT398 = TT398
+type TT399 = TT399
+type TT400 = TT400
+type TT401 = TT401
+type TT402 = TT402
+type TT403 = TT403
+type TT404 = TT404
+type TT405 = TT405
+type TT406 = TT406
+type TT407 = TT407
+type TT408 = TT408
+type TT409 = TT409
+type TT410 = TT410
+type TT411 = TT411
+type TT412 = TT412
+type TT413 = TT413
+type TT414 = TT414
+type TT415 = TT415
+type TT416 = TT416
+type TT417 = TT417
+type TT418 = TT418
+type TT419 = TT419
+type TT420 = TT420
+type TT421 = TT421
+type TT422 = TT422
+type TT423 = TT423
+type TT424 = TT424
+type TT425 = TT425
+type TT426 = TT426
+type TT427 = TT427
+type TT428 = TT428
+type TT429 = TT429
+type TT430 = TT430
+type TT431 = TT431
+type TT432 = TT432
+type TT433 = TT433
+type TT434 = TT434
+type TT435 = TT435
+type TT436 = TT436
+type TT437 = TT437
+type TT438 = TT438
+type TT439 = TT439
+type TT440 = TT440
+type TT441 = TT441
+type TT442 = TT442
+type TT443 = TT443
+type TT444 = TT444
+type TT445 = TT445
+type TT446 = TT446
+type TT447 = TT447
+type TT448 = TT448
+type TT449 = TT449
+type TT450 = TT450
+type TT451 = TT451
+type TT452 = TT452
+type TT453 = TT453
+type TT454 = TT454
+type TT455 = TT455
+type TT456 = TT456
+type TT457 = TT457
+type TT458 = TT458
+type TT459 = TT459
+type TT460 = TT460
+type TT461 = TT461
+type TT462 = TT462
+type TT463 = TT463
+type TT464 = TT464
+type TT465 = TT465
+type TT466 = TT466
+type TT467 = TT467
+type TT468 = TT468
+type TT469 = TT469
+type TT470 = TT470
+type TT471 = TT471
+type TT472 = TT472
+type TT473 = TT473
+type TT474 = TT474
+type TT475 = TT475
+type TT476 = TT476
+type TT477 = TT477
+type TT478 = TT478
+type TT479 = TT479
+type TT480 = TT480
+type TT481 = TT481
+type TT482 = TT482
+type TT483 = TT483
+type TT484 = TT484
+type TT485 = TT485
+type TT486 = TT486
+type TT487 = TT487
+type TT488 = TT488
+type TT489 = TT489
+type TT490 = TT490
+type TT491 = TT491
+type TT492 = TT492
+type TT493 = TT493
+type TT494 = TT494
+type TT495 = TT495
+type TT496 = TT496
+type TT497 = TT497
+type TT498 = TT498
+type TT499 = TT499
+type TT500 = TT500
+type TT501 = TT501
+type TT502 = TT502
+type TT503 = TT503
+type TT504 = TT504
+type TT505 = TT505
+type TT506 = TT506
+type TT507 = TT507
+type TT508 = TT508
+type TT509 = TT509
+type TT510 = TT510
+type TT511 = TT511
+type TT512 = TT512
+type TT513 = TT513
+type TT514 = TT514
+type TT515 = TT515
+type TT516 = TT516
+type TT517 = TT517
+type TT518 = TT518
+type TT519 = TT519
+type TT520 = TT520
+type TT521 = TT521
+type TT522 = TT522
+type TT523 = TT523
+type TT524 = TT524
+type TT525 = TT525
+type TT526 = TT526
+type TT527 = TT527
+type TT528 = TT528
+type TT529 = TT529
+type TT530 = TT530
+type TT531 = TT531
+type TT532 = TT532
+type TT533 = TT533
+type TT534 = TT534
+type TT535 = TT535
+type TT536 = TT536
+type TT537 = TT537
+type TT538 = TT538
+type TT539 = TT539
+type TT540 = TT540
+type TT541 = TT541
+type TT542 = TT542
+type TT543 = TT543
+type TT544 = TT544
+type TT545 = TT545
+type TT546 = TT546
+type TT547 = TT547
+type TT548 = TT548
+type TT549 = TT549
+type TT550 = TT550
+type TT551 = TT551
+type TT552 = TT552
+type TT553 = TT553
+type TT554 = TT554
+type TT555 = TT555
+type TT556 = TT556
+type TT557 = TT557
+type TT558 = TT558
+type TT559 = TT559
+type TT560 = TT560
+type TT561 = TT561
+type TT562 = TT562
+type TT563 = TT563
+type TT564 = TT564
+type TT565 = TT565
+type TT566 = TT566
+type TT567 = TT567
+type TT568 = TT568
+type TT569 = TT569
+type TT570 = TT570
+type TT571 = TT571
+type TT572 = TT572
+type TT573 = TT573
+type TT574 = TT574
+type TT575 = TT575
+type TT576 = TT576
+type TT577 = TT577
+type TT578 = TT578
+type TT579 = TT579
+type TT580 = TT580
+type TT581 = TT581
+type TT582 = TT582
+type TT583 = TT583
+type TT584 = TT584
+type TT585 = TT585
+type TT586 = TT586
+type TT587 = TT587
+type TT588 = TT588
+type TT589 = TT589
+type TT590 = TT590
+type TT591 = TT591
+type TT592 = TT592
+type TT593 = TT593
+type TT594 = TT594
+type TT595 = TT595
+type TT596 = TT596
+type TT597 = TT597
+type TT598 = TT598
+type TT599 = TT599
+type TT600 = TT600
+type TT601 = TT601
+type TT602 = TT602
+type TT603 = TT603
+type TT604 = TT604
+type TT605 = TT605
+type TT606 = TT606
+type TT607 = TT607
+type TT608 = TT608
+type TT609 = TT609
+type TT610 = TT610
+type TT611 = TT611
+type TT612 = TT612
+type TT613 = TT613
+type TT614 = TT614
+type TT615 = TT615
+type TT616 = TT616
+type TT617 = TT617
+type TT618 = TT618
+type TT619 = TT619
+type TT620 = TT620
+type TT621 = TT621
+type TT622 = TT622
+type TT623 = TT623
+type TT624 = TT624
+type TT625 = TT625
+type TT626 = TT626
+type TT627 = TT627
+type TT628 = TT628
+type TT629 = TT629
+type TT630 = TT630
+type TT631 = TT631
+type TT632 = TT632
+type TT633 = TT633
+type TT634 = TT634
+type TT635 = TT635
+type TT636 = TT636
+type TT637 = TT637
+type TT638 = TT638
+type TT639 = TT639
+type TT640 = TT640
+type TT641 = TT641
+type TT642 = TT642
+type TT643 = TT643
+type TT644 = TT644
+type TT645 = TT645
+type TT646 = TT646
+type TT647 = TT647
+type TT648 = TT648
+type TT649 = TT649
+type TT650 = TT650
+type TT651 = TT651
+type TT652 = TT652
+type TT653 = TT653
+type TT654 = TT654
+type TT655 = TT655
+type TT656 = TT656
+type TT657 = TT657
+type TT658 = TT658
+type TT659 = TT659
+type TT660 = TT660
+type TT661 = TT661
+type TT662 = TT662
+type TT663 = TT663
+type TT664 = TT664
+type TT665 = TT665
+type TT666 = TT666
+type TT667 = TT667
+type TT668 = TT668
+type TT669 = TT669
+type TT670 = TT670
+type TT671 = TT671
+type TT672 = TT672
+type TT673 = TT673
+type TT674 = TT674
+type TT675 = TT675
+type TT676 = TT676
+type TT677 = TT677
+type TT678 = TT678
+type TT679 = TT679
+type TT680 = TT680
+type TT681 = TT681
+type TT682 = TT682
+type TT683 = TT683
+type TT684 = TT684
+type TT685 = TT685
+type TT686 = TT686
+type TT687 = TT687
+type TT688 = TT688
+type TT689 = TT689
+type TT690 = TT690
+type TT691 = TT691
+type TT692 = TT692
+type TT693 = TT693
+type TT694 = TT694
+type TT695 = TT695
+type TT696 = TT696
+type TT697 = TT697
+type TT698 = TT698
+type TT699 = TT699
+type TT700 = TT700
+type TT701 = TT701
+type TT702 = TT702
+type TT703 = TT703
+type TT704 = TT704
+type TT705 = TT705
+type TT706 = TT706
+type TT707 = TT707
+type TT708 = TT708
+type TT709 = TT709
+type TT710 = TT710
+type TT711 = TT711
+type TT712 = TT712
+type TT713 = TT713
+type TT714 = TT714
+type TT715 = TT715
+type TT716 = TT716
+type TT717 = TT717
+type TT718 = TT718
+type TT719 = TT719
+type TT720 = TT720
+type TT721 = TT721
+type TT722 = TT722
+type TT723 = TT723
+type TT724 = TT724
+type TT725 = TT725
+type TT726 = TT726
+type TT727 = TT727
+type TT728 = TT728
+type TT729 = TT729
+type TT730 = TT730
+type TT731 = TT731
+type TT732 = TT732
+type TT733 = TT733
+type TT734 = TT734
+type TT735 = TT735
+type TT736 = TT736
+type TT737 = TT737
+type TT738 = TT738
+type TT739 = TT739
+type TT740 = TT740
+type TT741 = TT741
+type TT742 = TT742
+type TT743 = TT743
+type TT744 = TT744
+type TT745 = TT745
+type TT746 = TT746
+type TT747 = TT747
+type TT748 = TT748
+type TT749 = TT749
+type TT750 = TT750
+type TT751 = TT751
+type TT752 = TT752
+type TT753 = TT753
+type TT754 = TT754
+type TT755 = TT755
+type TT756 = TT756
+type TT757 = TT757
+type TT758 = TT758
+type TT759 = TT759
+type TT760 = TT760
+type TT761 = TT761
+type TT762 = TT762
+type TT763 = TT763
+type TT764 = TT764
+type TT765 = TT765
+type TT766 = TT766
+type TT767 = TT767
+type TT768 = TT768
+type TT769 = TT769
+type TT770 = TT770
+type TT771 = TT771
+type TT772 = TT772
+type TT773 = TT773
+type TT774 = TT774
+type TT775 = TT775
+type TT776 = TT776
+type TT777 = TT777
+type TT778 = TT778
+type TT779 = TT779
+type TT780 = TT780
+type TT781 = TT781
+type TT782 = TT782
+type TT783 = TT783
+type TT784 = TT784
+type TT785 = TT785
+type TT786 = TT786
+type TT787 = TT787
+type TT788 = TT788
+type TT789 = TT789
+type TT790 = TT790
+type TT791 = TT791
+type TT792 = TT792
+type TT793 = TT793
+type TT794 = TT794
+type TT795 = TT795
+type TT796 = TT796
+type TT797 = TT797
+type TT798 = TT798
+type TT799 = TT799
+type TT800 = TT800
+type TT801 = TT801
+type TT802 = TT802
+type TT803 = TT803
+type TT804 = TT804
+type TT805 = TT805
+type TT806 = TT806
+type TT807 = TT807
+type TT808 = TT808
+type TT809 = TT809
+type TT810 = TT810
+type TT811 = TT811
+type TT812 = TT812
+type TT813 = TT813
+type TT814 = TT814
+type TT815 = TT815
+type TT816 = TT816
+type TT817 = TT817
+type TT818 = TT818
+type TT819 = TT819
+type TT820 = TT820
+type TT821 = TT821
+type TT822 = TT822
+type TT823 = TT823
+type TT824 = TT824
+type TT825 = TT825
+type TT826 = TT826
+type TT827 = TT827
+type TT828 = TT828
+type TT829 = TT829
+type TT830 = TT830
+type TT831 = TT831
+type TT832 = TT832
+type TT833 = TT833
+type TT834 = TT834
+type TT835 = TT835
+type TT836 = TT836
+type TT837 = TT837
+type TT838 = TT838
+type TT839 = TT839
+type TT840 = TT840
+type TT841 = TT841
+type TT842 = TT842
+type TT843 = TT843
+type TT844 = TT844
+type TT845 = TT845
+type TT846 = TT846
+type TT847 = TT847
+type TT848 = TT848
+type TT849 = TT849
+type TT850 = TT850
+type TT851 = TT851
+type TT852 = TT852
+type TT853 = TT853
+type TT854 = TT854
+type TT855 = TT855
+type TT856 = TT856
+type TT857 = TT857
+type TT858 = TT858
+type TT859 = TT859
+type TT860 = TT860
+type TT861 = TT861
+type TT862 = TT862
+type TT863 = TT863
+type TT864 = TT864
+type TT865 = TT865
+type TT866 = TT866
+type TT867 = TT867
+type TT868 = TT868
+type TT869 = TT869
+type TT870 = TT870
+type TT871 = TT871
+type TT872 = TT872
+type TT873 = TT873
+type TT874 = TT874
+type TT875 = TT875
+type TT876 = TT876
+type TT877 = TT877
+type TT878 = TT878
+type TT879 = TT879
+type TT880 = TT880
+type TT881 = TT881
+type TT882 = TT882
+type TT883 = TT883
+type TT884 = TT884
+type TT885 = TT885
+type TT886 = TT886
+type TT887 = TT887
+type TT888 = TT888
+type TT889 = TT889
+type TT890 = TT890
+type TT891 = TT891
+type TT892 = TT892
+type TT893 = TT893
+type TT894 = TT894
+type TT895 = TT895
+type TT896 = TT896
+type TT897 = TT897
+type TT898 = TT898
+type TT899 = TT899
+type TT900 = TT900
+type TT901 = TT901
+type TT902 = TT902
+type TT903 = TT903
+type TT904 = TT904
+type TT905 = TT905
+type TT906 = TT906
+type TT907 = TT907
+type TT908 = TT908
+type TT909 = TT909
+type TT910 = TT910
+type TT911 = TT911
+type TT912 = TT912
+type TT913 = TT913
+type TT914 = TT914
+type TT915 = TT915
+type TT916 = TT916
+type TT917 = TT917
+type TT918 = TT918
+type TT919 = TT919
+type TT920 = TT920
+type TT921 = TT921
+type TT922 = TT922
+type TT923 = TT923
+type TT924 = TT924
+type TT925 = TT925
+type TT926 = TT926
+type TT927 = TT927
+type TT928 = TT928
+type TT929 = TT929
+type TT930 = TT930
+type TT931 = TT931
+type TT932 = TT932
+type TT933 = TT933
+type TT934 = TT934
+type TT935 = TT935
+type TT936 = TT936
+type TT937 = TT937
+type TT938 = TT938
+type TT939 = TT939
+type TT940 = TT940
+type TT941 = TT941
+type TT942 = TT942
+type TT943 = TT943
+type TT944 = TT944
+type TT945 = TT945
+type TT946 = TT946
+type TT947 = TT947
+type TT948 = TT948
+type TT949 = TT949
+type TT950 = TT950
+type TT951 = TT951
+type TT952 = TT952
+type TT953 = TT953
+type TT954 = TT954
+type TT955 = TT955
+type TT956 = TT956
+type TT957 = TT957
+type TT958 = TT958
+type TT959 = TT959
+type TT960 = TT960
+type TT961 = TT961
+type TT962 = TT962
+type TT963 = TT963
+type TT964 = TT964
+type TT965 = TT965
+type TT966 = TT966
+type TT967 = TT967
+type TT968 = TT968
+type TT969 = TT969
+type TT970 = TT970
+type TT971 = TT971
+type TT972 = TT972
+type TT973 = TT973
+type TT974 = TT974
+type TT975 = TT975
+type TT976 = TT976
+type TT977 = TT977
+type TT978 = TT978
+type TT979 = TT979
+type TT980 = TT980
+type TT981 = TT981
+type TT982 = TT982
+type TT983 = TT983
+type TT984 = TT984
+type TT985 = TT985
+type TT986 = TT986
+type TT987 = TT987
+type TT988 = TT988
+type TT989 = TT989
+type TT990 = TT990
+type TT991 = TT991
+type TT992 = TT992
+type TT993 = TT993
+type TT994 = TT994
+type TT995 = TT995
+type TT996 = TT996
+type TT997 = TT997
+type TT998 = TT998
+type TT999 = TT999
+type TT1000 = TT1000
diff --git a/tests/projects/vs2019slow/vs2019slow/Script2.fsx b/tests/projects/vs2019slow/vs2019slow/Script2.fsx
new file mode 100644
index 00000000000..d38e9edc977
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/Script2.fsx
@@ -0,0 +1,1101 @@
+type T1 = T1
+type T2 = T2
+type T3 = T3
+type T4 = T4
+type T5 = T5
+type T6 = T6
+type T7 = T7
+type T8 = T8
+type T9 = T9
+type T10 = T10
+type T11 = T11
+type T12 = T12
+type T13 = T13
+type T14 = T14
+type T15 = T15
+type T16 = T16
+type T17 = T17
+type T18 = T18
+type T19 = T19
+type T20 = T20
+type T21 = T21
+type T22 = T22
+type T23 = T23
+type T24 = T24
+type T25 = T25
+type T26 = T26
+type T27 = T27
+type T28 = T28
+type T29 = T29
+type T30 = T30
+type T31 = T31
+type T32 = T32
+type T33 = T33
+type T34 = T34
+type T35 = T35
+type T36 = T36
+type T37 = T37
+type T38 = T38
+type T39 = T39
+type T40 = T40
+type T41 = T41
+type T42 = T42
+type T43 = T43
+type T44 = T44
+type T45 = T45
+type T46 = T46
+type T47 = T47
+type T48 = T48
+type T49 = T49
+type T50 = T50
+type T51 = T51
+type T52 = T52
+type T53 = T53
+type T54 = T54
+type T55 = T55
+type T56 = T56
+type T57 = T57
+type T58 = T58
+type T59 = T59
+type T60 = T60
+type T61 = T61
+type T62 = T62
+type T63 = T63
+type T64 = T64
+type T65 = T65
+type T66 = T66
+type T67 = T67
+type T68 = T68
+type T69 = T69
+type T70 = T70
+type T71 = T71
+type T72 = T72
+type T73 = T73
+type T74 = T74
+type T75 = T75
+type T76 = T76
+type T77 = T77
+type T78 = T78
+type T79 = T79
+type T80 = T80
+type T81 = T81
+type T82 = T82
+type T83 = T83
+type T84 = T84
+type T85 = T85
+type T86 = T86
+type T87 = T87
+type T88 = T88
+type T89 = T89
+type T90 = T90
+type T91 = T91
+type T92 = T92
+type T93 = T93
+type T94 = T94
+type T95 = T95
+type T96 = T96
+type T97 = T97
+type T98 = T98
+type T99 = T99
+type T100 = T100
+type TT0 = TT0
+type TT1 = TT1
+type TT2 = TT2
+type TT3 = TT3
+type TT4 = TT4
+type TT5 = TT5
+type TT6 = TT6
+type TT7 = TT7
+type TT8 = TT8
+type TT9 = TT9
+type TT10 = TT10
+type TT11 = TT11
+type TT12 = TT12
+type TT13 = TT13
+type TT14 = TT14
+type TT15 = TT15
+type TT16 = TT16
+type TT17 = TT17
+type TT18 = TT18
+type TT19 = TT19
+type TT20 = TT20
+type TT21 = TT21
+type TT22 = TT22
+type TT23 = TT23
+type TT24 = TT24
+type TT25 = TT25
+type TT26 = TT26
+type TT27 = TT27
+type TT28 = TT28
+type TT29 = TT29
+type TT30 = TT30
+type TT31 = TT31
+type TT32 = TT32
+type TT33 = TT33
+type TT34 = TT34
+type TT35 = TT35
+type TT36 = TT36
+type TT37 = TT37
+type TT38 = TT38
+type TT39 = TT39
+type TT40 = TT40
+type TT41 = TT41
+type TT42 = TT42
+type TT43 = TT43
+type TT44 = TT44
+type TT45 = TT45
+type TT46 = TT46
+type TT47 = TT47
+type TT48 = TT48
+type TT49 = TT49
+type TT50 = TT50
+type TT51 = TT51
+type TT52 = TT52
+type TT53 = TT53
+type TT54 = TT54
+type TT55 = TT55
+type TT56 = TT56
+type TT57 = TT57
+type TT58 = TT58
+type TT59 = TT59
+type TT60 = TT60
+type TT61 = TT61
+type TT62 = TT62
+type TT63 = TT63
+type TT64 = TT64
+type TT65 = TT65
+type TT66 = TT66
+type TT67 = TT67
+type TT68 = TT68
+type TT69 = TT69
+type TT70 = TT70
+type TT71 = TT71
+type TT72 = TT72
+type TT73 = TT73
+type TT74 = TT74
+type TT75 = TT75
+type TT76 = TT76
+type TT77 = TT77
+type TT78 = TT78
+type TT79 = TT79
+type TT80 = TT80
+type TT81 = TT81
+type TT82 = TT82
+type TT83 = TT83
+type TT84 = TT84
+type TT85 = TT85
+type TT86 = TT86
+type TT87 = TT87
+type TT88 = TT88
+type TT89 = TT89
+type TT90 = TT90
+type TT91 = TT91
+type TT92 = TT92
+type TT93 = TT93
+type TT94 = TT94
+type TT95 = TT95
+type TT96 = TT96
+type TT97 = TT97
+type TT98 = TT98
+type TT99 = TT99
+type TT100 = TT100
+type TT101 = TT101
+type TT102 = TT102
+type TT103 = TT103
+type TT104 = TT104
+type TT105 = TT105
+type TT106 = TT106
+type TT107 = TT107
+type TT108 = TT108
+type TT109 = TT109
+type TT110 = TT110
+type TT111 = TT111
+type TT112 = TT112
+type TT113 = TT113
+type TT114 = TT114
+type TT115 = TT115
+type TT116 = TT116
+type TT117 = TT117
+type TT118 = TT118
+type TT119 = TT119
+type TT120 = TT120
+type TT121 = TT121
+type TT122 = TT122
+type TT123 = TT123
+type TT124 = TT124
+type TT125 = TT125
+type TT126 = TT126
+type TT127 = TT127
+type TT128 = TT128
+type TT129 = TT129
+type TT130 = TT130
+type TT131 = TT131
+type TT132 = TT132
+type TT133 = TT133
+type TT134 = TT134
+type TT135 = TT135
+type TT136 = TT136
+type TT137 = TT137
+type TT138 = TT138
+type TT139 = TT139
+type TT140 = TT140
+type TT141 = TT141
+type TT142 = TT142
+type TT143 = TT143
+type TT144 = TT144
+type TT145 = TT145
+type TT146 = TT146
+type TT147 = TT147
+type TT148 = TT148
+type TT149 = TT149
+type TT150 = TT150
+type TT151 = TT151
+type TT152 = TT152
+type TT153 = TT153
+type TT154 = TT154
+type TT155 = TT155
+type TT156 = TT156
+type TT157 = TT157
+type TT158 = TT158
+type TT159 = TT159
+type TT160 = TT160
+type TT161 = TT161
+type TT162 = TT162
+type TT163 = TT163
+type TT164 = TT164
+type TT165 = TT165
+type TT166 = TT166
+type TT167 = TT167
+type TT168 = TT168
+type TT169 = TT169
+type TT170 = TT170
+type TT171 = TT171
+type TT172 = TT172
+type TT173 = TT173
+type TT174 = TT174
+type TT175 = TT175
+type TT176 = TT176
+type TT177 = TT177
+type TT178 = TT178
+type TT179 = TT179
+type TT180 = TT180
+type TT181 = TT181
+type TT182 = TT182
+type TT183 = TT183
+type TT184 = TT184
+type TT185 = TT185
+type TT186 = TT186
+type TT187 = TT187
+type TT188 = TT188
+type TT189 = TT189
+type TT190 = TT190
+type TT191 = TT191
+type TT192 = TT192
+type TT193 = TT193
+type TT194 = TT194
+type TT195 = TT195
+type TT196 = TT196
+type TT197 = TT197
+type TT198 = TT198
+type TT199 = TT199
+type TT200 = TT200
+type TT201 = TT201
+type TT202 = TT202
+type TT203 = TT203
+type TT204 = TT204
+type TT205 = TT205
+type TT206 = TT206
+type TT207 = TT207
+type TT208 = TT208
+type TT209 = TT209
+type TT210 = TT210
+type TT211 = TT211
+type TT212 = TT212
+type TT213 = TT213
+type TT214 = TT214
+type TT215 = TT215
+type TT216 = TT216
+type TT217 = TT217
+type TT218 = TT218
+type TT219 = TT219
+type TT220 = TT220
+type TT221 = TT221
+type TT222 = TT222
+type TT223 = TT223
+type TT224 = TT224
+type TT225 = TT225
+type TT226 = TT226
+type TT227 = TT227
+type TT228 = TT228
+type TT229 = TT229
+type TT230 = TT230
+type TT231 = TT231
+type TT232 = TT232
+type TT233 = TT233
+type TT234 = TT234
+type TT235 = TT235
+type TT236 = TT236
+type TT237 = TT237
+type TT238 = TT238
+type TT239 = TT239
+type TT240 = TT240
+type TT241 = TT241
+type TT242 = TT242
+type TT243 = TT243
+type TT244 = TT244
+type TT245 = TT245
+type TT246 = TT246
+type TT247 = TT247
+type TT248 = TT248
+type TT249 = TT249
+type TT250 = TT250
+type TT251 = TT251
+type TT252 = TT252
+type TT253 = TT253
+type TT254 = TT254
+type TT255 = TT255
+type TT256 = TT256
+type TT257 = TT257
+type TT258 = TT258
+type TT259 = TT259
+type TT260 = TT260
+type TT261 = TT261
+type TT262 = TT262
+type TT263 = TT263
+type TT264 = TT264
+type TT265 = TT265
+type TT266 = TT266
+type TT267 = TT267
+type TT268 = TT268
+type TT269 = TT269
+type TT270 = TT270
+type TT271 = TT271
+type TT272 = TT272
+type TT273 = TT273
+type TT274 = TT274
+type TT275 = TT275
+type TT276 = TT276
+type TT277 = TT277
+type TT278 = TT278
+type TT279 = TT279
+type TT280 = TT280
+type TT281 = TT281
+type TT282 = TT282
+type TT283 = TT283
+type TT284 = TT284
+type TT285 = TT285
+type TT286 = TT286
+type TT287 = TT287
+type TT288 = TT288
+type TT289 = TT289
+type TT290 = TT290
+type TT291 = TT291
+type TT292 = TT292
+type TT293 = TT293
+type TT294 = TT294
+type TT295 = TT295
+type TT296 = TT296
+type TT297 = TT297
+type TT298 = TT298
+type TT299 = TT299
+type TT300 = TT300
+type TT301 = TT301
+type TT302 = TT302
+type TT303 = TT303
+type TT304 = TT304
+type TT305 = TT305
+type TT306 = TT306
+type TT307 = TT307
+type TT308 = TT308
+type TT309 = TT309
+type TT310 = TT310
+type TT311 = TT311
+type TT312 = TT312
+type TT313 = TT313
+type TT314 = TT314
+type TT315 = TT315
+type TT316 = TT316
+type TT317 = TT317
+type TT318 = TT318
+type TT319 = TT319
+type TT320 = TT320
+type TT321 = TT321
+type TT322 = TT322
+type TT323 = TT323
+type TT324 = TT324
+type TT325 = TT325
+type TT326 = TT326
+type TT327 = TT327
+type TT328 = TT328
+type TT329 = TT329
+type TT330 = TT330
+type TT331 = TT331
+type TT332 = TT332
+type TT333 = TT333
+type TT334 = TT334
+type TT335 = TT335
+type TT336 = TT336
+type TT337 = TT337
+type TT338 = TT338
+type TT339 = TT339
+type TT340 = TT340
+type TT341 = TT341
+type TT342 = TT342
+type TT343 = TT343
+type TT344 = TT344
+type TT345 = TT345
+type TT346 = TT346
+type TT347 = TT347
+type TT348 = TT348
+type TT349 = TT349
+type TT350 = TT350
+type TT351 = TT351
+type TT352 = TT352
+type TT353 = TT353
+type TT354 = TT354
+type TT355 = TT355
+type TT356 = TT356
+type TT357 = TT357
+type TT358 = TT358
+type TT359 = TT359
+type TT360 = TT360
+type TT361 = TT361
+type TT362 = TT362
+type TT363 = TT363
+type TT364 = TT364
+type TT365 = TT365
+type TT366 = TT366
+type TT367 = TT367
+type TT368 = TT368
+type TT369 = TT369
+type TT370 = TT370
+type TT371 = TT371
+type TT372 = TT372
+type TT373 = TT373
+type TT374 = TT374
+type TT375 = TT375
+type TT376 = TT376
+type TT377 = TT377
+type TT378 = TT378
+type TT379 = TT379
+type TT380 = TT380
+type TT381 = TT381
+type TT382 = TT382
+type TT383 = TT383
+type TT384 = TT384
+type TT385 = TT385
+type TT386 = TT386
+type TT387 = TT387
+type TT388 = TT388
+type TT389 = TT389
+type TT390 = TT390
+type TT391 = TT391
+type TT392 = TT392
+type TT393 = TT393
+type TT394 = TT394
+type TT395 = TT395
+type TT396 = TT396
+type TT397 = TT397
+type TT398 = TT398
+type TT399 = TT399
+type TT400 = TT400
+type TT401 = TT401
+type TT402 = TT402
+type TT403 = TT403
+type TT404 = TT404
+type TT405 = TT405
+type TT406 = TT406
+type TT407 = TT407
+type TT408 = TT408
+type TT409 = TT409
+type TT410 = TT410
+type TT411 = TT411
+type TT412 = TT412
+type TT413 = TT413
+type TT414 = TT414
+type TT415 = TT415
+type TT416 = TT416
+type TT417 = TT417
+type TT418 = TT418
+type TT419 = TT419
+type TT420 = TT420
+type TT421 = TT421
+type TT422 = TT422
+type TT423 = TT423
+type TT424 = TT424
+type TT425 = TT425
+type TT426 = TT426
+type TT427 = TT427
+type TT428 = TT428
+type TT429 = TT429
+type TT430 = TT430
+type TT431 = TT431
+type TT432 = TT432
+type TT433 = TT433
+type TT434 = TT434
+type TT435 = TT435
+type TT436 = TT436
+type TT437 = TT437
+type TT438 = TT438
+type TT439 = TT439
+type TT440 = TT440
+type TT441 = TT441
+type TT442 = TT442
+type TT443 = TT443
+type TT444 = TT444
+type TT445 = TT445
+type TT446 = TT446
+type TT447 = TT447
+type TT448 = TT448
+type TT449 = TT449
+type TT450 = TT450
+type TT451 = TT451
+type TT452 = TT452
+type TT453 = TT453
+type TT454 = TT454
+type TT455 = TT455
+type TT456 = TT456
+type TT457 = TT457
+type TT458 = TT458
+type TT459 = TT459
+type TT460 = TT460
+type TT461 = TT461
+type TT462 = TT462
+type TT463 = TT463
+type TT464 = TT464
+type TT465 = TT465
+type TT466 = TT466
+type TT467 = TT467
+type TT468 = TT468
+type TT469 = TT469
+type TT470 = TT470
+type TT471 = TT471
+type TT472 = TT472
+type TT473 = TT473
+type TT474 = TT474
+type TT475 = TT475
+type TT476 = TT476
+type TT477 = TT477
+type TT478 = TT478
+type TT479 = TT479
+type TT480 = TT480
+type TT481 = TT481
+type TT482 = TT482
+type TT483 = TT483
+type TT484 = TT484
+type TT485 = TT485
+type TT486 = TT486
+type TT487 = TT487
+type TT488 = TT488
+type TT489 = TT489
+type TT490 = TT490
+type TT491 = TT491
+type TT492 = TT492
+type TT493 = TT493
+type TT494 = TT494
+type TT495 = TT495
+type TT496 = TT496
+type TT497 = TT497
+type TT498 = TT498
+type TT499 = TT499
+type TT500 = TT500
+type TT501 = TT501
+type TT502 = TT502
+type TT503 = TT503
+type TT504 = TT504
+type TT505 = TT505
+type TT506 = TT506
+type TT507 = TT507
+type TT508 = TT508
+type TT509 = TT509
+type TT510 = TT510
+type TT511 = TT511
+type TT512 = TT512
+type TT513 = TT513
+type TT514 = TT514
+type TT515 = TT515
+type TT516 = TT516
+type TT517 = TT517
+type TT518 = TT518
+type TT519 = TT519
+type TT520 = TT520
+type TT521 = TT521
+type TT522 = TT522
+type TT523 = TT523
+type TT524 = TT524
+type TT525 = TT525
+type TT526 = TT526
+type TT527 = TT527
+type TT528 = TT528
+type TT529 = TT529
+type TT530 = TT530
+type TT531 = TT531
+type TT532 = TT532
+type TT533 = TT533
+type TT534 = TT534
+type TT535 = TT535
+type TT536 = TT536
+type TT537 = TT537
+type TT538 = TT538
+type TT539 = TT539
+type TT540 = TT540
+type TT541 = TT541
+type TT542 = TT542
+type TT543 = TT543
+type TT544 = TT544
+type TT545 = TT545
+type TT546 = TT546
+type TT547 = TT547
+type TT548 = TT548
+type TT549 = TT549
+type TT550 = TT550
+type TT551 = TT551
+type TT552 = TT552
+type TT553 = TT553
+type TT554 = TT554
+type TT555 = TT555
+type TT556 = TT556
+type TT557 = TT557
+type TT558 = TT558
+type TT559 = TT559
+type TT560 = TT560
+type TT561 = TT561
+type TT562 = TT562
+type TT563 = TT563
+type TT564 = TT564
+type TT565 = TT565
+type TT566 = TT566
+type TT567 = TT567
+type TT568 = TT568
+type TT569 = TT569
+type TT570 = TT570
+type TT571 = TT571
+type TT572 = TT572
+type TT573 = TT573
+type TT574 = TT574
+type TT575 = TT575
+type TT576 = TT576
+type TT577 = TT577
+type TT578 = TT578
+type TT579 = TT579
+type TT580 = TT580
+type TT581 = TT581
+type TT582 = TT582
+type TT583 = TT583
+type TT584 = TT584
+type TT585 = TT585
+type TT586 = TT586
+type TT587 = TT587
+type TT588 = TT588
+type TT589 = TT589
+type TT590 = TT590
+type TT591 = TT591
+type TT592 = TT592
+type TT593 = TT593
+type TT594 = TT594
+type TT595 = TT595
+type TT596 = TT596
+type TT597 = TT597
+type TT598 = TT598
+type TT599 = TT599
+type TT600 = TT600
+type TT601 = TT601
+type TT602 = TT602
+type TT603 = TT603
+type TT604 = TT604
+type TT605 = TT605
+type TT606 = TT606
+type TT607 = TT607
+type TT608 = TT608
+type TT609 = TT609
+type TT610 = TT610
+type TT611 = TT611
+type TT612 = TT612
+type TT613 = TT613
+type TT614 = TT614
+type TT615 = TT615
+type TT616 = TT616
+type TT617 = TT617
+type TT618 = TT618
+type TT619 = TT619
+type TT620 = TT620
+type TT621 = TT621
+type TT622 = TT622
+type TT623 = TT623
+type TT624 = TT624
+type TT625 = TT625
+type TT626 = TT626
+type TT627 = TT627
+type TT628 = TT628
+type TT629 = TT629
+type TT630 = TT630
+type TT631 = TT631
+type TT632 = TT632
+type TT633 = TT633
+type TT634 = TT634
+type TT635 = TT635
+type TT636 = TT636
+type TT637 = TT637
+type TT638 = TT638
+type TT639 = TT639
+type TT640 = TT640
+type TT641 = TT641
+type TT642 = TT642
+type TT643 = TT643
+type TT644 = TT644
+type TT645 = TT645
+type TT646 = TT646
+type TT647 = TT647
+type TT648 = TT648
+type TT649 = TT649
+type TT650 = TT650
+type TT651 = TT651
+type TT652 = TT652
+type TT653 = TT653
+type TT654 = TT654
+type TT655 = TT655
+type TT656 = TT656
+type TT657 = TT657
+type TT658 = TT658
+type TT659 = TT659
+type TT660 = TT660
+type TT661 = TT661
+type TT662 = TT662
+type TT663 = TT663
+type TT664 = TT664
+type TT665 = TT665
+type TT666 = TT666
+type TT667 = TT667
+type TT668 = TT668
+type TT669 = TT669
+type TT670 = TT670
+type TT671 = TT671
+type TT672 = TT672
+type TT673 = TT673
+type TT674 = TT674
+type TT675 = TT675
+type TT676 = TT676
+type TT677 = TT677
+type TT678 = TT678
+type TT679 = TT679
+type TT680 = TT680
+type TT681 = TT681
+type TT682 = TT682
+type TT683 = TT683
+type TT684 = TT684
+type TT685 = TT685
+type TT686 = TT686
+type TT687 = TT687
+type TT688 = TT688
+type TT689 = TT689
+type TT690 = TT690
+type TT691 = TT691
+type TT692 = TT692
+type TT693 = TT693
+type TT694 = TT694
+type TT695 = TT695
+type TT696 = TT696
+type TT697 = TT697
+type TT698 = TT698
+type TT699 = TT699
+type TT700 = TT700
+type TT701 = TT701
+type TT702 = TT702
+type TT703 = TT703
+type TT704 = TT704
+type TT705 = TT705
+type TT706 = TT706
+type TT707 = TT707
+type TT708 = TT708
+type TT709 = TT709
+type TT710 = TT710
+type TT711 = TT711
+type TT712 = TT712
+type TT713 = TT713
+type TT714 = TT714
+type TT715 = TT715
+type TT716 = TT716
+type TT717 = TT717
+type TT718 = TT718
+type TT719 = TT719
+type TT720 = TT720
+type TT721 = TT721
+type TT722 = TT722
+type TT723 = TT723
+type TT724 = TT724
+type TT725 = TT725
+type TT726 = TT726
+type TT727 = TT727
+type TT728 = TT728
+type TT729 = TT729
+type TT730 = TT730
+type TT731 = TT731
+type TT732 = TT732
+type TT733 = TT733
+type TT734 = TT734
+type TT735 = TT735
+type TT736 = TT736
+type TT737 = TT737
+type TT738 = TT738
+type TT739 = TT739
+type TT740 = TT740
+type TT741 = TT741
+type TT742 = TT742
+type TT743 = TT743
+type TT744 = TT744
+type TT745 = TT745
+type TT746 = TT746
+type TT747 = TT747
+type TT748 = TT748
+type TT749 = TT749
+type TT750 = TT750
+type TT751 = TT751
+type TT752 = TT752
+type TT753 = TT753
+type TT754 = TT754
+type TT755 = TT755
+type TT756 = TT756
+type TT757 = TT757
+type TT758 = TT758
+type TT759 = TT759
+type TT760 = TT760
+type TT761 = TT761
+type TT762 = TT762
+type TT763 = TT763
+type TT764 = TT764
+type TT765 = TT765
+type TT766 = TT766
+type TT767 = TT767
+type TT768 = TT768
+type TT769 = TT769
+type TT770 = TT770
+type TT771 = TT771
+type TT772 = TT772
+type TT773 = TT773
+type TT774 = TT774
+type TT775 = TT775
+type TT776 = TT776
+type TT777 = TT777
+type TT778 = TT778
+type TT779 = TT779
+type TT780 = TT780
+type TT781 = TT781
+type TT782 = TT782
+type TT783 = TT783
+type TT784 = TT784
+type TT785 = TT785
+type TT786 = TT786
+type TT787 = TT787
+type TT788 = TT788
+type TT789 = TT789
+type TT790 = TT790
+type TT791 = TT791
+type TT792 = TT792
+type TT793 = TT793
+type TT794 = TT794
+type TT795 = TT795
+type TT796 = TT796
+type TT797 = TT797
+type TT798 = TT798
+type TT799 = TT799
+type TT800 = TT800
+type TT801 = TT801
+type TT802 = TT802
+type TT803 = TT803
+type TT804 = TT804
+type TT805 = TT805
+type TT806 = TT806
+type TT807 = TT807
+type TT808 = TT808
+type TT809 = TT809
+type TT810 = TT810
+type TT811 = TT811
+type TT812 = TT812
+type TT813 = TT813
+type TT814 = TT814
+type TT815 = TT815
+type TT816 = TT816
+type TT817 = TT817
+type TT818 = TT818
+type TT819 = TT819
+type TT820 = TT820
+type TT821 = TT821
+type TT822 = TT822
+type TT823 = TT823
+type TT824 = TT824
+type TT825 = TT825
+type TT826 = TT826
+type TT827 = TT827
+type TT828 = TT828
+type TT829 = TT829
+type TT830 = TT830
+type TT831 = TT831
+type TT832 = TT832
+type TT833 = TT833
+type TT834 = TT834
+type TT835 = TT835
+type TT836 = TT836
+type TT837 = TT837
+type TT838 = TT838
+type TT839 = TT839
+type TT840 = TT840
+type TT841 = TT841
+type TT842 = TT842
+type TT843 = TT843
+type TT844 = TT844
+type TT845 = TT845
+type TT846 = TT846
+type TT847 = TT847
+type TT848 = TT848
+type TT849 = TT849
+type TT850 = TT850
+type TT851 = TT851
+type TT852 = TT852
+type TT853 = TT853
+type TT854 = TT854
+type TT855 = TT855
+type TT856 = TT856
+type TT857 = TT857
+type TT858 = TT858
+type TT859 = TT859
+type TT860 = TT860
+type TT861 = TT861
+type TT862 = TT862
+type TT863 = TT863
+type TT864 = TT864
+type TT865 = TT865
+type TT866 = TT866
+type TT867 = TT867
+type TT868 = TT868
+type TT869 = TT869
+type TT870 = TT870
+type TT871 = TT871
+type TT872 = TT872
+type TT873 = TT873
+type TT874 = TT874
+type TT875 = TT875
+type TT876 = TT876
+type TT877 = TT877
+type TT878 = TT878
+type TT879 = TT879
+type TT880 = TT880
+type TT881 = TT881
+type TT882 = TT882
+type TT883 = TT883
+type TT884 = TT884
+type TT885 = TT885
+type TT886 = TT886
+type TT887 = TT887
+type TT888 = TT888
+type TT889 = TT889
+type TT890 = TT890
+type TT891 = TT891
+type TT892 = TT892
+type TT893 = TT893
+type TT894 = TT894
+type TT895 = TT895
+type TT896 = TT896
+type TT897 = TT897
+type TT898 = TT898
+type TT899 = TT899
+type TT900 = TT900
+type TT901 = TT901
+type TT902 = TT902
+type TT903 = TT903
+type TT904 = TT904
+type TT905 = TT905
+type TT906 = TT906
+type TT907 = TT907
+type TT908 = TT908
+type TT909 = TT909
+type TT910 = TT910
+type TT911 = TT911
+type TT912 = TT912
+type TT913 = TT913
+type TT914 = TT914
+type TT915 = TT915
+type TT916 = TT916
+type TT917 = TT917
+type TT918 = TT918
+type TT919 = TT919
+type TT920 = TT920
+type TT921 = TT921
+type TT922 = TT922
+type TT923 = TT923
+type TT924 = TT924
+type TT925 = TT925
+type TT926 = TT926
+type TT927 = TT927
+type TT928 = TT928
+type TT929 = TT929
+type TT930 = TT930
+type TT931 = TT931
+type TT932 = TT932
+type TT933 = TT933
+type TT934 = TT934
+type TT935 = TT935
+type TT936 = TT936
+type TT937 = TT937
+type TT938 = TT938
+type TT939 = TT939
+type TT940 = TT940
+type TT941 = TT941
+type TT942 = TT942
+type TT943 = TT943
+type TT944 = TT944
+type TT945 = TT945
+type TT946 = TT946
+type TT947 = TT947
+type TT948 = TT948
+type TT949 = TT949
+type TT950 = TT950
+type TT951 = TT951
+type TT952 = TT952
+type TT953 = TT953
+type TT954 = TT954
+type TT955 = TT955
+type TT956 = TT956
+type TT957 = TT957
+type TT958 = TT958
+type TT959 = TT959
+type TT960 = TT960
+type TT961 = TT961
+type TT962 = TT962
+type TT963 = TT963
+type TT964 = TT964
+type TT965 = TT965
+type TT966 = TT966
+type TT967 = TT967
+type TT968 = TT968
+type TT969 = TT969
+type TT970 = TT970
+type TT971 = TT971
+type TT972 = TT972
+type TT973 = TT973
+type TT974 = TT974
+type TT975 = TT975
+type TT976 = TT976
+type TT977 = TT977
+type TT978 = TT978
+type TT979 = TT979
+type TT980 = TT980
+type TT981 = TT981
+type TT982 = TT982
+type TT983 = TT983
+type TT984 = TT984
+type TT985 = TT985
+type TT986 = TT986
+type TT987 = TT987
+type TT988 = TT988
+type TT989 = TT989
+type TT990 = TT990
+type TT991 = TT991
+type TT992 = TT992
+type TT993 = TT993
+type TT994 = TT994
+type TT995 = TT995
+type TT996 = TT996
+type TT997 = TT997
+type TT998 = TT998
+type TT999 = TT999
+type TT1000 = TT1000
\ No newline at end of file
diff --git a/tests/projects/vs2019slow/vs2019slow/Script3.fsx b/tests/projects/vs2019slow/vs2019slow/Script3.fsx
new file mode 100644
index 00000000000..d38e9edc977
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/Script3.fsx
@@ -0,0 +1,1101 @@
+type T1 = T1
+type T2 = T2
+type T3 = T3
+type T4 = T4
+type T5 = T5
+type T6 = T6
+type T7 = T7
+type T8 = T8
+type T9 = T9
+type T10 = T10
+type T11 = T11
+type T12 = T12
+type T13 = T13
+type T14 = T14
+type T15 = T15
+type T16 = T16
+type T17 = T17
+type T18 = T18
+type T19 = T19
+type T20 = T20
+type T21 = T21
+type T22 = T22
+type T23 = T23
+type T24 = T24
+type T25 = T25
+type T26 = T26
+type T27 = T27
+type T28 = T28
+type T29 = T29
+type T30 = T30
+type T31 = T31
+type T32 = T32
+type T33 = T33
+type T34 = T34
+type T35 = T35
+type T36 = T36
+type T37 = T37
+type T38 = T38
+type T39 = T39
+type T40 = T40
+type T41 = T41
+type T42 = T42
+type T43 = T43
+type T44 = T44
+type T45 = T45
+type T46 = T46
+type T47 = T47
+type T48 = T48
+type T49 = T49
+type T50 = T50
+type T51 = T51
+type T52 = T52
+type T53 = T53
+type T54 = T54
+type T55 = T55
+type T56 = T56
+type T57 = T57
+type T58 = T58
+type T59 = T59
+type T60 = T60
+type T61 = T61
+type T62 = T62
+type T63 = T63
+type T64 = T64
+type T65 = T65
+type T66 = T66
+type T67 = T67
+type T68 = T68
+type T69 = T69
+type T70 = T70
+type T71 = T71
+type T72 = T72
+type T73 = T73
+type T74 = T74
+type T75 = T75
+type T76 = T76
+type T77 = T77
+type T78 = T78
+type T79 = T79
+type T80 = T80
+type T81 = T81
+type T82 = T82
+type T83 = T83
+type T84 = T84
+type T85 = T85
+type T86 = T86
+type T87 = T87
+type T88 = T88
+type T89 = T89
+type T90 = T90
+type T91 = T91
+type T92 = T92
+type T93 = T93
+type T94 = T94
+type T95 = T95
+type T96 = T96
+type T97 = T97
+type T98 = T98
+type T99 = T99
+type T100 = T100
+type TT0 = TT0
+type TT1 = TT1
+type TT2 = TT2
+type TT3 = TT3
+type TT4 = TT4
+type TT5 = TT5
+type TT6 = TT6
+type TT7 = TT7
+type TT8 = TT8
+type TT9 = TT9
+type TT10 = TT10
+type TT11 = TT11
+type TT12 = TT12
+type TT13 = TT13
+type TT14 = TT14
+type TT15 = TT15
+type TT16 = TT16
+type TT17 = TT17
+type TT18 = TT18
+type TT19 = TT19
+type TT20 = TT20
+type TT21 = TT21
+type TT22 = TT22
+type TT23 = TT23
+type TT24 = TT24
+type TT25 = TT25
+type TT26 = TT26
+type TT27 = TT27
+type TT28 = TT28
+type TT29 = TT29
+type TT30 = TT30
+type TT31 = TT31
+type TT32 = TT32
+type TT33 = TT33
+type TT34 = TT34
+type TT35 = TT35
+type TT36 = TT36
+type TT37 = TT37
+type TT38 = TT38
+type TT39 = TT39
+type TT40 = TT40
+type TT41 = TT41
+type TT42 = TT42
+type TT43 = TT43
+type TT44 = TT44
+type TT45 = TT45
+type TT46 = TT46
+type TT47 = TT47
+type TT48 = TT48
+type TT49 = TT49
+type TT50 = TT50
+type TT51 = TT51
+type TT52 = TT52
+type TT53 = TT53
+type TT54 = TT54
+type TT55 = TT55
+type TT56 = TT56
+type TT57 = TT57
+type TT58 = TT58
+type TT59 = TT59
+type TT60 = TT60
+type TT61 = TT61
+type TT62 = TT62
+type TT63 = TT63
+type TT64 = TT64
+type TT65 = TT65
+type TT66 = TT66
+type TT67 = TT67
+type TT68 = TT68
+type TT69 = TT69
+type TT70 = TT70
+type TT71 = TT71
+type TT72 = TT72
+type TT73 = TT73
+type TT74 = TT74
+type TT75 = TT75
+type TT76 = TT76
+type TT77 = TT77
+type TT78 = TT78
+type TT79 = TT79
+type TT80 = TT80
+type TT81 = TT81
+type TT82 = TT82
+type TT83 = TT83
+type TT84 = TT84
+type TT85 = TT85
+type TT86 = TT86
+type TT87 = TT87
+type TT88 = TT88
+type TT89 = TT89
+type TT90 = TT90
+type TT91 = TT91
+type TT92 = TT92
+type TT93 = TT93
+type TT94 = TT94
+type TT95 = TT95
+type TT96 = TT96
+type TT97 = TT97
+type TT98 = TT98
+type TT99 = TT99
+type TT100 = TT100
+type TT101 = TT101
+type TT102 = TT102
+type TT103 = TT103
+type TT104 = TT104
+type TT105 = TT105
+type TT106 = TT106
+type TT107 = TT107
+type TT108 = TT108
+type TT109 = TT109
+type TT110 = TT110
+type TT111 = TT111
+type TT112 = TT112
+type TT113 = TT113
+type TT114 = TT114
+type TT115 = TT115
+type TT116 = TT116
+type TT117 = TT117
+type TT118 = TT118
+type TT119 = TT119
+type TT120 = TT120
+type TT121 = TT121
+type TT122 = TT122
+type TT123 = TT123
+type TT124 = TT124
+type TT125 = TT125
+type TT126 = TT126
+type TT127 = TT127
+type TT128 = TT128
+type TT129 = TT129
+type TT130 = TT130
+type TT131 = TT131
+type TT132 = TT132
+type TT133 = TT133
+type TT134 = TT134
+type TT135 = TT135
+type TT136 = TT136
+type TT137 = TT137
+type TT138 = TT138
+type TT139 = TT139
+type TT140 = TT140
+type TT141 = TT141
+type TT142 = TT142
+type TT143 = TT143
+type TT144 = TT144
+type TT145 = TT145
+type TT146 = TT146
+type TT147 = TT147
+type TT148 = TT148
+type TT149 = TT149
+type TT150 = TT150
+type TT151 = TT151
+type TT152 = TT152
+type TT153 = TT153
+type TT154 = TT154
+type TT155 = TT155
+type TT156 = TT156
+type TT157 = TT157
+type TT158 = TT158
+type TT159 = TT159
+type TT160 = TT160
+type TT161 = TT161
+type TT162 = TT162
+type TT163 = TT163
+type TT164 = TT164
+type TT165 = TT165
+type TT166 = TT166
+type TT167 = TT167
+type TT168 = TT168
+type TT169 = TT169
+type TT170 = TT170
+type TT171 = TT171
+type TT172 = TT172
+type TT173 = TT173
+type TT174 = TT174
+type TT175 = TT175
+type TT176 = TT176
+type TT177 = TT177
+type TT178 = TT178
+type TT179 = TT179
+type TT180 = TT180
+type TT181 = TT181
+type TT182 = TT182
+type TT183 = TT183
+type TT184 = TT184
+type TT185 = TT185
+type TT186 = TT186
+type TT187 = TT187
+type TT188 = TT188
+type TT189 = TT189
+type TT190 = TT190
+type TT191 = TT191
+type TT192 = TT192
+type TT193 = TT193
+type TT194 = TT194
+type TT195 = TT195
+type TT196 = TT196
+type TT197 = TT197
+type TT198 = TT198
+type TT199 = TT199
+type TT200 = TT200
+type TT201 = TT201
+type TT202 = TT202
+type TT203 = TT203
+type TT204 = TT204
+type TT205 = TT205
+type TT206 = TT206
+type TT207 = TT207
+type TT208 = TT208
+type TT209 = TT209
+type TT210 = TT210
+type TT211 = TT211
+type TT212 = TT212
+type TT213 = TT213
+type TT214 = TT214
+type TT215 = TT215
+type TT216 = TT216
+type TT217 = TT217
+type TT218 = TT218
+type TT219 = TT219
+type TT220 = TT220
+type TT221 = TT221
+type TT222 = TT222
+type TT223 = TT223
+type TT224 = TT224
+type TT225 = TT225
+type TT226 = TT226
+type TT227 = TT227
+type TT228 = TT228
+type TT229 = TT229
+type TT230 = TT230
+type TT231 = TT231
+type TT232 = TT232
+type TT233 = TT233
+type TT234 = TT234
+type TT235 = TT235
+type TT236 = TT236
+type TT237 = TT237
+type TT238 = TT238
+type TT239 = TT239
+type TT240 = TT240
+type TT241 = TT241
+type TT242 = TT242
+type TT243 = TT243
+type TT244 = TT244
+type TT245 = TT245
+type TT246 = TT246
+type TT247 = TT247
+type TT248 = TT248
+type TT249 = TT249
+type TT250 = TT250
+type TT251 = TT251
+type TT252 = TT252
+type TT253 = TT253
+type TT254 = TT254
+type TT255 = TT255
+type TT256 = TT256
+type TT257 = TT257
+type TT258 = TT258
+type TT259 = TT259
+type TT260 = TT260
+type TT261 = TT261
+type TT262 = TT262
+type TT263 = TT263
+type TT264 = TT264
+type TT265 = TT265
+type TT266 = TT266
+type TT267 = TT267
+type TT268 = TT268
+type TT269 = TT269
+type TT270 = TT270
+type TT271 = TT271
+type TT272 = TT272
+type TT273 = TT273
+type TT274 = TT274
+type TT275 = TT275
+type TT276 = TT276
+type TT277 = TT277
+type TT278 = TT278
+type TT279 = TT279
+type TT280 = TT280
+type TT281 = TT281
+type TT282 = TT282
+type TT283 = TT283
+type TT284 = TT284
+type TT285 = TT285
+type TT286 = TT286
+type TT287 = TT287
+type TT288 = TT288
+type TT289 = TT289
+type TT290 = TT290
+type TT291 = TT291
+type TT292 = TT292
+type TT293 = TT293
+type TT294 = TT294
+type TT295 = TT295
+type TT296 = TT296
+type TT297 = TT297
+type TT298 = TT298
+type TT299 = TT299
+type TT300 = TT300
+type TT301 = TT301
+type TT302 = TT302
+type TT303 = TT303
+type TT304 = TT304
+type TT305 = TT305
+type TT306 = TT306
+type TT307 = TT307
+type TT308 = TT308
+type TT309 = TT309
+type TT310 = TT310
+type TT311 = TT311
+type TT312 = TT312
+type TT313 = TT313
+type TT314 = TT314
+type TT315 = TT315
+type TT316 = TT316
+type TT317 = TT317
+type TT318 = TT318
+type TT319 = TT319
+type TT320 = TT320
+type TT321 = TT321
+type TT322 = TT322
+type TT323 = TT323
+type TT324 = TT324
+type TT325 = TT325
+type TT326 = TT326
+type TT327 = TT327
+type TT328 = TT328
+type TT329 = TT329
+type TT330 = TT330
+type TT331 = TT331
+type TT332 = TT332
+type TT333 = TT333
+type TT334 = TT334
+type TT335 = TT335
+type TT336 = TT336
+type TT337 = TT337
+type TT338 = TT338
+type TT339 = TT339
+type TT340 = TT340
+type TT341 = TT341
+type TT342 = TT342
+type TT343 = TT343
+type TT344 = TT344
+type TT345 = TT345
+type TT346 = TT346
+type TT347 = TT347
+type TT348 = TT348
+type TT349 = TT349
+type TT350 = TT350
+type TT351 = TT351
+type TT352 = TT352
+type TT353 = TT353
+type TT354 = TT354
+type TT355 = TT355
+type TT356 = TT356
+type TT357 = TT357
+type TT358 = TT358
+type TT359 = TT359
+type TT360 = TT360
+type TT361 = TT361
+type TT362 = TT362
+type TT363 = TT363
+type TT364 = TT364
+type TT365 = TT365
+type TT366 = TT366
+type TT367 = TT367
+type TT368 = TT368
+type TT369 = TT369
+type TT370 = TT370
+type TT371 = TT371
+type TT372 = TT372
+type TT373 = TT373
+type TT374 = TT374
+type TT375 = TT375
+type TT376 = TT376
+type TT377 = TT377
+type TT378 = TT378
+type TT379 = TT379
+type TT380 = TT380
+type TT381 = TT381
+type TT382 = TT382
+type TT383 = TT383
+type TT384 = TT384
+type TT385 = TT385
+type TT386 = TT386
+type TT387 = TT387
+type TT388 = TT388
+type TT389 = TT389
+type TT390 = TT390
+type TT391 = TT391
+type TT392 = TT392
+type TT393 = TT393
+type TT394 = TT394
+type TT395 = TT395
+type TT396 = TT396
+type TT397 = TT397
+type TT398 = TT398
+type TT399 = TT399
+type TT400 = TT400
+type TT401 = TT401
+type TT402 = TT402
+type TT403 = TT403
+type TT404 = TT404
+type TT405 = TT405
+type TT406 = TT406
+type TT407 = TT407
+type TT408 = TT408
+type TT409 = TT409
+type TT410 = TT410
+type TT411 = TT411
+type TT412 = TT412
+type TT413 = TT413
+type TT414 = TT414
+type TT415 = TT415
+type TT416 = TT416
+type TT417 = TT417
+type TT418 = TT418
+type TT419 = TT419
+type TT420 = TT420
+type TT421 = TT421
+type TT422 = TT422
+type TT423 = TT423
+type TT424 = TT424
+type TT425 = TT425
+type TT426 = TT426
+type TT427 = TT427
+type TT428 = TT428
+type TT429 = TT429
+type TT430 = TT430
+type TT431 = TT431
+type TT432 = TT432
+type TT433 = TT433
+type TT434 = TT434
+type TT435 = TT435
+type TT436 = TT436
+type TT437 = TT437
+type TT438 = TT438
+type TT439 = TT439
+type TT440 = TT440
+type TT441 = TT441
+type TT442 = TT442
+type TT443 = TT443
+type TT444 = TT444
+type TT445 = TT445
+type TT446 = TT446
+type TT447 = TT447
+type TT448 = TT448
+type TT449 = TT449
+type TT450 = TT450
+type TT451 = TT451
+type TT452 = TT452
+type TT453 = TT453
+type TT454 = TT454
+type TT455 = TT455
+type TT456 = TT456
+type TT457 = TT457
+type TT458 = TT458
+type TT459 = TT459
+type TT460 = TT460
+type TT461 = TT461
+type TT462 = TT462
+type TT463 = TT463
+type TT464 = TT464
+type TT465 = TT465
+type TT466 = TT466
+type TT467 = TT467
+type TT468 = TT468
+type TT469 = TT469
+type TT470 = TT470
+type TT471 = TT471
+type TT472 = TT472
+type TT473 = TT473
+type TT474 = TT474
+type TT475 = TT475
+type TT476 = TT476
+type TT477 = TT477
+type TT478 = TT478
+type TT479 = TT479
+type TT480 = TT480
+type TT481 = TT481
+type TT482 = TT482
+type TT483 = TT483
+type TT484 = TT484
+type TT485 = TT485
+type TT486 = TT486
+type TT487 = TT487
+type TT488 = TT488
+type TT489 = TT489
+type TT490 = TT490
+type TT491 = TT491
+type TT492 = TT492
+type TT493 = TT493
+type TT494 = TT494
+type TT495 = TT495
+type TT496 = TT496
+type TT497 = TT497
+type TT498 = TT498
+type TT499 = TT499
+type TT500 = TT500
+type TT501 = TT501
+type TT502 = TT502
+type TT503 = TT503
+type TT504 = TT504
+type TT505 = TT505
+type TT506 = TT506
+type TT507 = TT507
+type TT508 = TT508
+type TT509 = TT509
+type TT510 = TT510
+type TT511 = TT511
+type TT512 = TT512
+type TT513 = TT513
+type TT514 = TT514
+type TT515 = TT515
+type TT516 = TT516
+type TT517 = TT517
+type TT518 = TT518
+type TT519 = TT519
+type TT520 = TT520
+type TT521 = TT521
+type TT522 = TT522
+type TT523 = TT523
+type TT524 = TT524
+type TT525 = TT525
+type TT526 = TT526
+type TT527 = TT527
+type TT528 = TT528
+type TT529 = TT529
+type TT530 = TT530
+type TT531 = TT531
+type TT532 = TT532
+type TT533 = TT533
+type TT534 = TT534
+type TT535 = TT535
+type TT536 = TT536
+type TT537 = TT537
+type TT538 = TT538
+type TT539 = TT539
+type TT540 = TT540
+type TT541 = TT541
+type TT542 = TT542
+type TT543 = TT543
+type TT544 = TT544
+type TT545 = TT545
+type TT546 = TT546
+type TT547 = TT547
+type TT548 = TT548
+type TT549 = TT549
+type TT550 = TT550
+type TT551 = TT551
+type TT552 = TT552
+type TT553 = TT553
+type TT554 = TT554
+type TT555 = TT555
+type TT556 = TT556
+type TT557 = TT557
+type TT558 = TT558
+type TT559 = TT559
+type TT560 = TT560
+type TT561 = TT561
+type TT562 = TT562
+type TT563 = TT563
+type TT564 = TT564
+type TT565 = TT565
+type TT566 = TT566
+type TT567 = TT567
+type TT568 = TT568
+type TT569 = TT569
+type TT570 = TT570
+type TT571 = TT571
+type TT572 = TT572
+type TT573 = TT573
+type TT574 = TT574
+type TT575 = TT575
+type TT576 = TT576
+type TT577 = TT577
+type TT578 = TT578
+type TT579 = TT579
+type TT580 = TT580
+type TT581 = TT581
+type TT582 = TT582
+type TT583 = TT583
+type TT584 = TT584
+type TT585 = TT585
+type TT586 = TT586
+type TT587 = TT587
+type TT588 = TT588
+type TT589 = TT589
+type TT590 = TT590
+type TT591 = TT591
+type TT592 = TT592
+type TT593 = TT593
+type TT594 = TT594
+type TT595 = TT595
+type TT596 = TT596
+type TT597 = TT597
+type TT598 = TT598
+type TT599 = TT599
+type TT600 = TT600
+type TT601 = TT601
+type TT602 = TT602
+type TT603 = TT603
+type TT604 = TT604
+type TT605 = TT605
+type TT606 = TT606
+type TT607 = TT607
+type TT608 = TT608
+type TT609 = TT609
+type TT610 = TT610
+type TT611 = TT611
+type TT612 = TT612
+type TT613 = TT613
+type TT614 = TT614
+type TT615 = TT615
+type TT616 = TT616
+type TT617 = TT617
+type TT618 = TT618
+type TT619 = TT619
+type TT620 = TT620
+type TT621 = TT621
+type TT622 = TT622
+type TT623 = TT623
+type TT624 = TT624
+type TT625 = TT625
+type TT626 = TT626
+type TT627 = TT627
+type TT628 = TT628
+type TT629 = TT629
+type TT630 = TT630
+type TT631 = TT631
+type TT632 = TT632
+type TT633 = TT633
+type TT634 = TT634
+type TT635 = TT635
+type TT636 = TT636
+type TT637 = TT637
+type TT638 = TT638
+type TT639 = TT639
+type TT640 = TT640
+type TT641 = TT641
+type TT642 = TT642
+type TT643 = TT643
+type TT644 = TT644
+type TT645 = TT645
+type TT646 = TT646
+type TT647 = TT647
+type TT648 = TT648
+type TT649 = TT649
+type TT650 = TT650
+type TT651 = TT651
+type TT652 = TT652
+type TT653 = TT653
+type TT654 = TT654
+type TT655 = TT655
+type TT656 = TT656
+type TT657 = TT657
+type TT658 = TT658
+type TT659 = TT659
+type TT660 = TT660
+type TT661 = TT661
+type TT662 = TT662
+type TT663 = TT663
+type TT664 = TT664
+type TT665 = TT665
+type TT666 = TT666
+type TT667 = TT667
+type TT668 = TT668
+type TT669 = TT669
+type TT670 = TT670
+type TT671 = TT671
+type TT672 = TT672
+type TT673 = TT673
+type TT674 = TT674
+type TT675 = TT675
+type TT676 = TT676
+type TT677 = TT677
+type TT678 = TT678
+type TT679 = TT679
+type TT680 = TT680
+type TT681 = TT681
+type TT682 = TT682
+type TT683 = TT683
+type TT684 = TT684
+type TT685 = TT685
+type TT686 = TT686
+type TT687 = TT687
+type TT688 = TT688
+type TT689 = TT689
+type TT690 = TT690
+type TT691 = TT691
+type TT692 = TT692
+type TT693 = TT693
+type TT694 = TT694
+type TT695 = TT695
+type TT696 = TT696
+type TT697 = TT697
+type TT698 = TT698
+type TT699 = TT699
+type TT700 = TT700
+type TT701 = TT701
+type TT702 = TT702
+type TT703 = TT703
+type TT704 = TT704
+type TT705 = TT705
+type TT706 = TT706
+type TT707 = TT707
+type TT708 = TT708
+type TT709 = TT709
+type TT710 = TT710
+type TT711 = TT711
+type TT712 = TT712
+type TT713 = TT713
+type TT714 = TT714
+type TT715 = TT715
+type TT716 = TT716
+type TT717 = TT717
+type TT718 = TT718
+type TT719 = TT719
+type TT720 = TT720
+type TT721 = TT721
+type TT722 = TT722
+type TT723 = TT723
+type TT724 = TT724
+type TT725 = TT725
+type TT726 = TT726
+type TT727 = TT727
+type TT728 = TT728
+type TT729 = TT729
+type TT730 = TT730
+type TT731 = TT731
+type TT732 = TT732
+type TT733 = TT733
+type TT734 = TT734
+type TT735 = TT735
+type TT736 = TT736
+type TT737 = TT737
+type TT738 = TT738
+type TT739 = TT739
+type TT740 = TT740
+type TT741 = TT741
+type TT742 = TT742
+type TT743 = TT743
+type TT744 = TT744
+type TT745 = TT745
+type TT746 = TT746
+type TT747 = TT747
+type TT748 = TT748
+type TT749 = TT749
+type TT750 = TT750
+type TT751 = TT751
+type TT752 = TT752
+type TT753 = TT753
+type TT754 = TT754
+type TT755 = TT755
+type TT756 = TT756
+type TT757 = TT757
+type TT758 = TT758
+type TT759 = TT759
+type TT760 = TT760
+type TT761 = TT761
+type TT762 = TT762
+type TT763 = TT763
+type TT764 = TT764
+type TT765 = TT765
+type TT766 = TT766
+type TT767 = TT767
+type TT768 = TT768
+type TT769 = TT769
+type TT770 = TT770
+type TT771 = TT771
+type TT772 = TT772
+type TT773 = TT773
+type TT774 = TT774
+type TT775 = TT775
+type TT776 = TT776
+type TT777 = TT777
+type TT778 = TT778
+type TT779 = TT779
+type TT780 = TT780
+type TT781 = TT781
+type TT782 = TT782
+type TT783 = TT783
+type TT784 = TT784
+type TT785 = TT785
+type TT786 = TT786
+type TT787 = TT787
+type TT788 = TT788
+type TT789 = TT789
+type TT790 = TT790
+type TT791 = TT791
+type TT792 = TT792
+type TT793 = TT793
+type TT794 = TT794
+type TT795 = TT795
+type TT796 = TT796
+type TT797 = TT797
+type TT798 = TT798
+type TT799 = TT799
+type TT800 = TT800
+type TT801 = TT801
+type TT802 = TT802
+type TT803 = TT803
+type TT804 = TT804
+type TT805 = TT805
+type TT806 = TT806
+type TT807 = TT807
+type TT808 = TT808
+type TT809 = TT809
+type TT810 = TT810
+type TT811 = TT811
+type TT812 = TT812
+type TT813 = TT813
+type TT814 = TT814
+type TT815 = TT815
+type TT816 = TT816
+type TT817 = TT817
+type TT818 = TT818
+type TT819 = TT819
+type TT820 = TT820
+type TT821 = TT821
+type TT822 = TT822
+type TT823 = TT823
+type TT824 = TT824
+type TT825 = TT825
+type TT826 = TT826
+type TT827 = TT827
+type TT828 = TT828
+type TT829 = TT829
+type TT830 = TT830
+type TT831 = TT831
+type TT832 = TT832
+type TT833 = TT833
+type TT834 = TT834
+type TT835 = TT835
+type TT836 = TT836
+type TT837 = TT837
+type TT838 = TT838
+type TT839 = TT839
+type TT840 = TT840
+type TT841 = TT841
+type TT842 = TT842
+type TT843 = TT843
+type TT844 = TT844
+type TT845 = TT845
+type TT846 = TT846
+type TT847 = TT847
+type TT848 = TT848
+type TT849 = TT849
+type TT850 = TT850
+type TT851 = TT851
+type TT852 = TT852
+type TT853 = TT853
+type TT854 = TT854
+type TT855 = TT855
+type TT856 = TT856
+type TT857 = TT857
+type TT858 = TT858
+type TT859 = TT859
+type TT860 = TT860
+type TT861 = TT861
+type TT862 = TT862
+type TT863 = TT863
+type TT864 = TT864
+type TT865 = TT865
+type TT866 = TT866
+type TT867 = TT867
+type TT868 = TT868
+type TT869 = TT869
+type TT870 = TT870
+type TT871 = TT871
+type TT872 = TT872
+type TT873 = TT873
+type TT874 = TT874
+type TT875 = TT875
+type TT876 = TT876
+type TT877 = TT877
+type TT878 = TT878
+type TT879 = TT879
+type TT880 = TT880
+type TT881 = TT881
+type TT882 = TT882
+type TT883 = TT883
+type TT884 = TT884
+type TT885 = TT885
+type TT886 = TT886
+type TT887 = TT887
+type TT888 = TT888
+type TT889 = TT889
+type TT890 = TT890
+type TT891 = TT891
+type TT892 = TT892
+type TT893 = TT893
+type TT894 = TT894
+type TT895 = TT895
+type TT896 = TT896
+type TT897 = TT897
+type TT898 = TT898
+type TT899 = TT899
+type TT900 = TT900
+type TT901 = TT901
+type TT902 = TT902
+type TT903 = TT903
+type TT904 = TT904
+type TT905 = TT905
+type TT906 = TT906
+type TT907 = TT907
+type TT908 = TT908
+type TT909 = TT909
+type TT910 = TT910
+type TT911 = TT911
+type TT912 = TT912
+type TT913 = TT913
+type TT914 = TT914
+type TT915 = TT915
+type TT916 = TT916
+type TT917 = TT917
+type TT918 = TT918
+type TT919 = TT919
+type TT920 = TT920
+type TT921 = TT921
+type TT922 = TT922
+type TT923 = TT923
+type TT924 = TT924
+type TT925 = TT925
+type TT926 = TT926
+type TT927 = TT927
+type TT928 = TT928
+type TT929 = TT929
+type TT930 = TT930
+type TT931 = TT931
+type TT932 = TT932
+type TT933 = TT933
+type TT934 = TT934
+type TT935 = TT935
+type TT936 = TT936
+type TT937 = TT937
+type TT938 = TT938
+type TT939 = TT939
+type TT940 = TT940
+type TT941 = TT941
+type TT942 = TT942
+type TT943 = TT943
+type TT944 = TT944
+type TT945 = TT945
+type TT946 = TT946
+type TT947 = TT947
+type TT948 = TT948
+type TT949 = TT949
+type TT950 = TT950
+type TT951 = TT951
+type TT952 = TT952
+type TT953 = TT953
+type TT954 = TT954
+type TT955 = TT955
+type TT956 = TT956
+type TT957 = TT957
+type TT958 = TT958
+type TT959 = TT959
+type TT960 = TT960
+type TT961 = TT961
+type TT962 = TT962
+type TT963 = TT963
+type TT964 = TT964
+type TT965 = TT965
+type TT966 = TT966
+type TT967 = TT967
+type TT968 = TT968
+type TT969 = TT969
+type TT970 = TT970
+type TT971 = TT971
+type TT972 = TT972
+type TT973 = TT973
+type TT974 = TT974
+type TT975 = TT975
+type TT976 = TT976
+type TT977 = TT977
+type TT978 = TT978
+type TT979 = TT979
+type TT980 = TT980
+type TT981 = TT981
+type TT982 = TT982
+type TT983 = TT983
+type TT984 = TT984
+type TT985 = TT985
+type TT986 = TT986
+type TT987 = TT987
+type TT988 = TT988
+type TT989 = TT989
+type TT990 = TT990
+type TT991 = TT991
+type TT992 = TT992
+type TT993 = TT993
+type TT994 = TT994
+type TT995 = TT995
+type TT996 = TT996
+type TT997 = TT997
+type TT998 = TT998
+type TT999 = TT999
+type TT1000 = TT1000
\ No newline at end of file
diff --git a/tests/projects/vs2019slow/vs2019slow/Script4.fsx b/tests/projects/vs2019slow/vs2019slow/Script4.fsx
new file mode 100644
index 00000000000..a895673af4c
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/Script4.fsx
@@ -0,0 +1,1103 @@
+type T1 = T1
+type T2 = T2
+type T3 = T3
+type T4 = T4
+type T5 = T5
+type T6 = T6
+type T7 = T7
+type T8 = T8
+type T9 = T9
+type T10 = T10
+type T11 = T11
+type T12 = T12
+type T13 = T13
+type T14 = T14
+type T15 = T15
+type T16 = T16
+type T17 = T17
+type T18 = T18
+type T19 = T19
+type T20 = T20
+type T21 = T21
+type T22 = T22
+type T23 = T23
+type T24 = T24
+type T25 = T25
+type T26 = T26
+type T27 = T27
+type T28 = T28
+type T29 = T29
+type T30 = T30
+type T31 = T31
+type T32 = T32
+type T33 = T33
+type T34 = T34
+type T35 = T35
+type T36 = T36
+type T37 = T37
+type T38 = T38
+type T39 = T39
+type T40 = T40
+type T41 = T41
+type T42 = T42
+type T43 = T43
+type T44 = T44
+type T45 = T45
+type T46 = T46
+type T47 = T47
+type T48 = T48
+type T49 = T49
+type T50 = T50
+type T51 = T51
+type T52 = T52
+type T53 = T53
+type T54 = T54
+type T55 = T55
+type T56 = T56
+type T57 = T57
+type T58 = T58
+type T59 = T59
+type T60 = T60
+type T61 = T61
+type T62 = T62
+type T63 = T63
+type T64 = T64
+type T65 = T65
+type T66 = T66
+type T67 = T67
+type T68 = T68
+type T69 = T69
+type T70 = T70
+type T71 = T71
+type T72 = T72
+type T73 = T73
+type T74 = T74
+type T75 = T75
+type T76 = T76
+type T77 = T77
+type T78 = T78
+type T79 = T79
+type T80 = T80
+type T81 = T81
+type T82 = T82
+type T83 = T83
+type T84 = T84
+type T85 = T85
+type T86 = T86
+type T87 = T87
+type T88 = T88
+type T89 = T89
+type T90 = T90
+type T91 = T91
+type T92 = T92
+type T93 = T93
+type T94 = T94
+type T95 = T95
+type T96 = T96
+type T97 = T97
+type T98 = T98
+type T99 = T99
+type T100 = T100
+
+
+type TT0 = TT0
+type TT1 = TT1
+type TT2 = TT2
+type TT3 = TT3
+type TT4 = TT4
+type TT5 = TT5
+type TT6 = TT6
+type TT7 = TT7
+type TT8 = TT8
+type TT9 = TT9
+type TT10 = TT10
+type TT11 = TT11
+type TT12 = TT12
+type TT13 = TT13
+type TT14 = TT14
+type TT15 = TT15
+type TT16 = TT16
+type TT17 = TT17
+type TT18 = TT18
+type TT19 = TT19
+type TT20 = TT20
+type TT21 = TT21
+type TT22 = TT22
+type TT23 = TT23
+type TT24 = TT24
+type TT25 = TT25
+type TT26 = TT26
+type TT27 = TT27
+type TT28 = TT28
+type TT29 = TT29
+type TT30 = TT30
+type TT31 = TT31
+type TT32 = TT32
+type TT33 = TT33
+type TT34 = TT34
+type TT35 = TT35
+type TT36 = TT36
+type TT37 = TT37
+type TT38 = TT38
+type TT39 = TT39
+type TT40 = TT40
+type TT41 = TT41
+type TT42 = TT42
+type TT43 = TT43
+type TT44 = TT44
+type TT45 = TT45
+type TT46 = TT46
+type TT47 = TT47
+type TT48 = TT48
+type TT49 = TT49
+type TT50 = TT50
+type TT51 = TT51
+type TT52 = TT52
+type TT53 = TT53
+type TT54 = TT54
+type TT55 = TT55
+type TT56 = TT56
+type TT57 = TT57
+type TT58 = TT58
+type TT59 = TT59
+type TT60 = TT60
+type TT61 = TT61
+type TT62 = TT62
+type TT63 = TT63
+type TT64 = TT64
+type TT65 = TT65
+type TT66 = TT66
+type TT67 = TT67
+type TT68 = TT68
+type TT69 = TT69
+type TT70 = TT70
+type TT71 = TT71
+type TT72 = TT72
+type TT73 = TT73
+type TT74 = TT74
+type TT75 = TT75
+type TT76 = TT76
+type TT77 = TT77
+type TT78 = TT78
+type TT79 = TT79
+type TT80 = TT80
+type TT81 = TT81
+type TT82 = TT82
+type TT83 = TT83
+type TT84 = TT84
+type TT85 = TT85
+type TT86 = TT86
+type TT87 = TT87
+type TT88 = TT88
+type TT89 = TT89
+type TT90 = TT90
+type TT91 = TT91
+type TT92 = TT92
+type TT93 = TT93
+type TT94 = TT94
+type TT95 = TT95
+type TT96 = TT96
+type TT97 = TT97
+type TT98 = TT98
+type TT99 = TT99
+type TT100 = TT100
+type TT101 = TT101
+type TT102 = TT102
+type TT103 = TT103
+type TT104 = TT104
+type TT105 = TT105
+type TT106 = TT106
+type TT107 = TT107
+type TT108 = TT108
+type TT109 = TT109
+type TT110 = TT110
+type TT111 = TT111
+type TT112 = TT112
+type TT113 = TT113
+type TT114 = TT114
+type TT115 = TT115
+type TT116 = TT116
+type TT117 = TT117
+type TT118 = TT118
+type TT119 = TT119
+type TT120 = TT120
+type TT121 = TT121
+type TT122 = TT122
+type TT123 = TT123
+type TT124 = TT124
+type TT125 = TT125
+type TT126 = TT126
+type TT127 = TT127
+type TT128 = TT128
+type TT129 = TT129
+type TT130 = TT130
+type TT131 = TT131
+type TT132 = TT132
+type TT133 = TT133
+type TT134 = TT134
+type TT135 = TT135
+type TT136 = TT136
+type TT137 = TT137
+type TT138 = TT138
+type TT139 = TT139
+type TT140 = TT140
+type TT141 = TT141
+type TT142 = TT142
+type TT143 = TT143
+type TT144 = TT144
+type TT145 = TT145
+type TT146 = TT146
+type TT147 = TT147
+type TT148 = TT148
+type TT149 = TT149
+type TT150 = TT150
+type TT151 = TT151
+type TT152 = TT152
+type TT153 = TT153
+type TT154 = TT154
+type TT155 = TT155
+type TT156 = TT156
+type TT157 = TT157
+type TT158 = TT158
+type TT159 = TT159
+type TT160 = TT160
+type TT161 = TT161
+type TT162 = TT162
+type TT163 = TT163
+type TT164 = TT164
+type TT165 = TT165
+type TT166 = TT166
+type TT167 = TT167
+type TT168 = TT168
+type TT169 = TT169
+type TT170 = TT170
+type TT171 = TT171
+type TT172 = TT172
+type TT173 = TT173
+type TT174 = TT174
+type TT175 = TT175
+type TT176 = TT176
+type TT177 = TT177
+type TT178 = TT178
+type TT179 = TT179
+type TT180 = TT180
+type TT181 = TT181
+type TT182 = TT182
+type TT183 = TT183
+type TT184 = TT184
+type TT185 = TT185
+type TT186 = TT186
+type TT187 = TT187
+type TT188 = TT188
+type TT189 = TT189
+type TT190 = TT190
+type TT191 = TT191
+type TT192 = TT192
+type TT193 = TT193
+type TT194 = TT194
+type TT195 = TT195
+type TT196 = TT196
+type TT197 = TT197
+type TT198 = TT198
+type TT199 = TT199
+type TT200 = TT200
+type TT201 = TT201
+type TT202 = TT202
+type TT203 = TT203
+type TT204 = TT204
+type TT205 = TT205
+type TT206 = TT206
+type TT207 = TT207
+type TT208 = TT208
+type TT209 = TT209
+type TT210 = TT210
+type TT211 = TT211
+type TT212 = TT212
+type TT213 = TT213
+type TT214 = TT214
+type TT215 = TT215
+type TT216 = TT216
+type TT217 = TT217
+type TT218 = TT218
+type TT219 = TT219
+type TT220 = TT220
+type TT221 = TT221
+type TT222 = TT222
+type TT223 = TT223
+type TT224 = TT224
+type TT225 = TT225
+type TT226 = TT226
+type TT227 = TT227
+type TT228 = TT228
+type TT229 = TT229
+type TT230 = TT230
+type TT231 = TT231
+type TT232 = TT232
+type TT233 = TT233
+type TT234 = TT234
+type TT235 = TT235
+type TT236 = TT236
+type TT237 = TT237
+type TT238 = TT238
+type TT239 = TT239
+type TT240 = TT240
+type TT241 = TT241
+type TT242 = TT242
+type TT243 = TT243
+type TT244 = TT244
+type TT245 = TT245
+type TT246 = TT246
+type TT247 = TT247
+type TT248 = TT248
+type TT249 = TT249
+type TT250 = TT250
+type TT251 = TT251
+type TT252 = TT252
+type TT253 = TT253
+type TT254 = TT254
+type TT255 = TT255
+type TT256 = TT256
+type TT257 = TT257
+type TT258 = TT258
+type TT259 = TT259
+type TT260 = TT260
+type TT261 = TT261
+type TT262 = TT262
+type TT263 = TT263
+type TT264 = TT264
+type TT265 = TT265
+type TT266 = TT266
+type TT267 = TT267
+type TT268 = TT268
+type TT269 = TT269
+type TT270 = TT270
+type TT271 = TT271
+type TT272 = TT272
+type TT273 = TT273
+type TT274 = TT274
+type TT275 = TT275
+type TT276 = TT276
+type TT277 = TT277
+type TT278 = TT278
+type TT279 = TT279
+type TT280 = TT280
+type TT281 = TT281
+type TT282 = TT282
+type TT283 = TT283
+type TT284 = TT284
+type TT285 = TT285
+type TT286 = TT286
+type TT287 = TT287
+type TT288 = TT288
+type TT289 = TT289
+type TT290 = TT290
+type TT291 = TT291
+type TT292 = TT292
+type TT293 = TT293
+type TT294 = TT294
+type TT295 = TT295
+type TT296 = TT296
+type TT297 = TT297
+type TT298 = TT298
+type TT299 = TT299
+type TT300 = TT300
+type TT301 = TT301
+type TT302 = TT302
+type TT303 = TT303
+type TT304 = TT304
+type TT305 = TT305
+type TT306 = TT306
+type TT307 = TT307
+type TT308 = TT308
+type TT309 = TT309
+type TT310 = TT310
+type TT311 = TT311
+type TT312 = TT312
+type TT313 = TT313
+type TT314 = TT314
+type TT315 = TT315
+type TT316 = TT316
+type TT317 = TT317
+type TT318 = TT318
+type TT319 = TT319
+type TT320 = TT320
+type TT321 = TT321
+type TT322 = TT322
+type TT323 = TT323
+type TT324 = TT324
+type TT325 = TT325
+type TT326 = TT326
+type TT327 = TT327
+type TT328 = TT328
+type TT329 = TT329
+type TT330 = TT330
+type TT331 = TT331
+type TT332 = TT332
+type TT333 = TT333
+type TT334 = TT334
+type TT335 = TT335
+type TT336 = TT336
+type TT337 = TT337
+type TT338 = TT338
+type TT339 = TT339
+type TT340 = TT340
+type TT341 = TT341
+type TT342 = TT342
+type TT343 = TT343
+type TT344 = TT344
+type TT345 = TT345
+type TT346 = TT346
+type TT347 = TT347
+type TT348 = TT348
+type TT349 = TT349
+type TT350 = TT350
+type TT351 = TT351
+type TT352 = TT352
+type TT353 = TT353
+type TT354 = TT354
+type TT355 = TT355
+type TT356 = TT356
+type TT357 = TT357
+type TT358 = TT358
+type TT359 = TT359
+type TT360 = TT360
+type TT361 = TT361
+type TT362 = TT362
+type TT363 = TT363
+type TT364 = TT364
+type TT365 = TT365
+type TT366 = TT366
+type TT367 = TT367
+type TT368 = TT368
+type TT369 = TT369
+type TT370 = TT370
+type TT371 = TT371
+type TT372 = TT372
+type TT373 = TT373
+type TT374 = TT374
+type TT375 = TT375
+type TT376 = TT376
+type TT377 = TT377
+type TT378 = TT378
+type TT379 = TT379
+type TT380 = TT380
+type TT381 = TT381
+type TT382 = TT382
+type TT383 = TT383
+type TT384 = TT384
+type TT385 = TT385
+type TT386 = TT386
+type TT387 = TT387
+type TT388 = TT388
+type TT389 = TT389
+type TT390 = TT390
+type TT391 = TT391
+type TT392 = TT392
+type TT393 = TT393
+type TT394 = TT394
+type TT395 = TT395
+type TT396 = TT396
+type TT397 = TT397
+type TT398 = TT398
+type TT399 = TT399
+type TT400 = TT400
+type TT401 = TT401
+type TT402 = TT402
+type TT403 = TT403
+type TT404 = TT404
+type TT405 = TT405
+type TT406 = TT406
+type TT407 = TT407
+type TT408 = TT408
+type TT409 = TT409
+type TT410 = TT410
+type TT411 = TT411
+type TT412 = TT412
+type TT413 = TT413
+type TT414 = TT414
+type TT415 = TT415
+type TT416 = TT416
+type TT417 = TT417
+type TT418 = TT418
+type TT419 = TT419
+type TT420 = TT420
+type TT421 = TT421
+type TT422 = TT422
+type TT423 = TT423
+type TT424 = TT424
+type TT425 = TT425
+type TT426 = TT426
+type TT427 = TT427
+type TT428 = TT428
+type TT429 = TT429
+type TT430 = TT430
+type TT431 = TT431
+type TT432 = TT432
+type TT433 = TT433
+type TT434 = TT434
+type TT435 = TT435
+type TT436 = TT436
+type TT437 = TT437
+type TT438 = TT438
+type TT439 = TT439
+type TT440 = TT440
+type TT441 = TT441
+type TT442 = TT442
+type TT443 = TT443
+type TT444 = TT444
+type TT445 = TT445
+type TT446 = TT446
+type TT447 = TT447
+type TT448 = TT448
+type TT449 = TT449
+type TT450 = TT450
+type TT451 = TT451
+type TT452 = TT452
+type TT453 = TT453
+type TT454 = TT454
+type TT455 = TT455
+type TT456 = TT456
+type TT457 = TT457
+type TT458 = TT458
+type TT459 = TT459
+type TT460 = TT460
+type TT461 = TT461
+type TT462 = TT462
+type TT463 = TT463
+type TT464 = TT464
+type TT465 = TT465
+type TT466 = TT466
+type TT467 = TT467
+type TT468 = TT468
+type TT469 = TT469
+type TT470 = TT470
+type TT471 = TT471
+type TT472 = TT472
+type TT473 = TT473
+type TT474 = TT474
+type TT475 = TT475
+type TT476 = TT476
+type TT477 = TT477
+type TT478 = TT478
+type TT479 = TT479
+type TT480 = TT480
+type TT481 = TT481
+type TT482 = TT482
+type TT483 = TT483
+type TT484 = TT484
+type TT485 = TT485
+type TT486 = TT486
+type TT487 = TT487
+type TT488 = TT488
+type TT489 = TT489
+type TT490 = TT490
+type TT491 = TT491
+type TT492 = TT492
+type TT493 = TT493
+type TT494 = TT494
+type TT495 = TT495
+type TT496 = TT496
+type TT497 = TT497
+type TT498 = TT498
+type TT499 = TT499
+type TT500 = TT500
+type TT501 = TT501
+type TT502 = TT502
+type TT503 = TT503
+type TT504 = TT504
+type TT505 = TT505
+type TT506 = TT506
+type TT507 = TT507
+type TT508 = TT508
+type TT509 = TT509
+type TT510 = TT510
+type TT511 = TT511
+type TT512 = TT512
+type TT513 = TT513
+type TT514 = TT514
+type TT515 = TT515
+type TT516 = TT516
+type TT517 = TT517
+type TT518 = TT518
+type TT519 = TT519
+type TT520 = TT520
+type TT521 = TT521
+type TT522 = TT522
+type TT523 = TT523
+type TT524 = TT524
+type TT525 = TT525
+type TT526 = TT526
+type TT527 = TT527
+type TT528 = TT528
+type TT529 = TT529
+type TT530 = TT530
+type TT531 = TT531
+type TT532 = TT532
+type TT533 = TT533
+type TT534 = TT534
+type TT535 = TT535
+type TT536 = TT536
+type TT537 = TT537
+type TT538 = TT538
+type TT539 = TT539
+type TT540 = TT540
+type TT541 = TT541
+type TT542 = TT542
+type TT543 = TT543
+type TT544 = TT544
+type TT545 = TT545
+type TT546 = TT546
+type TT547 = TT547
+type TT548 = TT548
+type TT549 = TT549
+type TT550 = TT550
+type TT551 = TT551
+type TT552 = TT552
+type TT553 = TT553
+type TT554 = TT554
+type TT555 = TT555
+type TT556 = TT556
+type TT557 = TT557
+type TT558 = TT558
+type TT559 = TT559
+type TT560 = TT560
+type TT561 = TT561
+type TT562 = TT562
+type TT563 = TT563
+type TT564 = TT564
+type TT565 = TT565
+type TT566 = TT566
+type TT567 = TT567
+type TT568 = TT568
+type TT569 = TT569
+type TT570 = TT570
+type TT571 = TT571
+type TT572 = TT572
+type TT573 = TT573
+type TT574 = TT574
+type TT575 = TT575
+type TT576 = TT576
+type TT577 = TT577
+type TT578 = TT578
+type TT579 = TT579
+type TT580 = TT580
+type TT581 = TT581
+type TT582 = TT582
+type TT583 = TT583
+type TT584 = TT584
+type TT585 = TT585
+type TT586 = TT586
+type TT587 = TT587
+type TT588 = TT588
+type TT589 = TT589
+type TT590 = TT590
+type TT591 = TT591
+type TT592 = TT592
+type TT593 = TT593
+type TT594 = TT594
+type TT595 = TT595
+type TT596 = TT596
+type TT597 = TT597
+type TT598 = TT598
+type TT599 = TT599
+type TT600 = TT600
+type TT601 = TT601
+type TT602 = TT602
+type TT603 = TT603
+type TT604 = TT604
+type TT605 = TT605
+type TT606 = TT606
+type TT607 = TT607
+type TT608 = TT608
+type TT609 = TT609
+type TT610 = TT610
+type TT611 = TT611
+type TT612 = TT612
+type TT613 = TT613
+type TT614 = TT614
+type TT615 = TT615
+type TT616 = TT616
+type TT617 = TT617
+type TT618 = TT618
+type TT619 = TT619
+type TT620 = TT620
+type TT621 = TT621
+type TT622 = TT622
+type TT623 = TT623
+type TT624 = TT624
+type TT625 = TT625
+type TT626 = TT626
+type TT627 = TT627
+type TT628 = TT628
+type TT629 = TT629
+type TT630 = TT630
+type TT631 = TT631
+type TT632 = TT632
+type TT633 = TT633
+type TT634 = TT634
+type TT635 = TT635
+type TT636 = TT636
+type TT637 = TT637
+type TT638 = TT638
+type TT639 = TT639
+type TT640 = TT640
+type TT641 = TT641
+type TT642 = TT642
+type TT643 = TT643
+type TT644 = TT644
+type TT645 = TT645
+type TT646 = TT646
+type TT647 = TT647
+type TT648 = TT648
+type TT649 = TT649
+type TT650 = TT650
+type TT651 = TT651
+type TT652 = TT652
+type TT653 = TT653
+type TT654 = TT654
+type TT655 = TT655
+type TT656 = TT656
+type TT657 = TT657
+type TT658 = TT658
+type TT659 = TT659
+type TT660 = TT660
+type TT661 = TT661
+type TT662 = TT662
+type TT663 = TT663
+type TT664 = TT664
+type TT665 = TT665
+type TT666 = TT666
+type TT667 = TT667
+type TT668 = TT668
+type TT669 = TT669
+type TT670 = TT670
+type TT671 = TT671
+type TT672 = TT672
+type TT673 = TT673
+type TT674 = TT674
+type TT675 = TT675
+type TT676 = TT676
+type TT677 = TT677
+type TT678 = TT678
+type TT679 = TT679
+type TT680 = TT680
+type TT681 = TT681
+type TT682 = TT682
+type TT683 = TT683
+type TT684 = TT684
+type TT685 = TT685
+type TT686 = TT686
+type TT687 = TT687
+type TT688 = TT688
+type TT689 = TT689
+type TT690 = TT690
+type TT691 = TT691
+type TT692 = TT692
+type TT693 = TT693
+type TT694 = TT694
+type TT695 = TT695
+type TT696 = TT696
+type TT697 = TT697
+type TT698 = TT698
+type TT699 = TT699
+type TT700 = TT700
+type TT701 = TT701
+type TT702 = TT702
+type TT703 = TT703
+type TT704 = TT704
+type TT705 = TT705
+type TT706 = TT706
+type TT707 = TT707
+type TT708 = TT708
+type TT709 = TT709
+type TT710 = TT710
+type TT711 = TT711
+type TT712 = TT712
+type TT713 = TT713
+type TT714 = TT714
+type TT715 = TT715
+type TT716 = TT716
+type TT717 = TT717
+type TT718 = TT718
+type TT719 = TT719
+type TT720 = TT720
+type TT721 = TT721
+type TT722 = TT722
+type TT723 = TT723
+type TT724 = TT724
+type TT725 = TT725
+type TT726 = TT726
+type TT727 = TT727
+type TT728 = TT728
+type TT729 = TT729
+type TT730 = TT730
+type TT731 = TT731
+type TT732 = TT732
+type TT733 = TT733
+type TT734 = TT734
+type TT735 = TT735
+type TT736 = TT736
+type TT737 = TT737
+type TT738 = TT738
+type TT739 = TT739
+type TT740 = TT740
+type TT741 = TT741
+type TT742 = TT742
+type TT743 = TT743
+type TT744 = TT744
+type TT745 = TT745
+type TT746 = TT746
+type TT747 = TT747
+type TT748 = TT748
+type TT749 = TT749
+type TT750 = TT750
+type TT751 = TT751
+type TT752 = TT752
+type TT753 = TT753
+type TT754 = TT754
+type TT755 = TT755
+type TT756 = TT756
+type TT757 = TT757
+type TT758 = TT758
+type TT759 = TT759
+type TT760 = TT760
+type TT761 = TT761
+type TT762 = TT762
+type TT763 = TT763
+type TT764 = TT764
+type TT765 = TT765
+type TT766 = TT766
+type TT767 = TT767
+type TT768 = TT768
+type TT769 = TT769
+type TT770 = TT770
+type TT771 = TT771
+type TT772 = TT772
+type TT773 = TT773
+type TT774 = TT774
+type TT775 = TT775
+type TT776 = TT776
+type TT777 = TT777
+type TT778 = TT778
+type TT779 = TT779
+type TT780 = TT780
+type TT781 = TT781
+type TT782 = TT782
+type TT783 = TT783
+type TT784 = TT784
+type TT785 = TT785
+type TT786 = TT786
+type TT787 = TT787
+type TT788 = TT788
+type TT789 = TT789
+type TT790 = TT790
+type TT791 = TT791
+type TT792 = TT792
+type TT793 = TT793
+type TT794 = TT794
+type TT795 = TT795
+type TT796 = TT796
+type TT797 = TT797
+type TT798 = TT798
+type TT799 = TT799
+type TT800 = TT800
+type TT801 = TT801
+type TT802 = TT802
+type TT803 = TT803
+type TT804 = TT804
+type TT805 = TT805
+type TT806 = TT806
+type TT807 = TT807
+type TT808 = TT808
+type TT809 = TT809
+type TT810 = TT810
+type TT811 = TT811
+type TT812 = TT812
+type TT813 = TT813
+type TT814 = TT814
+type TT815 = TT815
+type TT816 = TT816
+type TT817 = TT817
+type TT818 = TT818
+type TT819 = TT819
+type TT820 = TT820
+type TT821 = TT821
+type TT822 = TT822
+type TT823 = TT823
+type TT824 = TT824
+type TT825 = TT825
+type TT826 = TT826
+type TT827 = TT827
+type TT828 = TT828
+type TT829 = TT829
+type TT830 = TT830
+type TT831 = TT831
+type TT832 = TT832
+type TT833 = TT833
+type TT834 = TT834
+type TT835 = TT835
+type TT836 = TT836
+type TT837 = TT837
+type TT838 = TT838
+type TT839 = TT839
+type TT840 = TT840
+type TT841 = TT841
+type TT842 = TT842
+type TT843 = TT843
+type TT844 = TT844
+type TT845 = TT845
+type TT846 = TT846
+type TT847 = TT847
+type TT848 = TT848
+type TT849 = TT849
+type TT850 = TT850
+type TT851 = TT851
+type TT852 = TT852
+type TT853 = TT853
+type TT854 = TT854
+type TT855 = TT855
+type TT856 = TT856
+type TT857 = TT857
+type TT858 = TT858
+type TT859 = TT859
+type TT860 = TT860
+type TT861 = TT861
+type TT862 = TT862
+type TT863 = TT863
+type TT864 = TT864
+type TT865 = TT865
+type TT866 = TT866
+type TT867 = TT867
+type TT868 = TT868
+type TT869 = TT869
+type TT870 = TT870
+type TT871 = TT871
+type TT872 = TT872
+type TT873 = TT873
+type TT874 = TT874
+type TT875 = TT875
+type TT876 = TT876
+type TT877 = TT877
+type TT878 = TT878
+type TT879 = TT879
+type TT880 = TT880
+type TT881 = TT881
+type TT882 = TT882
+type TT883 = TT883
+type TT884 = TT884
+type TT885 = TT885
+type TT886 = TT886
+type TT887 = TT887
+type TT888 = TT888
+type TT889 = TT889
+type TT890 = TT890
+type TT891 = TT891
+type TT892 = TT892
+type TT893 = TT893
+type TT894 = TT894
+type TT895 = TT895
+type TT896 = TT896
+type TT897 = TT897
+type TT898 = TT898
+type TT899 = TT899
+type TT900 = TT900
+type TT901 = TT901
+type TT902 = TT902
+type TT903 = TT903
+type TT904 = TT904
+type TT905 = TT905
+type TT906 = TT906
+type TT907 = TT907
+type TT908 = TT908
+type TT909 = TT909
+type TT910 = TT910
+type TT911 = TT911
+type TT912 = TT912
+type TT913 = TT913
+type TT914 = TT914
+type TT915 = TT915
+type TT916 = TT916
+type TT917 = TT917
+type TT918 = TT918
+type TT919 = TT919
+type TT920 = TT920
+type TT921 = TT921
+type TT922 = TT922
+type TT923 = TT923
+type TT924 = TT924
+type TT925 = TT925
+type TT926 = TT926
+type TT927 = TT927
+type TT928 = TT928
+type TT929 = TT929
+type TT930 = TT930
+type TT931 = TT931
+type TT932 = TT932
+type TT933 = TT933
+type TT934 = TT934
+type TT935 = TT935
+type TT936 = TT936
+type TT937 = TT937
+type TT938 = TT938
+type TT939 = TT939
+type TT940 = TT940
+type TT941 = TT941
+type TT942 = TT942
+type TT943 = TT943
+type TT944 = TT944
+type TT945 = TT945
+type TT946 = TT946
+type TT947 = TT947
+type TT948 = TT948
+type TT949 = TT949
+type TT950 = TT950
+type TT951 = TT951
+type TT952 = TT952
+type TT953 = TT953
+type TT954 = TT954
+type TT955 = TT955
+type TT956 = TT956
+type TT957 = TT957
+type TT958 = TT958
+type TT959 = TT959
+type TT960 = TT960
+type TT961 = TT961
+type TT962 = TT962
+type TT963 = TT963
+type TT964 = TT964
+type TT965 = TT965
+type TT966 = TT966
+type TT967 = TT967
+type TT968 = TT968
+type TT969 = TT969
+type TT970 = TT970
+type TT971 = TT971
+type TT972 = TT972
+type TT973 = TT973
+type TT974 = TT974
+type TT975 = TT975
+type TT976 = TT976
+type TT977 = TT977
+type TT978 = TT978
+type TT979 = TT979
+type TT980 = TT980
+type TT981 = TT981
+type TT982 = TT982
+type TT983 = TT983
+type TT984 = TT984
+type TT985 = TT985
+type TT986 = TT986
+type TT987 = TT987
+type TT988 = TT988
+type TT989 = TT989
+type TT990 = TT990
+type TT991 = TT991
+type TT992 = TT992
+type TT993 = TT993
+type TT994 = TT994
+type TT995 = TT995
+type TT996 = TT996
+type TT997 = TT997
+type TT998 = TT998
+type TT999 = TT999
+type TT1000 = TT1000
\ No newline at end of file
diff --git a/tests/projects/vs2019slow/vs2019slow/Script5.fsx b/tests/projects/vs2019slow/vs2019slow/Script5.fsx
new file mode 100644
index 00000000000..290776ecc2e
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/Script5.fsx
@@ -0,0 +1,100 @@
+type T1 = T1
+type T2 = T2
+type T3 = T3
+type T4 = T4
+type T5 = T5
+type T6 = T6
+type T7 = T7
+type T8 = T8
+type T9 = T9
+type T10 = T10
+type T11 = T11
+type T12 = T12
+type T13 = T13
+type T14 = T14
+type T15 = T15
+type T16 = T16
+type T17 = T17
+type T18 = T18
+type T19 = T19
+type T20 = T20
+type T21 = T21
+type T22 = T22
+type T23 = T23
+type T24 = T24
+type T25 = T25
+type T26 = T26
+type T27 = T27
+type T28 = T28
+type T29 = T29
+type T30 = T30
+type T31 = T31
+type T32 = T32
+type T33 = T33
+type T34 = T34
+type T35 = T35
+type T36 = T36
+type T37 = T37
+type T38 = T38
+type T39 = T39
+type T40 = T40
+type T41 = T41
+type T42 = T42
+type T43 = T43
+type T44 = T44
+type T45 = T45
+type T46 = T46
+type T47 = T47
+type T48 = T48
+type T49 = T49
+type T50 = T50
+type T51 = T51
+type T52 = T52
+type T53 = T53
+type T54 = T54
+type T55 = T55
+type T56 = T56
+type T57 = T57
+type T58 = T58
+type T59 = T59
+type T60 = T60
+type T61 = T61
+type T62 = T62
+type T63 = T63
+type T64 = T64
+type T65 = T65
+type T66 = T66
+type T67 = T67
+type T68 = T68
+type T69 = T69
+type T70 = T70
+type T71 = T71
+type T72 = T72
+type T73 = T73
+type T74 = T74
+type T75 = T75
+type T76 = T76
+type T77 = T77
+type T78 = T78
+type T79 = T79
+type T80 = T80
+type T81 = T81
+type T82 = T82
+type T83 = T83
+type T84 = T84
+type T85 = T85
+type T86 = T86
+type T87 = T87
+type T88 = T88
+type T89 = T89
+type T90 = T90
+type T91 = T91
+type T92 = T92
+type T93 = T93
+type T94 = T94
+type T95 = T95
+type T96 = T96
+type T97 = T97
+type T98 = T98
+type T99 = T99
+type T100 = T100
diff --git a/tests/projects/vs2019slow/vs2019slow/packages.config b/tests/projects/vs2019slow/vs2019slow/packages.config
new file mode 100644
index 00000000000..d979dd344db
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/projects/vs2019slow/vs2019slow/vs2019slow.fsproj b/tests/projects/vs2019slow/vs2019slow/vs2019slow.fsproj
new file mode 100644
index 00000000000..47e57fbb51a
--- /dev/null
+++ b/tests/projects/vs2019slow/vs2019slow/vs2019slow.fsproj
@@ -0,0 +1,79 @@
+
+
+
+
+ Debug
+ AnyCPU
+ 2.0
+ f7897b1f-2b0e-4f31-b71e-cb80f16354ff
+ Exe
+ vs2019slow
+ vs2019slow
+ v4.7.2
+ true
+ true
+ 3239;$(WarningsAsErrors)
+ vs2019slow
+
+
+ true
+ full
+ false
+ false
+ bin\$(Configuration)\
+ DEBUG;TRACE
+ 3
+ AnyCPU
+ bin\$(Configuration)\$(AssemblyName).XML
+ true
+
+
+ pdbonly
+ true
+ true
+ bin\$(Configuration)\
+ TRACE
+ 3
+ AnyCPU
+ bin\$(Configuration)\$(AssemblyName).XML
+ true
+
+
+ 11
+
+
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\packages\FSharp.Core.4.6.1\lib\net45\FSharp.Core.dll
+
+
+
+
+
+
+ True
+
+
+
+
\ No newline at end of file
diff --git a/tests/service/AssemblyContentProviderTests.fs b/tests/service/AssemblyContentProviderTests.fs
index a3e75869966..0c0d7579077 100644
--- a/tests/service/AssemblyContentProviderTests.fs
+++ b/tests/service/AssemblyContentProviderTests.fs
@@ -43,7 +43,7 @@ let (=>) (source: string) (expected: string list) =
// http://stackoverflow.com/questions/19365404/stringreader-omits-trailing-linebreak
yield "" |]
- let _, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, 0, source, projectOptions) |> Async.RunSynchronously
+ let _, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, 0, FSharp.Compiler.Text.SourceText.ofString source, projectOptions) |> Async.RunSynchronously
let checkFileResults =
match checkFileAnswer with
diff --git a/tests/service/AssemblyReaderShim.fs b/tests/service/AssemblyReaderShim.fs
index 223f46d0660..e3512178f02 100644
--- a/tests/service/AssemblyReaderShim.fs
+++ b/tests/service/AssemblyReaderShim.fs
@@ -29,5 +29,5 @@ let x = 123
"""
let fileName, options = Common.mkTestFileAndOptions source [| |]
- Common.checker.ParseAndCheckFileInProject(fileName, 0, source, options) |> Async.RunSynchronously |> ignore
+ Common.checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString source, options) |> Async.RunSynchronously |> ignore
gotRequest |> should be True
diff --git a/tests/service/Common.fs b/tests/service/Common.fs
index 0fd2e93804f..0ec9aa2ab3c 100644
--- a/tests/service/Common.fs
+++ b/tests/service/Common.fs
@@ -57,13 +57,13 @@ type TempFile(ext, contents) =
let getBackgroundParseResultsForScriptText (input) =
use file = new TempFile("fsx", input)
- let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, input) |> Async.RunSynchronously
+ let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously
checker.GetBackgroundParseResultsForFileInProject(file.Name, checkOptions) |> Async.RunSynchronously
let getBackgroundCheckResultsForScriptText (input) =
use file = new TempFile("fsx", input)
- let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, input) |> Async.RunSynchronously
+ let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously
checker.GetBackgroundCheckResultsForFileInProject(file.Name, checkOptions) |> Async.RunSynchronously
@@ -167,7 +167,7 @@ let mkTestFileAndOptions source additionalArgs =
fileName, options
let parseAndCheckFile fileName source options =
- match checker.ParseAndCheckFileInProject(fileName, 0, source, options) |> Async.RunSynchronously with
+ match checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString source, options) |> Async.RunSynchronously with
| parseResults, FSharpCheckFileAnswer.Succeeded(checkResults) -> parseResults, checkResults
| _ -> failwithf "Parsing aborted unexpectedly..."
@@ -181,11 +181,11 @@ let parseAndCheckScript (file, input) =
let projectOptions = checker.GetProjectOptionsFromCommandLineArgs (projName, args)
#else
- let projectOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, input) |> Async.RunSynchronously
+ let projectOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously
printfn "projectOptions = %A" projectOptions
#endif
- let parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, input, projectOptions) |> Async.RunSynchronously
+ let parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, FSharp.Compiler.Text.SourceText.ofString input, projectOptions) |> Async.RunSynchronously
// if parseResult.Errors.Length > 0 then
// printfn "---> Parse Input = %A" input
@@ -195,18 +195,16 @@ let parseAndCheckScript (file, input) =
| FSharpCheckFileAnswer.Succeeded(res) -> parseResult, res
| res -> failwithf "Parsing did not finish... (%A)" res
-let parseSource (source: string) =
- let location = Path.GetTempFileName()
- let filePath = Path.Combine(location, ".fs")
- let dllPath = Path.Combine(location, ".dll")
-
+let parseSourceCode (name: string, code: string) =
+ let location = Path.Combine(Path.GetTempPath(),"test"+string(hash (name, code)))
+ try Directory.CreateDirectory(location) |> ignore with _ -> ()
+ let projPath = Path.Combine(location, name + ".fsproj")
+ let filePath = Path.Combine(location, name + ".fs")
+ let dllPath = Path.Combine(location, name + ".dll")
let args = mkProjectCommandLineArgs(dllPath, [filePath])
let options, errors = checker.GetParsingOptionsFromCommandLineArgs(List.ofArray args)
- let parseResults = checker.ParseFile(filePath, source, options) |> Async.RunSynchronously
-
- match parseResults.ParseTree with
- | Some parseTree -> parseTree
- | None -> failwithf "Expected there to be a parse tree for source:\n%s" source
+ let parseResults = checker.ParseFile(filePath, FSharp.Compiler.Text.SourceText.ofString code, options) |> Async.RunSynchronously
+ parseResults.ParseTree
/// Extract range info
let tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn)
diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs
index efca8110c0b..949040441f7 100644
--- a/tests/service/EditorTests.fs
+++ b/tests/service/EditorTests.fs
@@ -122,8 +122,8 @@ let ``Basic cancellation test`` () =
let file = "/home/user/Test.fsx"
async {
checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
- let! checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, input)
- let! parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, input, checkOptions)
+ let! checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, FSharp.Compiler.Text.SourceText.ofString input)
+ let! parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, FSharp.Compiler.Text.SourceText.ofString input, checkOptions)
return parseResult, typedRes
} |> Async.RunSynchronously
|> ignore
diff --git a/tests/service/FscTests.fs b/tests/service/FscTests.fs
index 08e83950e48..6d8cafc9105 100644
--- a/tests/service/FscTests.fs
+++ b/tests/service/FscTests.fs
@@ -48,7 +48,7 @@ type PEVerifier () =
Some ("pedump", "--verify all")
else
let peverifyPath configuration =
- Path.Combine(__SOURCE_DIRECTORY__, "..", "..", "artifacts", "bin", "PEVerify", configuration, "net46", "PEVerify.exe")
+ Path.Combine(__SOURCE_DIRECTORY__, "..", "..", "artifacts", "bin", "PEVerify", configuration, "net472", "PEVerify.exe")
let peverify =
if File.Exists(peverifyPath "Debug") then peverifyPath "Debug"
else peverifyPath "Release"
diff --git a/tests/service/InteractiveCheckerTests.fs b/tests/service/InteractiveCheckerTests.fs
index 1f28a271bee..9f390d42571 100644
--- a/tests/service/InteractiveCheckerTests.fs
+++ b/tests/service/InteractiveCheckerTests.fs
@@ -45,8 +45,11 @@ let internal identsAndRanges (input: Ast.ParsedInput) =
| Ast.SynModuleDecl.Attributes(_attrs, _range) -> failwith "Not implemented yet"
| Ast.SynModuleDecl.HashDirective(_, _range) -> failwith "Not implemented yet"
| Ast.SynModuleDecl.NamespaceFragment(moduleOrNamespace) -> extractFromModuleOrNamespace moduleOrNamespace
- and extractFromModuleOrNamespace (Ast.SynModuleOrNamespace(longIdent, _, _, moduleDecls, _, _, _, range)) =
- (identAndRange (longIdentToString longIdent) range) :: (moduleDecls |> List.collect extractFromModuleDecl)
+ and extractFromModuleOrNamespace (Ast.SynModuleOrNamespace(longIdent, _, _, moduleDecls, _, _, _, _)) =
+ let xs = moduleDecls |> List.collect extractFromModuleDecl
+ if longIdent.IsEmpty then xs
+ else
+ (identAndRange (longIdentToString longIdent) (longIdent |> List.map (fun id -> id.idRange) |> List.reduce Range.unionRanges)) :: xs
match input with
| Ast.ParsedInput.ImplFile(Ast.ParsedImplFileInput(_, _, _, _, _, modulesOrNamespaces, _)) ->
@@ -54,7 +57,11 @@ let internal identsAndRanges (input: Ast.ParsedInput) =
| Ast.ParsedInput.SigFile _ -> []
let internal parseAndExtractRanges code =
- parseSource code |> identsAndRanges
+ let file = "Test"
+ let result = parseSourceCode (file, code)
+ match result with
+ | Some tree -> tree |> identsAndRanges
+ | None -> failwith "fail to parse..."
let input =
"""
@@ -67,7 +74,7 @@ let input =
let ``Test ranges - namespace`` () =
let res = parseAndExtractRanges input
printfn "Test ranges - namespace, res = %A" res
- res |> shouldEqual [("N", ((4, 4), (6, 0))); ("Sample", ((4, 9), (4, 15)))]
+ res |> shouldEqual [("N", ((2, 14), (2, 15))); ("Sample", ((4, 9), (4, 15)))]
let input2 =
"""
@@ -80,7 +87,7 @@ let input2 =
let ``Test ranges - module`` () =
let res = parseAndExtractRanges input2
printfn "Test ranges - module, res = %A" res
- res |> shouldEqual [("M", ((2, 4), (4, 26))); ("Sample", ((4, 9), (4, 15)))]
+ res |> shouldEqual [("M", ((2, 11), (2, 12))); ("Sample", ((4, 9), (4, 15)))]
let input3 =
"""
@@ -93,4 +100,4 @@ let input3 =
let ``Test ranges - global namespace`` () =
let res = parseAndExtractRanges input3
printfn "Test ranges - global namespace, res = %A" res
- res |> shouldEqual [("", ((4, 4), (6, 0))); ("Sample", ((4, 9), (4, 15)))]
+ res |> shouldEqual [("Sample", ((4, 9), (4, 15)))]
diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs
index 01899457312..51c06808eb1 100644
--- a/tests/service/MultiProjectAnalysisTests.fs
+++ b/tests/service/MultiProjectAnalysisTests.fs
@@ -913,7 +913,7 @@ let ``Type provider project references should not throw exceptions`` () =
//printfn "options: %A" options
let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/Program.fs"
let fileSource = File.ReadAllText(fileName)
- let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, fileSource, options) |> Async.RunSynchronously
+ let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString fileSource, options) |> Async.RunSynchronously
let fileCheckResults =
match fileCheckAnswer with
| FSharpCheckFileAnswer.Succeeded(res) -> res
@@ -1010,7 +1010,7 @@ let ``Projects creating generated types should not utilize cross-project-referen
//printfn "options: %A" options
let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/Program.fs"
let fileSource = File.ReadAllText(fileName)
- let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, fileSource, options) |> Async.RunSynchronously
+ let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString fileSource, options) |> Async.RunSynchronously
let fileCheckResults =
match fileCheckAnswer with
| FSharpCheckFileAnswer.Succeeded(res) -> res
diff --git a/tests/service/PerfTests.fs b/tests/service/PerfTests.fs
index 1b3a6605271..7e97f923985 100644
--- a/tests/service/PerfTests.fs
+++ b/tests/service/PerfTests.fs
@@ -31,7 +31,7 @@ module internal Project1 =
let projFileName = Path.ChangeExtension(base2, ".fsproj")
let fileSources = [ for (i,f) in fileNamesI -> (f, "module M" + string i) ]
for (f,text) in fileSources do File.WriteAllText(f, text)
- let fileSources2 = [ for (i,f) in fileSources -> f ]
+ let fileSources2 = [ for (i,f) in fileSources -> FSharp.Compiler.Text.SourceText.ofString f ]
let fileNames = [ for (_,f) in fileNamesI -> f ]
let args = mkProjectCommandLineArgs (dllName, fileNames)
diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs
index 90d052edbb1..37bef3c9c26 100644
--- a/tests/service/ProjectAnalysisTests.fs
+++ b/tests/service/ProjectAnalysisTests.fs
@@ -28,7 +28,7 @@ module internal Project1 =
let fileName2 = Path.ChangeExtension(base2, ".fs")
let dllName = Path.ChangeExtension(base2, ".dll")
let projFileName = Path.ChangeExtension(base2, ".fsproj")
- let fileSource1 = """
+ let fileSource1Text = """
module M
type C() =
@@ -39,9 +39,10 @@ let fff () = xxx + xxx
type CAbbrev = C
"""
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
- let fileSource2 = """
+ let fileSource2Text = """
module N
open M
@@ -83,7 +84,8 @@ let mmmm1 : M.C = new M.C() // note, these don't count as uses of CA
let mmmm2 : M.CAbbrev = new M.CAbbrev() // note, these don't count as uses of C
"""
- File.WriteAllText(fileName2, fileSource2)
+ let fileSource2 = FSharp.Compiler.Text.SourceText.ofString fileSource2Text
+ File.WriteAllText(fileName2, fileSource2Text)
let fileNames = [fileName1; fileName2]
let args = mkProjectCommandLineArgs (dllName, fileNames)
@@ -2411,7 +2413,7 @@ module internal Project16 =
let base2 = Path.GetTempFileName()
let dllName = Path.ChangeExtension(base2, ".dll")
let projFileName = Path.ChangeExtension(base2, ".fsproj")
- let fileSource1 = """
+ let fileSource1Text = """
module Impl
type C() =
@@ -2427,9 +2429,10 @@ and F = { Field1 : int; Field2 : int }
and G = Case1 | Case2 of int
"""
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
- let sigFileSource1 = """
+ let sigFileSource1Text = """
module Impl
type C =
@@ -2448,7 +2451,8 @@ and F = { Field1 : int; Field2 : int }
and G = Case1 | Case2 of int
"""
- File.WriteAllText(sigFileName1, sigFileSource1)
+ let sigFileSource1 = FSharp.Compiler.Text.SourceText.ofString sigFileSource1Text
+ File.WriteAllText(sigFileName1, sigFileSource1Text)
let cleanFileName a = if a = fileName1 then "file1" elif a = sigFileName1 then "sig1" else "??"
let fileNames = [sigFileName1; fileName1]
@@ -4506,11 +4510,12 @@ module internal Project35b =
open System.IO
let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fsx")
- let fileSource1 = """
+ let fileSource1Text = """
#r "System.dll"
#r "notexist.dll"
"""
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
let cleanFileName a = if a = fileName1 then "file1" else "??"
let fileNames = [fileName1]
@@ -5153,7 +5158,7 @@ module internal ProjectBig =
let projFileName = Path.ChangeExtension(base2, ".fsproj")
let fileSources = [ for (i,f) in fileNamesI -> (f, "module M" + string i) ]
for (f,text) in fileSources do File.WriteAllText(f, text)
- let fileSources2 = [ for (i,f) in fileSources -> f ]
+ let fileSources2 = [ for (i,f) in fileSources -> FSharp.Compiler.Text.SourceText.ofString f ]
let fileNames = [ for (_,f) in fileNamesI -> f ]
let args = mkProjectCommandLineArgs (dllName, fileNames)
@@ -5235,14 +5240,14 @@ module internal ProjectLineDirectives =
let base2 = Path.GetTempFileName()
let dllName = Path.ChangeExtension(base2, ".dll")
let projFileName = Path.ChangeExtension(base2, ".fsproj")
- let fileSource1 = """
+ let fileSource1Text = """
module M
# 10 "Test.fsy"
let x = (1 = 3.0)
"""
-
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
let fileNames = [fileName1]
let args = mkProjectCommandLineArgs (dllName, fileNames)
let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args)
@@ -5278,11 +5283,12 @@ let ``ParseAndCheckFileResults contains ImplFile list if FSharpChecker is create
let base2 = Path.GetTempFileName()
let dllName = Path.ChangeExtension(base2, ".dll")
let projFileName = Path.ChangeExtension(base2, ".fsproj")
- let fileSource1 = """
+ let fileSource1Text = """
type A(i:int) =
member x.Value = i
"""
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
let fileNames = [fileName1]
let args = mkProjectCommandLineArgs (dllName, fileNames)
@@ -5335,7 +5341,7 @@ let ``Unused opens in rec module smoke test 1``() =
let base2 = Path.GetTempFileName()
let dllName = Path.ChangeExtension(base2, ".dll")
let projFileName = Path.ChangeExtension(base2, ".fsproj")
- let fileSource1 = """
+ let fileSource1Text = """
module rec Module
open System.Collections // unused
@@ -5372,7 +5378,8 @@ type UseTheThings(i:int) =
member x.UseSomeUsedModuleContainingExtensionMember() = (3).Q
member x.UseSomeUsedModuleContainingUnion() = A
"""
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
let fileNames = [fileName1]
let args = mkProjectCommandLineArgs (dllName, fileNames)
@@ -5407,7 +5414,7 @@ let ``Unused opens in non rec module smoke test 1``() =
let base2 = Path.GetTempFileName()
let dllName = Path.ChangeExtension(base2, ".dll")
let projFileName = Path.ChangeExtension(base2, ".fsproj")
- let fileSource1 = """
+ let fileSource1Text = """
module Module
open System.Collections // unused
@@ -5444,7 +5451,8 @@ type UseTheThings(i:int) =
member x.UseSomeUsedModuleContainingExtensionMember() = (3).Q
member x.UseSomeUsedModuleContainingUnion() = A
"""
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
let fileNames = [fileName1]
let args = mkProjectCommandLineArgs (dllName, fileNames)
@@ -5479,7 +5487,7 @@ let ``Unused opens smoke test auto open``() =
let base2 = Path.GetTempFileName()
let dllName = Path.ChangeExtension(base2, ".dll")
let projFileName = Path.ChangeExtension(base2, ".fsproj")
- let fileSource1 = """
+ let fileSource1Text = """
open System.Collections // unused
open System.Collections.Generic // used, should not appear
open FSharp.Control // unused
@@ -5516,7 +5524,8 @@ type UseTheThings(i:int) =
member x.UseSomeUsedModuleContainingExtensionMember() = (3).Q
member x.UseSomeUsedModuleContainingUnion() = A
"""
- File.WriteAllText(fileName1, fileSource1)
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ File.WriteAllText(fileName1, fileSource1Text)
let fileNames = [fileName1]
let args = mkProjectCommandLineArgs (dllName, fileNames)
diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs
index a757e816708..141c33be92e 100644
--- a/tests/service/ProjectOptionsTests.fs
+++ b/tests/service/ProjectOptionsTests.fs
@@ -508,7 +508,7 @@ let ``Test SourceFiles order for GetProjectOptionsFromScript`` () = // See #594
let scriptPath = __SOURCE_DIRECTORY__ + @"/data/ScriptProject/" + scriptName + ".fsx"
let scriptSource = File.ReadAllText scriptPath
let projOpts, _diagnostics =
- checker.GetProjectOptionsFromScript(scriptPath, scriptSource)
+ checker.GetProjectOptionsFromScript(scriptPath, FSharp.Compiler.Text.SourceText.ofString scriptSource)
|> Async.RunSynchronously
projOpts.SourceFiles
|> Array.map Path.GetFileNameWithoutExtension
@@ -527,21 +527,21 @@ let ``Script load closure project`` () =
let fileName1 = Path.GetTempPath() + Path.DirectorySeparatorChar.ToString() + "Impl.fs"
let fileName2 = Path.ChangeExtension(Path.GetTempFileName(), ".fsx")
- let fileSource1 = """
+ let fileSource1Text = """
module ImplFile
#if INTERACTIVE
let x = 42
#endif
"""
-
- let fileSource2 = """
+ let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text
+ let fileSource2Text = """
#load "Impl.fs"
ImplFile.x
"""
-
- File.WriteAllText(fileName1, fileSource1)
- File.WriteAllText(fileName2, fileSource2)
+ let fileSource2 = FSharp.Compiler.Text.SourceText.ofString fileSource2Text
+ File.WriteAllText(fileName1, fileSource1Text)
+ File.WriteAllText(fileName2, fileSource2Text)
printfn "------Starting Script load closure project----"
printfn "Getting project options..."
diff --git a/tests/service/ServiceUntypedParseTests.fs b/tests/service/ServiceUntypedParseTests.fs
index 73789a1a97f..bfe20d54ecc 100644
--- a/tests/service/ServiceUntypedParseTests.fs
+++ b/tests/service/ServiceUntypedParseTests.fs
@@ -40,12 +40,14 @@ let private (=>) (source: string) (expected: CompletionContext option) =
match markerPos with
| None -> failwithf "Marker '%s' was not found in the source code" Marker
| Some markerPos ->
- let parseTree = parseSource source
- let actual = UntypedParseImpl.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line])
- try Assert.AreEqual(expected, actual)
- with e ->
- printfn "ParseTree: %A" parseTree
- reraise()
+ match parseSourceCode("C:\\test.fs", source) with
+ | None -> failwith "No parse tree"
+ | Some parseTree ->
+ let actual = UntypedParseImpl.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line])
+ try Assert.AreEqual(expected, actual)
+ with e ->
+ printfn "ParseTree: %A" parseTree
+ reraise()
module AttributeCompletion =
[]
diff --git a/tests/service/StructureTests.fs b/tests/service/StructureTests.fs
index 41607f8d476..1c710643e3c 100644
--- a/tests/service/StructureTests.fs
+++ b/tests/service/StructureTests.fs
@@ -40,19 +40,22 @@ let (=>) (source: string) (expectedRanges: (Range * Range) list) =
let getRange (r: range) = (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)
- let tree = parseSource source
+ let ast = parseSourceCode(fileName, source)
try
- let actual =
- Structure.getOutliningRanges lines tree
- |> Seq.filter (fun sr -> sr.Range.StartLine <> sr.Range.EndLine)
- |> Seq.map (fun sr -> getRange sr.Range, getRange sr.CollapseRange)
- |> Seq.sort
- |> List.ofSeq
- let expected = List.sort expectedRanges
- if actual <> expected then
- failwithf "Expected %s, but was %s" (formatList expected) (formatList actual)
+ match ast with
+ | Some tree ->
+ let actual =
+ Structure.getOutliningRanges lines tree
+ |> Seq.filter (fun sr -> sr.Range.StartLine <> sr.Range.EndLine)
+ |> Seq.map (fun sr -> getRange sr.Range, getRange sr.CollapseRange)
+ |> Seq.sort
+ |> List.ofSeq
+ let expected = List.sort expectedRanges
+ if actual <> expected then
+ failwithf "Expected %s, but was %s" (formatList expected) (formatList actual)
+ | None -> failwithf "Expected there to be a parse tree for source:\n%s" source
with _ ->
- printfn "AST:\n%+A" tree
+ printfn "AST:\n%+A" ast
reraise()
[]
diff --git a/tests/service/TreeVisitorTests.fs b/tests/service/TreeVisitorTests.fs
index 2beb2a09bc3..6ff20227235 100644
--- a/tests/service/TreeVisitorTests.fs
+++ b/tests/service/TreeVisitorTests.fs
@@ -13,7 +13,10 @@ let ``Visit type test`` () =
member x.VisitType(_, _) = Some () }
let source = "123 :? int"
- let parseTree = parseSource source
+ let parseTree =
+ match parseSourceCode("C:\\test.fs", source) with
+ | None -> failwith "No parse tree"
+ | Some parseTree -> parseTree
Traverse(mkPos 1 11, parseTree, visitor)
|> Option.defaultWith (fun _ -> failwith "Did not visit type")
diff --git a/vsintegration/Directory.Build.props b/vsintegration/Directory.Build.props
index 45173358d89..b628fb6312d 100644
--- a/vsintegration/Directory.Build.props
+++ b/vsintegration/Directory.Build.props
@@ -1,8 +1,8 @@
- net46
- v4.6
+ net472
+ v4.7.2true
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate
index bfb2bc204e3..457a0d84b66 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate
@@ -27,7 +27,7 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf
index 68ea0772d85..a580d9e396b 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf
index 6d38e4a5a9e..87fa85b31c9 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf
index 159e61b4e79..9beb403796f 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf
index ddea7c610e9..a259bd30511 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf
index 79e98a0f0b4..d5fc6c75583 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf
index 9382bec5e00..258b4ebab29 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf
index 4ba5555261b..ee3471fb557 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf
index ba2e69fde6d..48d258faa25 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf
index 78261dfa3a2..c0f2735eae2 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf
index 896836c9c7e..906ec8f3ef1 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf
index 1c36b83e8aa..d76c9dbd18c 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf
index 50135acb5d2..54f3d3c0c94 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf
index ec6378c9ed2..e3b75382003 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf
index 4ff250e4b9c..30efd4ece6a 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf
index c8f9baec854..315bebbcac2 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf
index 7517936c7b5..3f1c17cb06d 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf
index ad81379fa7f..3d4586af7d2 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf
index e4440770c4a..f8a5de8d777 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf
index fa58fbb608d..30c89d53b94 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf
index 18d343feba6..7d661660156 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf
index 55b9e483481..caa20c452c4 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf
index 3bb540ffff6..83e038a60e0 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf
index 29ef25458fa..26ef14aae6b 100644
--- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf
+++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate
index ce92b5eafe9..07c8ab1065e 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate
@@ -27,7 +27,7 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf
index 68ea0772d85..a580d9e396b 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf
index 6d38e4a5a9e..87fa85b31c9 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf
index 159e61b4e79..9beb403796f 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf
index ddea7c610e9..a259bd30511 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf
index 79e98a0f0b4..d5fc6c75583 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf
index 9382bec5e00..258b4ebab29 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf
index 4ba5555261b..ee3471fb557 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf
index ba2e69fde6d..48d258faa25 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf
index 78261dfa3a2..c0f2735eae2 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf
index 896836c9c7e..906ec8f3ef1 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf
index 1c36b83e8aa..d76c9dbd18c 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf
index 7894dfcbdab..985099ec87c 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf
index ea2c666e1d6..0e507996fb1 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf
index a341541098d..64e2f3bd158 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf
index 6397f046408..59fc3c21d0a 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf
index d8c92ea17e0..32a62ec6536 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf
index d1dcac5cd83..b8477614c17 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf
index 993d2765315..26abdffefef 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf
index e7d07e9d09a..d1e9d07a6ee 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf
index a3df917ca5f..b8dd108a583 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf
index 85a2f18ea61..2b4bb37062f 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf
index d3641659034..332774539b1 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf
index 1d2d23cfe91..9106b3e72cd 100644
--- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf
+++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate
index 5ed1f9e537f..73b11c8c907 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate
@@ -25,7 +25,7 @@
-
+
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf
index 9658c4b6005..e7f408b7ac6 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf
index 9a66dab1cb6..89f6fcb68f8 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf
@@ -1,4 +1,4 @@
-
+
@@ -1529,7 +1529,7 @@
To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/interfaces
- Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/interfaces
+ Weitere Informationen finden Sie unter:: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/interfaces
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf
index 30b02b2a50d..692964c7132 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -1139,7 +1139,7 @@
No need to insert, it already exists; return the node.
- No es necesario insertarlo, ya existe; vuelve al nodo.
+ No es necesario insertarlo, ya existe; devuelve el nodo.
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf
index c87b85a0bd7..ecef37c1889 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -9,7 +9,7 @@
To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click
- Pour exécuter le code en F# Interactive, mettez en surbrillance une portion du code, puis appuyez sur Alt+Entrée ou cliquez avec le bouton droit,
+ Pour exécuter le code dans F# Interactive, mettez en surbrillance une portion du code, puis appuyez sur Alt+Entrée ou cliquez avec le bouton droit,
@@ -209,7 +209,7 @@
Much of F# programming consists of defining functions that transform input data to produce
- La programmation en F# consiste en grande partie à définir des fonctions qui transforment des données d'entrée pour produire des
+ La programmation F# consiste en grande partie à définir des fonctions qui transforment des données d'entrée pour produire des
@@ -584,7 +584,7 @@
This is using what is known as function composition. This is possible because functions in F#
- C'est ce qui s'appelle la composition de fonctions. Cela vient du fait que les fonctions en F#
+ C'est ce qui s'appelle la composition de fonctions. Cela vient du fait que les fonctions dans F#
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf
index 9445a04d313..0c26932910e 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf
@@ -1,4 +1,4 @@
-
+
@@ -1299,12 +1299,12 @@
They are used extensively in F# code to represent the cases where many other
- Questi valori sono ampiamente usati nel codice F# per rappresentare i casi in cui molti altri
+ Questi valori sono ampiamente utilizzati nel codice F# per rappresentare i casi in cui molti altrilanguages would use null references.
- linguaggi userebbero riferimenti Null.
+ linguaggi utilizzerebbero riferimenti null.
@@ -1389,7 +1389,7 @@
Compute metric-system constant
- Calcola la costate del sistema metrico
+ Calcola la costante del sistema metrico
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf
index a6774d13b08..5694cd3bf7b 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf
@@ -1,4 +1,4 @@
-
+
@@ -129,7 +129,7 @@
This computed a new number by some arithmetic. Numeric types are converted using
- これは、演算によって新しい数値を計算したものです。数値型は、関数 'int'、'double' などを使用して変換されます。
+ 算術によって新しい数値が算出されました。数値型は以下を使用するよう変換されています
@@ -489,7 +489,7 @@
A shorter way to write 'squareOddValuesAndAddOne' is to nest each
- 'squareOddValuesAndAddOne' を書き込むためのより簡単な方法は、
+ 'squareOddValuesAndAddOne' を記述するためのより簡単な方法は、
@@ -509,7 +509,7 @@
A preferred way to write 'squareOddValuesAndAddOne' is to use F# pipe operators.
- 'squareOddValuesAndAddOne' を書き込むための推奨される方法は、F# パイプ演算子を使用する方法です。
+ 'squareOddValuesAndAddOne' を記述するための推奨される方法は、F# パイプ演算子を使用する方法です。
@@ -679,7 +679,7 @@
There are many other list combinations. The following computes the sum of the squares of the
- 他に多くのリストの組み合わせがあります。次の二乗和を計算します:
+ 他に多くのリストの組み合わせがあります。次の二乗和をコンピューティングします:
@@ -849,7 +849,7 @@
This example shows a recursive function that computes the factorial of an
- この例では、次の階乗を計算する再帰関数を示します
+ この例では、次の階乗をコンピューティングする再帰関数を示します
@@ -859,7 +859,7 @@
Computes the greatest common factor of two integers.
- 2 つの整数の最大公約数を計算します。
+ 2 つの整数の最大公約数をコンピューティングします。
@@ -879,7 +879,7 @@
This example computes the sum of a list of integers using recursion.
- この例では、再帰を使用して整数のリストの合計を計算します。
+ この例では、再帰を使用して整数のリストの合計をコンピューティングします。
@@ -899,7 +899,7 @@
Records are an aggregate of named values, with optional members (such as methods).
- レコードは、オプションのメンバー (メソッドなど) を含む名前付きの値の集合です。
+ レコードは、オプションのメンバー (メソッドなど) を含む名前付きの値の集約です。
@@ -1034,7 +1034,7 @@
This computes a list representing all the cards in the deck.
- これは、一組のトランプのすべてのカードを表すリストを計算します。
+ これは、一組のトランプのすべてのカードを表すリストをコンピューティングします。
@@ -1259,7 +1259,7 @@
which is useful when you're writing functions which make use of Partial Application.
- これは、部分適用を利用する関数を書き込む場合に役立ちます。
+ これは、部分適用を利用する関数を記述している場合に役立ちます。
@@ -1294,7 +1294,7 @@
Option values are any kind of value tagged with either 'Some' or 'None'.
- オプション値とは、'Some' または 'None' が指定されたあらゆる種類の値です。
+ オプション値とは、'Some' または 'None' がタグされたあらゆる種類の値です。
@@ -1324,7 +1324,7 @@
Next, define an interface type that represents an object to compute the shipping zone for the customer's zip code,
- 次に、オブジェクトを表すインターフェイスの型を定義して、顧客の郵便番号の出荷ゾーンを計算し、
+ 他に多くのリストの組み合わせがあります。次の二乗和をコンピューティングします:
@@ -1389,7 +1389,7 @@
Compute metric-system constant
- メートル法の定数を計算します
+ メートル法の定数をコンピューティングします
@@ -1434,7 +1434,7 @@
This internal field stores the length of the vector, computed when the
- この内部フィールドはベクトルの長さを格納します。これは、次の時点でに計算されます:
+ この内部フィールドはベクトルの長さを格納します。これは、次の時点でにコンピューティングされます:
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf
index 6537a73fefe..7e8e4a4de40 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -444,7 +444,7 @@
which make use of Partial Application.
- 부분 응용 프로그램을 사용합니다.
+ 부분 애플리케이션을 사용합니다.
@@ -454,7 +454,7 @@
To learn more about Partial Application, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments
- 부분 응용 프로그램에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments
+ 부분 애플리케이션에 대해 자세히 알아보려면 다음을 참조하세요. https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/functions/#partial-application-of-arguments
@@ -589,7 +589,7 @@
use Partial Application and the input and output types of each data processing operation match
- 부분 응용 프로그램을 사용하고 각 데이터 처리 작업의 입력 및 출력 형식이 사용 중인 함수의
+ 부분 애플리케이션을 사용하고 각 데이터 처리 작업의 입력 및 출력 형식이 사용 중인 함수의
@@ -1259,7 +1259,7 @@
which is useful when you're writing functions which make use of Partial Application.
- 이 구문은 부분 응용 프로그램을 사용하는 함수를 작성할 때 유용합니다.
+ 이 구문은 부분 애플리케이션을 사용하는 함수를 작성할 때 유용합니다.
@@ -1594,7 +1594,7 @@
Events are a common idiom for .NET programming, especially with WinForms or WPF applications.
- 이벤트는 특히 WinForms 또는 WPF 응용 프로그램을 사용하는 .NET 프로그래밍에서 일반적으로 사용되는 말입니다.
+ 이벤트는 특히 WinForms 또는 WPF 애플리케이션을 사용하는 .NET 프로그래밍에서 일반적으로 사용되는 말입니다.
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf
index 49707692510..3b4b512cd2c 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf
@@ -1,4 +1,4 @@
-
+
@@ -9,7 +9,7 @@
To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click
- Aby wykonać kod w narzędziu F# Interactive, zaznacz sekcję kodu i naciśnij kombinację klawiszy Alt-Enter lub kliknij prawym przyciskiem myszy,
+ Aby wykonać kod w programie F# Interactive, zaznacz sekcję kodu i naciśnij kombinację klawiszy Alt-Enter lub kliknij prawym przyciskiem myszy,
@@ -1294,7 +1294,7 @@
Option values are any kind of value tagged with either 'Some' or 'None'.
- Wartości opcji to dowolne wartości oznaczone jako „Some” lub „None”.
+ Wartości opcji to dowolne wartości otagowane jako „Some” lub „None”.
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf
index 96dfb6b780b..64df6c8506c 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf
index 508e29b7fd7..6bded459993 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf
@@ -1,4 +1,4 @@
-
+
@@ -14,7 +14,7 @@
and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu.
- и выберите команду "Выполнение в Interactive". Окно F# Interactive можно также открыть из меню "Вид".
+ и выберите команду "Выполнение в интерактивном режиме". Интерактивное окно F# можно также открыть из меню "Вид".
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf
index c08fef4bacc..e41d20b7fa0 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -9,7 +9,7 @@
To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click
- Kodu F# Etkileşimli'de yürütmek için kodun bir bölümünü vurgulayın ve Alt-Enter'a basın veya sağ tıklatın
+ Kodu Etkileşimli F#'da yürütmek için kodun bir bölümünü vurgulayın ve Alt-Enter'a basın veya sağ tıklatın
@@ -29,7 +29,7 @@
To learn more about applied F# programming, use
- Uygulamalı #F programlama hakkında daha fazla bilgi edinmek için şunu kullanın:
+ Uygulamalı F# programlama hakkında daha fazla bilgi edinmek için şunu kullanın:
@@ -899,7 +899,7 @@
Records are an aggregate of named values, with optional members (such as methods).
- Kayıtlar, isteğe bağlı üyeleri (örneğin, metotlar) içeren adlandırılmış değerlerin toplamıdır.
+ Kayıtlar, isteğe bağlı üyeleri (örneğin, metotlar) içeren adlandırılmış değerlerin kümesidir.
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf
index 4f0cb253170..23e13e79381 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
@@ -14,7 +14,7 @@
and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu.
- 并选择“在交互窗口中执行”。 可从“视图”菜单中打开 F# 交互窗口。
+ 并选择“在 Interactive 中执行”。 可从“视图”菜单中打开 F# 交互窗口。
diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf
index 79a1c1c8486..fea7e0434e6 100644
--- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf
+++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
@@ -14,7 +14,7 @@
and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu.
- 並選取 [以互動方式執行]5D;。您可以從 [檢視]5D; 功能表開啟 F# 互動視窗。
+ 並選取 [以互動方式執行]5D;。您可以從 [檢視]5D; 功能表開啟 F# Interactive 視窗。
diff --git a/vsintegration/Templates.Directory.Build.props b/vsintegration/Templates.Directory.Build.props
index df7e87a2cdd..3801f7748c8 100644
--- a/vsintegration/Templates.Directory.Build.props
+++ b/vsintegration/Templates.Directory.Build.props
@@ -18,8 +18,8 @@
falsefalsefalse
- net46
- v4.6
+ net472
+ v4.7.2truefalsefalse
diff --git a/vsintegration/Utils/LanguageServiceProfiling/LanguageServiceProfiling.fsproj b/vsintegration/Utils/LanguageServiceProfiling/LanguageServiceProfiling.fsproj
index dfe6034dfce..a61ba873ce9 100644
--- a/vsintegration/Utils/LanguageServiceProfiling/LanguageServiceProfiling.fsproj
+++ b/vsintegration/Utils/LanguageServiceProfiling/LanguageServiceProfiling.fsproj
@@ -7,7 +7,6 @@
true$(SystemValueTuplePackageVersion)true
- true
diff --git a/vsintegration/Utils/LanguageServiceProfiling/Program.fs b/vsintegration/Utils/LanguageServiceProfiling/Program.fs
index cd68f885046..521c3b90200 100644
--- a/vsintegration/Utils/LanguageServiceProfiling/Program.fs
+++ b/vsintegration/Utils/LanguageServiceProfiling/Program.fs
@@ -42,6 +42,7 @@ Results look like this:
*)
open FSharp.Compiler
+open FSharp.Compiler.Text
open FSharp.Compiler.SourceCodeServices
open System
open System.IO
@@ -89,7 +90,7 @@ let main argv =
async {
eprintfn "ParseAndCheckFileInProject(%s)..." options.FileToCheck
let sw = Stopwatch.StartNew()
- let! _, answer = checker.ParseAndCheckFileInProject(options.FileToCheck, fileVersion, File.ReadAllText options.FileToCheck, options.Options)
+ let! _, answer = checker.ParseAndCheckFileInProject(options.FileToCheck, fileVersion, SourceText.ofString (File.ReadAllText options.FileToCheck), options.Options)
match answer with
| FSharpCheckFileAnswer.Aborted ->
eprintfn "Abortedin %O!" sw.Elapsed
@@ -110,7 +111,7 @@ let main argv =
let answers =
options.FilesToCheck |> List.map (fun file ->
eprintfn "doing %s" file
- checker.ParseAndCheckFileInProject(file, fileVersion, File.ReadAllText file, options.Options) |> Async.RunSynchronously)
+ checker.ParseAndCheckFileInProject(file, fileVersion, SourceText.ofString (File.ReadAllText file), options.Options) |> Async.RunSynchronously)
for _,answer in answers do
match answer with
| FSharpCheckFileAnswer.Aborted ->
@@ -157,7 +158,7 @@ let main argv =
match fileResults with
| Some fileResults ->
let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions(options.Options)
- let! parseResult = checker.ParseFile(options.FileToCheck, getFileText(), parsingOptions)
+ let! parseResult = checker.ParseFile(options.FileToCheck, SourceText.ofString (getFileText()), parsingOptions)
for completion in options.CompletionPositions do
eprintfn "querying %A %s" completion.QualifyingNames completion.PartialName
let! listInfo =
diff --git a/vsintegration/Vsix/RegisterFsharpPackage.pkgdef b/vsintegration/Vsix/RegisterFsharpPackage.pkgdef
index e7daeb0df08..9d065daf50a 100644
--- a/vsintegration/Vsix/RegisterFsharpPackage.pkgdef
+++ b/vsintegration/Vsix/RegisterFsharpPackage.pkgdef
@@ -52,7 +52,7 @@
"1"="{92EF0900-2251-11D2-B72E-0000F87572EF}"
[$RootKey$\Packages\{91a04a73-4f2c-4e7c-ad38-c1a68e7da05c}]
-"ProductVersion"="10.2"
+"ProductVersion"="10.4"
"ProductName"="Visual F#"
"CompanyName"="Microsoft Corp."
diff --git a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest
index 4d068326675..e0ef01b0061 100644
--- a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest
+++ b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest
@@ -9,7 +9,7 @@
https://docs.microsoft.com/en-us/dotnet/articles/fsharp/
-
+
@@ -57,7 +57,7 @@
-
+
diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj
index 90baf6d789c..38b286c8c45 100644
--- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj
+++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj
@@ -40,7 +40,7 @@
All2True
- TargetFramework=net46
+ TargetFramework=net472{649FA588-F02E-457C-9FCF-87E46407481E}
@@ -51,7 +51,7 @@
All2True
- TargetFramework=net46
+ TargetFramework=net472{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}
@@ -62,7 +62,7 @@
All2True
- TargetFramework=net46
+ TargetFramework=net472{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}
@@ -73,7 +73,7 @@
All2True
- TargetFramework=net46
+ TargetFramework=net472{DED3BBD7-53F4-428A-8C9F-27968E768605}
@@ -96,7 +96,7 @@
X642True
- TargetFramework=net46
+ TargetFramework=net472{D0E98C0D-490B-4C61-9329-0862F6E87645}
@@ -108,7 +108,7 @@
X862True
- TargetFramework=net46
+ TargetFramework=net472{C94C257C-3C0A-4858-B5D8-D746498D1F08}
@@ -120,7 +120,7 @@
All2True
- TargetFramework=net46
+ TargetFramework=net472{65e0e82a-eace-4787-8994-888674c2fe87}
@@ -263,4 +263,6 @@
+
+
diff --git a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj
index ba573f93ad5..b3a4769278d 100644
--- a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj
+++ b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj
@@ -5,7 +5,7 @@
LibraryMicrosoft\FSharpTemplates
- net46
+ net472true
diff --git a/vsintegration/src/Directory.Build.props b/vsintegration/src/Directory.Build.props
index df989b6c15c..f7a21adf80c 100644
--- a/vsintegration/src/Directory.Build.props
+++ b/vsintegration/src/Directory.Build.props
@@ -6,6 +6,7 @@
falsefalsetrue
+ false
diff --git a/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs b/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs
index c8c764f2521..a9ef2395dbd 100644
--- a/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs
+++ b/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs
@@ -47,7 +47,7 @@ type internal FSharpClassificationService
asyncMaybe {
use _logBlock = Logger.LogBlock(LogEditorFunctionId.Classification_Semantic)
- let! _, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document)
+ let! _, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! _, _, checkResults = checkerProvider.Checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, allowStaleResults = false, userOpName=userOpName)
// it's crucial to not return duplicated or overlapping `ClassifiedSpan`s because Find Usages service crashes.
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs
index f2b95ef1c1e..902d32357f0 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs
@@ -96,7 +96,7 @@ type internal FSharpAddOpenCodeFixProvider
override __.RegisterCodeFixesAsync context : Task =
asyncMaybe {
let document = context.Document
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken)
let! sourceText = context.Document.GetTextAsync(context.CancellationToken)
let! _, parsedInput, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName)
let line = sourceText.Lines.GetLineFromPosition(context.Span.End)
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/CodeFixHelpers.fs b/vsintegration/src/FSharp.Editor/CodeFix/CodeFixHelpers.fs
new file mode 100644
index 00000000000..cbd96b860ef
--- /dev/null
+++ b/vsintegration/src/FSharp.Editor/CodeFix/CodeFixHelpers.fs
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace Microsoft.VisualStudio.FSharp.Editor
+
+open System.Threading
+
+open Microsoft.CodeAnalysis.Text
+open Microsoft.CodeAnalysis.CodeFixes
+open Microsoft.CodeAnalysis.CodeActions
+
+[]
+module internal CodeFixHelpers =
+ let createTextChangeCodeFix (title: string, context: CodeFixContext, computeTextChanges: unit -> Async) =
+ CodeAction.Create(
+ title,
+ (fun (cancellationToken: CancellationToken) ->
+ async {
+ let! cancellationToken = Async.CancellationToken
+ let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask
+ let! changesOpt = computeTextChanges()
+ match changesOpt with
+ | None -> return context.Document
+ | Some textChanges -> return context.Document.WithText(sourceText.WithChanges(textChanges))
+ } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)),
+ title)
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs b/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs
index 7c9442c2d81..32f99295777 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs
@@ -49,7 +49,7 @@ type internal FSharpFixIndexerAccessCodeFixProvider() =
| _ -> context.Span,sourceText.GetSubText(context.Span).ToString()
let codefix =
- createTextChangeCodeFix(
+ CodeFixHelpers.createTextChangeCodeFix(
FSComp.SR.addIndexerDot(),
context,
(fun () -> asyncMaybe.Return [| TextChange(span, replacement.TrimEnd() + ".") |]))
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs
index 137285ea14f..aaa39980f87 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs
@@ -138,7 +138,7 @@ type internal FSharpImplementInterfaceCodeFixProvider
override __.RegisterCodeFixesAsync context : Task =
asyncMaybe {
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject context.Document
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken)
let cancellationToken = context.CancellationToken
let! sourceText = context.Document.GetTextAsync(cancellationToken)
let! _, parsedInput, checkFileResults = checker.ParseAndCheckDocument(context.Document, projectOptions, sourceText = sourceText, userOpName = userOpName)
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs
index e7d3372912e..b1641f99a77 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs
@@ -32,7 +32,7 @@ type internal FSharpRemoveUnusedOpensCodeFixProvider
let document = context.Document
let! sourceText = document.GetTextAsync()
let checker = checkerProvider.Checker
- let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken)
let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document, projectOptions, checker)
let changes =
unusedOpens
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs b/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs
index 7fca8aa4d43..2255d003cdc 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs
@@ -58,7 +58,7 @@ type internal FSharpRenameParamToMatchSignature
return changes
}
let title = FSComp.SR.replaceWithSuggestion suggestion
- let codefix = createTextChangeCodeFix(title, context, computeChanges)
+ let codefix = CodeFixHelpers.createTextChangeCodeFix(title, context, computeChanges)
context.RegisterCodeFix(codefix, diagnostics)
| _ -> ()
} |> Async.Ignore |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken)
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs b/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs
index d6a5b0eb415..57d4eff5eff 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs
@@ -57,7 +57,7 @@ type internal FSharpRenameUnusedValueCodeFixProvider
// We have to use the additional check for backtickes because `IsOperatorOrBacktickedName` operates on display names
// where backtickes are replaced with parens.
if not (PrettyNaming.IsOperatorOrBacktickedName ident) && not (ident.StartsWith "``") then
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken)
let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName=userOpName)
let m = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText)
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs b/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs
index 1f586d6195a..dc84479da38 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs
@@ -2,45 +2,70 @@
namespace Microsoft.VisualStudio.FSharp.Editor
-open System
open System.Composition
-open System.Collections.Immutable
open System.Threading.Tasks
-open Microsoft.CodeAnalysis
open Microsoft.CodeAnalysis.Text
open Microsoft.CodeAnalysis.CodeFixes
-open SymbolHelpers
-open FSharp.Compiler.SourceCodeServices.Keywords
+
+open FSharp.Compiler
+open FSharp.Compiler.SourceCodeServices
+open FSharp.Compiler.Range
[]
-type internal FSharpReplaceWithSuggestionCodeFixProvider() =
+type internal FSharpReplaceWithSuggestionCodeFixProvider
+ []
+ (
+ checkerProvider: FSharpCheckerProvider,
+ projectInfoManager: FSharpProjectOptionsManager,
+ settings: EditorOptions
+ ) =
inherit CodeFixProvider()
+
+ static let userOpName = "ReplaceWithSuggestionCodeFix"
let fixableDiagnosticIds = set ["FS0039"; "FS1129"; "FS0495"]
- let maybeString = FSComp.SR.undefinedNameSuggestionsIntro()
+ let checker = checkerProvider.Checker
override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds
override __.RegisterCodeFixesAsync context : Task =
- async {
- context.Diagnostics
- |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id)
- |> Seq.iter (fun diagnostic ->
- let message = diagnostic.GetMessage()
- let parts = message.Split([| maybeString |], StringSplitOptions.None)
- if parts.Length > 1 then
- let suggestions =
- parts.[1].Split([| '\r'; '\n' |], StringSplitOptions.RemoveEmptyEntries)
- |> Array.map (fun s -> s.Trim())
-
- let diagnostics = ImmutableArray.Create diagnostic
-
- for suggestion in suggestions do
- let replacement = QuoteIdentifierIfNeeded suggestion
- let codefix =
- createTextChangeCodeFix(
- FSComp.SR.replaceWithSuggestion suggestion,
- context,
- (fun () -> asyncMaybe.Return [| TextChange(context.Span, replacement) |]))
- context.RegisterCodeFix(codefix, diagnostics))
- } |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken)
+ asyncMaybe {
+ do! Option.guard settings.CodeFixes.SuggestNamesForErrors
+
+ let document = context.Document
+ let! _, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken)
+ let! parseFileResults, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, userOpName=userOpName)
+
+ // This is all needed to get a declaration list
+ let! sourceText = document.GetTextAsync(context.CancellationToken)
+ let unresolvedIdentifierText = sourceText.GetSubText(context.Span).ToString()
+ let pos = context.Span.End
+ let caretLinePos = sourceText.Lines.GetLinePosition(pos)
+ let caretLine = sourceText.Lines.GetLineFromPosition(pos)
+ let fcsCaretLineNumber = Line.fromZ caretLinePos.Line
+ let partialName = QuickParse.GetPartialLongNameEx(caretLine.ToString(), caretLinePos.Character - 1)
+
+ let! declInfo = checkFileResults.GetDeclarationListInfo(Some parseFileResults, fcsCaretLineNumber, caretLine.ToString(), partialName, userOpName=userOpName) |> liftAsync
+ let namesToCheck = declInfo.Items |> Array.map (fun item -> item.Name)
+
+ let suggestedNames = ErrorResolutionHints.getSuggestedNames namesToCheck unresolvedIdentifierText
+ match suggestedNames with
+ | None -> ()
+ | Some suggestions ->
+ let diagnostics =
+ context.Diagnostics
+ |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id)
+ |> Seq.toImmutableArray
+
+ for suggestion in suggestions do
+ let replacement = Keywords.QuoteIdentifierIfNeeded suggestion
+ let codeFix =
+ CodeFixHelpers.createTextChangeCodeFix(
+ FSComp.SR.replaceWithSuggestion suggestion,
+ context,
+ (fun () -> asyncMaybe.Return [| TextChange(context.Span, replacement) |]))
+
+ context.RegisterCodeFix(codeFix, diagnostics)
+ }
+ |> Async.Ignore
+ |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken)
diff --git a/vsintegration/src/FSharp.Editor/CodeFix/SimplifyName.fs b/vsintegration/src/FSharp.Editor/CodeFix/SimplifyName.fs
index 152cce06829..aeeae1773ef 100644
--- a/vsintegration/src/FSharp.Editor/CodeFix/SimplifyName.fs
+++ b/vsintegration/src/FSharp.Editor/CodeFix/SimplifyName.fs
@@ -27,7 +27,7 @@ type internal FSharpSimplifyNameCodeFixProvider() =
| true, longIdent -> sprintf "%s '%s'" (SR.SimplifyName()) longIdent
| _ -> SR.SimplifyName()
- let codefix = createTextChangeCodeFix(title, context, (fun () -> asyncMaybe.Return [| TextChange(context.Span, "") |]))
+ let codefix = CodeFixHelpers.createTextChangeCodeFix(title, context, (fun () -> asyncMaybe.Return [| TextChange(context.Span, "") |]))
context.RegisterCodeFix(codefix, ImmutableArray.Create(diagnostic))
}
diff --git a/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs b/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs
index 1feaad48354..f7248253fd0 100644
--- a/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs
+++ b/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs
@@ -142,7 +142,7 @@ type internal FSharpCodeLensService
do! Async.Sleep 800 |> liftAsync
logInfof "Rechecking code due to buffer edit!"
let! document = workspace.CurrentSolution.GetDocument(documentId.Value) |> Option.ofObj
- let! _, options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! _, options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, bufferChangedCts.Token)
let! _, parsedInput, checkFileResults = checker.ParseAndCheckDocument(document, options, "LineLens", allowStaleResults=true)
logInfof "Getting uses of all symbols!"
let! symbolUses = checkFileResults.GetAllUsesOfAllSymbolsInFile() |> liftAsync
diff --git a/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs b/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs
index 9c60982210e..1683cb6a4a7 100644
--- a/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs
+++ b/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs
@@ -25,7 +25,7 @@ type internal FSharpHelpContextService
static let userOpName = "ImplementInterfaceCodeFix"
static member GetHelpTerm(checker: FSharpChecker, sourceText : SourceText, fileName, options, span: TextSpan, tokens: List, textVersion, perfOptions) : Async =
asyncMaybe {
- let! _, _, check = checker.ParseAndCheckDocument(fileName, textVersion, sourceText.ToString(), options, perfOptions, userOpName = userOpName)
+ let! _, _, check = checker.ParseAndCheckDocument(fileName, textVersion, sourceText, options, perfOptions, userOpName = userOpName)
let textLines = sourceText.Lines
let lineInfo = textLines.GetLineFromPosition(span.Start)
let line = lineInfo.LineNumber
@@ -34,12 +34,11 @@ type internal FSharpHelpContextService
let caretColumn = textLines.GetLinePosition(span.Start).Character
let shouldTryToFindSurroundingIdent (token : ClassifiedSpan) =
- let span = token.TextSpan
- let content = sourceText.ToString().Substring(span.Start, span.End - span.Start)
+ let content = sourceText.GetSubText(token.TextSpan)
match token.ClassificationType with
| ClassificationTypeNames.Text
| ClassificationTypeNames.WhiteSpace -> true
- | (ClassificationTypeNames.Operator|ClassificationTypeNames.Punctuation)when content = "." -> true
+ | (ClassificationTypeNames.Operator|ClassificationTypeNames.Punctuation)when content.Length > 0 && content.[0] = '.' -> true
| _ -> false
let tokenInformation, col =
@@ -99,7 +98,7 @@ type internal FSharpHelpContextService
member this.GetHelpTermAsync(document, textSpan, cancellationToken) =
asyncMaybe {
- let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! textVersion = document.GetTextVersionAsync(cancellationToken)
let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document)
diff --git a/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs b/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs
index cd6e0879bc5..11922d0d0d0 100644
--- a/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs
+++ b/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs
@@ -5,6 +5,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor
open System
open System.ComponentModel.Composition
open System.Runtime.InteropServices
+open System.Threading
open Microsoft.VisualStudio
open Microsoft.VisualStudio.Editor
@@ -66,10 +67,10 @@ type internal XmlDocCommandFilter
// XmlDocable line #1 are 1-based, editor is 0-based
let curLineNum = wpfTextView.Caret.Position.BufferPosition.GetContainingLine().LineNumber + 1
let! document = document.Value
- let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
- let sourceText = wpfTextView.TextBuffer.CurrentSnapshot.GetText()
+ let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None)
+ let! sourceText = document.GetTextAsync(CancellationToken.None)
let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName)
- let xmlDocables = XmlDocParser.getXmlDocables (sourceText, Some parsedInput)
+ let xmlDocables = XmlDocParser.getXmlDocables (sourceText.ToFSharpSourceText(), Some parsedInput)
let xmlDocablesBelowThisLine =
// +1 because looking below current line for e.g. a 'member'
xmlDocables |> List.filter (fun (XmlDocable(line,_indent,_paramNames)) -> line = curLineNum+1)
@@ -111,9 +112,13 @@ type internal XmlDocCommandFilter
else
VSConstants.E_FAIL
-[)>]
-[]
-[]
+// Disabled:
+// - https://github.com/Microsoft/visualfsharp/issues/6076
+// - The feature does not work; it should probably use an exposed Roslyn API of some sort
+// - Despite not working, it is a source of UI delays
+//[)>]
+//[]
+//[]
type internal XmlDocCommandFilterProvider
[]
(checkerProvider: FSharpCheckerProvider,
diff --git a/vsintegration/src/FSharp.Editor/Common/Constants.fs b/vsintegration/src/FSharp.Editor/Common/Constants.fs
index 58d8a5448a1..ae848297b4a 100644
--- a/vsintegration/src/FSharp.Editor/Common/Constants.fs
+++ b/vsintegration/src/FSharp.Editor/Common/Constants.fs
@@ -43,6 +43,10 @@ module internal FSharpConstants =
/// "FSharp"
let FSharpLanguageLongName = "FSharp"
+ []
+ /// "F# Miscellaneous Files"
+ let FSharpMiscellaneousFilesName = "F# Miscellaneous Files"
+
[]
module internal FSharpProviderConstants =
diff --git a/vsintegration/src/FSharp.Editor/Common/Extensions.fs b/vsintegration/src/FSharp.Editor/Common/Extensions.fs
index ef56215cf41..694d3a401a8 100644
--- a/vsintegration/src/FSharp.Editor/Common/Extensions.fs
+++ b/vsintegration/src/FSharp.Editor/Common/Extensions.fs
@@ -6,7 +6,9 @@ module internal Microsoft.VisualStudio.FSharp.Editor.Extensions
open System
open System.IO
open Microsoft.CodeAnalysis
+open Microsoft.CodeAnalysis.Text
open Microsoft.CodeAnalysis.Host
+open FSharp.Compiler.Text
open FSharp.Compiler.Ast
open FSharp.Compiler.SourceCodeServices
@@ -40,6 +42,95 @@ type Document with
languageServices.GetService<'T>()
|> Some
+module private SourceText =
+
+ open System.Runtime.CompilerServices
+
+ /// Ported from Roslyn.Utilities
+ []
+ module Hash =
+ /// (From Roslyn) This is how VB Anonymous Types combine hash values for fields.
+ let combine (newKey: int) (currentKey: int) = (currentKey * (int 0xA5555529)) + newKey
+
+ let combineValues (values: seq<'T>) =
+ (0, values) ||> Seq.fold (fun hash value -> combine (value.GetHashCode()) hash)
+
+ let weakTable = ConditionalWeakTable()
+
+ let create (sourceText: SourceText) =
+ let sourceText =
+ {
+ new Object() with
+ override __.GetHashCode() =
+ let checksum = sourceText.GetChecksum()
+ let contentsHash = if not checksum.IsDefault then Hash.combineValues checksum else 0
+ let encodingHash = if not (isNull sourceText.Encoding) then sourceText.Encoding.GetHashCode() else 0
+
+ sourceText.ChecksumAlgorithm.GetHashCode()
+ |> Hash.combine encodingHash
+ |> Hash.combine contentsHash
+ |> Hash.combine sourceText.Length
+
+ interface ISourceText with
+
+ member __.Item with get index = sourceText.[index]
+
+ member __.GetLineString(lineIndex) =
+ sourceText.Lines.[lineIndex].ToString()
+
+ member __.GetLineCount() =
+ sourceText.Lines.Count
+
+ member __.GetLastCharacterPosition() =
+ if sourceText.Lines.Count > 0 then
+ (sourceText.Lines.Count, sourceText.Lines.[sourceText.Lines.Count - 1].Span.Length)
+ else
+ (0, 0)
+
+ member __.GetSubTextString(start, length) =
+ sourceText.GetSubText(TextSpan(start, length)).ToString()
+
+ member __.SubTextEquals(target, startIndex) =
+ if startIndex < 0 || startIndex >= sourceText.Length then
+ invalidArg "startIndex" "Out of range."
+
+ if String.IsNullOrEmpty(target) then
+ invalidArg "target" "Is null or empty."
+
+ let lastIndex = startIndex + target.Length
+ if lastIndex <= startIndex || lastIndex >= sourceText.Length then
+ invalidArg "target" "Too big."
+
+ let mutable finished = false
+ let mutable didEqual = true
+ let mutable i = 0
+ while not finished && i < target.Length do
+ if target.[i] <> sourceText.[startIndex + i] then
+ didEqual <- false
+ finished <- true // bail out early
+ else
+ i <- i + 1
+
+ didEqual
+
+ member __.ContentEquals(sourceText) =
+ match sourceText with
+ | :? SourceText as sourceText -> sourceText.ContentEquals(sourceText)
+ | _ -> false
+
+ member __.Length = sourceText.Length
+
+ member __.CopyTo(sourceIndex, destination, destinationIndex, count) =
+ sourceText.CopyTo(sourceIndex, destination, destinationIndex, count)
+ }
+
+ sourceText
+
+type SourceText with
+
+ member this.ToFSharpSourceText() =
+ SourceText.weakTable.GetValue(this, Runtime.CompilerServices.ConditionalWeakTable<_,_>.CreateValueCallback(SourceText.create))
+
type FSharpNavigationDeclarationItem with
member x.RoslynGlyph : Glyph =
match x.Glyph with
diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs
index 8980084f5c3..4b80da57009 100644
--- a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs
+++ b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs
@@ -52,7 +52,7 @@ type internal FSharpCompletionProvider
|> List.filter (fun (keyword, _) -> not (PrettyNaming.IsOperatorName keyword))
|> List.sortBy (fun (keyword, _) -> keyword)
|> List.mapi (fun n (keyword, description) ->
- CommonCompletionItem.Create(keyword, CompletionItemRules.Default, Nullable Glyph.Keyword, sortText = sprintf "%06d" (1000000 + n))
+ CommonCompletionItem.Create(keyword, null, CompletionItemRules.Default, Nullable Glyph.Keyword, sortText = sprintf "%06d" (1000000 + n))
.AddProperty("description", description)
.AddProperty(IsKeywordPropName, ""))
@@ -107,7 +107,7 @@ type internal FSharpCompletionProvider
static member ProvideCompletionsAsyncAux(checker: FSharpChecker, sourceText: SourceText, caretPosition: int, options: FSharpProjectOptions, filePath: string,
textVersionHash: int, getAllSymbols: FSharpCheckFileResults -> AssemblySymbol list, languageServicePerformanceOptions: LanguageServicePerformanceOptions, intellisenseOptions: IntelliSenseOptions) =
asyncMaybe {
- let! parseResults, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText.ToString(), options, languageServicePerformanceOptions, userOpName = userOpName)
+ let! parseResults, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName = userOpName)
let textLines = sourceText.Lines
let caretLinePos = textLines.GetLinePosition(caretPosition)
@@ -156,7 +156,7 @@ type internal FSharpCompletionProvider
| _, idents -> Array.last idents
let completionItem =
- CommonCompletionItem.Create(name, glyph = Nullable glyph, rules = getRules intellisenseOptions.ShowAfterCharIsTyped, filterText = filterText)
+ CommonCompletionItem.Create(name, null, glyph = Nullable glyph, rules = getRules intellisenseOptions.ShowAfterCharIsTyped, filterText = filterText)
.AddProperty(FullNamePropName, declarationItem.FullName)
let completionItem =
@@ -220,7 +220,7 @@ type internal FSharpCompletionProvider
let! sourceText = context.Document.GetTextAsync(context.CancellationToken)
let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document)
do! Option.guard (CompletionUtils.shouldProvideCompletion(document.Id, document.FilePath, defines, sourceText, context.Position))
- let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken)
let! textVersion = context.Document.GetTextVersionAsync(context.CancellationToken)
let getAllSymbols(fileCheckResults: FSharpCheckFileResults) =
if settings.IntelliSense.IncludeSymbolsFromUnopenedNamespacesOrModules
@@ -286,7 +286,7 @@ type internal FSharpCompletionProvider
let! sourceText = document.GetTextAsync(cancellationToken)
let textWithItemCommitted = sourceText.WithChanges(TextChange(item.Span, nameInCode))
let line = sourceText.Lines.GetLineFromPosition(item.Span.Start)
- let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName)
let fullNameIdents = fullName |> Option.map (fun x -> x.Split '.') |> Option.defaultValue [||]
diff --git a/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs b/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs
index 6ffc30c88cc..288feb97870 100644
--- a/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs
+++ b/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs
@@ -36,7 +36,7 @@ type internal FSharpSignatureHelpProvider
// Unit-testable core routine
static member internal ProvideMethodsAsyncAux(checker: FSharpChecker, documentationBuilder: IDocumentationBuilder, sourceText: SourceText, caretPosition: int, options: FSharpProjectOptions, triggerIsTypedChar: char option, filePath: string, textVersionHash: int) = async {
- let! parseResults, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText.ToString(), options, userOpName = userOpName)
+ let! parseResults, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText.ToFSharpSourceText(), options, userOpName = userOpName)
match checkFileAnswer with
| FSharpCheckFileAnswer.Aborted -> return None
| FSharpCheckFileAnswer.Succeeded(checkFileResults) ->
@@ -195,7 +195,7 @@ type internal FSharpSignatureHelpProvider
member this.GetItemsAsync(document, position, triggerInfo, cancellationToken) =
asyncMaybe {
try
- let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! textVersion = document.GetTextVersionAsync(cancellationToken)
diff --git a/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs b/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs
index 424a3c1904a..bb55414b10d 100644
--- a/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs
+++ b/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs
@@ -37,14 +37,14 @@ type internal FSharpBreakpointResolutionService
else
let textLineColumn = textLinePos.Character
let fcsTextLineNumber = Line.fromZ textLinePos.Line // Roslyn line numbers are zero-based, FSharp.Compiler.Service line numbers are 1-based
- let! parseResults = checker.ParseFile(fileName, sourceText.ToString(), parsingOptions, userOpName = userOpName)
+ let! parseResults = checker.ParseFile(fileName, sourceText.ToFSharpSourceText(), parsingOptions, userOpName = userOpName)
return parseResults.ValidateBreakpointLocation(mkPos fcsTextLineNumber textLineColumn)
}
interface IBreakpointResolutionService with
member this.ResolveBreakpointAsync(document: Document, textSpan: TextSpan, cancellationToken: CancellationToken): Task =
asyncMaybe {
- let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! range = FSharpBreakpointResolutionService.GetBreakpointLocation(checkerProvider.Checker, sourceText, document.Name, textSpan, parsingOptions)
let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range)
diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs
index 2de46831c9c..ff3b5579855 100644
--- a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs
+++ b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs
@@ -59,12 +59,13 @@ type internal FSharpDocumentDiagnosticAnalyzer() =
static member GetDiagnostics(checker: FSharpChecker, filePath: string, sourceText: SourceText, textVersionHash: int, parsingOptions: FSharpParsingOptions, options: FSharpProjectOptions, diagnosticType: DiagnosticsType) =
async {
- let! parseResults = checker.ParseFile(filePath, sourceText.ToString(), parsingOptions, userOpName=userOpName)
+ let fsSourceText = sourceText.ToFSharpSourceText()
+ let! parseResults = checker.ParseFile(filePath, fsSourceText, parsingOptions, userOpName=userOpName)
let! errors =
async {
match diagnosticType with
| DiagnosticsType.Semantic ->
- let! checkResultsAnswer = checker.CheckFileInProject(parseResults, filePath, textVersionHash, sourceText.ToString(), options, userOpName=userOpName)
+ let! checkResultsAnswer = checker.CheckFileInProject(parseResults, filePath, textVersionHash, fsSourceText, options, userOpName=userOpName)
match checkResultsAnswer with
| FSharpCheckFileAnswer.Aborted -> return [||]
| FSharpCheckFileAnswer.Succeeded results ->
@@ -111,7 +112,7 @@ type internal FSharpDocumentDiagnosticAnalyzer() =
override this.AnalyzeSyntaxAsync(document: Document, cancellationToken: CancellationToken): Task> =
let projectInfoManager = getProjectInfoManager document
asyncMaybe {
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! textVersion = document.GetTextVersionAsync(cancellationToken)
return!
@@ -124,12 +125,15 @@ type internal FSharpDocumentDiagnosticAnalyzer() =
override this.AnalyzeSemanticsAsync(document: Document, cancellationToken: CancellationToken): Task> =
let projectInfoManager = getProjectInfoManager document
asyncMaybe {
- let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document)
+ let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! textVersion = document.GetTextVersionAsync(cancellationToken)
- return!
- FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(getChecker document, document.FilePath, sourceText, textVersion.GetHashCode(), parsingOptions, projectOptions, DiagnosticsType.Semantic)
- |> liftAsync
+ if document.Project.Name <> FSharpConstants.FSharpMiscellaneousFilesName || isScriptFile document.FilePath then
+ return!
+ FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(getChecker document, document.FilePath, sourceText, textVersion.GetHashCode(), parsingOptions, projectOptions, DiagnosticsType.Semantic)
+ |> liftAsync
+ else
+ return ImmutableArray.Empty
}
|> Async.map (Option.defaultValue ImmutableArray.Empty)
|> RoslynHelpers.StartAsyncAsTask cancellationToken
diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs
index 72f9f190b68..fe52ce0b6ff 100644
--- a/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs
+++ b/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs
@@ -51,7 +51,7 @@ type internal SimplifyNameDiagnosticAnalyzer() =
do! Option.guard document.FSharpOptions.CodeFixes.SimplifyName
do Trace.TraceInformation("{0:n3} (start) SimplifyName", DateTime.Now.TimeOfDay.TotalSeconds)
do! Async.Sleep DefaultTuning.SimplifyNameInitialDelay |> liftAsync
- let! _parsingOptions, projectOptions = getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document)
+ let! _parsingOptions, projectOptions = getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! textVersion = document.GetTextVersionAsync(cancellationToken)
let textVersionHash = textVersion.GetHashCode()
let! _ = guard.WaitAsync(cancellationToken) |> Async.AwaitTask |> liftAsync
diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs
index 9e85469a804..082b83444eb 100644
--- a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs
+++ b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs
@@ -106,8 +106,8 @@ type internal UnusedDeclarationsAnalyzer() =
do Trace.TraceInformation("{0:n3} (start) UnusedDeclarationsAnalyzer", DateTime.Now.TimeOfDay.TotalSeconds)
do! Async.Sleep DefaultTuning.UnusedDeclarationsAnalyzerInitialDelay |> liftAsync // be less intrusive, give other work priority most of the time
- match getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document) with
- | Some (_parsingOptions, projectOptions) ->
+ match! getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document, cancellationToken) with
+ | (_parsingOptions, projectOptions) ->
let! sourceText = document.GetTextAsync()
let checker = getChecker document
let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName)
@@ -117,7 +117,6 @@ type internal UnusedDeclarationsAnalyzer() =
unusedRanges
|> Seq.map (fun m -> Diagnostic.Create(Descriptor, RoslynHelpers.RangeToLocation(m, sourceText, document.FilePath)))
|> Seq.toImmutableArray
- | None -> return ImmutableArray.Empty
}
|> Async.map (Option.defaultValue ImmutableArray.Empty)
|> RoslynHelpers.StartAsyncAsTask cancellationToken
diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs
index 0262ec9b0b0..f530a0fa583 100644
--- a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs
+++ b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs
@@ -58,7 +58,7 @@ type internal UnusedOpensDiagnosticAnalyzer() =
asyncMaybe {
do Trace.TraceInformation("{0:n3} (start) UnusedOpensAnalyzer", DateTime.Now.TimeOfDay.TotalSeconds)
do! Async.Sleep DefaultTuning.UnusedOpensAnalyzerInitialDelay |> liftAsync // be less intrusive, give other work priority most of the time
- let! _parsingOptions, projectOptions = getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document)
+ let! _parsingOptions, projectOptions = getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync()
let checker = getChecker document
let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document, projectOptions, checker)
diff --git a/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs b/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs
index d1ca526e6d2..923b5372c67 100644
--- a/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs
+++ b/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs
@@ -59,7 +59,7 @@ type internal FSharpDocumentHighlightsService [] (checkerP
let textLinePos = sourceText.Lines.GetLinePosition(position)
let fcsTextLineNumber = Line.fromZ textLinePos.Line
let! symbol = Tokenizer.getSymbolAtPosition(documentKey, sourceText, position, filePath, defines, SymbolLookupKind.Greedy, false)
- let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText.ToString(), options, languageServicePerformanceOptions, userOpName = userOpName)
+ let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName = userOpName)
let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland, userOpName=userOpName)
let! symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol) |> liftAsync
return
@@ -75,7 +75,7 @@ type internal FSharpDocumentHighlightsService [] (checkerP
interface IDocumentHighlightsService with
member __.GetDocumentHighlightsAsync(document, position, _documentsToSearch, cancellationToken) : Task> =
asyncMaybe {
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! textVersion = document.GetTextVersionAsync(cancellationToken)
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj
index 6a95fa56b62..7a403b454fb 100644
--- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj
+++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj
@@ -5,13 +5,12 @@
Library$(NoWarn);75
+ $(NoWarn);44truetrue$(SystemValueTuplePackageVersion)$(OtherFlags) --warnon:1182 --subsystemversion:6.00
- truefalse
- true
@@ -47,10 +46,10 @@
-
+
@@ -92,6 +91,7 @@
+
@@ -145,17 +145,20 @@
+
+
+
-
+
diff --git a/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs b/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs
index 10e2b0e76c6..a5e6332cb0c 100644
--- a/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs
+++ b/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs
@@ -3,6 +3,7 @@
namespace Microsoft.VisualStudio.FSharp.Editor
open System.ComponentModel.Composition
+open Microsoft.CodeAnalysis.Text
open Microsoft.CodeAnalysis.Editor
open FSharp.Compiler.SourceCodeServices
open System.Runtime.InteropServices
@@ -17,9 +18,9 @@ type internal FSharpBraceMatchingService
static let defaultUserOpName = "BraceMatching"
- static member GetBraceMatchingResult(checker: FSharpChecker, sourceText, fileName, parsingOptions: FSharpParsingOptions, position: int, userOpName: string, [] forFormatting: bool) =
+ static member GetBraceMatchingResult(checker: FSharpChecker, sourceText: SourceText, fileName, parsingOptions: FSharpParsingOptions, position: int, userOpName: string, [] forFormatting: bool) =
async {
- let! matchedBraces = checker.MatchBraces(fileName, sourceText.ToString(), parsingOptions, userOpName)
+ let! matchedBraces = checker.MatchBraces(fileName, sourceText.ToFSharpSourceText(), parsingOptions, userOpName)
let isPositionInRange range =
match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range) with
| None -> false
@@ -35,7 +36,7 @@ type internal FSharpBraceMatchingService
interface IBraceMatcher with
member this.FindBracesAsync(document, position, cancellationToken) =
asyncMaybe {
- let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! (left, right) = FSharpBraceMatchingService.GetBraceMatchingResult(checkerProvider.Checker, sourceText, document.Name, parsingOptions, position, defaultUserOpName)
let! leftSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, left)
diff --git a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs
index 07d28efd076..25f3038da56 100644
--- a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs
+++ b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs
@@ -151,7 +151,7 @@ type internal FSharpEditorFormattingService
let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask
let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask
let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName)
- let projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document
+ let! projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! textChange = FSharpEditorFormattingService.GetFormattingChanges(document.Id, sourceText, document.FilePath, checkerProvider.Checker, indentStyle, projectOptionsOpt, position)
return textChange |> Option.toList |> toIList
}
@@ -162,7 +162,7 @@ type internal FSharpEditorFormattingService
let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask
let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName)
- match projectInfoManager.TryGetOptionsForEditingDocumentOrProject document with
+ match! projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken) with
| Some (parsingOptions, _) ->
let! textChanges = FSharpEditorFormattingService.GetPasteChanges(document.Id, sourceText, document.FilePath, settings.Formatting, tabSize, parsingOptions, currentClipboard, span)
return textChanges |> Option.defaultValue Seq.empty |> toIList
diff --git a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs
index 1ae841ac049..0426832ce34 100644
--- a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs
+++ b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs
@@ -100,7 +100,7 @@ type internal FSharpIndentationService
let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask
let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName)
let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName)
- let projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document
+ let! projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let indent = FSharpIndentationService.GetDesiredIndentation(document.Id, sourceText, document.FilePath, lineNumber, tabSize, indentStyle, projectOptionsOpt)
return
match indent with
diff --git a/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs b/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs
index ebee12decd3..fb2ac7394ef 100644
--- a/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs
+++ b/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs
@@ -162,7 +162,7 @@ type internal InlineRenameService
interface IEditorInlineRenameService with
member __.GetRenameInfoAsync(document: Document, position: int, cancellationToken: CancellationToken) : Task =
asyncMaybe {
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
return! InlineRenameService.GetInlineRenameInfo(checkerProvider.Checker, projectInfoManager, document, sourceText, position, defines, projectOptions)
diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs
index cae5473fb35..9c6c4d49a6f 100644
--- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs
+++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs
@@ -10,20 +10,17 @@ open FSharp.Compiler.Ast
open FSharp.Compiler.SourceCodeServices
type FSharpChecker with
- member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, sourceText: string, userOpName: string) =
+ member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, sourceText: SourceText, userOpName: string) =
asyncMaybe {
- let! fileParseResults = checker.ParseFile(document.FilePath, sourceText, parsingOptions, userOpName=userOpName) |> liftAsync
+ let! fileParseResults = checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName=userOpName) |> liftAsync
return! fileParseResults.ParseTree
}
- member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, sourceText: SourceText, userOpName: string) =
- checker.ParseDocument(document, parsingOptions, sourceText=sourceText.ToString(), userOpName=userOpName)
-
- member checker.ParseAndCheckDocument(filePath: string, textVersionHash: int, sourceText: string, options: FSharpProjectOptions, languageServicePerformanceOptions: LanguageServicePerformanceOptions, userOpName: string) =
+ member checker.ParseAndCheckDocument(filePath: string, textVersionHash: int, sourceText: SourceText, options: FSharpProjectOptions, languageServicePerformanceOptions: LanguageServicePerformanceOptions, userOpName: string) =
async {
let parseAndCheckFile =
async {
- let! parseResults, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText, options, userOpName=userOpName)
+ let! parseResults, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText.ToFSharpSourceText(), options, userOpName=userOpName)
return
match checkFileAnswer with
| FSharpCheckFileAnswer.Aborted ->
@@ -82,21 +79,21 @@ type FSharpChecker with
match allowStaleResults with
| Some b -> { document.FSharpOptions.LanguageServicePerformance with AllowStaleCompletionResults = b }
| _ -> document.FSharpOptions.LanguageServicePerformance
- return! checker.ParseAndCheckDocument(document.FilePath, textVersion.GetHashCode(), sourceText.ToString(), options, perfOpts, userOpName=userOpName)
+ return! checker.ParseAndCheckDocument(document.FilePath, textVersion.GetHashCode(), sourceText, options, perfOpts, userOpName=userOpName)
}
- member checker.TryParseAndCheckFileInProject (projectOptions, fileName, source, userOpName) = async {
- let! (parseResults, checkAnswer) = checker.ParseAndCheckFileInProject (fileName,0, source,projectOptions, userOpName=userOpName)
+ member checker.TryParseAndCheckFileInProject (projectOptions, fileName, sourceText: SourceText, userOpName) = async {
+ let! (parseResults, checkAnswer) = checker.ParseAndCheckFileInProject (fileName,0,sourceText.ToFSharpSourceText(),projectOptions, userOpName=userOpName)
match checkAnswer with
| FSharpCheckFileAnswer.Aborted -> return None
| FSharpCheckFileAnswer.Succeeded checkResults -> return Some (parseResults,checkResults)
}
- member checker.GetAllUsesOfAllSymbolsInSourceString (projectOptions, fileName, source: string, checkForUnusedOpens, userOpName) = async {
+ member checker.GetAllUsesOfAllSymbolsInSourceString (projectOptions, fileName, sourceText: SourceText, checkForUnusedOpens, userOpName) = async {
- let! parseAndCheckResults = checker.TryParseAndCheckFileInProject (projectOptions, fileName, source, userOpName=userOpName)
+ let! parseAndCheckResults = checker.TryParseAndCheckFileInProject (projectOptions, fileName, sourceText, userOpName=userOpName)
match parseAndCheckResults with
| None -> return [||]
| Some(_parseResults,checkResults) ->
diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs
index 99b9b79601d..a14ef358737 100644
--- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs
+++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs
@@ -3,6 +3,7 @@
namespace Microsoft.VisualStudio.FSharp.Editor
open System
+open System.Collections.Generic
open System.Collections.Concurrent
open System.Collections.Immutable
open System.ComponentModel.Composition
@@ -13,10 +14,303 @@ open FSharp.Compiler.CompileOps
open FSharp.Compiler.SourceCodeServices
open Microsoft.VisualStudio
open Microsoft.VisualStudio.FSharp.Editor
-open Microsoft.VisualStudio.FSharp.Editor.SiteProvider
open Microsoft.VisualStudio.LanguageServices
open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem
open Microsoft.VisualStudio.Shell
+open System.Threading
+open Microsoft.VisualStudio.Shell.Interop
+open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList
+
+[]
+module private FSharpProjectOptionsHelpers =
+
+ let mapCpsProjectToSite(workspace:VisualStudioWorkspaceImpl, project:Project, serviceProvider:System.IServiceProvider, cpsCommandLineOptions: IDictionary) =
+ let hier = workspace.GetHierarchy(project.Id)
+ let sourcePaths, referencePaths, options =
+ match cpsCommandLineOptions.TryGetValue(project.Id) with
+ | true, (sourcePaths, options) -> sourcePaths, [||], options
+ | false, _ -> [||], [||], [||]
+ {
+ new IProvideProjectSite with
+ member x.GetProjectSite() =
+ let mutable errorReporter =
+ let reporter = ProjectExternalErrorReporter(project.Id, "FS", serviceProvider)
+ Some(reporter:> IVsLanguageServiceBuildErrorReporter2)
+
+ {
+ new IProjectSite with
+ member __.Description = project.Name
+ member __.CompilationSourceFiles = sourcePaths
+ member __.CompilationOptions =
+ Array.concat [options; referencePaths |> Array.map(fun r -> "-r:" + r)]
+ member __.CompilationReferences = referencePaths
+ member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None)
+ member __.ProjectFileName = project.FilePath
+ member __.AdviseProjectSiteChanges(_,_) = ()
+ member __.AdviseProjectSiteCleaned(_,_) = ()
+ member __.AdviseProjectSiteClosed(_,_) = ()
+ member __.IsIncompleteTypeCheckEnvironment = false
+ member __.TargetFrameworkMoniker = ""
+ member __.ProjectGuid = project.Id.Id.ToString()
+ member __.LoadTime = System.DateTime.Now
+ member __.ProjectProvider = Some (x)
+ member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v
+ }
+ interface IVsHierarchy with
+ member __.SetSite(psp) = hier.SetSite(psp)
+ member __.GetSite(psp) = hier.GetSite(ref psp)
+ member __.QueryClose(pfCanClose)= hier.QueryClose(ref pfCanClose)
+ member __.Close() = hier.Close()
+ member __.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid)
+ member __.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid)
+ member __.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar)
+ member __.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var)
+ member __.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) =
+ hier.GetNestedHierarchy(itemid, ref iidHierarchyNested, ref ppHierarchyNested, ref pitemidNested)
+ member __.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName)
+ member __.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid)
+ member __.Unused0() = hier.Unused0()
+ member __.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie)
+ member __.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie)
+ member __.Unused1() = hier.Unused1()
+ member __.Unused2() = hier.Unused2()
+ member __.Unused3() = hier.Unused3()
+ member __.Unused4() = hier.Unused4()
+ }
+
+ let hasProjectVersionChanged (oldProject: Project) (newProject: Project) =
+ oldProject.Version <> newProject.Version
+
+ let hasDependentVersionChanged (oldProject: Project) (newProject: Project) =
+ let oldProjectRefs = oldProject.ProjectReferences
+ let newProjectRefs = newProject.ProjectReferences
+ oldProjectRefs.Count() <> newProjectRefs.Count() ||
+ (oldProjectRefs, newProjectRefs)
+ ||> Seq.exists2 (fun p1 p2 ->
+ let doesProjectIdDiffer = p1.ProjectId <> p2.ProjectId
+ let p1 = oldProject.Solution.GetProject(p1.ProjectId)
+ let p2 = newProject.Solution.GetProject(p2.ProjectId)
+ doesProjectIdDiffer || p1.Version <> p2.Version
+ )
+
+ let isProjectInvalidated (oldProject: Project) (newProject: Project) (settings: EditorOptions) =
+ let hasProjectVersionChanged = hasProjectVersionChanged oldProject newProject
+ if settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences then
+ hasProjectVersionChanged || hasDependentVersionChanged oldProject newProject
+ else
+ hasProjectVersionChanged
+
+[]
+type private FSharpProjectOptionsMessage =
+ | TryGetOptionsByDocument of Document * AsyncReplyChannel<(FSharpParsingOptions * FSharpProjectOptions) option> * CancellationToken
+ | TryGetOptionsByProject of Project * AsyncReplyChannel<(FSharpParsingOptions * FSharpProjectOptions) option> * CancellationToken
+ | ClearOptions of ProjectId
+ | ClearSingleFileOptionsCache of DocumentId
+
+[]
+type private FSharpProjectOptionsReactor (workspace: VisualStudioWorkspaceImpl, settings: EditorOptions, serviceProvider, checkerProvider: FSharpCheckerProvider) =
+ let cancellationTokenSource = new CancellationTokenSource()
+
+ // Hack to store command line options from HandleCommandLineChanges
+ let cpsCommandLineOptions = new ConcurrentDictionary()
+
+ let cache = Dictionary()
+ let singleFileCache = Dictionary()
+
+ let rec tryComputeOptionsByFile (document: Document) cancellationToken (loadTime: DateTime option) =
+ async {
+ let! fileStamp = document.GetTextVersionAsync(cancellationToken) |> Async.AwaitTask
+ match singleFileCache.TryGetValue(document.Id) with
+ | false, _ ->
+ let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask
+ let loadTime = defaultArg loadTime DateTime.Now
+ let! scriptProjectOptions, _ = checkerProvider.Checker.GetProjectOptionsFromScript(document.FilePath, sourceText.ToFSharpSourceText(), loadTime)
+ let projectOptions =
+ if isScriptFile document.FilePath then
+ scriptProjectOptions
+ else
+ {
+ ProjectFileName = document.FilePath
+ ProjectId = None
+ SourceFiles = [|document.FilePath|]
+ OtherOptions = [||]
+ ReferencedProjects = [||]
+ IsIncompleteTypeCheckEnvironment = false
+ UseScriptResolutionRules = SourceFile.MustBeSingleFileProject (Path.GetFileName(document.FilePath))
+ LoadTime = DateTime.Now
+ UnresolvedReferences = None
+ OriginalLoadReferences = []
+ ExtraProjectInfo= None
+ Stamp = Some(int64 (fileStamp.GetHashCode()))
+ }
+
+ cancellationToken.ThrowIfCancellationRequested()
+
+ checkerProvider.Checker.CheckProjectInBackground(projectOptions, userOpName="checkOptions")
+
+ let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
+
+ singleFileCache.[document.Id] <- (fileStamp, loadTime, parsingOptions, projectOptions)
+
+ return Some(parsingOptions, projectOptions)
+
+ | true, (fileStamp2, loadTime2, parsingOptions, projectOptions) ->
+ if fileStamp <> fileStamp2 then
+ singleFileCache.Remove(document.Id) |> ignore
+ return! tryComputeOptionsByFile document cancellationToken (Some loadTime2)
+ else
+ return Some(parsingOptions, projectOptions)
+ }
+
+ let rec tryComputeOptions (project: Project) (cancellationToken: CancellationToken) =
+ async {
+ let projectId = project.Id
+ match cache.TryGetValue(projectId) with
+ | false, _ ->
+
+ // Because this code can be kicked off before the hack, HandleCommandLineChanges, occurs,
+ // the command line options will not be available and we should bail if one of the project references does not give us anything.
+ let mutable canBail = false
+
+ let referencedProjects = ResizeArray()
+
+ if settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences then
+ for projectReference in project.ProjectReferences do
+ let referencedProject = project.Solution.GetProject(projectReference.ProjectId)
+ if referencedProject.Language = FSharpConstants.FSharpLanguageName then
+ match! tryComputeOptions referencedProject cancellationToken with
+ | None -> canBail <- true
+ | Some(_, projectOptions) -> referencedProjects.Add(referencedProject.OutputFilePath, projectOptions)
+
+ if canBail then
+ return None
+ else
+
+ let hier = workspace.GetHierarchy(projectId)
+ let projectSite =
+ match hier with
+ // Legacy
+ | (:? IProvideProjectSite as provideSite) -> provideSite.GetProjectSite()
+ // Cps
+ | _ ->
+ let provideSite = mapCpsProjectToSite(workspace, project, serviceProvider, cpsCommandLineOptions)
+ provideSite.GetProjectSite()
+
+ let otherOptions =
+ project.ProjectReferences
+ |> Seq.map (fun x -> "-r:" + project.Solution.GetProject(x.ProjectId).OutputFilePath)
+ |> Array.ofSeq
+ |> Array.append (
+ project.MetadataReferences.OfType()
+ |> Seq.map (fun x -> "-r:" + x.FilePath)
+ |> Array.ofSeq
+ |> Array.append (
+ // Clear any references from CompilationOptions.
+ // We get the references from Project.ProjectReferences/Project.MetadataReferences.
+ projectSite.CompilationOptions
+ |> Array.filter (fun x -> not (x.Contains("-r:")))
+ )
+ )
+
+ let projectOptions =
+ {
+ ProjectFileName = projectSite.ProjectFileName
+ ProjectId = Some(projectId.ToFSharpProjectIdString())
+ SourceFiles = projectSite.CompilationSourceFiles
+ OtherOptions = otherOptions
+ ReferencedProjects = referencedProjects.ToArray()
+ IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment
+ UseScriptResolutionRules = SourceFile.MustBeSingleFileProject (Path.GetFileName(project.FilePath))
+ LoadTime = projectSite.LoadTime
+ UnresolvedReferences = None
+ OriginalLoadReferences = []
+ ExtraProjectInfo= None
+ Stamp = Some(int64 (project.Version.GetHashCode()))
+ }
+
+ cancellationToken.ThrowIfCancellationRequested()
+
+ // This can happen if we didn't receive the callback from HandleCommandLineChanges yet.
+ if Array.isEmpty projectOptions.SourceFiles then
+ return None
+ else
+ checkerProvider.Checker.InvalidateConfiguration(projectOptions, startBackgroundCompileIfAlreadySeen = false, userOpName = "computeOptions")
+
+ let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
+
+ cache.[projectId] <- (project, parsingOptions, projectOptions)
+
+ return Some(parsingOptions, projectOptions)
+
+ | true, (oldProject, parsingOptions, projectOptions) ->
+ if isProjectInvalidated oldProject project settings then
+ cache.Remove(projectId) |> ignore
+ return! tryComputeOptions project cancellationToken
+ else
+ return Some(parsingOptions, projectOptions)
+ }
+
+ let loop (agent: MailboxProcessor) =
+ async {
+ while true do
+ match! agent.Receive() with
+ | FSharpProjectOptionsMessage.TryGetOptionsByDocument(document, reply, cancellationToken) ->
+ try
+ // For now, disallow miscellaneous workspace since we are using the hacky F# miscellaneous files project.
+ if document.Project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles then
+ reply.Reply(None)
+ elif document.Project.Name = FSharpConstants.FSharpMiscellaneousFilesName then
+ let! options = tryComputeOptionsByFile document cancellationToken None
+ reply.Reply(options)
+ else
+ let! options = tryComputeOptions document.Project cancellationToken
+ reply.Reply(options)
+ with
+ | _ ->
+ reply.Reply(None)
+ | FSharpProjectOptionsMessage.TryGetOptionsByProject(project, reply, cancellationToken) ->
+ try
+ if project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles || project.Name = FSharpConstants.FSharpMiscellaneousFilesName then
+ reply.Reply(None)
+ else
+ let! options = tryComputeOptions project cancellationToken
+ reply.Reply(options)
+ with
+ | _ ->
+ reply.Reply(None)
+ | FSharpProjectOptionsMessage.ClearOptions(projectId) ->
+ cache.Remove(projectId) |> ignore
+ | FSharpProjectOptionsMessage.ClearSingleFileOptionsCache(documentId) ->
+ singleFileCache.Remove(documentId) |> ignore
+ }
+
+ let agent = MailboxProcessor.Start((fun agent -> loop agent), cancellationToken = cancellationTokenSource.Token)
+
+ member __.TryGetOptionsByProjectAsync(project, cancellationToken) =
+ agent.PostAndAsyncReply(fun reply -> FSharpProjectOptionsMessage.TryGetOptionsByProject(project, reply, cancellationToken))
+
+ member __.TryGetOptionsByDocumentAsync(document, cancellationToken) =
+ agent.PostAndAsyncReply(fun reply -> FSharpProjectOptionsMessage.TryGetOptionsByDocument(document, reply, cancellationToken))
+
+ member __.ClearOptionsByProjectId(projectId) =
+ agent.Post(FSharpProjectOptionsMessage.ClearOptions(projectId))
+
+ member __.ClearSingleFileOptionsCache(documentId) =
+ agent.Post(FSharpProjectOptionsMessage.ClearSingleFileOptionsCache(documentId))
+
+ member __.SetCpsCommandLineOptions(projectId, sourcePaths, options) =
+ cpsCommandLineOptions.[projectId] <- (sourcePaths, options)
+
+ member __.TryGetCachedOptionsByProjectId(projectId) =
+ match cache.TryGetValue(projectId) with
+ | true, result -> Some(result)
+ | _ -> None
+
+ interface IDisposable with
+ member __.Dispose() =
+ cancellationTokenSource.Cancel()
+ cancellationTokenSource.Dispose()
+ (agent :> IDisposable).Dispose()
/// Exposes FCS FSharpProjectOptions information management as MEF component.
//
@@ -33,139 +327,63 @@ type internal FSharpProjectOptionsManager
settings: EditorOptions
) =
- // A table of information about projects, excluding single-file projects.
- let projectOptionsTable = FSharpProjectOptionsTable()
-
- // A table of information about single-file projects. Currently we only need the load time of each such file, plus
- // the original options for editing
- let singleFileProjectTable = ConcurrentDictionary()
+ let projectDisplayNameOf projectFileName =
+ if String.IsNullOrWhiteSpace projectFileName then projectFileName
+ else Path.GetFileNameWithoutExtension projectFileName
- let tryGetOrCreateProjectId (projectFileName:string) =
- let projectDisplayName = projectDisplayNameOf projectFileName
- Some (workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName))
+ let reactor = new FSharpProjectOptionsReactor(workspace, settings, serviceProvider, checkerProvider)
- /// Retrieve the projectOptionsTable
- member __.FSharpOptions = projectOptionsTable
+ do
+ // We need to listen to this event for lifecycle purposes.
+ workspace.WorkspaceChanged.Add(fun args ->
+ match args.Kind with
+ | WorkspaceChangeKind.ProjectRemoved -> reactor.ClearOptionsByProjectId(args.ProjectId)
+ | _ -> ()
+ )
/// Clear a project from the project table
- member this.ClearInfoForProject(projectId:ProjectId) = projectOptionsTable.ClearInfoForProject(projectId)
-
- /// Clear a project from the single file project table
- member this.ClearInfoForSingleFileProject(projectId) =
- singleFileProjectTable.TryRemove(projectId) |> ignore
-
- /// Update a project in the single file project table
- member this.AddOrUpdateSingleFileProject(projectId, data) = singleFileProjectTable.[projectId] <- data
-
- /// Get the exact options for a single-file script
- member this.ComputeSingleFileOptions (tryGetOrCreateProjectId, fileName, loadTime, fileContents) =
- async {
- let extraProjectInfo = Some(box workspace)
- if SourceFile.MustBeSingleFileProject(fileName) then
- // NOTE: we don't use a unique stamp for single files, instead comparing options structurally.
- // This is because we repeatedly recompute the options.
- let optionsStamp = None
- let! options, _diagnostics = checkerProvider.Checker.GetProjectOptionsFromScript(fileName, fileContents, loadTime, [| |], ?extraProjectInfo=extraProjectInfo, ?optionsStamp=optionsStamp)
- // NOTE: we don't use FCS cross-project references from scripts to projects. THe projects must have been
- // compiled and #r will refer to files on disk
- let referencedProjectFileNames = [| |]
- let site = ProjectSitesAndFiles.CreateProjectSiteForScript(fileName, referencedProjectFileNames, options)
- let deps, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, (tryGetOrCreateProjectId fileName), fileName, options.ExtraProjectInfo, Some projectOptionsTable)
- let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
- return (deps, parsingOptions, projectOptions)
- else
- let site = ProjectSitesAndFiles.ProjectSiteOfSingleFile(fileName)
- let deps, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, (tryGetOrCreateProjectId fileName), fileName, extraProjectInfo, Some projectOptionsTable)
- let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
- return (deps, parsingOptions, projectOptions)
- }
+ member this.ClearInfoForProject(projectId:ProjectId) =
+ reactor.ClearOptionsByProjectId(projectId)
- /// Update the info for a project in the project table
- member this.UpdateProjectInfo(tryGetOrCreateProjectId, projectId, site, userOpName, invalidateConfig) =
- Logger.Log LogEditorFunctionId.LanguageService_UpdateProjectInfo
- projectOptionsTable.AddOrUpdateProject(projectId, (fun isRefresh ->
- let extraProjectInfo = Some(box workspace)
- let referencedProjects, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, Some(projectId), site.ProjectFileName, extraProjectInfo, Some projectOptionsTable)
- if invalidateConfig then checkerProvider.Checker.InvalidateConfiguration(projectOptions, startBackgroundCompileIfAlreadySeen = not isRefresh, userOpName = userOpName + ".UpdateProjectInfo")
- let referencedProjectIds = referencedProjects |> Array.choose tryGetOrCreateProjectId
- let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions)
- referencedProjectIds, parsingOptions, Some site, projectOptions))
+ member this.ClearSingleFileOptionsCache(documentId) =
+ reactor.ClearSingleFileOptionsCache(documentId)
/// Get compilation defines relevant for syntax processing.
/// Quicker then TryGetOptionsForDocumentOrProject as it doesn't need to recompute the exact project
/// options for a script.
member this.GetCompilationDefinesForEditingDocument(document:Document) =
- let projectOptionsOpt = this.TryGetOptionsForProject(document.Project.Id)
- let parsingOptions =
- match projectOptionsOpt with
- | Some (parsingOptions, _site, _projectOptions) -> parsingOptions
+ let parsingOptions =
+ match reactor.TryGetCachedOptionsByProjectId(document.Project.Id) with
+ | Some (_, parsingOptions, _) -> parsingOptions
| _ -> { FSharpParsingOptions.Default with IsInteractive = IsScript document.Name }
- CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
+ CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
- /// Try and get the Options for a project
- member this.TryGetOptionsForProject(projectId:ProjectId) = projectOptionsTable.TryGetOptionsForProject(projectId)
+ member this.TryGetOptionsByProject(project) =
+ reactor.TryGetOptionsByProjectAsync(project)
/// Get the exact options for a document or project
- member this.TryGetOptionsForDocumentOrProject(document: Document) =
+ member this.TryGetOptionsForDocumentOrProject(document: Document, cancellationToken) =
async {
- let projectId = document.Project.Id
-
- // The options for a single-file script project are re-requested each time the file is analyzed. This is because the
- // single-file project may contain #load and #r references which are changing as the user edits, and we may need to re-analyze
- // to determine the latest settings. FCS keeps a cache to help ensure these are up-to-date.
- match singleFileProjectTable.TryGetValue(projectId) with
- | true, (loadTime, _, _) ->
- try
- let fileName = document.FilePath
- let! cancellationToken = Async.CancellationToken
- let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask
- // NOTE: we don't use FCS cross-project references from scripts to projects. The projects must have been
- // compiled and #r will refer to files on disk.
- let tryGetOrCreateProjectId _ = None
- let! _referencedProjectFileNames, parsingOptions, projectOptions = this.ComputeSingleFileOptions (tryGetOrCreateProjectId, fileName, loadTime, sourceText.ToString())
- this.AddOrUpdateSingleFileProject(projectId, (loadTime, parsingOptions, projectOptions))
- return Some (parsingOptions, None, projectOptions)
- with ex ->
- Assert.Exception(ex)
- return None
- | _ -> return this.TryGetOptionsForProject(projectId)
+ match! reactor.TryGetOptionsByDocumentAsync(document, cancellationToken) with
+ | Some(parsingOptions, projectOptions) ->
+ return Some(parsingOptions, None, projectOptions)
+ | _ ->
+ return None
}
/// Get the options for a document or project relevant for syntax processing.
/// Quicker then TryGetOptionsForDocumentOrProject as it doesn't need to recompute the exact project options for a script.
- member this.TryGetOptionsForEditingDocumentOrProject(document:Document) =
- let projectId = document.Project.Id
- match singleFileProjectTable.TryGetValue(projectId) with
- | true, (_loadTime, parsingOptions, originalOptions) -> Some (parsingOptions, originalOptions)
- | _ -> this.TryGetOptionsForProject(projectId) |> Option.map(fun (parsingOptions, _, projectOptions) -> parsingOptions, projectOptions)
-
- /// get a siteprovider
- member this.ProvideProjectSiteProvider(project:Project) = provideProjectSiteProvider(workspace, project, serviceProvider, Some projectOptionsTable)
-
- /// Tell the checker to update the project info for the specified project id
- member this.UpdateProjectInfoWithProjectId(projectId:ProjectId, userOpName, invalidateConfig) =
- let hier = workspace.GetHierarchy(projectId)
- match hier with
- | null -> ()
- | h when (h.IsCapabilityMatch("CPS")) ->
- let project = workspace.CurrentSolution.GetProject(projectId)
- if not (isNull project) then
- let siteProvider = this.ProvideProjectSiteProvider(project)
- let projectSite = siteProvider.GetProjectSite()
- if projectSite.CompilationSourceFiles.Length <> 0 then
- this.UpdateProjectInfo(tryGetOrCreateProjectId, projectId, projectSite, userOpName, invalidateConfig)
- | _ -> ()
-
- /// Tell the checker to update the project info for the specified project id
- member this.UpdateDocumentInfoWithProjectId(projectId:ProjectId, documentId:DocumentId, userOpName, invalidateConfig) =
- if workspace.IsDocumentOpen(documentId) then
- this.UpdateProjectInfoWithProjectId(projectId, userOpName, invalidateConfig)
+ member this.TryGetOptionsForEditingDocumentOrProject(document:Document, cancellationToken) =
+ async {
+ let! result = this.TryGetOptionsForDocumentOrProject(document, cancellationToken)
+ return result |> Option.map(fun (parsingOptions, _, projectOptions) -> parsingOptions, projectOptions)
+ }
[]
/// This handles commandline change notifications from the Dotnet Project-system
/// Prior to VS 15.7 path contained path to project file, post 15.7 contains target binpath
/// binpath is more accurate because a project file can have multiple in memory projects based on configuration
- member this.HandleCommandLineChanges(path:string, sources:ImmutableArray, references:ImmutableArray, options:ImmutableArray) =
+ member __.HandleCommandLineChanges(path:string, sources:ImmutableArray, _references:ImmutableArray, options:ImmutableArray) =
use _logBlock = Logger.LogBlock(LogEditorFunctionId.LanguageService_HandleCommandLineArgs)
let projectId =
@@ -178,9 +396,7 @@ type internal FSharpProjectOptionsManager
if Path.IsPathRooted(p) || path = null then p
else Path.Combine(Path.GetDirectoryName(path), p)
let sourcePaths = sources |> Seq.map(fun s -> fullPath s.Path) |> Seq.toArray
- let referencePaths = references |> Seq.map(fun r -> fullPath r.Reference) |> Seq.toArray
- projectOptionsTable.SetOptionsWithProjectId(projectId, sourcePaths, referencePaths, options.ToArray())
- this.UpdateProjectInfoWithProjectId(projectId, "HandleCommandLineChanges", invalidateConfig=true)
+ reactor.SetCpsCommandLineOptions(projectId, sourcePaths, options.ToArray())
member __.Checker = checkerProvider.Checker
diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs
index 257469ca375..426236543f7 100644
--- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs
+++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs
@@ -25,7 +25,6 @@ open FSharp.Compiler.SourceCodeServices
open Microsoft.VisualStudio
open Microsoft.VisualStudio.Editor
open Microsoft.VisualStudio.FSharp.Editor
-open Microsoft.VisualStudio.FSharp.Editor.SiteProvider
open Microsoft.VisualStudio.TextManager.Interop
open Microsoft.VisualStudio.LanguageServices
open Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService
@@ -145,24 +144,51 @@ type internal FSharpPackage() as this =
vfsiToolWindow :> Microsoft.VisualStudio.FSharp.Interactive.ITestVFSI
// FSI-LINKAGE-POINT: unsited init
- do Microsoft.VisualStudio.FSharp.Interactive.Hooks.fsiConsoleWindowPackageCtorUnsited (this :> Package)
-
- override this.Initialize() =
- base.Initialize()
-
- // FSI-LINKAGE-POINT: sited init
- let commandService = this.GetService(typeof) :?> OleMenuCommandService // FSI-LINKAGE-POINT
- Microsoft.VisualStudio.FSharp.Interactive.Hooks.fsiConsoleWindowPackageInitalizeSited (this :> Package) commandService
- // FSI-LINKAGE-POINT: private method GetDialogPage forces fsi options to be loaded
- let _fsiPropertyPage = this.GetDialogPage(typeof)
+ do
+ Microsoft.VisualStudio.FSharp.Interactive.Hooks.fsiConsoleWindowPackageCtorUnsited (this :> Package)
+
+ override this.InitializeAsync(cancellationToken: CancellationToken, progress: IProgress) : Tasks.Task =
+ // `base.` methods can't be called in the `async` builder, so we have to cache it
+ let baseInitializeAsync = base.InitializeAsync(cancellationToken, progress)
+ let task =
+ async {
+ do! baseInitializeAsync |> Async.AwaitTask
+
+ let! commandService = this.GetServiceAsync(typeof) |> Async.AwaitTask // FSI-LINKAGE-POINT
+ let commandService = commandService :?> OleMenuCommandService
+ let packageInit () =
+ // FSI-LINKAGE-POINT: sited init
+ Microsoft.VisualStudio.FSharp.Interactive.Hooks.fsiConsoleWindowPackageInitalizeSited (this :> Package) commandService
+
+ // FSI-LINKAGE-POINT: private method GetDialogPage forces fsi options to be loaded
+ let _fsiPropertyPage = this.GetDialogPage(typeof)
+ let projectInfoManager = this.ComponentModel.DefaultExportProvider.GetExport().Value
+ let solution = this.GetServiceAsync(typeof).Result
+ let solution = solution :?> IVsSolution
+ let rdt = this.GetServiceAsync(typeof).Result
+ let rdt = rdt :?> IVsRunningDocumentTable
+
+ let projectContextFactory = this.ComponentModel.GetService()
+ let workspace = this.ComponentModel.GetService()
+ let miscFilesWorkspace = this.ComponentModel.GetService()
+ let _singleFileWorkspaceMap = new SingleFileWorkspaceMap(workspace, miscFilesWorkspace, projectInfoManager, projectContextFactory, rdt)
+ let _legacyProjectWorkspaceMap = new LegacyProjectWorkspaceMap(solution, projectInfoManager, projectContextFactory)
+ ()
+ let awaiter = this.JoinableTaskFactory.SwitchToMainThreadAsync().GetAwaiter()
+ if awaiter.IsCompleted then
+ packageInit() // already on the UI thread
+ else
+ awaiter.OnCompleted(fun () -> packageInit())
- ()
+ } |> Async.StartAsTask
+ upcast task // convert Task to Task
override this.RoslynLanguageName = FSharpConstants.FSharpLanguageName
override this.CreateWorkspace() = this.ComponentModel.GetService()
- override this.CreateLanguageService() = FSharpLanguageService(this, this.GetService(typeof) :?> IVsSolution)
+ override this.CreateLanguageService() = FSharpLanguageService(this)
override this.CreateEditorFactories() = seq { yield FSharpEditorFactory(this) :> IVsEditorFactory }
- override this.RegisterMiscellaneousFilesWorkspaceInformation(_) = ()
+ override this.RegisterMiscellaneousFilesWorkspaceInformation(miscFilesWorkspace) =
+ miscFilesWorkspace.RegisterLanguage(Guid(FSharpConstants.languageServiceGuidString), FSharpConstants.FSharpLanguageName, ".fsx")
interface Microsoft.VisualStudio.FSharp.Interactive.ITestVFSI with
member this.SendTextInteraction(s:string) =
@@ -171,65 +197,18 @@ type internal FSharpPackage() as this =
GetToolWindowAsITestVFSI().GetMostRecentLines(n)
[]
-type internal FSharpLanguageService(package : FSharpPackage, solution: IVsSolution) =
+type internal FSharpLanguageService(package : FSharpPackage) =
inherit AbstractLanguageService(package)
- let projectInfoManager = package.ComponentModel.DefaultExportProvider.GetExport().Value
-
- let projectDisplayNameOf projectFileName =
- if String.IsNullOrWhiteSpace projectFileName then projectFileName
- else Path.GetFileNameWithoutExtension projectFileName
-
- let singleFileProjects = ConcurrentDictionary<_, IWorkspaceProjectContext>()
-
- let tryRemoveSingleFileProject projectId =
- match singleFileProjects.TryRemove(projectId) with
- | true, project ->
- projectInfoManager.ClearInfoForSingleFileProject(projectId)
- project.Dispose()
- | _ -> ()
-
- let tryGetOrCreateProjectId (workspace: VisualStudioWorkspaceImpl) (projectFileName: string) =
- let projectDisplayName = projectDisplayNameOf projectFileName
- Some (workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName))
-
- let mutable legacyProjectWorkspaceMap = Unchecked.defaultof
-
override this.Initialize() =
base.Initialize()
this.Workspace.Options <- this.Workspace.Options.WithChangedOption(Completion.CompletionOptions.BlockForCompletionItems, FSharpConstants.FSharpLanguageName, false)
this.Workspace.Options <- this.Workspace.Options.WithChangedOption(Shared.Options.ServiceFeatureOnOffOptions.ClosedFileDiagnostic, FSharpConstants.FSharpLanguageName, Nullable false)
- this.Workspace.DocumentClosed.Add <| fun args -> tryRemoveSingleFileProject args.Document.Project.Id
-
- legacyProjectWorkspaceMap <- LegacyProjectWorkspaceMap(this.Workspace, solution, projectInfoManager, package.ComponentModel.GetService(), this.SystemServiceProvider)
- legacyProjectWorkspaceMap.Initialize()
-
let theme = package.ComponentModel.DefaultExportProvider.GetExport().Value
theme.SetColors()
- member this.SetupStandAloneFile(fileName: string, fileContents: string, workspace: VisualStudioWorkspaceImpl, hier: IVsHierarchy) =
- let loadTime = DateTime.Now
- let projectFileName = fileName
- let projectDisplayName = projectDisplayNameOf projectFileName
-
- let mutable projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)
-
- if isNull (workspace.ProjectTracker.GetProject projectId) then
- let projectContextFactory = package.ComponentModel.GetService();
-
- let projectContext = projectContextFactory.CreateProjectContext(FSharpConstants.FSharpLanguageName, projectDisplayName, projectFileName, projectId.Id, hier, null)
-
- projectId <- workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)
-
- projectContext.AddSourceFile(fileName)
-
- singleFileProjects.[projectId] <- projectContext
-
- let _referencedProjectFileNames, parsingOptions, projectOptions = projectInfoManager.ComputeSingleFileOptions (tryGetOrCreateProjectId workspace, fileName, loadTime, fileContents) |> Async.RunSynchronously
- projectInfoManager.AddOrUpdateSingleFileProject(projectId, (loadTime, parsingOptions, projectOptions))
-
override this.ContentTypeName = FSharpConstants.FSharpContentTypeName
override this.LanguageName = FSharpConstants.FSharpLanguageName
override this.RoslynLanguageName = FSharpConstants.FSharpLanguageName
@@ -242,8 +221,6 @@ type internal FSharpLanguageService(package : FSharpPackage, solution: IVsSoluti
override this.SetupNewTextView(textView) =
base.SetupNewTextView(textView)
- let textViewAdapter = package.ComponentModel.GetService()
-
// Toggles outlining (or code folding) based on settings
let outliningManagerService = this.Package.ComponentModel.GetService()
let wpfTextView = this.EditorAdaptersFactoryService.GetWpfTextView(textView)
@@ -251,43 +228,3 @@ type internal FSharpLanguageService(package : FSharpPackage, solution: IVsSoluti
if not (isNull outliningManager) then
let settings = this.Workspace.Services.GetService()
outliningManager.Enabled <- settings.Advanced.IsOutliningEnabled
-
- match textView.GetBuffer() with
- | (VSConstants.S_OK, textLines) ->
- let filename = VsTextLines.GetFilename textLines
-
- match VsRunningDocumentTable.FindDocumentWithoutLocking(package.RunningDocumentTable,filename) with
- | Some (hier, _) ->
-
-
- // Check if the file is in a CPS project or not.
- // CPS projects don't implement IProvideProjectSite and IVSProjectHierarchy
- // Simple explanation:
- // Legacy projects have IVSHierarchy and IProjectSite
- // CPS Projects, out-of-project file and script files don't
-
- match hier with
- | :? IProvideProjectSite as _siteProvider when not (IsScript(filename)) ->
-
- // This is the path for .fs/.fsi files in legacy projects
- ()
- | h when not (isNull h) && not (IsScript(filename)) ->
- let docId = this.Workspace.CurrentSolution.GetDocumentIdsWithFilePath(filename).FirstOrDefault()
- match docId with
- | null ->
- if not (h.IsCapabilityMatch("CPS")) then
-
- // This is the path when opening out-of-project .fs/.fsi files in CPS projects
-
- let fileContents = VsTextLines.GetFileContents(textLines, textViewAdapter)
- this.SetupStandAloneFile(filename, fileContents, this.Workspace, hier)
- | _ -> ()
- | _ ->
-
- // This is the path for both in-project and out-of-project .fsx files
-
- let fileContents = VsTextLines.GetFileContents(textLines, textViewAdapter)
- this.SetupStandAloneFile(filename, fileContents, this.Workspace, hier)
-
- | _ -> ()
- | _ -> ()
diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs
index dfca72cba99..0bf2e5c8063 100644
--- a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs
+++ b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs
@@ -14,38 +14,37 @@ open System.Runtime.CompilerServices
open Microsoft.CodeAnalysis
open Microsoft.VisualStudio
open Microsoft.VisualStudio.FSharp.Editor
-open Microsoft.VisualStudio.FSharp.Editor.SiteProvider
open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem
open Microsoft.VisualStudio.LanguageServices.ProjectSystem
open Microsoft.VisualStudio.Shell.Interop
[]
-type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl,
- solution: IVsSolution,
+type internal LegacyProjectWorkspaceMap(solution: IVsSolution,
projectInfoManager: FSharpProjectOptionsManager,
- projectContextFactory: IWorkspaceProjectContextFactory,
- serviceProvider: IServiceProvider) as this =
+ projectContextFactory: IWorkspaceProjectContextFactory) as this =
let invalidPathChars = set (Path.GetInvalidPathChars())
let optionsAssociation = ConditionalWeakTable()
let isPathWellFormed (path: string) = not (String.IsNullOrWhiteSpace path) && path |> Seq.forall (fun c -> not (Set.contains c invalidPathChars))
+
+ let projectDisplayNameOf projectFileName =
+ if String.IsNullOrWhiteSpace projectFileName then projectFileName
+ else Path.GetFileNameWithoutExtension projectFileName
+ let legacyProjectIdLookup = ConcurrentDictionary()
let legacyProjectLookup = ConcurrentDictionary()
+ let setupQueue = ConcurrentQueue()
- let tryGetOrCreateProjectId (workspace: VisualStudioWorkspaceImpl) (projectFileName: string) =
- let projectDisplayName = projectDisplayNameOf projectFileName
- Some (workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName))
-
- member this.Initialize() =
+ do
solution.AdviseSolutionEvents(this) |> ignore
/// Sync the Roslyn information for the project held in 'projectContext' to match the information given by 'site'.
/// Also sync the info in ProjectInfoManager if necessary.
- member this.SyncLegacyProject(projectId: ProjectId, projectContext: IWorkspaceProjectContext, site: IProjectSite, workspace: VisualStudioWorkspaceImpl, forceUpdate, userOpName) =
+ member this.SyncLegacyProject(projectContext: IWorkspaceProjectContext, site: IProjectSite) =
let wellFormedFilePathSetIgnoreCase (paths: seq) =
HashSet(paths |> Seq.filter isPathWellFormed |> Seq.map (fun s -> try Path.GetFullPath(s) with _ -> s), StringComparer.OrdinalIgnoreCase)
- let mutable updated = forceUpdate
+ let projectId = projectContext.Id
// Sync the source files in projectContext. Note that these source files are __not__ maintained in order in projectContext
// as edits are made. It seems this is ok because the source file list is only used to drive roslyn per-file checking.
@@ -58,12 +57,10 @@ type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl,
for file in updatedFiles do
if not(originalFiles.Contains(file)) then
projectContext.AddSourceFile(file)
- updated <- true
for file in originalFiles do
if not(updatedFiles.Contains(file)) then
projectContext.RemoveSourceFile(file)
- updated <- true
let updatedRefs = site.CompilationReferences |> wellFormedFilePathSetIgnoreCase
let originalRefs =
@@ -74,12 +71,10 @@ type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl,
for ref in updatedRefs do
if not(originalRefs.Contains(ref)) then
projectContext.AddMetadataReference(ref, MetadataReferenceProperties.Assembly)
- updated <- true
for ref in originalRefs do
if not(updatedRefs.Contains(ref)) then
projectContext.RemoveMetadataReference(ref)
- updated <- true
// Update the project options association
let ok,originalOptions = optionsAssociation.TryGetValue(projectContext)
@@ -99,94 +94,93 @@ type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl,
if ok then optionsAssociation.Remove(projectContext) |> ignore
optionsAssociation.Add(projectContext, updatedOptions)
- updated <- true
-
- // update the cached options
- if updated then
- projectInfoManager.UpdateProjectInfo(tryGetOrCreateProjectId workspace, projectId, site, userOpName + ".SyncLegacyProject", invalidateConfig=true)
+ projectContext.BinOutputPath <- Option.toObj site.CompilationBinOutputPath
let info = (updatedFiles, updatedRefs)
legacyProjectLookup.AddOrUpdate(projectId, info, fun _ _ -> info) |> ignore
- member this.SetupLegacyProjectFile(siteProvider: IProvideProjectSite, workspace: VisualStudioWorkspaceImpl, userOpName) =
- let userOpName = userOpName + ".SetupProjectFile"
- let rec setup (site: IProjectSite) =
+ member this.SetupLegacyProjectFile(siteProvider: IProvideProjectSite) =
+ let rec setup (site: IProjectSite) =
let projectGuid = Guid(site.ProjectGuid)
let projectFileName = site.ProjectFileName
let projectDisplayName = projectDisplayNameOf projectFileName
- // This projectId is not guaranteed to be the same ProjectId that will actually be created once we call CreateProjectContext
- // in Roslyn versions once https://github.com/dotnet/roslyn/pull/26931 is merged. Roslyn will still guarantee that once
- // there is a project in the workspace with the same path, it'll return the ID of that. So this is sufficient to use
- // in that case as long as we only use it to call GetProject.
- let fakeProjectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)
-
- if isNull (workspace.ProjectTracker.GetProject fakeProjectId) then
- let hierarchy =
- site.ProjectProvider
- |> Option.map (fun p -> p :?> IVsHierarchy)
- |> Option.toObj
-
- // Roslyn is expecting site to be an IVsHierarchy.
- // It just so happens that the object that implements IProvideProjectSite is also
- // an IVsHierarchy. This assertion is to ensure that the assumption holds true.
- Debug.Assert(not (isNull hierarchy), "About to CreateProjectContext with a non-hierarchy site")
-
- let projectContext =
- projectContextFactory.CreateProjectContext(
- FSharpConstants.FSharpLanguageName,
- projectDisplayName,
- projectFileName,
- projectGuid,
- hierarchy,
- Option.toObj site.CompilationBinOutputPath)
-
- // The real project ID that was actually added. See comments for fakeProjectId why this one is actually good.
- let realProjectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)
-
- // Sync IProjectSite --> projectContext, and IProjectSite --> ProjectInfoManage
- this.SyncLegacyProject(realProjectId, projectContext, site, workspace, forceUpdate=true, userOpName=userOpName)
-
- site.BuildErrorReporter <- Some (projectContext :?> Microsoft.VisualStudio.Shell.Interop.IVsLanguageServiceBuildErrorReporter2)
-
- // TODO: consider forceUpdate = false here. forceUpdate=true may be causing repeated computation?
- site.AdviseProjectSiteChanges(FSharpConstants.FSharpLanguageServiceCallbackName,
- AdviseProjectSiteChanges(fun () -> this.SyncLegacyProject(realProjectId, projectContext, site, workspace, forceUpdate=true, userOpName="AdviseProjectSiteChanges."+userOpName)))
-
- site.AdviseProjectSiteClosed(FSharpConstants.FSharpLanguageServiceCallbackName,
- AdviseProjectSiteChanges(fun () ->
- projectInfoManager.ClearInfoForProject(realProjectId)
- optionsAssociation.Remove(projectContext) |> ignore
- projectContext.Dispose()))
-
- for referencedSite in ProjectSitesAndFiles.GetReferencedProjectSites(Some realProjectId, site, serviceProvider, Some (workspace :>obj), Some projectInfoManager.FSharpOptions ) do
- setup referencedSite
+ let hierarchy =
+ site.ProjectProvider
+ |> Option.map (fun p -> p :?> IVsHierarchy)
+ |> Option.toObj
+
+ // Roslyn is expecting site to be an IVsHierarchy.
+ // It just so happens that the object that implements IProvideProjectSite is also
+ // an IVsHierarchy. This assertion is to ensure that the assumption holds true.
+ Debug.Assert(not (isNull hierarchy), "About to CreateProjectContext with a non-hierarchy site")
+
+ let projectContext =
+ projectContextFactory.CreateProjectContext(
+ FSharpConstants.FSharpLanguageName,
+ projectDisplayName,
+ projectFileName,
+ projectGuid,
+ hierarchy,
+ Option.toObj site.CompilationBinOutputPath)
+
+ legacyProjectIdLookup.[projectGuid] <- projectContext.Id
+
+ // Sync IProjectSite --> projectContext, and IProjectSite --> ProjectInfoManage
+ this.SyncLegacyProject(projectContext, site)
+
+ site.BuildErrorReporter <- Some (projectContext :?> Microsoft.VisualStudio.Shell.Interop.IVsLanguageServiceBuildErrorReporter2)
+
+ // TODO: consider forceUpdate = false here. forceUpdate=true may be causing repeated computation?
+ site.AdviseProjectSiteChanges(FSharpConstants.FSharpLanguageServiceCallbackName,
+ AdviseProjectSiteChanges(fun () -> this.SyncLegacyProject(projectContext, site)))
+
+ site.AdviseProjectSiteClosed(FSharpConstants.FSharpLanguageServiceCallbackName,
+ AdviseProjectSiteChanges(fun () ->
+ projectInfoManager.ClearInfoForProject(projectContext.Id)
+ optionsAssociation.Remove(projectContext) |> ignore
+ projectContext.Dispose()))
setup (siteProvider.GetProjectSite())
interface IVsSolutionEvents with
- member __.OnAfterCloseSolution(_) = VSConstants.S_OK
+ member __.OnAfterCloseSolution(_) =
+ // Clear
+ let mutable setup = Unchecked.defaultof<_>
+ while setupQueue.TryDequeue(&setup) do ()
+ VSConstants.S_OK
member __.OnAfterLoadProject(_, _) = VSConstants.S_OK
member __.OnAfterOpenProject(hier, _) =
match hier with
| :? IProvideProjectSite as siteProvider ->
- this.SetupLegacyProjectFile(siteProvider, workspace, "LegacyProjectWorkspaceMap.Initialize")
+ let setup = fun () -> this.SetupLegacyProjectFile(siteProvider)
+ let _, o = solution.GetProperty(int __VSPROPID.VSPROPID_IsSolutionOpen)
+ if (match o with | :? bool as isOpen -> isOpen | _ -> false) then
+ setup ()
+ else
+ setupQueue.Enqueue(setup)
| _ -> ()
VSConstants.S_OK
- member __.OnAfterOpenSolution(_, _) = VSConstants.S_OK
+ member __.OnAfterOpenSolution(_, _) =
+ let mutable setup = Unchecked.defaultof<_>
+ while setupQueue.TryDequeue(&setup) do
+ setup ()
+ VSConstants.S_OK
member __.OnBeforeCloseProject(hier, _) =
match hier with
| :? IProvideProjectSite as siteProvider ->
let site = siteProvider.GetProjectSite()
- let projectFileName = site.ProjectFileName
- let projectDisplayName = projectDisplayNameOf projectFileName
- let projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)
- legacyProjectLookup.TryRemove(projectId) |> ignore
+ let projectGuid = Guid(site.ProjectGuid)
+ match legacyProjectIdLookup.TryGetValue(projectGuid) with
+ | true, projectId ->
+ legacyProjectIdLookup.TryRemove(projectGuid) |> ignore
+ legacyProjectLookup.TryRemove(projectId) |> ignore
+ | _ -> ()
| _ -> ()
VSConstants.S_OK
diff --git a/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs b/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs
deleted file mode 100644
index da362b7d6ae..00000000000
--- a/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs
+++ /dev/null
@@ -1,335 +0,0 @@
-// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
-
-module internal rec Microsoft.VisualStudio.FSharp.Editor.SiteProvider
-
-open System
-open System.IO
-open System.Collections.Concurrent
-open System.Diagnostics
-
-open FSharp.Compiler.SourceCodeServices
-open Microsoft.CodeAnalysis
-open Microsoft.VisualStudio
-open Microsoft.VisualStudio.LanguageServices
-open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem
-open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList
-open Microsoft.VisualStudio.Shell.Interop
-open Microsoft.VisualStudio.TextManager.Interop
-
-open VSLangProj
-
-/// An additional interface that an IProjectSite object can implement to indicate it has an FSharpProjectOptions
-/// already available, so we don't have to recreate it
-type private IHaveCheckOptions =
- abstract OriginalCheckOptions : unit -> string[] * FSharpProjectOptions
-
-let projectDisplayNameOf projectFileName =
- if String.IsNullOrWhiteSpace projectFileName then projectFileName
- else Path.GetFileNameWithoutExtension projectFileName
-
-/// A value and a function to recompute/refresh the value. The function is passed a flag indicating if a refresh is happening.
-type Refreshable<'T> = 'T * (bool -> 'T)
-
-/// Convert from FSharpProjectOptions into IProjectSite.
-type private ProjectSiteOfScriptFile(filename:string, referencedProjectFileNames, checkOptions: FSharpProjectOptions) =
- interface IProjectSite with
- override __.Description = sprintf "Script Closure at Root %s" filename
- override __.CompilationSourceFiles = checkOptions.SourceFiles
- override __.CompilationOptions = checkOptions.OtherOptions
- override __.CompilationReferences =
- checkOptions.OtherOptions
- |> Array.choose (fun flag -> if flag.StartsWith("-r:") then Some flag.[3..] else None)
- override __.CompilationBinOutputPath = None
- override __.ProjectFileName = checkOptions.ProjectFileName
- override __.BuildErrorReporter with get() = None and set _ = ()
- override __.AdviseProjectSiteChanges(_,_) = ()
- override __.AdviseProjectSiteCleaned(_,_) = ()
- override __.AdviseProjectSiteClosed(_,_) = ()
- override __.IsIncompleteTypeCheckEnvironment = checkOptions.IsIncompleteTypeCheckEnvironment
- override __.TargetFrameworkMoniker = ""
- override __.ProjectGuid = ""
- override __.LoadTime = checkOptions.LoadTime
- override __.ProjectProvider = None
-
- interface IHaveCheckOptions with
- override __.OriginalCheckOptions() = (referencedProjectFileNames, checkOptions)
-
- override __.ToString() = sprintf "ProjectSiteOfScriptFile(%s)" filename
-
-/// An orphan file project is a .fs, .ml, .fsi, .mli that is not associated with a .fsproj.
-/// By design, these are never going to typecheck because there is no affiliated references.
-/// We show many squiggles in this case because they're not particularly informational.
-type private ProjectSiteOfSingleFile(sourceFile) =
- // CompilerFlags() gets called a lot, so pre-compute what we can
- static let compilerFlags =
- let flags = ["--noframework";"--warn:3"]
- let assumeDotNetFramework = true
- let defaultReferences =
- [ for r in CompilerEnvironment.DefaultReferencesForOrphanSources(assumeDotNetFramework) do
- yield sprintf "-r:%s%s" r (if r.EndsWith(".dll",StringComparison.OrdinalIgnoreCase) then "" else ".dll") ]
- (flags @ defaultReferences)
- |> List.toArray
- |> Array.choose (fun flag -> if flag.StartsWith("-r:") then Some flag.[3..] elif flag.StartsWith("--reference:") then Some flag.[12..] else None)
-
- let projectFileName = sourceFile + ".orphan.fsproj"
-
- interface IProjectSite with
- override __.Description = projectFileName
- override __.CompilationSourceFiles = [|sourceFile|]
- override __.CompilationOptions = compilerFlags
- override __.CompilationReferences = compilerFlags
- override __.CompilationBinOutputPath = None
- override __.ProjectFileName = projectFileName
- override __.BuildErrorReporter with get() = None and set _v = ()
- override __.AdviseProjectSiteChanges(_,_) = ()
- override __.AdviseProjectSiteCleaned(_,_) = ()
- override __.AdviseProjectSiteClosed(_,_) = ()
- override __.IsIncompleteTypeCheckEnvironment = true
- override __.TargetFrameworkMoniker = ""
- override __.ProjectGuid = ""
- override __.LoadTime = new DateTime(2000,1,1) // any constant time is fine, orphan files do not interact with reloading based on update time
- override __.ProjectProvider = None
-
- override __.ToString() = sprintf "ProjectSiteOfSingleFile(%s)" sourceFile
-
-/// Manage Storage of FSharpProjectOptions the options for a project
-type internal FSharpProjectOptionsTable () =
-
- // A table of information about projects, excluding single-file projects.
- let projectTable = ConcurrentDictionary>()
- let commandLineOptions = new ConcurrentDictionary()
-
- /// Re-fetch all of the options for everything that references projectId
- let refreshInfoForProjectsThatReferenceThisProject (projectId:ProjectId) =
- for KeyValue(otherProjectId, ((referencedProjectIds, _parsingOptions, _site, _options), refresh)) in projectTable.ToArray() do
- for referencedProjectId in referencedProjectIds do
- if referencedProjectId = projectId then
- projectTable.[otherProjectId] <- (refresh true, refresh)
-
- /// Add or update a project in the project table
- member __.AddOrUpdateProject(projectId:ProjectId, refresh) =
- projectTable.[projectId] <- (refresh false, refresh)
- refreshInfoForProjectsThatReferenceThisProject(projectId)
-
- /// Clear a project from the project table
- member __.ClearInfoForProject(projectId:ProjectId) =
- projectTable.TryRemove(projectId) |> ignore
- refreshInfoForProjectsThatReferenceThisProject projectId
-
- /// Get the options for a project
- member __.TryGetOptionsForProject(projectId:ProjectId) =
- match projectTable.TryGetValue(projectId) with
- | true, ((_referencedProjects, parsingOptions, site, projectOptions), _) -> Some (parsingOptions, site, projectOptions)
- | _ -> None
-
- /// Given a projectId return the most recent set of command line options for it
- member __.GetCommandLineOptionsWithProjectId(projectId:ProjectId) =
- match commandLineOptions.TryGetValue projectId with
- | true, (sources, references, options) -> sources, references, options
- | _ -> [||], [||], [||]
-
- /// Store the command line options for a projectId
- member __.SetOptionsWithProjectId(projectId:ProjectId, sourcePaths:string[], referencePaths:string[], options:string[]) =
- commandLineOptions.[projectId] <- (sourcePaths, referencePaths, options)
-
-
-let internal provideProjectSiteProvider(workspace:VisualStudioWorkspaceImpl, project:Project, serviceProvider:System.IServiceProvider, projectOptionsTable:FSharpProjectOptionsTable option) =
- let hier = workspace.GetHierarchy(project.Id)
- let getCommandLineOptionsWithProjectId (projectId) =
- match projectOptionsTable with
- | Some (options) -> options.GetCommandLineOptionsWithProjectId(projectId)
- | None -> [||], [||], [||]
- {
- new IProvideProjectSite with
- member x.GetProjectSite() =
- let fst (a, _, _) = a
- let snd (_, b, _) = b
- let mutable errorReporter =
- let reporter = ProjectExternalErrorReporter(project.Id, "FS", serviceProvider)
- Some(reporter:> IVsLanguageServiceBuildErrorReporter2)
-
- {
- new IProjectSite with
- member __.Description = project.Name
- member __.CompilationSourceFiles = getCommandLineOptionsWithProjectId(project.Id) |> fst
- member __.CompilationOptions =
- let _,references,options = getCommandLineOptionsWithProjectId(project.Id)
- Array.concat [options; references |> Array.map(fun r -> "-r:" + r)]
- member __.CompilationReferences = getCommandLineOptionsWithProjectId(project.Id) |> snd
- member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None)
- member __.ProjectFileName = project.FilePath
- member __.AdviseProjectSiteChanges(_,_) = ()
- member __.AdviseProjectSiteCleaned(_,_) = ()
- member __.AdviseProjectSiteClosed(_,_) = ()
- member __.IsIncompleteTypeCheckEnvironment = false
- member __.TargetFrameworkMoniker = ""
- member __.ProjectGuid = project.Id.Id.ToString()
- member __.LoadTime = System.DateTime.Now
- member __.ProjectProvider = Some (x)
- member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v
- }
- interface IVsHierarchy with
- member __.SetSite(psp) = hier.SetSite(psp)
- member __.GetSite(psp) = hier.GetSite(ref psp)
- member __.QueryClose(pfCanClose)= hier.QueryClose(ref pfCanClose)
- member __.Close() = hier.Close()
- member __.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid)
- member __.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid)
- member __.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar)
- member __.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var)
- member __.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) =
- hier.GetNestedHierarchy(itemid, ref iidHierarchyNested, ref ppHierarchyNested, ref pitemidNested)
- member __.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName)
- member __.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid)
- member __.Unused0() = hier.Unused0()
- member __.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie)
- member __.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie)
- member __.Unused1() = hier.Unused1()
- member __.Unused2() = hier.Unused2()
- member __.Unused3() = hier.Unused3()
- member __.Unused4() = hier.Unused4()
- }
-
-/// Information about projects, open files and other active artifacts in visual studio.
-/// Keeps track of the relationship between IVsTextLines buffers, IFSharpSource_DEPRECATED objects, IProjectSite objects and FSharpProjectOptions
-[]
-type internal ProjectSitesAndFiles() =
- static let mutable stamp = 0L
-
- static let fullOutputAssemblyPath (p:EnvDTE.Project) =
- let getProperty tag =
- try Some (p.Properties.[tag].Value.ToString()) with _ -> None
- getProperty "FullPath"
- |> Option.bind (fun fullPath ->
- (try Some (p.ConfigurationManager.ActiveConfiguration.Properties.["OutputPath"].Value.ToString()) with _ -> None)
- |> Option.bind (fun outputPath ->
- getProperty "OutputFileName"
- |> Option.map (fun outputFileName -> Path.Combine(fullPath, outputPath, outputFileName))))
- |> Option.bind (fun path -> try Some (Path.GetFullPath path) with _ -> None)
-
- static let referencedProjects (projectSite:IProjectSite) =
- match projectSite.ProjectProvider with
- | None -> None
- | Some (:? IVsHierarchy as hier) ->
- match hier.GetProperty(VSConstants.VSITEMID_ROOT, int __VSHPROPID.VSHPROPID_ExtObject) with
- | VSConstants.S_OK, (:? EnvDTE.Project as p) when not (isNull p) ->
- Some ((p.Object :?> VSLangProj.VSProject).References
- |> Seq.cast
- |> Seq.choose (fun r ->
- Option.ofObj r
- |> Option.bind (fun r -> try Option.ofObj r.SourceProject with _ -> None)) )
- | _ -> None
- | Some _ -> None
-
- static let rec referencedProvideProjectSites(projectIdOpt: ProjectId option, projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo:obj option, projectOptionsTable:FSharpProjectOptionsTable option) =
- let getReferencesForSolutionService (solutionService:IVsSolution) =
- [|
- match referencedProjects projectSite, extraProjectInfo with
- | None, Some (:? VisualStudioWorkspaceImpl as workspace) when not (isNull workspace.CurrentSolution)->
- let path = projectSite.ProjectFileName
- if not (String.IsNullOrWhiteSpace(path)) then
- match projectIdOpt with
- | Some(projectId) ->
- let project = workspace.CurrentSolution.GetProject(projectId)
- if not (isNull project) then
- for reference in project.ProjectReferences do
- let project = workspace.CurrentSolution.GetProject(reference.ProjectId)
- if not (isNull project) && project.Language = FSharpConstants.FSharpLanguageName then
- let siteProvider = provideProjectSiteProvider (workspace, project, serviceProvider, projectOptionsTable)
- let referenceProject = workspace.ProjectTracker.GetProject(reference.ProjectId)
- let outputPath = referenceProject.BinOutputPath
- yield Some project.Id, project.FilePath, outputPath, siteProvider
- | _ -> ()
-
- | (Some references), Some (:? VisualStudioWorkspaceImpl as workspace) ->
- for p in references do
- match solutionService.GetProjectOfUniqueName(p.UniqueName) with
- | VSConstants.S_OK, (:? IProvideProjectSite as ps) ->
- let path = ps.GetProjectSite().ProjectFileName
- let projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(path, projectDisplayNameOf path)
- yield Some projectId, p.FileName, (fullOutputAssemblyPath p) |> Option.defaultValue "", ps
- | _ -> ()
- | _ -> ()
- |]
- let solutionService = try Some (serviceProvider.GetService(typeof) :?> IVsSolution) with _ -> None
- seq { match solutionService with
- | Some solutionService ->
- for reference in getReferencesForSolutionService solutionService do
- yield reference
- | None -> ()
- }
-
- static let rec referencedProjectsOf(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable) =
- [| for (projectIdOpt, projectFileName, outputPath, _projectSiteProvider) in referencedProvideProjectSites (projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable) do
- let referencedProjectOptionsOpt =
- projectOptionsTable
- |> Option.bind (fun x ->
- match projectIdOpt with
- | Some(projectId) -> x.TryGetOptionsForProject(projectId)
- | _ -> None
- )
- |> Option.map (fun (_, _, options) -> options)
-
- match referencedProjectOptionsOpt with
- | Some(referencedProjectOptions) ->
- yield projectFileName, (outputPath, referencedProjectOptions)
- | _ -> ()
- |]
-
- and getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite, serviceProvider, projectIdOpt, fileName, extraProjectInfo, projectOptionsTable) =
- let referencedProjectFileNames, referencedProjectOptions =
- if enableInMemoryCrossProjectReferences then
- referencedProjectsOf(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable)
- |> Array.unzip
- else [| |], [| |]
- let option =
- let newOption () = {
- ProjectFileName = projectSite.ProjectFileName
- ProjectId = projectIdOpt |> Option.map (fun x -> x.ToFSharpProjectIdString())
- SourceFiles = projectSite.CompilationSourceFiles
- OtherOptions = projectSite.CompilationOptions
- ReferencedProjects = referencedProjectOptions
- IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment
- UseScriptResolutionRules = SourceFile.MustBeSingleFileProject fileName
- LoadTime = projectSite.LoadTime
- UnresolvedReferences = None
- OriginalLoadReferences = []
- ExtraProjectInfo=extraProjectInfo
- Stamp = (stamp <- stamp + 1L; Some stamp)
- }
- match projectIdOpt, projectOptionsTable with
- | Some id, Some optionsTable ->
- // Get options from cache
- match optionsTable.TryGetOptionsForProject(id) with
- | Some (_parsingOptions, _site, projectOptions) ->
- if projectSite.CompilationSourceFiles <> projectOptions.SourceFiles ||
- projectSite.CompilationOptions <> projectOptions.OtherOptions ||
- referencedProjectOptions <> projectOptions.ReferencedProjects then
- newOption()
- else
- projectOptions
- | _ -> newOption()
- | _ -> newOption()
- referencedProjectFileNames, option
-
- /// Construct a project site for a single file. May be a single file project (for scripts) or an orphan project site (for everything else).
- static member ProjectSiteOfSingleFile(filename:string) : IProjectSite =
- if SourceFile.MustBeSingleFileProject(filename) then
- Debug.Assert(false, ".fsx or .fsscript should have been treated as implicit project")
- failwith ".fsx or .fsscript should have been treated as implicit project"
- new ProjectSiteOfSingleFile(filename) :> IProjectSite
-
- static member GetReferencedProjectSites(projectIdOpt, projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo, projectOptions) =
- referencedProvideProjectSites (projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptions)
- |> Seq.map (fun (_, _, _, ps) -> ps.GetProjectSite())
- |> Seq.toArray
-
- /// Create project options for this project site.
- static member GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite:IProjectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable) =
- match projectSite with
- | :? IHaveCheckOptions as hco -> hco.OriginalCheckOptions()
- | _ -> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable)
-
- /// Create project site for these project options
- static member CreateProjectSiteForScript (filename, referencedProjectFileNames, checkOptions) =
- ProjectSiteOfScriptFile (filename, referencedProjectFileNames, checkOptions) :> IProjectSite
\ No newline at end of file
diff --git a/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs b/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs
new file mode 100644
index 00000000000..21249b80c5f
--- /dev/null
+++ b/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs
@@ -0,0 +1,112 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace Microsoft.VisualStudio.FSharp.Editor
+
+open System
+open System.Collections.Concurrent
+open Microsoft.CodeAnalysis
+open Microsoft.VisualStudio
+open Microsoft.VisualStudio.FSharp.Editor
+open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem
+open Microsoft.VisualStudio.LanguageServices.ProjectSystem
+open Microsoft.VisualStudio.Shell.Interop
+open Microsoft.VisualStudio.LanguageServices
+
+[]
+type internal SingleFileWorkspaceMap(workspace: VisualStudioWorkspace,
+ miscFilesWorkspace: MiscellaneousFilesWorkspace,
+ optionsManager: FSharpProjectOptionsManager,
+ projectContextFactory: IWorkspaceProjectContextFactory,
+ rdt: IVsRunningDocumentTable) as this =
+
+ let files = ConcurrentDictionary(StringComparer.OrdinalIgnoreCase)
+
+ let createSourceCodeKind (filePath: string) =
+ if isScriptFile filePath then
+ SourceCodeKind.Script
+ else
+ SourceCodeKind.Regular
+
+ let createProjectContext filePath =
+ let projectContext = projectContextFactory.CreateProjectContext(FSharpConstants.FSharpLanguageName, filePath, filePath, Guid.NewGuid(), null, null)
+ projectContext.DisplayName <- FSharpConstants.FSharpMiscellaneousFilesName
+ projectContext.AddSourceFile(filePath, sourceCodeKind = createSourceCodeKind filePath)
+ projectContext
+
+ do
+ miscFilesWorkspace.DocumentOpened.Add(fun args ->
+ let document = args.Document
+ if document.Project.Language = FSharpConstants.FSharpLanguageName && workspace.CurrentSolution.GetDocumentIdsWithFilePath(document.FilePath).Length = 0 then
+ files.[document.FilePath] <- createProjectContext document.FilePath
+ )
+
+ workspace.DocumentOpened.Add(fun args ->
+ let document = args.Document
+ if document.Project.Language = FSharpConstants.FSharpLanguageName && document.Project.Name <> FSharpConstants.FSharpMiscellaneousFilesName then
+ match files.TryRemove(document.FilePath) with
+ | true, projectContext ->
+ optionsManager.ClearSingleFileOptionsCache(document.Id)
+ projectContext.Dispose()
+ | _ -> ()
+ )
+
+ workspace.DocumentClosed.Add(fun args ->
+ let document = args.Document
+ match files.TryRemove(document.FilePath) with
+ | true, projectContext ->
+ optionsManager.ClearSingleFileOptionsCache(document.Id)
+ projectContext.Dispose()
+ | _ -> ()
+ )
+
+ do
+ rdt.AdviseRunningDocTableEvents(this) |> ignore
+
+ interface IVsRunningDocTableEvents with
+
+ member __.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL
+
+ member __.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL
+
+ member __.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL
+
+ member __.OnAfterSave(_) = VSConstants.E_NOTIMPL
+
+ member __.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL
+
+ member __.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL
+
+ interface IVsRunningDocTableEvents2 with
+
+ member __.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL
+
+ member __.OnAfterAttributeChangeEx(_, grfAttribs, _, _, pszMkDocumentOld, _, _, pszMkDocumentNew) =
+ // Handles renaming of a misc file
+ if (grfAttribs &&& (uint32 __VSRDTATTRIB.RDTA_MkDocument)) <> 0u && files.ContainsKey(pszMkDocumentOld) then
+ match files.TryRemove(pszMkDocumentOld) with
+ | true, projectContext ->
+ let project = workspace.CurrentSolution.GetProject(projectContext.Id)
+ if project <> null then
+ let documentOpt =
+ project.Documents
+ |> Seq.tryFind (fun x -> String.Equals(x.FilePath, pszMkDocumentOld, StringComparison.OrdinalIgnoreCase))
+ match documentOpt with
+ | None -> ()
+ | Some(document) ->
+ optionsManager.ClearSingleFileOptionsCache(document.Id)
+ projectContext.Dispose()
+ files.[pszMkDocumentNew] <- createProjectContext pszMkDocumentNew
+ else
+ projectContext.Dispose() // fallback, shouldn't happen, but in case it does let's dispose of the project context so we don't leak
+ | _ -> ()
+ VSConstants.S_OK
+
+ member __.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL
+
+ member __.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL
+
+ member __.OnAfterSave(_) = VSConstants.E_NOTIMPL
+
+ member __.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL
+
+ member __.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL
\ No newline at end of file
diff --git a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs
index a186cec7024..5b85dc49aa4 100644
--- a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs
+++ b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs
@@ -3,7 +3,6 @@
namespace Microsoft.VisualStudio.FSharp.Editor
open System
-open System.Collections.Generic
open System.Collections.Immutable
open System.Threading
open System.Threading.Tasks
@@ -15,11 +14,7 @@ open FSharp.Compiler.Range
open FSharp.Compiler.SourceCodeServices
open Microsoft.VisualStudio.FSharp.Editor.Symbols
-
module internal SymbolHelpers =
- open Microsoft.CodeAnalysis.CodeFixes
- open Microsoft.CodeAnalysis.CodeActions
-
/// Used for local code fixes in a document, e.g. to rename local parameters
let getSymbolUsesOfSymbolAtLocationInDocument (document: Document, position: int, projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, userOpName) =
asyncMaybe {
@@ -30,11 +25,11 @@ module internal SymbolHelpers =
let textLine = sourceText.Lines.GetLineFromPosition(position)
let textLinePos = sourceText.Lines.GetLinePosition(position)
let fcsTextLineNumber = Line.fromZ textLinePos.Line
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false)
let settings = document.FSharpOptions
- let! _, _, checkFileResults = checker.ParseAndCheckDocument(document.FilePath, textVersionHash, sourceText.ToString(), projectOptions, settings.LanguageServicePerformance, userOpName = userOpName)
+ let! _, _, checkFileResults = checker.ParseAndCheckDocument(document.FilePath, textVersionHash, sourceText, projectOptions, settings.LanguageServicePerformance, userOpName = userOpName)
let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland, userOpName=userOpName)
let! symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol) |> liftAsync
return symbolUses
@@ -44,8 +39,8 @@ module internal SymbolHelpers =
projects
|> Seq.map (fun project ->
async {
- match projectInfoManager.TryGetOptionsForProject(project.Id) with
- | Some (_parsingOptions, _site, projectOptions) ->
+ match! projectInfoManager.TryGetOptionsByProject(project, CancellationToken.None) with
+ | Some (_parsingOptions, projectOptions) ->
let! projectCheckResults = checker.ParseAndCheckProject(projectOptions, userOpName = userOpName)
let! uses = projectCheckResults.GetUsesOfSymbol(symbol)
let distinctUses = uses |> Array.distinctBy (fun symbolUse -> symbolUse.RangeAlternate)
@@ -85,7 +80,7 @@ module internal SymbolHelpers =
(fun (id, _) -> id),
fun (_, xs) -> xs |> Seq.map snd |> Seq.toArray)
}
-
+
type OriginalText = string
// Note, this function is broken and shouldn't be used because the source text ranges to replace are applied sequentially,
@@ -104,7 +99,7 @@ module internal SymbolHelpers =
let! sourceText = document.GetTextAsync(cancellationToken)
let originalText = sourceText.ToString(symbolSpan)
do! Option.guard (originalText.Length > 0)
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, symbolSpan.Start, document.FilePath, defines, SymbolLookupKind.Greedy, false)
let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, userOpName = userOpName)
@@ -120,9 +115,9 @@ module internal SymbolHelpers =
async {
let! symbolUsesByDocumentId =
getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, projectInfoManager, checker, document.Project.Solution, userOpName)
-
- let mutable solution = document.Project.Solution
+ let mutable solution = document.Project.Solution
+
for KeyValue(documentId, symbolUses) in symbolUsesByDocumentId do
let document = document.Project.Solution.GetDocument(documentId)
let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask
@@ -136,20 +131,5 @@ module internal SymbolHelpers =
solution <- solution.WithDocumentText(documentId, sourceText)
return solution
} |> RoslynHelpers.StartAsyncAsTask cancellationToken),
- originalText
+ originalText
}
-
- let createTextChangeCodeFix (title: string, context: CodeFixContext, computeTextChanges: unit -> Async) =
- CodeAction.Create(
- title,
- (fun (cancellationToken: CancellationToken) ->
- async {
- let! cancellationToken = Async.CancellationToken
- let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask
- let! changesOpt = computeTextChanges()
- match changesOpt with
- | None -> return context.Document
- | Some textChanges -> return context.Document.WithText(sourceText.WithChanges(textChanges))
- } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)),
- title)
-
diff --git a/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs b/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs
index aed008a26bf..584c6217c47 100644
--- a/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs
+++ b/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs
@@ -51,7 +51,7 @@ type internal FSharpFindUsagesService
asyncMaybe {
let! sourceText = document.GetTextAsync(context.CancellationToken) |> Async.AwaitTask |> liftAsync
let checker = checkerProvider.Checker
- let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document)
+ let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, context.CancellationToken)
let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName)
let textLine = sourceText.Lines.GetLineFromPosition(position).ToString()
let lineNumber = sourceText.Lines.GetLinePosition(position).Line + 1
diff --git a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs
index 0c652420bbc..5ba172edc4b 100644
--- a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs
+++ b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs
@@ -115,38 +115,41 @@ type internal FSharpNavigableItem(document: Document, textSpan: TextSpan) =
member __.DisplayTaggedParts = ImmutableArray.Empty
member __.ChildItems = ImmutableArray.Empty
+// TODO: Uncomment code when VS has a fix for updating the status bar.
type internal StatusBar(statusBar: IVsStatusbar) =
- let mutable searchIcon = int16 Microsoft.VisualStudio.Shell.Interop.Constants.SBAI_Find :> obj
+ let mutable _searchIcon = int16 Microsoft.VisualStudio.Shell.Interop.Constants.SBAI_Find :> obj
- let clear() =
+ let _clear() =
// unfreeze the statusbar
statusBar.FreezeOutput 0 |> ignore
statusBar.Clear() |> ignore
- member __.Message(msg: string) =
- let _, frozen = statusBar.IsFrozen()
- // unfreeze the status bar
- if frozen <> 0 then statusBar.FreezeOutput 0 |> ignore
- statusBar.SetText msg |> ignore
- // freeze the status bar
- statusBar.FreezeOutput 1 |> ignore
-
- member this.TempMessage(msg: string) =
- this.Message msg
- async {
- do! Async.Sleep 4000
- match statusBar.GetText() with
- | 0, currentText when currentText <> msg -> ()
- | _ -> clear()
- }|> Async.Start
+ member __.Message(_msg: string) =
+ ()
+ //let _, frozen = statusBar.IsFrozen()
+ //// unfreeze the status bar
+ //if frozen <> 0 then statusBar.FreezeOutput 0 |> ignore
+ //statusBar.SetText msg |> ignore
+ //// freeze the status bar
+ //statusBar.FreezeOutput 1 |> ignore
+
+ member this.TempMessage(_msg: string) =
+ ()
+ //this.Message msg
+ //async {
+ // do! Async.Sleep 4000
+ // match statusBar.GetText() with
+ // | 0, currentText when currentText <> msg -> ()
+ // | _ -> clear()
+ //}|> Async.Start
- member __.Clear() = clear()
+ member __.Clear() = () //clear()
/// Animated magnifying glass that displays on the status bar while a symbol search is in progress.
member __.Animate() : IDisposable =
- statusBar.Animation (1, &searchIcon) |> ignore
+ //statusBar.Animation (1, &searchIcon) |> ignore
{ new IDisposable with
- member __.Dispose() = statusBar.Animation(0, &searchIcon) |> ignore }
+ member __.Dispose() = () } //statusBar.Animation(0, &searchIcon) |> ignore }
type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpProjectOptionsManager) =
let userOpName = "GoToDefinition"
@@ -171,7 +174,7 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP
/// Helper function that is used to determine the navigation strategy to apply, can be tuned towards signatures or implementation files.
member private __.FindSymbolHelper (originDocument: Document, originRange: range, sourceText: SourceText, preferSignature: bool) =
asyncMaybe {
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject originDocument
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(originDocument, CancellationToken.None)
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
let! originTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sourceText, originRange)
let position = originTextSpan.Start
@@ -193,7 +196,7 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP
if not (File.Exists fsfilePath) then return! None else
let! implDoc = originDocument.Project.Solution.TryGetDocumentFromPath fsfilePath
let! implSourceText = implDoc.GetTextAsync ()
- let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject implDoc
+ let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(implDoc, CancellationToken.None)
let! _, _, checkFileResults = checker.ParseAndCheckDocument (implDoc, projectOptions, sourceText=implSourceText, userOpName=userOpName)
let! symbolUses = checkFileResults.GetUsesOfSymbolInFile symbol |> liftAsync
let! implSymbol = symbolUses |> Array.tryHead
@@ -207,12 +210,12 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP
/// if the symbol is defined in the given file, return its declaration location, otherwise use the targetSymbol to find the first
/// instance of its presence in the provided source file. The first case is needed to return proper declaration location for
/// recursive type definitions, where the first its usage may not be the declaration.
- member __.FindSymbolDeclarationInFile(targetSymbolUse: FSharpSymbolUse, filePath: string, source: string, options: FSharpProjectOptions, fileVersion:int) =
+ member __.FindSymbolDeclarationInFile(targetSymbolUse: FSharpSymbolUse, filePath: string, sourceText: SourceText, options: FSharpProjectOptions, fileVersion:int) =
asyncMaybe {
match targetSymbolUse.Symbol.DeclarationLocation with
| Some decl when decl.FileName = filePath -> return decl
| _ ->
- let! _, checkFileAnswer = checker.ParseAndCheckFileInProject (filePath, fileVersion, source, options, userOpName = userOpName) |> liftAsync
+ let! _, checkFileAnswer = checker.ParseAndCheckFileInProject (filePath, fileVersion, sourceText.ToFSharpSourceText(), options, userOpName = userOpName) |> liftAsync
match checkFileAnswer with
| FSharpCheckFileAnswer.Aborted -> return! None
| FSharpCheckFileAnswer.Succeeded checkFileResults ->
@@ -223,7 +226,7 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP
member private this.FindDefinitionAtPosition(originDocument: Document, position: int) =
asyncMaybe {
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject originDocument
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(originDocument, CancellationToken.None)
let! sourceText = originDocument.GetTextAsync () |> liftTaskAsync
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
let textLine = sourceText.Lines.GetLineFromPosition position
@@ -273,7 +276,7 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP
let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync
let! implVersion = implDocument.GetTextVersionAsync () |> liftTaskAsync
- let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText.ToString(), projectOptions, implVersion.GetHashCode())
+ let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText, projectOptions, implVersion.GetHashCode())
let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange)
let navItem = FSharpNavigableItem (implDocument, implTextSpan)
@@ -310,9 +313,9 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP
let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath
let! implVersion = implDocument.GetTextVersionAsync () |> liftTaskAsync
let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync
- let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject implDocument
+ let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(implDocument, CancellationToken.None)
- let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText.ToString(), projectOptions, implVersion.GetHashCode())
+ let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText, projectOptions, implVersion.GetHashCode())
let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange)
let navItem = FSharpNavigableItem (implDocument, implTextSpan)
diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs
index eabf6677b93..25f33dbb75c 100644
--- a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs
+++ b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs
@@ -199,7 +199,7 @@ type internal FSharpNavigateToSearchService
async {
let! cancellationToken = Async.CancellationToken
let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask
- let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToString(), parsingOptions)
+ let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions)
let navItems parsedInput =
NavigateTo.getNavigableItems parsedInput
@@ -245,9 +245,9 @@ type internal FSharpNavigateToSearchService
| _ -> NavigateToMatchKind.Regular
interface INavigateToSearchService_RemoveInterfaceAboveAndRenameThisAfterInternalsVisibleToUsersUpdate with
- member __.SearchProjectAsync(project, searchPattern, kinds, cancellationToken) : Task> =
+ member __.SearchProjectAsync(project, _priorityDocuments, searchPattern, kinds, cancellationToken) : Task> =
asyncMaybe {
- let! parsingOptions, _site, _options = projectInfoManager.TryGetOptionsForProject(project.Id)
+ let! parsingOptions, _options = projectInfoManager.TryGetOptionsByProject(project, cancellationToken)
let! items =
project.Documents
|> Seq.map (fun document -> getCachedIndexedNavigableItems(document, parsingOptions, kinds))
@@ -279,7 +279,7 @@ type internal FSharpNavigateToSearchService
member __.SearchDocumentAsync(document, searchPattern, kinds, cancellationToken) : Task> =
asyncMaybe {
- let! parsingOptions, _, _ = projectInfoManager.TryGetOptionsForDocumentOrProject(document)
+ let! parsingOptions, _, _ = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken)
let! items = getCachedIndexedNavigableItems(document, parsingOptions, kinds) |> liftAsync
return items.Find(searchPattern)
}
diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs
index c8c3aff6b0b..f80d10422d3 100644
--- a/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs
+++ b/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs
@@ -32,7 +32,7 @@ type internal FSharpNavigationBarItemService
interface INavigationBarItemService with
member __.GetItemsAsync(document, cancellationToken) : Task> =
asyncMaybe {
- let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! parsedInput = checkerProvider.Checker.ParseDocument(document, parsingOptions, sourceText=sourceText, userOpName=userOpName)
let navItems = NavigationImpl.getNavigation parsedInput
diff --git a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
index 3f2610a0d8a..e982d10d028 100644
--- a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
+++ b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs
@@ -6,7 +6,7 @@ open System.Runtime.InteropServices
open Microsoft.VisualStudio.Shell
open Microsoft.VisualStudio.FSharp.UIResources
-open OptionsUIHelpers
+open Microsoft.VisualStudio.Shell
module DefaultTuning =
let UnusedDeclarationsAnalyzerInitialDelay = 0 (* 1000 *) (* milliseconds *)
@@ -53,14 +53,16 @@ type CodeFixesOptions =
{ SimplifyName: bool
AlwaysPlaceOpensAtTopLevel: bool
UnusedOpens: bool
- UnusedDeclarations: bool }
+ UnusedDeclarations: bool
+ SuggestNamesForErrors: bool }
static member Default =
{ // We have this off by default, disable until we work out how to make this low priority
// See https://github.com/Microsoft/visualfsharp/pull/3238#issue-237699595
SimplifyName = false
AlwaysPlaceOpensAtTopLevel = true
UnusedOpens = true
- UnusedDeclarations = true }
+ UnusedDeclarations = true
+ SuggestNamesForErrors = true }
[]
type LanguageServicePerformanceOptions =
@@ -142,20 +144,22 @@ module internal WorkspaceSettingFromDocumentExtension =
module internal OptionsUI =
+ open OptionsUIHelpers
+
[]
type internal IntelliSenseOptionPage() =
inherit AbstractOptionPage()
override this.CreateView() =
let view = IntelliSenseOptionControl()
view.charTyped.Unchecked.Add <| fun _ -> view.charDeleted.IsChecked <- System.Nullable false
-
- let path = "EnterKeySetting"
+
+ let path = "EnterKeySetting"
bindRadioButton view.nevernewline path EnterKeySetting.NeverNewline
bindRadioButton view.newlinecompleteline path EnterKeySetting.NewlineOnCompleteWord
bindRadioButton view.alwaysnewline path EnterKeySetting.AlwaysNewline
- upcast view
-
+ upcast view
+
[]
type internal QuickInfoOptionPage() =
inherit AbstractOptionPage()
@@ -172,14 +176,14 @@ module internal OptionsUI =
type internal CodeFixesOptionPage() =
inherit AbstractOptionPage()
override this.CreateView() =
- upcast CodeFixesOptionControl()
+ upcast CodeFixesOptionControl()
[]
type internal LanguageServicePerformanceOptionPage() =
inherit AbstractOptionPage()
override this.CreateView() =
upcast LanguageServicePerformanceOptionControl()
-
+
[]
type internal CodeLensOptionPage() =
inherit AbstractOptionPage()
diff --git a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs
index d4e2c84dce6..096aebc9544 100644
--- a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs
+++ b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs
@@ -82,5 +82,3 @@ type SettingsStore(serviceProvider: IServiceProvider) =
(getCached(): 'options) |> updateFromStore |> keepInCache
System.Threading.Tasks.Task.CompletedTask )
|> subset.add_SettingChangedAsync
-
-
\ No newline at end of file
diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs
index 9f8bf73fddb..01edaa39eb8 100644
--- a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs
+++ b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs
@@ -56,7 +56,7 @@ module internal FSharpQuickInfo =
let extLineText = (extSourceText.Lines.GetLineFromPosition extSpan.Start).ToString()
// project options need to be retrieved because the signature file could be in another project
- let! extParsingOptions, _extSite, extProjectOptions = projectInfoManager.TryGetOptionsForProject extDocId.ProjectId
+ let! extParsingOptions, extProjectOptions = projectInfoManager.TryGetOptionsByProject(document.Project, cancellationToken)
let extDefines = CompilerEnvironment.GetCompilationDefinesForEditing extParsingOptions
let! extLexerSymbol = Tokenizer.getSymbolAtPosition(extDocId, extSourceText, extSpan.Start, declRange.FileName, extDefines, SymbolLookupKind.Greedy, true)
let! _, _, extCheckFileResults = checker.ParseAndCheckDocument(extDocument, extProjectOptions, allowStaleResults=true, sourceText=extSourceText, userOpName = userOpName)
@@ -92,7 +92,7 @@ module internal FSharpQuickInfo =
asyncMaybe {
let! sourceText = document.GetTextAsync cancellationToken
- let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document
+ let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
let! lexerSymbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, true)
let idRange = lexerSymbol.Ident.idRange
@@ -175,7 +175,7 @@ type internal FSharpAsyncQuickInfoSource
// test helper
static member ProvideQuickInfo(checker:FSharpChecker, documentId:DocumentId, sourceText:SourceText, filePath:string, position:int, parsingOptions:FSharpParsingOptions, options:FSharpProjectOptions, textVersionHash:int, languageServicePerformanceOptions: LanguageServicePerformanceOptions) =
asyncMaybe {
- let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText.ToString(), options, languageServicePerformanceOptions, userOpName=FSharpQuickInfo.userOpName)
+ let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName=FSharpQuickInfo.userOpName)
let textLine = sourceText.Lines.GetLineFromPosition position
let textLineNumber = textLine.LineNumber + 1 // Roslyn line numbers are zero-based
let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions
diff --git a/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs b/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs
index c8ff1c83e01..ab2c04ddca2 100644
--- a/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs
+++ b/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs
@@ -150,7 +150,7 @@ type internal FSharpBlockStructureService(checker: FSharpChecker, projectInfoMan
override __.GetBlockStructureAsync(document, cancellationToken) : Task =
asyncMaybe {
- let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document)
+ let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken)
let! sourceText = document.GetTextAsync(cancellationToken)
let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName)
return createBlockSpans document.FSharpOptions.Advanced.IsBlockStructureEnabled sourceText parsedInput |> Seq.toImmutableArray
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf
index 057ec914894..983e259fcb9 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Formátování
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf
index 61cdd0a5d3f..9be248c1843 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Formatierung
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf
index 7b850fe196c..0a83da88150 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Formato
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf
index c41b9a5cd9d..a7a3d174b87 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Mise en forme
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf
index 33454d45ff3..9123a7bdc9e 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Formattazione
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf
index 6197ad8e8e1..185f3a6e66d 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ 書式設定
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf
index 2be01c20ba2..b0695f48715 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ 서식
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf
index 69ec9bc0c32..49236ba200d 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Formatowanie
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf
index ecf0c609517..c118e699c3b 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Formatação
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf
index 19409cbe5f3..781a7b4dc88 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Форматирование
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf
index 7951d72959f..dc2fc021873 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ Biçimlendirme
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf
index 9def8ae9629..8cfcd895d8a 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ 正在格式化
diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf
index 48e46393abf..4363a49eb96 100644
--- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
@@ -159,7 +159,7 @@
Formatting
- Formatting
+ 格式化
diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj
index 336ba963f5a..5c56c0734e5 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj
+++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj
@@ -7,7 +7,6 @@
$(NoWarn);1570;1574;1587;1591;3001,3002,3003$(NoWarn);VSTHRD010true
- truefalse
@@ -54,10 +53,12 @@
+
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf
index 01935ee0ac0..5fa17a956f2 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf
index f14709b11e9..7e4248d4dbc 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf
index 9c41be20344..4f51649f109 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf
index 87150eb42ea..542a43a5b08 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf
index 1827234227d..832c7cbb24d 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf
index 680fb1b9941..c2165bf9f9d 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf
index 2b10d5448fa..31b6b01633e 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf
index 0f8ca025c20..53bfacf4caf 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf
index c341f4d3bf7..8916fcb57e1 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf
index b08e84f46b8..84593c23080 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf
index 78658d3f00c..4b600678ae4 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf
index a78d09aee63..c3422f9abf8 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf
index 3fa4e9f803a..b8fff564d4d 100644
--- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs b/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs
index d507b58b143..10cd776b0d0 100644
--- a/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs
+++ b/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs
@@ -12,7 +12,6 @@ open Microsoft.VisualStudio.Text
open FSharp.Compiler.SourceCodeServices
open Microsoft.VisualStudio.FSharp.LanguageService.SiteProvider
-
#nowarn "44" // use of obsolete CheckFileInProjectAllowingStaleCachedResults
//
@@ -95,7 +94,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED
lazy // This portion is executed on the language service thread
let timestamp = if source=null then System.DateTime(2000,1,1) else source.OpenedTime // source is null in unit tests
let checker = getInteractiveChecker()
- let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(fileName, sourceText, timestamp, [| |]) |> Async.RunSynchronously
+ let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(fileName, FSharp.Compiler.Text.SourceText.ofString sourceText, timestamp, [| |]) |> Async.RunSynchronously
let referencedProjectFileNames = [| |]
let projectSite = ProjectSitesAndFiles.CreateProjectSiteForScript(fileName, referencedProjectFileNames, checkOptions)
{ ProjectSite = projectSite
diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj
index 29eee6ad191..7366f93efdb 100644
--- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj
+++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj
@@ -3,14 +3,13 @@
- net46Library$(NoWarn);75
+ $(NoWarn);44truetrue$(SystemValueTuplePackageVersion)$(OtherFlags) --warnon:1182 --subsystemversion:6.00
- truefalse
diff --git a/vsintegration/src/FSharp.LanguageService/FSharpSource.fs b/vsintegration/src/FSharp.LanguageService/FSharpSource.fs
index d5313b1ac31..446fcfffb77 100644
--- a/vsintegration/src/FSharp.LanguageService/FSharpSource.fs
+++ b/vsintegration/src/FSharp.LanguageService/FSharpSource.fs
@@ -371,7 +371,7 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi
Stamp = None }
|> ic.GetParsingOptionsFromProjectOptions
- ic.ParseFile(fileName, source.GetText(), co) |> Async.RunSynchronously
+ ic.ParseFile(fileName, FSharp.Compiler.Text.SourceText.ofString (source.GetText()), co) |> Async.RunSynchronously
override source.GetCommentFormat() =
let mutable info = new CommentInfo()
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf
index 1b98c0b95c1..c1fcfdca7b1 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf
index 8c2cdb0e764..a77fe0da025 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf
index 093e6c85782..d3d7a07a053 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf
index c771efc2acc..e3a42fd1d9b 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf
index 119ff1788de..abb983ddd86 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf
index 0727b9aa5e0..d9ebb322541 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf
index 54d0db78033..9f9ef85b76c 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf
index fec1904bb9b..225bbd0a466 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf
index 7f2313345a8..e799aec1cda 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf
index fafc7d644ff..73ab05a5533 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf
index 115c4f86972..e33ea35ca76 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf
index b11b0ab3d74..534256ae15c 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf
index 558cc1afec2..c0989c72f44 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf
index 7ffbbe10328..ffc095348b1 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf
index bbc6b2006b9..76cd632ccd8 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf
index 8eef0e1148c..49751b8ac66 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf
index f095cc4c4f4..e0c47b9efa7 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf
index 19ef2f72867..73d0c847fac 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf
index e37a4cd55c0..d7b3df3c903 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf
index 13092af472b..2f9badfbb4a 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf
index 63b801d5bf9..5d7e05bfb90 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf
index 2a16efa550b..c22fa84b15a 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf
index 885f5df2fac..ffccb77de00 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf
index 434c6f8ea37..99888a55edb 100644
--- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FSharp.ProjectSystem.Base.ruleset b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FSharp.ProjectSystem.Base.ruleset
new file mode 100644
index 00000000000..dd14807179a
--- /dev/null
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FSharp.ProjectSystem.Base.ruleset
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj
index 17a5023ae7c..abe0517b126 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj
@@ -5,13 +5,13 @@
LibraryFSharp.ProjectSystem.Base
- $(NoWarn),1570,1572,1573,1574,1591,3001,3002,3003,3005,3008,3009,3021,3024
+ $(NoWarn),618,1570,1572,1573,1574,1591,3001,3002,3003,3005,3008,3009,3021,3024$(NoWarn);VSTHRD010$(DefineConstants);CODE_ANALYSISMicrosoft.VisualStudio.FSharp.ProjectSystemtrue
- truefalse
+ FSharp.ProjectSystem.Base.ruleset
@@ -47,8 +47,10 @@
+
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf
index ffeed383fc7..97941503b9f 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf
@@ -1,4 +1,4 @@
-
+
@@ -792,7 +792,7 @@
Path
- PATH
+ Cesta
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf
index 10949f3119e..8c8f5b67d20 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf
index 6677d941045..b94354b317b 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -792,7 +792,7 @@
Path
- PATH
+ Ruta de acceso
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf
index 7c9efded080..98538c729e1 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -487,7 +487,7 @@
Specifies the tool that transforms a file at design time and places the output of that transformation into another file. For example, a dataset (.xsd) file comes with a default custom tool.
- Spécifie l'outil qui transforme un fichier au moment du design et qui place les résultats de cette transformation dans un autre fichier. Par exemple, un fichier dataset (.xsd) est fourni avec un outil personnalisé par défaut.
+ Spécifie l'outil qui transforme un fichier au moment du design et place le résultat de cette transformation dans un autre fichier. Par exemple, un fichier de dataset (.xsd) est fourni avec un outil personnalisé par défaut.
@@ -792,7 +792,7 @@
Path
- PATH
+ Chemin
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf
index 78c38a31de4..d31d62e4787 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf
index 9fca5b1025a..63dcd0ecdd7 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf
@@ -792,7 +792,7 @@
Path
- PATH
+ パス
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf
index 178ec108738..bbdd7cb68c3 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -152,7 +152,7 @@
Console Application
- 콘솔 응용 프로그램
+ 콘솔 애플리케이션
@@ -257,7 +257,7 @@
Misc
- Misc
+ 기타
@@ -392,7 +392,7 @@
Windows Application
- Windows 응용 프로그램
+ Windows 애플리케이션
@@ -487,7 +487,7 @@
Specifies the tool that transforms a file at design time and places the output of that transformation into another file. For example, a dataset (.xsd) file comes with a default custom tool.
- 디자인 타임에 파일을 변환하고 변환 결과를 다른 파일에 저장하는 도구를 지정합니다. 예를 들어 데이터 집합 파일(.xsd)의 경우 기본 사용자 지정 도구가 제공됩니다.
+ 디자인 타임에 파일을 변환하고 변환 결과를 다른 파일에 저장하는 도구를 지정합니다. 예를 들어 데이터 세트 파일(.xsd)의 경우 기본 사용자 지정 도구가 제공됩니다.
@@ -627,7 +627,7 @@
The project location is not trusted:{0}{0}{1}{0}{0}Running the application may result in security exceptions when it attempts to perform actions which require full trust.{0}{0}Click OK to ignore and continue.
- 프로젝트 위치를 신뢰할 수 없습니다.{0}{0}{1}{0}{0}응용 프로그램을 실행하면 완전 신뢰가 필요한 작업을 수행할 때 보안 예외가 발생할 수 있습니다.{0}{0}무시하고 계속하려면 [확인]5D;을 클릭하세요.
+ 프로젝트 위치를 신뢰할 수 없습니다.{0}{0}{1}{0}{0}애플리케이션을 실행하면 완전 신뢰가 필요한 작업을 수행할 때 보안 예외가 발생할 수 있습니다.{0}{0}무시하고 계속하려면 [확인]을 클릭하십시오.
@@ -792,7 +792,7 @@
Path
- PATH
+ 경로
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf
index 5bea4d9201f..00055ae4a89 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf
@@ -1,4 +1,4 @@
-
+
@@ -257,7 +257,7 @@
Misc
- Misc
+ Różne
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf
index 782ef79d2dc..f72f70bbe81 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
@@ -792,7 +792,7 @@
Path
- PATH
+ Caminho
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf
index 71484ba3f3d..d279159cd7d 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf
@@ -34,7 +34,7 @@
Build Action
- Действие при сборке
+ Действие сборкиProject Build Property Name
@@ -612,7 +612,7 @@
A 'UsingTask' tag which registers the '{1}' task was found in the project file '{0}'. 'UsingTask' tags in the project file take precedence over those in the imported .TARGETS files, and therefore could be used to execute arbitrary code during an otherwise unmodified build process.
- В файле проекта "{0}" обнаружен тег "UsingTask", регистрирующий задачу "{1}". Метки <UsingTask> в файле проекта имеют превосходство перед импортированными .TARGETS-файлами, и поэтому могут быть использованы для выполнения произвольного кода во время не изменяемого другими средствами процесса сборки.
+ В файле проекта "{0}" обнаружен тег "UsingTask", регистрирующий задачу "{1}". Теги "UsingTask" в файле проекта имеют превосходство перед импортированными .TARGETS-файлами, и поэтому могут быть использованы для выполнения произвольного кода во время не изменяемого другими средствами процесса сборки.
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf
index c382dc83183..8688a0ce393 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -257,7 +257,7 @@
Misc
- Misc
+ Çeşitli
@@ -792,7 +792,7 @@
Path
- PATH
+ Yol
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf
index d9537fb1e18..d5a9f4f85d4 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
@@ -792,7 +792,7 @@
Path
- PATH
+ 路径
diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf
index d1da28cf131..52c142cf47a 100644
--- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
@@ -792,7 +792,7 @@
Path
- PATH
+ 路徑
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs
index f9c77b745c9..619c760abda 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs
@@ -366,8 +366,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
let mutable normalizedRefs : string[] option = None
- let mutable binOutputPath : string option = None
-
#if DEBUG
let logger = new Microsoft.Build.Logging.ConsoleLogger(Microsoft.Build.Framework.LoggerVerbosity.Diagnostic,
(fun s -> Trace.WriteLine("MSBuild: " + s)),
@@ -1260,24 +1258,11 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
let updatedNormalizedRefs = flags |> Array.choose (fun flag -> if flag.StartsWith("-r:") then Some flag.[3..] else None) |> Array.map (fun fn -> Path.GetFullPath(Path.Combine(x.ProjectFolder, fn)))
sourcesAndFlags <- Some (updatedNormalizedSources, flags)
normalizedRefs <- Some updatedNormalizedRefs
- binOutputPath <- x.GetCurrentOutputAssembly() |> Option.ofObj
if projectSite.State = ProjectSiteOptionLifetimeState.Opening then
// This is the first time, so set up interface for language service to talk to us
projectSite.Open(x.CreateRunningProjectSite())
- // =====================================================================================================
- // Todo: x.Compile(compile:System.Converter, flags:string[], sources:string[]) for VS2017.7
- // Earlier buildtasks usesd System.Converter for cross platform we are moving to Func
- // This is so that during the interim, earlier VS's will still load the OSS project
- // =====================================================================================================
- member x.Compile(compile:System.Converter, flags:string[], sources:string[]) =
- x.CoreCompile(flags, sources)
- if actuallyBuild then
- compile.Invoke(0)
- else
- 0
-
member x.Compile(compile:Func, flags:string[], sources:string[]) =
x.CoreCompile(flags, sources)
if actuallyBuild then
@@ -1288,7 +1273,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
member __.CompilationSourceFiles = match sourcesAndFlags with None -> [| |] | Some (sources,_) -> sources
member __.CompilationOptions = match sourcesAndFlags with None -> [| |] | Some (_,flags) -> flags
member __.CompilationReferences = match normalizedRefs with None -> [| |] | Some refs -> refs
- member __.CompilationBinOutputPath = binOutputPath
override x.ComputeSourcesAndFlags() =
@@ -1410,7 +1394,9 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
member __.CompilationSourceFiles = x.CompilationSourceFiles
member __.CompilationOptions = x.CompilationOptions
member __.CompilationReferences = x.CompilationReferences
- member __.CompilationBinOutputPath = x.CompilationBinOutputPath
+ member __.CompilationBinOutputPath =
+ let outputPath = x.GetCurrentOutputAssembly()
+ if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath)
member __.Description =
match sourcesAndFlags with
@@ -1437,7 +1423,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
// that does _not_ reference "this" to get its information.
// CreateStaticProjectSite can be called on a project that failed to load (as in Close)
member private x.CreateStaticProjectSite() =
- let outputPath = x.CompilationBinOutputPath
+ let outputPath = x.GetCurrentOutputAssembly()
let sourceFiles = x.CompilationSourceFiles
let options = x.CompilationOptions
let refs = x.CompilationReferences
@@ -1453,7 +1439,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem
member __.CompilationSourceFiles = sourceFiles
member __.CompilationOptions = options
member __.CompilationReferences = refs
- member __.CompilationBinOutputPath = outputPath
+ member __.CompilationBinOutputPath = if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath)
member __.ProjectFileName = projFileName
member __.BuildErrorReporter
with get() = staticBuildErrorReporter
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj
index 548c5344550..0bc87170a6c 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj
@@ -10,7 +10,6 @@
true$(SystemValueTuplePackageVersion)$(OtherFlags) --warnon:1182 --subsystemversion:6.00
- truefalse
@@ -82,7 +81,9 @@
+
+
@@ -91,7 +92,9 @@
+
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx
index b6fbe1fdc26..506f60a7e2f 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx
@@ -467,10 +467,10 @@
Customizes the environment to maximize code editor screen space and improve the visibility of F# commands and tool windows.
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.61.0
@@ -479,7 +479,7 @@
Microsoft Visual F# Tools
- Visual F# Tools 10.2 for F# 4.5
+ Visual F# Tools 10.4 for F# 4.6F# Interactive
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf
index a4f0096f3ab..02128b8f00d 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf
index 81a9dcce028..74b69acd487 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf
index e97a202b506..5f286a95698 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -74,7 +74,7 @@
Debug In Interactive
- Depurar en interactivo
+ Depurar en Interactive
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf
index c26cf5e9363..2e8a0c00453 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf
index 7efc02f0660..5b59a67af85 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf
index aabe84846be..181e3e1d412 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf
@@ -1,4 +1,4 @@
-
+
@@ -49,7 +49,7 @@
F# Interactive
- F# インタラクティブ
+ F# Interactive
@@ -84,12 +84,12 @@
&Send to F# Interactive
- F# インタラクティブに送信(&S)
+ F# Interactive に送信(&S)&Send to F# Interactive
- F# インタラクティブに送信(&S)
+ F# Interactive に送信(&S)
@@ -99,12 +99,12 @@
&Send References to F# Interactive
- 参照を F# インタラクティブに送信(&S)
+ 参照を F# Interactive に送信(&S)&Send References to F# Interactive
- 参照を F# インタラクティブに送信(&S)
+ 参照を F# Interactive に送信(&S)
@@ -114,12 +114,12 @@
&Send Project Output to F# Interactive
- プロジェクト出力を F# インタラクティブに送信(&S)
+ プロジェクト出力を F# Interactive に送信(&S)&Send Project Output to F# Interactive
- プロジェクト出力を F# インタラクティブに送信(&S)
+ プロジェクト出力を F# Interactive に送信(&S)
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf
index 38d31e07859..1d311984cab 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -74,7 +74,7 @@
Debug In Interactive
- 대화형에서 디버그
+ Interactive에서 디버그
@@ -99,12 +99,12 @@
&Send References to F# Interactive
- F# 대화형으로 참조 보내기(&S)
+ F# Interactive로 참조 보내기(&S)&Send References to F# Interactive
- F# 대화형으로 참조 보내기(&S)
+ F# Interactive로 참조 보내기(&S)
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf
index b1254473b28..0b59a2dd7d2 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf
index 88e975c7f34..e2a2158cf9e 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf
index b89ef29cb2a..77e44dc54ee 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf
@@ -1,4 +1,4 @@
-
+
@@ -74,7 +74,7 @@
Debug In Interactive
- Отладка в Interactive
+ Интерактивная отладка
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf
index 15cdfec5b7a..31179940b67 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -99,12 +99,12 @@
&Send References to F# Interactive
- &Başvuruları F# Etkileşimli'ye Gönder
+ &Başvuruları F# Interactive'e Gönder&Send References to F# Interactive
- &Başvuruları F# Etkileşimli'ye Gönder
+ &Başvuruları F# Interactive'e Gönder
@@ -114,12 +114,12 @@
&Send Project Output to F# Interactive
- &Proje Çıkışını F# Etkileşimli'ye Gönder
+ &Proje Çıkışını F# Interactive'e Gönder&Send Project Output to F# Interactive
- &Proje Çıkışını F# Etkileşimli'ye Gönder
+ &Proje Çıkışını F# Interactive'e Gönder
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf
index e6ee3a7ac13..6456eeba61c 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf
@@ -49,7 +49,7 @@
F# Interactive
- F# 交互窗口
+ F# 交互
@@ -74,7 +74,7 @@
Debug In Interactive
- 交互窗口中的调试
+ Interactive 中的调试
@@ -114,12 +114,12 @@
&Send Project Output to F# Interactive
- 将项目输出发送到 F# 交互窗口(&S)
+ 将项目输出发送到 F# 交互(&S)&Send Project Output to F# Interactive
- 将项目输出发送到 F# 交互窗口(&S)
+ 将项目输出发送到 F# 交互(&S)
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf
index b6713a47eec..f1c96d5286c 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
@@ -49,7 +49,7 @@
F# Interactive
- F# 互動
+ F# Interactive
@@ -84,12 +84,12 @@
&Send to F# Interactive
- 傳送到 F# 互動 (&S)
+ 傳送到 F# Interactive(&S)&Send to F# Interactive
- 傳送到 F# 互動 (&S)
+ 傳送到 F# Interactive(&S)
@@ -114,12 +114,12 @@
&Send Project Output to F# Interactive
- 傳送專案輸出到 F# 互動 (&S)
+ 傳送專案輸出到 F# Interactive(&S)&Send Project Output to F# Interactive
- 傳送專案輸出到 F# 互動 (&S)
+ 傳送專案輸出到 F# Interactive(&S)
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf
index d6e0544c20b..4b75bf2cdd5 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 pro F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Nástroje Microsoft Visual F# 10.4 pro F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 pro F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Nástroje Microsoft Visual F# 10.4 pro F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 pro F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Nástroje Visual F# 10.4 pro F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf
index 61a1b07a85c..47019197263 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 für F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F#-Tools 10.4 für f# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 für F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F#-Tools 10.4 für f# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 für F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Visual F#-Tools 10.4 für F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf
index b4806143a1f..531c011c8d5 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Herramientas de Microsoft Visual F# 10.2 para F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 para F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Herramientas de Microsoft Visual F# 10.2 para F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 para F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Herramientas de Visual F# 10.2 para F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Visual F# Tools 10.4 para F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf
index 677b679130c..0e5d733739b 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 pour F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 pour F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 pour F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 pour F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 pour F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Visual F# Tools 10.4 pour F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf
index 8cff31ef2b7..6e93bc28a74 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 per F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 per F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 per F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 per F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 per F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Visual F# Tools 10.4 per F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf
index 742b365524a..e99787c3010 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ F# 4.6 用 Microsoft Visual F# Tools
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ F# 4.6 用 Microsoft Visual F# Tools
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 for F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ F# 4.6 用 Visual F# Tools 10.4
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf
index 611e3420a3c..ba33a418cb1 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -9,7 +9,7 @@
Application
- 응용 프로그램
+ 애플리케이션
@@ -34,7 +34,7 @@
The type of application to build.
- 빌드할 응용 프로그램의 유형입니다.
+ 빌드할 애플리케이션의 유형입니다.
@@ -54,17 +54,17 @@
The name of the class that contains the static Main method that you want called when you launch your application.
- 응용 프로그램을 시작할 때 호출할 정적 Main 메서드를 포함하는 클래스의 이름입니다.
+ 애플리케이션을 시작할 때 호출할 정적 Main 메서드를 포함하는 클래스의 이름입니다.Application Icon
- 응용 프로그램 아이콘
+ 애플리케이션 아이콘Sets the .ico file to use as your application icon.
- 응용 프로그램 아이콘으로 사용할 .ico 파일을 설정합니다.
+ 애플리케이션 아이콘으로 사용할 .ico 파일을 설정합니다.
@@ -204,12 +204,12 @@
Console Application (.NET Framework)
- 콘솔 응용 프로그램(.NET Framework)
+ 콘솔 애플리케이션(.NET Framework)A project for creating a command-line application
- 명령줄 응용 프로그램을 만드는 프로젝트입니다.
+ 명령줄 애플리케이션을 만드는 프로젝트입니다
@@ -244,12 +244,12 @@
Application Configuration File
- 응용 프로그램 구성 파일
+ 애플리케이션 구성 파일A file for storing application configuration and settings values
- 응용 프로그램 구성 및 설정 값을 저장하는 파일입니다.
+ 애플리케이션 구성 및 설정 값을 저장하는 파일입니다
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- F# 4.5용 Microsoft Visual F# Tools 10.2
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ F# 4.6용 Microsoft Visual F# Tools 10.4
- Microsoft Visual F# Tools 10.2 for F# 4.5
- F# 4.5용 Microsoft Visual F# Tools 10.2
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ F# 4.6용 Microsoft Visual F# Tools 10.4
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- F# 4.5용 Visual F# Tools 10.2
+ Visual F# Tools 10.4 for F# 4.6
+ F# 4.6용 Visual F# Tools 10.4
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf
index 436d177ce92..827c5be8302 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 dla języka F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 dla języka F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 for F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Visual F# Tools 10.4 dla języka F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf
index dc9241bf161..aaa4543ca54 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
@@ -124,7 +124,7 @@
F# Project File (*.fsproj)
- Arquivo de Projeto #F (*.fsproj)
+ Arquivo de projeto F# (*.fsproj)
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 para F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Ferramentas F# do Microsoft Visual 10.4 para F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 para F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Ferramentas F# do Microsoft Visual 10.4 para F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 para F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Ferramentas F# do Visual 10.4 para F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf
index 7cccb1aa076..897d2db04fc 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 для F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 для F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 для F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 для F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 для F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Visual F# Tools 10.4 для F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf
index 739934c619d..a9ccec095c9 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf
@@ -1,4 +1,4 @@
-
+
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- F# 4.5 için Microsoft Visual F# Tools 10.2
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 for F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- F# 4.5 için Microsoft Visual F# Tools 10.2
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ F# 4.6 için Microsoft Visual F# Araçları 10.4
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- F# 4.5 için Visual F# Tools 10.2
+ Visual F# Tools 10.4 for F# 4.6
+ F# 4.6 için Visual F# Araçları 10.4
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf
index d6e1bc60642..4cf2c86043e 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 for F# 4.6
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ Microsoft Visual F# Tools 10.4 for F# 4.6
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 for F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ Visual F# Tools 10.4 for F# 4.6
diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf
index 1ccc8023f3d..9f6a7ebc5a1 100644
--- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf
@@ -433,13 +433,13 @@
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ 適用於 F# 4.6 的 Microsoft Visual F# Tools 10.4
- Microsoft Visual F# Tools 10.2 for F# 4.5
- Microsoft Visual F# Tools 10.2 for F# 4.5
+ Microsoft Visual F# Tools 10.4 for F# 4.6
+ 適用於 F# 4.6 的 Microsoft Visual F# Tools
@@ -453,8 +453,8 @@
- Visual F# Tools 10.2 for F# 4.5
- Visual F# Tools 10.2 for F# 4.5
+ Visual F# Tools 10.4 for F# 4.6
+ 適用於 F# 4.6 的 Visual F# Tools 10.4
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Common/switches.vb b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Common/switches.vb
index 72063ca2747..b4bfae2a68e 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Common/switches.vb
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Common/switches.vb
@@ -370,7 +370,7 @@ Namespace Microsoft.VisualStudio.Editors.Common
'''
'''
Private Shared Function FormatWin32Message(ByVal msg As System.Windows.Forms.Message) As String
- Dim str As New Text.StringBuilder()
+ Dim str As New System.Text.StringBuilder()
Dim MsgType As String = Nothing
Select Case msg.Msg
Case win.WM_KEYDOWN
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj
index 7e105171e1a..62f44ba24d6 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj
@@ -12,17 +12,15 @@
false41999,42016,42017,42018,42019,42020,42021,42022,42032,4203640026;42105;42107;42353
+ net472win
+ true
+ false
+ falsetrue
- truefalsefalsetrue
- v4.6
-
-
-
- 2.0{FCFB214C-462E-42B3-91CA-FC557EFEE74F}
@@ -55,6 +53,7 @@
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb
index 4ada44f4e11..2c56bf6bc07 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb
@@ -14,7 +14,6 @@ Imports Microsoft.VisualStudio.Editors
Imports OLE = Microsoft.VisualStudio.OLE.Interop
Imports Shell = Microsoft.VisualStudio.Shell
-Imports Interop = Microsoft.VisualStudio.OLE.Interop
Imports Microsoft.VisualStudio.Editors.PropertyPages
Imports System.Runtime.InteropServices
Imports System.ComponentModel
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb
index ab27816df1d..21aaa80fdb5 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb
@@ -10,8 +10,6 @@ Imports System.Diagnostics
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
-Imports Interop = Microsoft.VisualStudio.Editors.Interop
-
Namespace Microsoft.VisualStudio.Editors.PropertyPages
'--------------------------------------------------------------------------
@@ -21,7 +19,7 @@ Namespace Microsoft.VisualStudio.Editors.PropertyPages
'--------------------------------------------------------------------------
_
Friend NotInheritable Class BuildEventCommandLineDialogService
- Implements Interop.IVsBuildEventCommandLineDialogService
+ Implements Microsoft.VisualStudio.Editors.Interop.IVsBuildEventCommandLineDialogService
Private m_serviceProvider As IServiceProvider
@@ -29,8 +27,8 @@ Namespace Microsoft.VisualStudio.Editors.PropertyPages
m_serviceProvider = sp
End Sub
- Function EditCommandLine(ByVal WindowText As String, ByVal HelpID As String, ByVal OriginalCommandLine As String, ByVal MacroProvider As Interop.IVsBuildEventMacroProvider, ByRef Result As String) As Integer _
- Implements Interop.IVsBuildEventCommandLineDialogService.EditCommandLine
+ Function EditCommandLine(ByVal WindowText As String, ByVal HelpID As String, ByVal OriginalCommandLine As String, ByVal MacroProvider As Microsoft.VisualStudio.Editors.Interop.IVsBuildEventMacroProvider, ByRef Result As String) As Integer _
+ Implements Microsoft.VisualStudio.Editors.Interop.IVsBuildEventCommandLineDialogService.EditCommandLine
Dim frm As New BuildEventCommandLineDialog
Dim i As Integer
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf
index 4e2bdab5004..704cd32f78d 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf
index f4cac58bb50..88fafb076b2 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf
index d1efc1ac634..67b3ae1eb31 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf
index 535fba0b84d..aef6cabab2f 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf
index 0f42e210f47..8e8b37c8f64 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf
index eb9cef6d52d..9039bb8ebaf 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf
@@ -1,4 +1,4 @@
-
+
@@ -14,7 +14,7 @@
Specify how application resources will be managed:
- 응용 프로그램 리소스 관리 방법을 지정하세요.
+ 애플리케이션 리소스 관리 방법을 지정하세요.
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf
index cf9ac439157..4648179e594 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf
index c7f5eb16bf0..811f3f69dc9 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf
index 1c96a13b108..ae557b63a14 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf
index c0e340cf72c..328d27a356a 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf
index f46d0dd37b0..34c2cbcdcad 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf
index d22f9360568..d322a95b1b4 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf
index e4abf053c8a..fec602bdf50 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf
index e7c5dfd783b..4e3fbdd1b03 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf
index 0e20482fc3f..43a94c2473a 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf
index c541698888e..c6603dae24d 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf
index a2190934053..cd6455ea64c 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf
index fc64e68a250..2f92bb4c707 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf
index 559d3afb30b..de9e2972dfb 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf
index 639f2f4b7c1..4478e6ad561 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf
index a04d10f5d56..c9efae6f911 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf
index f384ef2d891..9f9ac6466e7 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf
index 05d48d67ac2..5caf470b726 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf
index 1a2e070f542..669a3a874c9 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf
index 25b8be2bb4d..6cc631bbbc7 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf
index efd390ea7d0..a4ca9edc237 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf
index fa7e8debee2..8a687161774 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf
index f53e9b2d152..0f9892f65c0 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf
index d5578a8717c..ff6480bf0a3 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf
index d24bbcb7111..f1f40f856f5 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf
index 59ff337b414..e2dbc5bce5a 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf
index 93f6c1c59ea..aec6e5568fa 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf
index 1416b0f53ba..aa1a35894d7 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf
index 6cc5674746d..de0dc2a3539 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf
@@ -1,4 +1,4 @@
-
+
diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf
index d37993e8960..db4345b9870 100644
--- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf
+++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf
@@ -1,4 +1,4 @@
-
+