diff --git a/INTERNAL.md b/INTERNAL.md index af78c3c968e..f0dd741c913 100644 --- a/INTERNAL.md +++ b/INTERNAL.md @@ -1,164 +1,3 @@ # Links for internal team members to find build definitions, etc. -Note that usually only the most recent link in each section is interesting. Older links are included for reference only. - -## PR Build Definition - -The PR build definition can be found [here](https://dev.azure.com/dnceng/internal/_build?definitionId=499&_a=summary) or by -navigating through an existing PR. - -There is also a duplicate scouting PR build that is identical to the normal PR build _except_ that it uses a different Windows -machine queue that always has the next preview build of Visual Studio installed. This is to hopefully get ahead of any breaking -API changes. That build definition is [here](https://dev.azure.com/dnceng/public/_build?definitionId=961). - -## Signed Build Definitions - -[VS 16.4 to current](https://dev.azure.com/dnceng/internal/_build?definitionId=499&_a=summary) - -[VS 15.7 to 16.3](https://dev.azure.com/devdiv/DevDiv/_build/index?definitionId=8978) - -[VS 15.6](https://dev.azure.com/devdiv/DevDiv/_build?definitionId=7239) - -[VS 15.0 to 15.5](https://dev.azure.com/devdiv/DevDiv/_build?definitionId=5037) - -## Branch auto-merge definitions - -Branch auto-merge definitions are specified [here](https://github.com/dotnet/roslyn-tools/blob/master/src/GitHubCreateMergePRs/config.xml). - -## VS Insertion Generators - -VS 16.4 to current - part of the build definition. [See below](#vs-insertions-as-part-of-the-build-definition). - -The following insertion generators are automatically invoked upon successful completion of a signed build in each of -their respective branches. - -[VS 16.3](https://dev.azure.com/devdiv/DevDiv/_release?definitionId=1839&_a=releases) - -[VS 16.2](https://dev.azure.com/devdiv/DevDiv/_release?definitionId=1699&_a=releases) - -[VS 16.1](https://dev.azure.com/devdiv/DevDiv/_release?definitionId=1669&_a=releases) - -VS 16.0 and prior were done manually. - -## VS Insertions as part of the build definition - -Starting with the 16.4 release and moving forwards, the VS insertion is generated as part of the build. The relevant -bits can be found near the bottom of [`azure-pipelines.yml`](azure-pipelines.yml) under the `VS Insertion` header. The -interesting parameters are `componentBranchName` and `insertTargetBranch`. In short, when an internal [signed build](https://dev.azure.com/dnceng/internal/_build?definitionId=499&_a=summary) -completes and the name of the branch built exactly equals the value in the `componentBranchName` parameter, a component -insertion into VS will be created into the `insertTargetBranch` branch. The link to the insertion PR will be found -near the bottom of the build under the title 'Insert into VS'. Examine the log for 'Insert VS Payload' and near the -bottom you'll see a line that looks like `Created request #xxxxxx at https://...`. - -Insertions generated to any `rel/*` branch will have to be manually verified and merged, and they'll be listed -[here](https://dev.azure.com/devdiv/DevDiv/_git/VS/pullrequests?createdBy=122d5278-3e55-4868-9d40-1e28c2515fc4&_a=active). -Note that insertions for other teams will also be listed. - -Insertions to any other VS branch (e.g., `main`) will have the auto-merge flag set and should handle themselves, but -it's a good idea to check the previous link for any old or stalled insertions into VS `main`. - -### What has to be done regularly - -1. Go to [signed builds](https://dev.azure.com/dnceng/internal/_build?definitionId=499&_a=summary) and make sure latest one for both main and release branches are passing. -2. Go to [insertion PRs](https://dev.azure.com/devdiv/DevDiv/_git/VS/pullrequests?createdBy=122d5278-3e55-4868-9d40-1e28c2515fc4&_a=active) and find the latest insertion PR for current release branch. (E.g. `Insert F# dev17.13 20241128.1 Payload into main`) -3. Check CI is passing and all comments are resolved. -4. Check that F# package version is not downgraded (unless that's intended for some reason) by the PR. -5. Approve it. -6. Abandon any older unmerged PRs that shouldn't be inserted. - -## Preparing for a new VS release branch - -### When a VS branch snaps from `main` to `rel/d*` and switches to ask mode: - -Update the `insertTargetBranch` value at the bottom of `azure-pipelines.yml` in the appropriate release branch. E.g., when VS 17.3 snapped and switched to ask mode, [this PR](https://github.com/dotnet/fsharp/pull/13456/files) correctly updates the insertion target so that future builds from that F# branch will get auto-inserted to VS. - -### When VS `main` is open for insertions for preview releases of VS: - -0. Disable auto-merges from `main` to **current** release branch, please make a change for the following file and create a pull request: -https://github.com/dotnet/roslyn-tools/blob/6d7c182c46f8319d7922561e2c1586c7aadce19e/src/GitHubCreateMergePRs/config.xml#L52-L74 -> You should comment out the `main -> release/devXX.X` flow until step #4 is completed (``) -2. Create a new `release/dev*` branch (e.g., `release/dev17.4`) and initially set its HEAD commit to that of the previous release (e.g., `release/dev17.3` in this case). - ```console - git checkout -b release/dev17.4 - git reset --hard upstream/release/dev17.3 - git push --set-upstream upstream release/dev17.4 - ``` -3. Update versions in both `main` and new release branch **they need to match, so release notes bot knows which changelog file to check** -4. Update target insertion branches in the `azure-pipelines.yml`: - 1. F# release branch - ```yaml - # Release branch for F# - # Should be 'current' release branch name, i.e. 'release/dev17.10' in dotnet/fsharp/refs/heads/main, 'release/dev17.10' in dotnet/fsharp/refs/heads/release/dev17.10 and 'release/dev17.9' in dotnet/fsharp/refs/heads/release/dev17.9 - # Should **never** be 'main' in dotnet/fsharp/refs/heads/main, since it will start inserting to VS twice. - - name: FSharpReleaseBranchName - value: release/dev17.13 - ``` - 2. VS insertion branch - ```yaml - # VS Insertion branch name (NOT the same as F# branch) - # Should be previous release branch or 'main' in 'main' and 'main' in release branch - # (since for all *new* release branches we insert into VS main and for all *previous* releases we insert into corresponding VS release), - # i.e. 'rel/d17.9' *or* 'main' in dotnet/fsharp/refs/heads/main and 'main' in F# dotnet/fsharp/refs/heads/release/dev17.10 (latest release branch) - - name: VSInsertionTargetBranchName - value: main - ``` - > [!NOTE] Note - > For the **old** release branch `VSInsertionTargetBranchName` should point to corresponding VS release target branch (e.g. should be `rel/d17.13` in the F# repo branch `release/dev17.13`) - > For both `main` and **new** release branch `VSInsertionTargetBranchName` should be `main`. - > - > `FSharpReleaseBranchName` should **always** be the most recent in `main` and corresponding release branch name in release branches. - - 3. Oneloc branch: - ```yaml - # Localization: we only run it for specific release branches - - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/release/dev17.13') }}: - ``` -5. Set the new branch to receive auto-merges from `main`, and also set the old release branch to flow into the new one. [This PR](https://github.com/dotnet/roslyn-tools/pull/1245/files) is a good example of what to do when a new `release/dev17.4` branch is created that should receive merges from both `main` and the previous release branch, `release/dev17.3`. Old release branch should stop receiving updates from the `main`. - -6. Set the packages from the new branch to flow into the correct package feeds via the `darc` tool. To do this: - - 1. To use `darc` you need to be a member of the `dotnetes-maestro-users` entitlement. You can request access at [coreidentity.microsoft.com](https://coreidentity.microsoft.com/manage/Entitlement/entitlement/dotnetesmaes-z54r) - 2. Ensure the latest `darc` tool is installed by running `eng/common/darc-init.ps1`. - 3. (only needed once) Run the command `darc authenticate`. A text file will be opened with instructions on how to populate access tokens. - 4. Check the current package/channel subscriptions by running `darc get-default-channels --source-repo fsharp`. For this example, notice that the latest subscription shows the F# branch `release/dev17.3` is getting added to the `VS 17.3` channel. - 5. Get the list of `darc` channels and determine the appropriate one to use for the new branch via the command `darc get-channels`. For this example, notice that a channel named `VS 17.4` is listed. - 6. Add the new F# branch to the appropriate `darc` channel. In this example, run `darc add-default-channel --channel "VS 17.4" --branch release/dev17.4 --repo https://github.com/dotnet/fsharp` - 7. Ensure the subscription was added by repeating step 3 above. - 8. Note, the help in the `darc` tool is really good. E.g., you can simply run `darc` to see a list of all commands available, and if you run `darc ` with no arguments, you'll be given a list of arguments you can use. - 9. Ensure that version numbers are bumped for a new branch. - 10. Change needed subscriptions for arcade and SDK: - 1. `darc get-subscriptions --target-repo fsharp`, and then use `darc update-subscription --id ` for corresponding channels (e.g. target new VS channel to specific SDK channel, or set up arcade auto-merges to release/* or main branch, depending on the timeline of release/upgrade cycle). - 2. If new subscription needs to be added, the following command should be used `darc add-subscription --source-repo https://github.com/dotnet/arcade --target-repo https://github.com/dotnet/fsharp --target-branch --channel "" --update-frequency everyDay --standard-automerge - 11. Update mibc and other dependencies if needed, refer to https://github.com/dotnet/arcade/blob/main/Documentation/Darc.md#updating-dependencies-in-your-local-repository for more information - -## Labeling issues on GitHub - -Assign appropriate `Area-*` label to bugs, feature improvements and feature requests issues alike. List of `Area` labels with descriptions can be found [here](https://github.com/dotnet/fsharp/labels?q=Area). These areas are laid out to follow the logical organization of the code. - -To find all existing open issues without assigned `Area` label, use [this query](https://github.com/dotnet/fsharp/issues?q=is%3Aissue+is%3Aopen+-label%3AArea-AOT+-label%3AArea-Async+-label%3AArea-Build+-label%3AArea-Compiler+-label%3AArea-Compiler-Checking+-label%3AArea-Compiler-CodeGen+-label%3AArea-Compiler-HashCompare+-label%3AArea-Compiler-ImportAndInterop+-label%3AArea-Compiler-Optimization+-label%3AArea-Compiler-Options+-label%3AArea-Compiler-PatternMatching+-label%3AArea-Compiler-Service+-label%3AArea-Compiler-SigFileGen+-label%3AArea-Compiler-SRTP+-label%3AArea-Compiler-StateMachines+-label%3AArea-Compiler-Syntax+-label%3AArea-ComputationExpressions+-label%3AArea-Debug+-label%3AArea-DependencyManager+-label%3AArea-Diagnostics+-label%3AArea-FCS+-label%3AArea-FSC+-label%3AArea-FSI+-label%3AArea-Infrastructure+-label%3AArea-LangService-API+-label%3AArea-LangService-AutoComplete+-label%3AArea-LangService-BlockStructure+-label%3AArea-LangService-CodeLens+-label%3AArea-LangService-Colorization+-label%3AArea-LangService-Diagnostics+-label%3AArea-LangService-FindAllReferences+-label%3AArea-LangService-Navigation+-label%3AArea-LangService-QuickFixes+-label%3AArea-LangService-RenameSymbol+-label%3AArea-LangService-ToolTips+-label%3AArea-LangService-UnusedDeclarations+-label%3AArea-LangService-UnusedOpens+-label%3AArea-Library+-label%3AArea-ProjectsAndBuild+-label%3AArea-Queries+-label%3AArea-Quotations+-label%3AArea-SetupAndDelivery+-label%3AArea-Testing+-label%3AArea-TypeProviders+-label%3AArea-UoM+-label%3AArea-VS+-label%3AArea-VS-Editor+-label%3AArea-VS-FSI+-label%3AArea-XmlDocs) - -Since github issue filtering is currently not flexible enough, that query was generated by pasting output of this PowerShell command to the search box (might need to be rerun if new kinds of `Area` labels are added): -```ps1 -Invoke-WebRequest -Uri "https://api.github.com/repos/dotnet/fsharp/labels?per_page=100" | ConvertFrom-Json | % { $_.name } | ? { $_.StartsWith("Area-") } | % { Write-Host -NoNewLine ('-label:"' + $_ + '" ') } -``` - -## Fix problems with the internal source mirror - -The repo is [here](https://dev.azure.com/dnceng/internal/_git/dotnet-fsharp), the CI is [here](https://dnceng.visualstudio.com/internal/_build?definitionId=499). - -If something breaks in the CI there and you want to experiment, the general workflow is the following: -1. Make a branch -2. Make a change -3. Run the build from your branch. If needed, set the "skipTests" variable to "true" - can save time at this stage. -4. Once the problem and the fix is identified, make a PR to THIS (dotnet/fsharp) repo - it will propagate to the internal mirror just afterwards. -5. Delete all your work in the internal repo. - -**DO NOT** try to push to the internal repo - this will mess up the flows. **DO NOT** create PRs to not confuse anyone. - -You need the following permissions to do the above investigations: -- "Generic contribute" -- "Create branch" -- "Queue builds" -- "Edit queue build configuration" - -If anything, reach out to the "First Responders" team. +Moved [here](https://dev.azure.com/devdiv/DevDiv/_wiki/wikis/DevDiv.wiki/44702/FSharp) diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md index a67c88e5284..4029c80e146 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.200.md @@ -17,6 +17,7 @@ * Add missing nullable-metadata for C# consumers of records,exceptions and DU subtypes generated from F# code. [PR #18079](https://github.com/dotnet/fsharp/pull/18079) * Fix a race condition in file book keeping in the compiler service ([#18008](https://github.com/dotnet/fsharp/pull/18008)) * Fix trimming '%' characters when lowering interpolated string to a concat call [PR #18123](https://github.com/dotnet/fsharp/pull/18123) +* Shim/file system: fix leaks of the shim [PR #18144](https://github.com/dotnet/fsharp/pull/18144) ### Added @@ -27,6 +28,7 @@ * Added project property ParallelCompilation which turns on graph based type checking, parallel ILXGen and parallel optimization. By default on for users of langversion=preview ([PR #17948](https://github.com/dotnet/fsharp/pull/17948)) * Adding warning when consuming generic method returning T|null for types not supporting nullness (structs,anons,tuples) ([PR #18057](https://github.com/dotnet/fsharp/pull/18057)) * Sink: report SynPat.ArrayOrList type ([PR #18127](https://github.com/dotnet/fsharp/pull/18127)) +* Show the default value of compiler options ([PR #18054](https://github.com/dotnet/fsharp/pull/18054)) ### Changed diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 9d137104b9c..feaf768f4f2 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -362,14 +362,16 @@ function VerifyAssemblyVersionsAndSymbols() { } } -function TestUsingMSBuild([string] $testProject, [string] $targetFramework, [string]$testadapterpath, [boolean] $asBackgroundJob = $false) { +function TestUsingMSBuild([string] $testProject, [string] $targetFramework, [string]$testadapterpath, [boolean] $asBackgroundJob = $false, [string] $settings = "") { $dotnetPath = InitializeDotNetCli $dotnetExe = Join-Path $dotnetPath "dotnet.exe" $projectName = [System.IO.Path]::GetFileNameWithoutExtension($testProject) - $testLogPath = "$ArtifactsDir\TestResults\$configuration\${projectName}_$targetFramework.xml" + # {assembly} and {framework} will expand respectively. See https://github.com/spekt/testlogger/wiki/Logger-Configuration#logfilepath + # This is useful to deconflict log filenames when there are many test assemblies, e.g. when testing a whole solution. + $testLogPath = "$ArtifactsDir\TestResults\$configuration\{assembly}_{framework}.xml" $testBinLogPath = "$LogDir\${projectName}_$targetFramework.binlog" $args = "test $testProject -c $configuration -f $targetFramework -v n --test-adapter-path $testadapterpath --logger ""xunit;LogFilePath=$testLogPath"" /bl:$testBinLogPath" - $args += " --blame --results-directory $ArtifactsDir\TestResults\$configuration -p:vstestusemsbuildoutput=false" + $args += " --blame --blame-hang-timeout 5minutes --results-directory $ArtifactsDir\TestResults\$configuration -p:vstestusemsbuildoutput=true" if (-not $noVisualStudio -or $norestore) { $args += " --no-restore" @@ -379,17 +381,20 @@ function TestUsingMSBuild([string] $testProject, [string] $targetFramework, [str $args += " --no-build" } + $args += " $settings" + if ($asBackgroundJob) { + Write-Host Write-Host("Starting on the background: $args") Write-Host("------------------------------------") - $bgJob = Start-Job -ScriptBlock { - & $using:dotnetExe test $using:testProject -c $using:configuration -f $using:targetFramework -v n --test-adapter-path $using:testadapterpath --logger "xunit;LogFilePath=$using:testLogPath" /bl:$using:testBinLogPath --blame --results-directory $using:ArtifactsDir\TestResults\$using:configuration + Start-Job -ScriptBlock { + $argArray = $using:args -Split " " + & $using:dotnetExe $argArray if ($LASTEXITCODE -ne 0) { throw "Command failed to execute with exit code $($LASTEXITCODE): $using:dotnetExe $using:args" } } - return $bgJob - } else{ + } else { Write-Host("$args") Exec-Console $dotnetExe $args } @@ -595,21 +600,20 @@ try { $script:BuildCategory = "Test" $script:BuildMessage = "Failure running tests" - if ($testCoreClr) { - $bgJob = TestUsingMSBuild -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $script:coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharpSuite.Tests\" -asBackgroundJob $true - - TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj" -targetFramework $script:coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.ComponentTests\" - TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj" -targetFramework $script:coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Service.Tests\" - TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $script:coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Private.Scripting.UnitTests\" - TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $script:coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Build.UnitTests\" - TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $script:coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Core.UnitTests\" + function Receive($job) { + while($job.HasMoreData) { + Receive-Job $job | Write-Host + Start-Sleep -Seconds 1 + } + Receive-Job $job -Wait -ErrorAction Stop + } - # Collect output from background jobs - Wait-job $bgJob | out-null - Receive-Job $bgJob -ErrorAction Stop + if ($testCoreClr) { + $cpuLimit = if ($ci) { "-m:2 -- xUnit.MaxParallelThreads=0.25x" } else { "" } + TestUsingMSBuild -testProject "$RepoRoot\FSharp.sln" -targetFramework $script:coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.ComponentTests\" -settings $cpuLimit } - if ($testDesktop) { + if ($testDesktop -and $ci) { $bgJob = TestUsingMSBuild -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $script:desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharpSuite.Tests\" -asBackgroundJob $true TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj" -targetFramework $script:desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.ComponentTests\" @@ -618,9 +622,11 @@ try { TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $script:desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Build.UnitTests\" TestUsingMSBuild -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $script:desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Core.UnitTests\" - # Collect output from background jobs - Wait-job $bgJob | out-null - Receive-Job $bgJob -ErrorAction Stop + Receive -job $bgJob + } + + if ($testDesktop -and -not $ci ) { + TestUsingMSBuild -testProject "$RepoRoot\FSharp.sln" -targetFramework $script:desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.ComponentTests\" } if ($testFSharpQA) { diff --git a/eng/build.sh b/eng/build.sh index e6e27732c8f..43016b9b621 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -219,7 +219,8 @@ function Test() { projectname=$(basename -- "$testproject") projectname="${projectname%.*}" testlogpath="$artifacts_dir/TestResults/$configuration/${projectname}_$targetframework.xml" - args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"xunit;LogFilePath=$testlogpath\" --blame --results-directory $artifacts_dir/TestResults/$configuration -p:vstestusemsbuildoutput=false" + args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"xunit;LogFilePath=$testlogpath\" --blame-hang-timeout 5minutes --results-directory $artifacts_dir/TestResults/$configuration -p:vstestusemsbuildoutput=false" + args+=" -- xUnit.MaxParallelThreads=2" "$DOTNET_INSTALL_DIR/dotnet" $args || exit $? } diff --git a/src/Compiler/Driver/CompilerOptions.fs b/src/Compiler/Driver/CompilerOptions.fs index fa7319fd1c2..7c4c81efd40 100644 --- a/src/Compiler/Driver/CompilerOptions.fs +++ b/src/Compiler/Driver/CompilerOptions.fs @@ -712,6 +712,8 @@ let setSignatureFile tcConfigB s = let setAllSignatureFiles tcConfigB () = tcConfigB.printAllSignatureFiles <- true +let formatOptionSwitch (value: bool) = if value then "on" else "off" + // option tags let tagString = "" let tagExe = "exe" @@ -806,7 +808,7 @@ let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = GlobalWarnAsError = switch <> OptionSwitch.Off }), None, - Some(FSComp.SR.optsWarnaserrorPM ()) + Some(FSComp.SR.optsWarnaserrorPM (formatOptionSwitch tcConfigB.diagnosticsOptions.GlobalWarnAsError)) ) CompilerOption( @@ -870,7 +872,7 @@ let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = tagNone, OptionSwitch(fun switch -> tcConfigB.checkNullness <- switch = OptionSwitch.On), None, - Some(FSComp.SR.optsCheckNulls ()) + Some(FSComp.SR.optsCheckNulls (formatOptionSwitch tcConfigB.checkNullness)) ) CompilerOption( @@ -878,7 +880,7 @@ let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = tagNone, OptionSwitch(fun switch -> enableConsoleColoring <- switch = OptionSwitch.On), None, - Some(FSComp.SR.optsConsoleColors ()) + Some(FSComp.SR.optsConsoleColors (formatOptionSwitch enableConsoleColoring)) ) ] @@ -904,7 +906,7 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = tagNone, OptionSwitch(fun s -> tcConfigB.delaysign <- (s = OptionSwitch.On)), None, - Some(FSComp.SR.optsDelaySign ()) + Some(FSComp.SR.optsDelaySign (formatOptionSwitch tcConfigB.delaysign)) ) CompilerOption( @@ -912,7 +914,7 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = tagNone, OptionSwitch(fun s -> tcConfigB.publicsign <- (s = OptionSwitch.On)), None, - Some(FSComp.SR.optsPublicSign ()) + Some(FSComp.SR.optsPublicSign (formatOptionSwitch tcConfigB.publicsign)) ) CompilerOption("doc", tagFile, OptionString(fun s -> tcConfigB.xmlDocOutputFile <- Some s), None, Some(FSComp.SR.optsWriteXml ())) @@ -944,7 +946,7 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = tagNone, OptionSwitch(fun switch -> tcConfigB.compressMetadata <- switch = OptionSwitch.On), None, - Some(FSComp.SR.optsCompressMetadata ()) + Some(FSComp.SR.optsCompressMetadata (formatOptionSwitch tcConfigB.compressMetadata)) ) CompilerOption( @@ -975,7 +977,13 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = Some(FSComp.SR.optsNoCopyFsharpCore ()) ) - CompilerOption("refonly", tagNone, OptionSwitch(SetReferenceAssemblyOnlySwitch tcConfigB), None, Some(FSComp.SR.optsRefOnly ())) + CompilerOption( + "refonly", + tagNone, + OptionSwitch(SetReferenceAssemblyOnlySwitch tcConfigB), + None, + Some(FSComp.SR.optsRefOnly (formatOptionSwitch (tcConfigB.emitMetadataAssembly <> MetadataAssemblyGeneration.None))) + ) CompilerOption("refout", tagFile, OptionString(SetReferenceAssemblyOutSwitch tcConfigB), None, Some(FSComp.SR.optsRefOut ())) ] @@ -1023,7 +1031,13 @@ let resourcesFlagsFsc (tcConfigB: TcConfigBuilder) = let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = let debug = [ - CompilerOption("debug", tagNone, OptionSwitch(SetDebugSwitch tcConfigB None), None, Some(FSComp.SR.optsDebugPM ())) + CompilerOption( + "debug", + tagNone, + OptionSwitch(SetDebugSwitch tcConfigB None), + None, + Some(FSComp.SR.optsDebugPM (formatOptionSwitch tcConfigB.debuginfo)) + ) CompilerOption( "debug", @@ -1036,7 +1050,13 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = let embed = [ - CompilerOption("embed", tagNone, OptionSwitch(SetEmbedAllSourceSwitch tcConfigB), None, Some(FSComp.SR.optsEmbedAllSource ())) + CompilerOption( + "embed", + tagNone, + OptionSwitch(SetEmbedAllSourceSwitch tcConfigB), + None, + Some(FSComp.SR.optsEmbedAllSource (formatOptionSwitch tcConfigB.embedAllSource)) + ) CompilerOption("embed", tagFileList, OptionStringList tcConfigB.AddEmbeddedSourceFile, None, Some(FSComp.SR.optsEmbedSource ())) @@ -1045,19 +1065,37 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = let codegen = [ - CompilerOption("optimize", tagNone, OptionSwitch(SetOptimizeSwitch tcConfigB), None, Some(FSComp.SR.optsOptimize ())) + CompilerOption( + "optimize", + tagNone, + OptionSwitch(SetOptimizeSwitch tcConfigB), + None, + Some(FSComp.SR.optsOptimize (formatOptionSwitch (tcConfigB.optSettings <> OptimizationSettings.Defaults))) + ) - CompilerOption("tailcalls", tagNone, OptionSwitch(SetTailcallSwitch tcConfigB), None, Some(FSComp.SR.optsTailcalls ())) + CompilerOption( + "tailcalls", + tagNone, + OptionSwitch(SetTailcallSwitch tcConfigB), + None, + Some(FSComp.SR.optsTailcalls (formatOptionSwitch tcConfigB.emitTailcalls)) + ) CompilerOption( "deterministic", tagNone, OptionSwitch(SetDeterministicSwitch tcConfigB), None, - Some(FSComp.SR.optsDeterministic ()) + Some(FSComp.SR.optsDeterministic (formatOptionSwitch tcConfigB.deterministic)) ) - CompilerOption("realsig", tagNone, OptionSwitch(SetRealsig tcConfigB), None, Some(FSComp.SR.optsRealsig ())) + CompilerOption( + "realsig", + tagNone, + OptionSwitch(SetRealsig tcConfigB), + None, + Some(FSComp.SR.optsRealsig (formatOptionSwitch tcConfigB.realsig)) + ) CompilerOption("pathmap", tagPathMap, OptionStringList(AddPathMapping tcConfigB), None, Some(FSComp.SR.optsPathMap ())) @@ -1066,7 +1104,11 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = tagNone, OptionSwitch(crossOptimizeSwitch tcConfigB), None, - Some(FSComp.SR.optsCrossoptimize ()) + Some( + FSComp.SR.optsCrossoptimize ( + formatOptionSwitch (Option.defaultValue false tcConfigB.optSettings.crossAssemblyOptimizationUser) + ) + ) ) CompilerOption( @@ -1144,7 +1186,7 @@ let languageFlags tcConfigB = tagNone, OptionSwitch(fun switch -> tcConfigB.checkOverflow <- (switch = OptionSwitch.On)), None, - Some(FSComp.SR.optsChecked ()) + Some(FSComp.SR.optsChecked (formatOptionSwitch tcConfigB.checkOverflow)) ) CompilerOption("define", tagString, OptionString(defineSymbol tcConfigB), None, Some(FSComp.SR.optsDefine ())) @@ -1156,7 +1198,7 @@ let languageFlags tcConfigB = tagNone, OptionSwitch(fun switch -> tcConfigB.strictIndentation <- Some(switch = OptionSwitch.On)), None, - Some(FSComp.SR.optsStrictIndentation ()) + Some(FSComp.SR.optsStrictIndentation (formatOptionSwitch (Option.defaultValue false tcConfigB.strictIndentation))) ) ] @@ -1328,7 +1370,7 @@ let advancedFlagsFsc tcConfigB = tagNone, OptionSwitch(useHighEntropyVASwitch tcConfigB), None, - Some(FSComp.SR.optsUseHighEntropyVA ()) + Some(FSComp.SR.optsUseHighEntropyVA (formatOptionSwitch tcConfigB.useHighEntropyVA)) ) CompilerOption( @@ -1344,7 +1386,7 @@ let advancedFlagsFsc tcConfigB = tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = OptionSwitch.On), None, - Some(FSComp.SR.optsEmitDebugInfoInQuotations ()) + Some(FSComp.SR.optsEmitDebugInfoInQuotations (formatOptionSwitch tcConfigB.emitDebugInfoInQuotations)) ) ] diff --git a/src/Compiler/Driver/CompilerOptions.fsi b/src/Compiler/Driver/CompilerOptions.fsi index bb2034b93d5..7baefaa5aa1 100644 --- a/src/Compiler/Driver/CompilerOptions.fsi +++ b/src/Compiler/Driver/CompilerOptions.fsi @@ -87,6 +87,8 @@ val ignoreFailureOnMono1_1_16: (unit -> unit) -> unit val mutable enableConsoleColoring: bool +val formatOptionSwitch: bool -> string + val DoWithColor: ConsoleColor -> (unit -> 'T) -> 'T val DoWithDiagnosticColor: FSharpDiagnosticSeverity -> (unit -> 'T) -> 'T diff --git a/src/Compiler/Driver/fsc.fs b/src/Compiler/Driver/fsc.fs index 1d17950a9ac..696761f43da 100644 --- a/src/Compiler/Driver/fsc.fs +++ b/src/Compiler/Driver/fsc.fs @@ -1129,7 +1129,10 @@ let main6 DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok let pdbfile = - pdbfile |> Option.map (tcConfig.MakePathAbsolute >> FileSystem.GetFullPathShim) + pdbfile + |> Option.map (fun s -> + let absolutePath = tcConfig.MakePathAbsolute s + FileSystem.GetFullPathShim(absolutePath)) let normalizeAssemblyRefs (aref: ILAssemblyRef) = match tcImports.TryFindDllInfo(ctok, rangeStartup, aref.Name, lookupOnly = false) with diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index f5522147e8c..c0f9a8a4f1a 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -850,12 +850,12 @@ optsBuildConsole,"Build a console executable" optsBuildWindows,"Build a Windows executable" optsBuildLibrary,"Build a library (Short form: -a)" optsBuildModule,"Build a module that can be added to another assembly" -optsDelaySign,"Delay-sign the assembly using only the public portion of the strong name key" -optsPublicSign,"Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed" +optsDelaySign,"Delay-sign the assembly using only the public portion of the strong name key (%s by default)" +optsPublicSign,"Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed (%s by default)" optsWriteXml,"Write the xmldoc of the assembly to the given file" optsStrongKeyFile,"Specify a strong name key file" optsStrongKeyContainer,"Specify a strong name key container" -optsCompressMetadata,"Compress interface and optimization data files" +optsCompressMetadata,"Compress interface and optimization data files (%s by default)" optsPlatform,"Limit which platforms this code can run on: x86, x64, Arm, Arm64, Itanium, anycpu32bitpreferred, or anycpu. The default is anycpu." optsNoOpt,"Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility." optsNoInterface,"Don't add a resource to the generated assembly containing F#-specific metadata" @@ -867,30 +867,30 @@ optsWin32icon,"Specify a Win32 icon file (.ico)" optsWin32res,"Specify a Win32 resource file (.res)" optsWin32manifest,"Specify a Win32 manifest file" optsNowin32manifest,"Do not include the default Win32 manifest" -optsEmbedAllSource,"Embed all source files in the portable PDB file" +optsEmbedAllSource,"Embed all source files in the portable PDB file (%s by default)" optsEmbedSource,"Embed specific source files in the portable PDB file" optsSourceLink,"Source link information file to embed in the portable PDB file" 1001,optsPdbMatchesOutputFileName,"The pdb output file name cannot match the build output filename use --pdb:filename.pdb" srcFileTooLarge,"Source file is too large to embed in a portable PDB" optsResource,"Embed the specified managed resource" optsLinkresource,"Link the specified resource to this assembly where the resinfo format is [,[,public|private]]" -optsDebugPM,"Emit debug information (Short form: -g)" +optsDebugPM,"Emit debug information (Short form: -g) (%s by default)" optsDebug,"Specify debugging type: full, portable, embedded, pdbonly. ('%s' is the default if no debugging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file)." -optsOptimize,"Enable optimizations (Short form: -O)" -optsTailcalls,"Enable or disable tailcalls" -optsDeterministic,"Produce a deterministic assembly (including module version GUID and timestamp)" -optsRealsig,"Generate assembly with IL visibility that matches the source code visibility" -optsRefOnly,"Produce a reference assembly, instead of a full assembly, as the primary output" +optsOptimize,"Enable optimizations (Short form: -O) (%s by default)" +optsTailcalls,"Enable or disable tailcalls (%s by default)" +optsDeterministic,"Produce a deterministic assembly (including module version GUID and timestamp) (%s by default)" +optsRealsig,"Generate assembly with IL visibility that matches the source code visibility (%s by default)" +optsRefOnly,"Produce a reference assembly, instead of a full assembly, as the primary output (%s by default)" optsRefOut,"Produce a reference assembly with the specified file path." optsPathMap,"Maps physical paths to source path names output by the compiler" -optsCrossoptimize,"Enable or disable cross-module optimizations" +optsCrossoptimize,"Enable or disable cross-module optimizations (%s by default)" optsReflectionFree,"Disable implicit generation of constructs using reflection" -optsWarnaserrorPM,"Report all warnings as errors" +optsWarnaserrorPM,"Report all warnings as errors (%s by default)" optsWarnaserror,"Report specific warnings as errors" optsWarn,"Set a warning level (0-5)" optsNowarn,"Disable specific warning messages" optsWarnOn,"Enable specific warnings that may be off by default" -optsChecked,"Generate overflow checks" +optsChecked,"Generate overflow checks (%s by default)" optsDefine,"Define conditional compilation symbols (Short form: -d)" optsMlcompatibility,"Ignore ML compatibility warnings" optsNologo,"Suppress compiler copyright message" @@ -925,11 +925,11 @@ optsInternalNoDescription,"The command-line option '%s' is for test purposes onl optsDCLONoDescription,"The command-line option '%s' has been deprecated" optsDCLODeprecatedSuggestAlternative,"The command-line option '%s' has been deprecated. Use '%s' instead." optsDCLOHtmlDoc,"The command-line option '%s' has been deprecated. HTML document generation is now part of the F# Power Pack, via the tool FsHtmlDoc.exe." -optsConsoleColors,"Output warning and error messages in color" -optsUseHighEntropyVA,"Enable high-entropy ASLR" +optsConsoleColors,"Output warning and error messages in color (%s by default)" +optsUseHighEntropyVA,"Enable high-entropy ASLR (%s by default)" optsSubSystemVersion,"Specify subsystem version of this assembly" optsTargetProfile,"Specify target framework profile of this assembly. Valid values are mscorlib, netcore or netstandard. Default - mscorlib" -optsEmitDebugInfoInQuotations,"Emit debug information in quotations" +optsEmitDebugInfoInQuotations,"Emit debug information in quotations (%s by default)" optsPreferredUiLang,"Specify the preferred output language culture name (e.g. es-ES, ja-JP)" optsNoCopyFsharpCore,"Don't copy FSharp.Core.dll along the produced binaries" optsSignatureData,"Include F# interface information, the default is file. Essential for distributing libraries." @@ -1557,12 +1557,12 @@ csTypeHasNullAsExtraValue,"The type '%s' supports 'null' but a non-null type is 3352,typrelInterfaceMemberNoMostSpecificImplementation,"Interface member '%s' does not have a most specific implementation." 3353,fsiInvalidDirective,"Invalid directive '#%s %s'" useSdkRefs,"Use reference assemblies for .NET framework references when available (Enabled by default)." -optsCheckNulls,"Enable nullness declarations and checks" +optsCheckNulls,"Enable nullness declarations and checks (%s by default)" fSharpBannerVersion,"%s for F# %s" optsGetLangVersions,"Display the allowed values for language version." optsSetLangVersion,"Specify language version such as 'latest' or 'preview'." optsSupportedLangVersions,"Supported language versions:" -optsStrictIndentation,"Override indentation rules implied by the language version" +optsStrictIndentation,"Override indentation rules implied by the language version (%s by default)" nativeResourceFormatError,"Stream does not begin with a null resource and is not in '.RES' format." nativeResourceHeaderMalformed,"Resource header beginning at offset %s is malformed." formatDashItem," - %s" diff --git a/src/Compiler/Interactive/FSIstrings.txt b/src/Compiler/Interactive/FSIstrings.txt index 2340214f8d5..a40f6fffaab 100644 --- a/src/Compiler/Interactive/FSIstrings.txt +++ b/src/Compiler/Interactive/FSIstrings.txt @@ -13,10 +13,10 @@ fsiLoad,"#load the given file on startup" fsiRemaining,"Treat remaining arguments as command line arguments, accessed using fsi.CommandLineArgs" fsiHelp,"Display this usage message (Short form: -?)" fsiExec,"Exit fsi after loading the files or running the .fsx script given on the command line" -fsiGui,"Execute interactions on a Windows Forms event loop (on by default)" +fsiGui,"Execute interactions on a Windows Forms event loop (%s by default)" fsiQuiet,"Suppress fsi writing to stdout" -fsiReadline,"Support TAB completion in console (on by default)" -fsiEmitDebugInfoInQuotations,"Emit debug information in quotations" +fsiReadline,"Support TAB completion in console (%s by default)" +fsiEmitDebugInfoInQuotations,"Emit debug information in quotations (%s by default)" fsiBanner3,"For help type #help;;" fsiConsoleProblem,"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'." 2301,fsiInvalidAssembly,"'%s' is not a valid assembly name" @@ -53,9 +53,9 @@ fsiFailedToResolveAssembly,"Failed to resolve assembly '%s'" fsiBindingSessionTo,"Binding session to '%s'..." fsiProductName,"Microsoft (R) F# Interactive version %s" fsiProductNameCommunity,"F# Interactive for F# %s" -shadowCopyReferences,"Prevents references from being locked by the F# Interactive process" +shadowCopyReferences,"Prevents references from being locked by the F# Interactive process (%s by default)" fsiOperationCouldNotBeCompleted,"Operation could not be completed due to earlier error" fsiOperationFailed,"Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" -fsiMultiAssemblyEmitOption,"Emit multiple assemblies (on by default)" +fsiMultiAssemblyEmitOption,"Emit multiple assemblies (%s by default)" 2304,fsiEntryPointWontBeInvoked,"Functions with [] are not invoked in FSI. '%s' was not invoked. Execute '%s ' in order to invoke '%s' with the appropriate string array of command line arguments." fsiDetailedHelpLink,"See https://learn.microsoft.com/dotnet/fsharp/language-reference/fsharp-interactive-options for more details." \ No newline at end of file diff --git a/src/Compiler/Interactive/fsi.fs b/src/Compiler/Interactive/fsi.fs index 08bbb9f98ab..7c634ca81d6 100644 --- a/src/Compiler/Interactive/fsi.fs +++ b/src/Compiler/Interactive/fsi.fs @@ -1135,7 +1135,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, argv: s tagNone, OptionSwitch(fun flag -> gui <- (flag = OptionSwitch.On)), None, - Some(FSIstrings.SR.fsiGui ()) + Some(FSIstrings.SR.fsiGui (formatOptionSwitch gui)) ) CompilerOption("quiet", "", OptionUnit(fun () -> tcConfigB.noFeedback <- true), None, Some(FSIstrings.SR.fsiQuiet ())) CompilerOption( @@ -1143,28 +1143,28 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, argv: s tagNone, OptionSwitch(fun flag -> enableConsoleKeyProcessing <- (flag = OptionSwitch.On)), None, - Some(FSIstrings.SR.fsiReadline ()) + Some(FSIstrings.SR.fsiReadline (formatOptionSwitch enableConsoleKeyProcessing)) ) CompilerOption( "quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = OptionSwitch.On), None, - Some(FSIstrings.SR.fsiEmitDebugInfoInQuotations ()) + Some(FSIstrings.SR.fsiEmitDebugInfoInQuotations (formatOptionSwitch tcConfigB.emitDebugInfoInQuotations)) ) CompilerOption( "shadowcopyreferences", tagNone, OptionSwitch(fun flag -> tcConfigB.shadowCopyReferences <- flag = OptionSwitch.On), None, - Some(FSIstrings.SR.shadowCopyReferences ()) + Some(FSIstrings.SR.shadowCopyReferences (formatOptionSwitch tcConfigB.shadowCopyReferences)) ) CompilerOption( "multiemit", tagNone, OptionSwitch(fun flag -> tcConfigB.fsiMultiAssemblyEmit <- flag = OptionSwitch.On), None, - Some(FSIstrings.SR.fsiMultiAssemblyEmitOption ()) + Some(FSIstrings.SR.fsiMultiAssemblyEmitOption (formatOptionSwitch tcConfigB.fsiMultiAssemblyEmit)) ) ] ) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf index f34d1d6f7de..afcff9f805d 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Vygenerovat více sestavení (ve výchozím nastavení zapnuto) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Provést interakce u smyčky událostí modelu Windows Forms (ve výchozím nastavení zapnuté) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Podpora dokončování pomocí tabulátorů v konzole (ve výchozím nastavení zapnuté) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Generovat ladicí informace v uvozovkách + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Znemožňuje zamknutí referencí procesem F# Interactive. + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf index 8a295c31994..3eb197a047d 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Ausgeben mehrerer Assemblys (standardmäßig aktiviert) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Interaktionen in einer Windows Forms-Ereignisschleife ausführen (standardmäßig aktiviert) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Vervollständigung mit der TAB-TASTE in der Konsole unterstützen (standardmäßig aktiviert) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Debugginginformationen in Anführungszeichen ausgeben + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Verhindert, dass Verweise vom F# Interactive-Prozess gesperrt werden. + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf index 23932efb4a6..0ad15542bb1 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Emitir varios ensamblados (activado de forma predeterminada) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Ejecutar interacciones en un bucle de evento de Windows Forms (activado de forma predeterminada) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Admitir finalización con TAB en la consola (activada de forma predeterminada) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Emitir información de depuración en expresiones de código delimitadas + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Impide que el proceso de F# interactivo bloquee las referencias + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf index 1e2032619de..270a902e005 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Émettre plusieurs assemblées (activés par défaut) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Exécute des interactions dans une boucle d'événements Windows Forms (activé par default) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Prend en charge la saisie semi-automatique via la touche Tab dans la console (activée par défaut) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Émettre les informations de débogage entre quotations + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Empêche le blocage des références par le processus de F# Interactive + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf index 80dc7d6509a..c4f58ffb2e4 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Creare più assembly (attivato per impostazione predefinita) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Esegue interazioni in un ciclo di eventi di Windows Forms (abilitata per impostazione predefinita) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Supporta completamento con tasto TAB in console (abilitata per impostazione predefinita) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Crea informazioni di debug in quotation + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Impedisce che i riferimenti vengano bloccati dal processo F# Interactive + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf index aab77e35fb2..2fa2f345369 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - 複数のアセンブリを出力する (既定ではオン) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Windows フォーム イベント ループでの対話の実行 (既定でオン) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - コンソールでの TAB 補完のサポート (既定でオン) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - デバッグ情報を引用符で囲んで生成します + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - 参照が F# インタラクティブ プロセスによってロックされないようにします。 + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf index fc80e805ced..1bc10708ee6 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - 여러 어셈블리 내보내기(기본적으로 켜져 있음) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Windows Forms 이벤트 루프에서 상호 작용을 실행합니다(기본값: 설정). + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - 콘솔에서 Tab 키 완성 기능을 지원합니다(기본값: 설정). + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - 인용구의 디버그 정보를 내보냅니다. + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - 참조가 F# 대화형 프로세스에 의해 잠기지 않도록 합니다. + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf index 57d8b491f45..63e8a54937d 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Emituj wiele zestawów (domyślnie włączone) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Wykonaj interakcje w pętli zdarzenia Windows Forms (domyślnie włączone) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Obsługa uzupełniania po naciśnięciu klawisza TAB w konsoli (domyślnie włączona) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Emituj informacje debugowania w cudzysłowach + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Uniemożliwia blokowanie odwołań przez proces narzędzia F# Interactive + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf index c9869893e0d..29b3d014cbd 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Emitir várias montagens (ativadas por padrão) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Execute interações em um loop de eventos do Windows Forms (por padrão) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Suportar a conclusão TAB no console (por padrão) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Emitir informações de depuração entre aspas + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Impede que as referências sejam bloqueadas pelo processo de F# interativo + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf index ca55edd31df..a00fdf36c9e 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Выпуск нескольких сборок (включено по умолчанию) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Выполнение взаимодействий при зацикливании события Windows Forms (включено по умолчанию) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Поддержка заполнения нажатием клавиши TAB в консоли (включено по умолчанию) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Вывод отладочной информации в кавычках + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Предотвращает блокировку ссылок интерактивным процессом F#. + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf index cbab7d0b0ae..15a485e8909 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - Birden çok bütünleştirilmiş kod göster (varsayılan olarak açık) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - Etkileşimleri Windows Forms olay döngüsünde yürüt (varsayılan seçenek olarak açık) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - Konsolda SEKME ile tamamlamayı destekle (varsayılan seçenek olarak açık) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - Tırnak içindeki hata ayıklama bilgilerini yay + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - Başvuruların F# Etkileşimli işlemi tarafından kilitlenmesini engeller + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf index 1da5881d776..a8342a21e03 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - 发出多个程序集(默认打开) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - 在 Windows 窗体事件循环中执行交互(默认情况下启用) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - 支持控制台中的 Tab 完成操作(默认情况下启用) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - 发出用引号引起来的调试信息 + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - 防止引用被 F# 交互窗口进程锁定 + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf index bec99354ad2..9df8f03da70 100644 --- a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf +++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf @@ -38,8 +38,8 @@ - Emit multiple assemblies (on by default) - 發出多組件 (預設為開啟) + Emit multiple assemblies ({0} by default) + Emit multiple assemblies ({0} by default) @@ -113,8 +113,8 @@ - Execute interactions on a Windows Forms event loop (on by default) - 在 Windows Forms 事件迴圈上執行互動 (預設為開啟) + Execute interactions on a Windows Forms event loop ({0} by default) + Execute interactions on a Windows Forms event loop ({0} by default) @@ -123,13 +123,13 @@ - Support TAB completion in console (on by default) - 支援主控台中的 TAB 鍵自動完成 (預設為開啟) + Support TAB completion in console ({0} by default) + Support TAB completion in console ({0} by default) - Emit debug information in quotations - 發出在引號內的偵錯資訊 + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) @@ -298,8 +298,8 @@ - Prevents references from being locked by the F# Interactive process - 避免參考遭 F# 互動處理序封鎖 + Prevents references from being locked by the F# Interactive process ({0} by default) + Prevents references from being locked by the F# Interactive process ({0} by default) diff --git a/src/Compiler/TypedTree/TcGlobals.fs b/src/Compiler/TypedTree/TcGlobals.fs index 0bf99b86572..4f4a45c735e 100644 --- a/src/Compiler/TypedTree/TcGlobals.fs +++ b/src/Compiler/TypedTree/TcGlobals.fs @@ -680,8 +680,14 @@ type TcGlobals( let mkSourceDoc fileName = ILSourceDocument.Create(language=None, vendor=None, documentType=None, file=fileName) + let compute i = + let path = fileOfFileIndex i + let fullPath = FileSystem.GetFullFilePathInDirectoryShim directoryToResolveRelativePaths path + mkSourceDoc fullPath + // Build the memoization table for files - let v_memoize_file = MemoizationTable((fileOfFileIndex >> FileSystem.GetFullFilePathInDirectoryShim directoryToResolveRelativePaths >> mkSourceDoc), keyComparer=HashIdentity.Structural) + let v_memoize_file = + MemoizationTable(compute, keyComparer = HashIdentity.Structural) let v_and_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&" , None , None , [], mk_rel_sig v_bool_ty) let v_addrof_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "~&" , None , None , [vara], ([[varaTy]], mkByrefTy varaTy)) diff --git a/src/Compiler/Utilities/range.fs b/src/Compiler/Utilities/range.fs index 09633136dbe..f9940461a32 100755 --- a/src/Compiler/Utilities/range.fs +++ b/src/Compiler/Utilities/range.fs @@ -196,31 +196,29 @@ type FileIndexTable() = match fileToIndexTable.TryGetValue filePath with | true, idx -> idx | _ -> - // If a write operation can happen, we have to lock the whole read-check-write to avoid race conditions - lock fileToIndexTable - <| fun () -> - match fileToIndexTable.TryGetValue filePath with - | true, idx -> idx - | _ -> - - // Try again looking for a normalized entry. - let normalizedFilePath = - if normalize then - FileSystem.NormalizePathShim filePath - else - filePath + // Try again looking for a normalized entry. + let normalizedFilePath = + if normalize then + FileSystem.NormalizePathShim filePath + else + filePath - match fileToIndexTable.TryGetValue normalizedFilePath with - | true, idx -> - // Record the non-normalized entry if necessary - if filePath <> normalizedFilePath then - fileToIndexTable[filePath] <- idx + match fileToIndexTable.TryGetValue normalizedFilePath with + | true, idx -> + // Record the non-normalized entry if necessary + if filePath <> normalizedFilePath then + fileToIndexTable[filePath] <- idx - // Return the index - idx + // Return the index + idx + | _ -> + lock indexToFileTable (fun () -> + // See if it was added on another thread + match fileToIndexTable.TryGetValue normalizedFilePath with + | true, idx -> idx | _ -> - // Get the new index + // Okay it's really not there let idx = indexToFileTable.Count // Record the normalized entry @@ -232,7 +230,7 @@ type FileIndexTable() = fileToIndexTable[filePath] <- idx // Return the index - idx + idx) member t.IndexToFile n = if n < 0 then diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index 1531db70738..044a9c461f4 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Komprimovat datové soubory rozhraní a optimalizace + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Vygenerovat sestavení s viditelností IL, které odpovídá viditelnosti zdrojového kódu + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Vytvoří referenční sestavení místo úplného sestavení jako primární výstup. + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Přepsat pravidla odsazení implikovaná verzí jazyka + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Vytvoří zpožděný podpis sestavení jenom s využitím veřejné části klíče silného názvu. + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Vytvoří veřejný podpis sestavení jenom s využitím veřejné části klíče silného názvu a označí sestavení jako podepsané. + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Vložit všechny zdrojové soubory do souboru PDB typu Portable + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Generuje ladicí informace (krátký tvar: -g). + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Povolit optimalizace (krátký tvar: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Zapnout nebo vypnout volání funkce Tail + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Vytvoří deterministické sestavení (včetně GUID verze modulu a časového razítka). + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Povoluje nebo zakazuje optimalizaci mezi moduly. + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Oznamovat všechna upozornění jako chyby + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Generovat kontroly přetečení + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Barevně rozlišená upozornění výstupu a chybové zprávy + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Povolit technologii ASLR s vysokou entropií + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Generovat ladicí informace v uvozovkách + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 232b9023663..b8e33044bc8 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Komprimieren von Schnittstellen- und Optimierungsdatendateien + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Assembly mit IL-Sichtbarkeit generieren, die der Quellcodesichtbarkeit entspricht + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Erstellen einer Referenzassembly anstelle einer vollständigen Assembly als primäre Ausgabe + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Von der Sprachversion implizierte Einzugsregeln überschreiben + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Assembly nur mit dem öffentlichen Teil des Schlüssels für einen starken Namen verzögert signieren + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Assembly mithilfe nur des öffentlichen Teils des Schlüssels für einen starken Namen öffentlich signieren und als signiert markieren + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Alle Quelldateien in der portierbaren PDB-Datei einbetten + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Debuginformationen ausgeben (Kurzform: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Optimierungen aktivieren (Kurzform: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Endeaufrufe aktivieren oder deaktivieren + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Deterministische Assembly erstellen (einschließlich Modulversions-GUID und Zeitstempel) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Modulübergreifende Optimierungen aktivieren oder deaktivieren + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Alle Warnungen als Fehler melden + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Überlaufprüfungen generieren + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Warnungen und Fehlermeldungen farbig ausgeben + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - ASLR mit hoher Entropie aktivieren + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Debugginginformationen in Anführungszeichen ausgeben + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index e36ffcc1a4d..cbb8274fd80 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Comprimir archivos de datos de interfaz y optimización + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Generación de un ensamblado con visibilidad IL que coincida con la visibilidad del código fuente + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Generar un ensamblado de referencia, en lugar de un ensamblado completo, como salida principal + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Invalidar reglas de sangría implícitas por la versión del lenguaje + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Retrasar la signatura del ensamblado usando solo la parte pública de la clave de nombre seguro + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Firmar el ensamblado usando solo la parte pública de la clave de nombre seguro y marcarlo como firmado + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Inserta todos los archivos de código fuente en el archivo PDB portable. + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Emitir información de depuración (forma corta: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Habilitar optimizaciones (forma corta: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Habilitar o deshabilitar llamadas de cola + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Generar un ensamblado determinista (con el GUID y la marca de tiempo de la versión del módulo) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Habilitar o deshabilitar optimizaciones entre módulos + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Notificar todas las advertencias como errores + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Generar comprobaciones de desbordamiento + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Advertencia de salida y mensajes de error en color + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Habilitar ASLR de alta entropía + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Emitir información de depuración en expresiones de código delimitadas + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index 25e8fc5614e..7424a9be7be 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Compresser les fichiers de données d’interface et d’optimisation + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Générer un assembly avec une visibilité IL qui correspond à la visibilité du code source + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Produire un assembly de référence, au lieu d’un assembly complet, en tant que sortie principale + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Remplacer les règles d'indentation impliquées par la version linguistique + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Différer la signature de l'assembly en utilisant uniquement la partie publique de la clé de nom fort + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Signer publiquement l'assembly en utilisant uniquement la partie publique de la clé de nom fort, et marquer l'assembly comme signé + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Incorporer tous les fichiers sources dans le fichier PDB portable + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Émettre les informations de débogage (forme abrégée : -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Activer les optimisations (forme abrégée : -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Activer ou désactiver les appels tail + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Produire un assembly déterministe (en incluant le GUID et l'horodateur de la version du module) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Activer ou désactiver les optimisations entre modules + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Signaler tous les avertissements comme des erreurs + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Générer des contrôles de dépassement de capacité + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Générer les messages d'avertissement et d'erreur en couleur + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Activer la randomisation du format d'espace d'adresse d'entropie élevée + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Émettre les informations de débogage entre quotations + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index c439eed4de1..78e635516fe 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - File di dati di compressione dell’interfaccia e ottimizzazione + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Genera l'assembly con visibilità IL corrispondente alla visibilità del codice sorgente + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Produce un assembly di riferimento, anziché un assembly completo, come output primario + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Ignora le regole di rientro implicite nella versione del linguaggio + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Ritarda la firma dell'assembly utilizzando solo la parte pubblica della chiave con nome sicuro + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Firma pubblicamente l'assembly usando solo la parte pubblica della chiave con nome sicuro e contrassegna l'assembly come firmato + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Incorpora tutti i file di origine nel file PDB portabile + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Crea informazioni di debug (forma breve: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Abilita le ottimizzazioni (forma breve: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Abilita o disabilita le chiamate tail + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Produce un assembly (che include GUID e timestamp della versione del modulo) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Abilita o disabilita le ottimizzazioni tra i moduli + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Segnala tutti gli avvisi come errori + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Genera controlli dell'overflow + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Visualizzare messaggi di errore e di avviso a colori + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Abilita ASLR a entropia elevata + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Crea informazioni di debug in quotation + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index 06487230d19..47e87ffde18 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - インターフェイスと最適化データ ファイルを圧縮する + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - ソース コードの可視性と一致する IL 可視性を持つアセンブリを生成します + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - 完全なアセンブリではなく、参照アセンブリをプライマリ出力として生成します + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - 言語バージョンによって暗黙的に指定されたインデント規則をオーバーライドする + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - 厳密名キーのパブリックな部分のみを使ってアセンブリを遅延署名します + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - 厳密な名前のキーの公開部分のみを使ってアセンブリを公開署名し、アセンブリを署名済みとしてマークします + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - 移植可能な PDB ファイル内にすべてのソース ファイルを埋め込む + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - デバッグ情報を生成します (短い形式: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - 最適化を有効にします (短い形式: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - tail の呼び出しを有効または無効にします + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - 決定論的アセンブリを作成します (モジュール バージョン GUID やタイムスタンプなど) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - モジュール間の最適化を有効または無効にします + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - すべての警告をエラーとして報告する + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - オーバーフロー チェックの生成 + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - 警告メッセージとエラー メッセージを色つきで表示します + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - 高エントロピ ASLR の有効化 + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - デバッグ情報を引用符で囲んで生成します + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index 2fe10e6fae1..c30cc41398c 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - 인터페이스 및 최적화 데이터 파일 압축 + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - 소스 코드 표시 유형과 일치하는 IL 표시 유형을 사용하여 어셈블리 생성 + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - 주 출력으로 전체 어셈블리 대신 참조 어셈블리를 생성합니다. + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - 언어 버전에 포함된 들여쓰기 규칙 재정의 + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - 강력한 이름 키의 공개 부분만 사용하여 어셈블리 서명을 연기합니다. + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - 강력한 이름 키의 공개 부분만 사용하여 어셈블리를 공개 서명하고, 어셈블리를 서명됨으로 표시합니다. + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - 이식 가능한 PDB 파일에 모든 소스 파일 포함 + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - 디버그 정보를 내보냅니다(약식: -g). + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - 최적화를 사용합니다(약식: -O). + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - 마무리 호출을 사용하거나 사용하지 않습니다. + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - 결정적 어셈블리(모듈 버전 GUID 및 타임스탬프 포함) 생성 + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - 크로스 모듈을 최적화하거나 최적화하지 않습니다. + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - 모든 경고를 오류로 보고합니다. + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - 오버플로 검사를 생성합니다. + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - 경고 및 오류 메시지를 색으로 구분하여 출력 + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - 높은 엔트로피 ASLR 사용 + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - 인용구의 디버그 정보를 내보냅니다. + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index 1f353b7e3ec..b1a404bc0b0 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Kompresuj pliki danych interfejsu i optymalizacji + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Generuj zestaw z widocznością IL zgodną z widocznością kodu źródłowego + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Utwórz zestaw odwołania zamiast pełnego zestawu jako podstawowe dane wyjściowe + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Zastąp reguły wcięć implikowane przez wersję językową + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Podpisz zestaw z opóźnieniem, używając tylko publicznej części klucza o silnej nazwie + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Podpisz zestaw na użytek publiczny za pomocą tylko publicznej części klucza o silnej nazwie i oznacz zestaw jako podpisany + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Osadź wszystkie pliki źródłowe w przenośnym pliku PDB + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Emituj informacje debugowania (krótka wersja: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Włącz optymalizacje (krótka wersja: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Włącz lub wyłącz wywołania tail + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Utwórz zestaw deterministyczny (łącznie z sygnaturą czasową i identyfikatorem GUID wersji modułu) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Włącz lub wyłącz optymalizacje między modułami + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Raportuj wszystkie ostrzeżenia jako błędy + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Generuj operacje sprawdzenia przepełnienia + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Ostrzeżenia i komunikaty o błędzie wyróżnione kolorem + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Włącz losowe generowanie układu przestrzeni adresowej o wysokiej entropii + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Emituj informacje debugowania w cudzysłowach + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index 232a3798b4d..c3be9642f81 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Compactar arquivos de dados de otimização e interface + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Gerar um assembly com visibilidade IL que corresponda à visibilidade do código-fonte. + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Produzir um assembly de referência, em vez de um assembly completo, como a saída primária + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Substituir regras de recuo implícitas pela versão da linguagem + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Assinatura atrasada do assembly usando somente a parte pública da chave de nome forte + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Assine de forma pública o assembly usando a única parte pública da chave de nome forte e marque o assembly como assinado + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Inserir todos os arquivos de origem no arquivo PDB portátil + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Emita as informação de depuração (Forma abreviada: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Habilite otimizações (Forma abreviada: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Habilitar ou desabilitar tailcalls + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Produzir um assembly determinístico (incluindo GUID de versão de módulo e carimbo de data/hora) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Habilite ou desabilite otimizações de módulo cruzado + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Relatar todos os avisos como erros + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Gerar verificações de estouro + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Mensagens de aviso e erro de saída em cores + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Habilitar ASLR de alta entropia + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Emitir informações de depuração entre aspas + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index 2d174a1d325..9da18bd9abf 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Сжатие файлов данных интерфейса и оптимизации + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Создать сборку с видимостью IL, соответствующей видимости исходного кода + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Создайте базовую сборку вместо полной сборки в качестве основных выходных данных + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Переопределить правила отступов, предусмотренные версией языка + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Использовать отложенную подпись для сборки, используя только открытую часть ключа строгого имени + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Выполнить общедоступную подпись сборки, используя только открытую часть ключа строгого имени, и пометить сборку как подписанную + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Внедрить все исходные файлы в переносимый PDB-файл + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Вывод отладочной информации (краткая форма: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - Включить оптимизацию (краткая форма: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Включение или отключение концевых вызовов + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Создать детерминированную сборку (включая GUID версии модуля и метку времени) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Включение или отключение межмодульной оптимизации + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Обрабатывать все предупреждения как ошибки + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Сформировать проверки переполнений + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Цветные выходные предупреждения и сообщения об ошибках + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Включить технологию ASLR с высокой энтропией + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Вывод отладочной информации в кавычках + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 6f81b800ddb..4b383d721d7 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - Arabirim ve iyileştirme veri dosyalarını sıkıştır + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - Kaynak kodu görünürlüğüyle eşleşen IL görünürlüğüne sahip bütünleştirilmiş kod oluşturma + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - Birincil çıktı olarak, tam bir derleme yerine, başvuru bütünleştirilmiş kodu üretin + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - Dil sürümü tarafından kapsanan girinti kurallarını geçersiz kıl + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - Derlemeyi tanımlayıcı ad anahtarının yalnızca ortak kısmını kullanarak gecikmeli imzala + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - Tanımlayıcı ad anahtarının yalnızca genel bölümünü kullanarak, bütünleştirilmiş kodu genel olarak imzala ve bütünleştirilmiş kodu imzalanmış olarak işaretle + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - Tüm kaynak dosyaları taşınabilir PDB dosyasına ekle + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - Hata ayıklama bilgilerini yay (Kısa biçimi: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - İyileştirmeleri etkinleştir (Kısa biçimi: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - Tail çağrılarını etkinleştir veya devre dışı bırak + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - Belirleyici bir bütünleştirilmiş kod oluşturun (modül sürümü GUID'i ve zaman damgası dahil) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - Modüller arası iyileştirmeleri etkinleştir veya devre dışı bırak + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - Tüm uyarıları hata olarak bildir + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - Taşma denetimleri oluştur + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - Renkli çıkış uyarısı ve hata iletileri + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - Yüksek entropili ASLR'yi etkinleştir + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - Tırnak içindeki hata ayıklama bilgilerini yay + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index 0c0d5e1a2ee..d38b026f117 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - 压缩接口和优化数据文件 + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - 生成具有与源代码可见性匹配的 IL 可见性的程序集 + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - 生成引用程序集而不是完整程序集作为主输出 + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - 替代语言版本隐含的缩进规则 + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - 仅使用强名称密钥的公共部分对程序集进行延迟签名 + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - 仅使用强名称密钥的公用部分对该程序集进行公开签名, 并将该程序集标记为已签名 + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - 将所有源文件嵌入可移植 PDB 文件 + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - 发出调试信息(缩写: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - 启用优化(缩写: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - 启用或禁用尾调用 + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - 产生确定性的程序集(包括模块版本 GUID 和时间戳) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - 启用或禁用跨模块优化 + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - 将所有警告报告为错误 + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - 生成溢出检查 + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - 以彩色输出警告和错误消息 + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - 启用高熵 ASLR + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - 发出用引号引起来的调试信息 + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index cfd80e7e706..cbb001aef87 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -908,8 +908,8 @@ - Enable nullness declarations and checks - Enable nullness declarations and checks + Enable nullness declarations and checks ({0} by default) + Enable nullness declarations and checks ({0} by default) @@ -918,8 +918,8 @@ - Compress interface and optimization data files - 壓縮介面和最佳化資料檔案 + Compress interface and optimization data files ({0} by default) + Compress interface and optimization data files ({0} by default) @@ -948,13 +948,13 @@ - Generate assembly with IL visibility that matches the source code visibility - 產生具有符合原始程式碼可見度的 IL 可見度組件 + Generate assembly with IL visibility that matches the source code visibility ({0} by default) + Generate assembly with IL visibility that matches the source code visibility ({0} by default) - Produce a reference assembly, instead of a full assembly, as the primary output - 產生參考組件,而非完整組件作為主要輸出 + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) + Produce a reference assembly, instead of a full assembly, as the primary output ({0} by default) @@ -978,8 +978,8 @@ - Override indentation rules implied by the language version - 覆寫語言版本隱含的縮排規則 + Override indentation rules implied by the language version ({0} by default) + Override indentation rules implied by the language version ({0} by default) @@ -5828,13 +5828,13 @@ - Delay-sign the assembly using only the public portion of the strong name key - 只使用強式名稱金鑰的公開金鑰延遲簽署組件 + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) + Delay-sign the assembly using only the public portion of the strong name key ({0} by default) - Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - 僅使用強式名稱金鑰的公開金鑰公開簽署組件,並將組件標記為已簽署 + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) + Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed ({0} by default) @@ -5893,8 +5893,8 @@ - Embed all source files in the portable PDB file - 內嵌可攜式 PDB 檔案中的所有來源檔案 + Embed all source files in the portable PDB file ({0} by default) + Embed all source files in the portable PDB file ({0} by default) @@ -5923,8 +5923,8 @@ - Emit debug information (Short form: -g) - 發出偵錯資訊 (簡短形式: -g) + Emit debug information (Short form: -g) ({0} by default) + Emit debug information (Short form: -g) ({0} by default) @@ -5933,28 +5933,28 @@ - Enable optimizations (Short form: -O) - 啟用最佳化 (簡短形式: -O) + Enable optimizations (Short form: -O) ({0} by default) + Enable optimizations (Short form: -O) ({0} by default) - Enable or disable tailcalls - 啟用或停用 Tail 呼叫 + Enable or disable tailcalls ({0} by default) + Enable or disable tailcalls ({0} by default) - Produce a deterministic assembly (including module version GUID and timestamp) - 產生確定性組件 (包括模組版本 GUID 及時間戳記) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) + Produce a deterministic assembly (including module version GUID and timestamp) ({0} by default) - Enable or disable cross-module optimizations - 啟用或停用跨模組最佳化 + Enable or disable cross-module optimizations ({0} by default) + Enable or disable cross-module optimizations ({0} by default) - Report all warnings as errors - 將所有警告回報為錯誤 + Report all warnings as errors ({0} by default) + Report all warnings as errors ({0} by default) @@ -5978,8 +5978,8 @@ - Generate overflow checks - 產生溢位核對 + Generate overflow checks ({0} by default) + Generate overflow checks ({0} by default) @@ -6163,13 +6163,13 @@ - Output warning and error messages in color - 輸出彩色的警告和錯誤訊息 + Output warning and error messages in color ({0} by default) + Output warning and error messages in color ({0} by default) - Enable high-entropy ASLR - 啟用高熵 ASLR + Enable high-entropy ASLR ({0} by default) + Enable high-entropy ASLR ({0} by default) @@ -6183,8 +6183,8 @@ - Emit debug information in quotations - 發出在引號內的偵錯資訊 + Emit debug information in quotations ({0} by default) + Emit debug information in quotations ({0} by default) diff --git a/src/LegacyMSBuildResolver/LegacyMSBuildReferenceResolver.fs b/src/LegacyMSBuildResolver/LegacyMSBuildReferenceResolver.fs index c4230868740..54c2f2d32b4 100644 --- a/src/LegacyMSBuildResolver/LegacyMSBuildReferenceResolver.fs +++ b/src/LegacyMSBuildResolver/LegacyMSBuildReferenceResolver.fs @@ -432,7 +432,8 @@ let getResolver () = |] let rooted, unrooted = - references |> Array.partition (fst >> FileSystem.IsPathRootedShim) + references + |> Array.partition (fun (path, _) -> FileSystem.IsPathRootedShim(path)) let rootedResults = ResolveCore( diff --git a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj index e689cf1bf39..853737b3ca8 100644 --- a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj +++ b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj @@ -4,7 +4,7 @@ net472;$(FSharpNetCoreProductTargetFramework) - $(FSharpNetCoreProductTargetFramework) + $(FSharpNetCoreProductTargetFramework) Library true xunit @@ -18,6 +18,12 @@ + + + PreserveNewest + + + diff --git a/tests/FSharp.Build.UnitTests/xunit.runner.json b/tests/FSharp.Build.UnitTests/xunit.runner.json new file mode 100644 index 00000000000..b01c50a3cb5 --- /dev/null +++ b/tests/FSharp.Build.UnitTests/xunit.runner.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "appDomain": "denied", + "parallelizeAssembly": true +} diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/compiler_help_output.bsl b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/compiler_help_output.bsl index 75e32680e65..beafa217722 100644 --- a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/compiler_help_output.bsl +++ b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/compiler_help_output.bsl @@ -9,13 +9,14 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. --target:library Build a library (Short form: -a) --target:module Build a module that can be added to another assembly --delaysign[+|-] Delay-sign the assembly using only the public portion of the strong name key + (off by default) --publicsign[+|-] Public-sign the assembly using only the public portion of the strong name - key, and mark the assembly as signed + key, and mark the assembly as signed (off by default) --doc: Write the xmldoc of the assembly to the given file --keyfile: Specify a strong name key file --platform: Limit which platforms this code can run on: x86, x64, Arm, Arm64, Itanium, anycpu32bitpreferred, or anycpu. The default is anycpu. ---compressmetadata[+|-] Compress interface and optimization data files +--compressmetadata[+|-] Compress interface and optimization data files (on by default) --nooptimizationdata Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility. @@ -26,7 +27,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. signature files --nocopyfsharpcore Don't copy FSharp.Core.dll along the produced binaries --refonly[+|-] Produce a reference assembly, instead of a full assembly, as the primary - output + output (off by default) --refout: Produce a reference assembly with the specified file path. @@ -47,41 +48,42 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) +--debug[+|-] Emit debug information (Short form: -g) (off by default) --debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, embedded, pdbonly. ('full' is the default if no debugging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file). ---embed[+|-] Embed all source files in the portable PDB file +--embed[+|-] Embed all source files in the portable PDB file (off by default) --embed: Embed specific source files in the portable PDB file --sourcelink: Source link information file to embed in the portable PDB file ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls +--optimize[+|-] Enable optimizations (Short form: -O) (on by default) +--tailcalls[+|-] Enable or disable tailcalls (on by default) --deterministic[+|-] Produce a deterministic assembly (including module version GUID and - timestamp) + timestamp) (off by default) --realsig[+|-] Generate assembly with IL visibility that matches the source code visibility + (off by default) --pathmap: Maps physical paths to source path names output by the compiler ---crossoptimize[+|-] Enable or disable cross-module optimizations +--crossoptimize[+|-] Enable or disable cross-module optimizations (on by default) --reflectionfree Disable implicit generation of constructs using reflection - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-] Report all warnings as errors (off by default) --warnaserror[+|-]: Report specific warnings as errors --warn: Set a warning level (0-5) --nowarn: Disable specific warning messages --warnon: Enable specific warnings that may be off by default ---checknulls[+|-] Enable nullness declarations and checks ---consolecolors[+|-] Output warning and error messages in color +--checknulls[+|-] Enable nullness declarations and checks (off by default) +--consolecolors[+|-] Output warning and error messages in color (on by default) - LANGUAGE - --langversion:? Display the allowed values for language version. --langversion:{version|latest|preview} Specify language version such as 'latest' or 'preview'. ---checked[+|-] Generate overflow checks +--checked[+|-] Generate overflow checks (off by default) --define: Define conditional compilation symbols (Short form: -d) --mlcompatibility Ignore ML compatibility warnings ---strict-indentation[+|-] Override indentation rules implied by the language version +--strict-indentation[+|-] Override indentation rules implied by the language version (off by default) - MISCELLANEOUS - @@ -111,6 +113,6 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. --staticlink: Statically link the given assembly and all referenced DLLs that depend on this assembly. Use an assembly name e.g. mylib, not a DLL name. --pdb: Name the output debug file ---highentropyva[+|-] Enable high-entropy ASLR +--highentropyva[+|-] Enable high-entropy ASLR (off by default) --subsystemversion: Specify subsystem version of this assembly ---quotations-debug[+|-] Emit debug information in quotations +--quotations-debug[+|-] Emit debug information in quotations (off by default) diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/utf8output.fs b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/utf8output.fs index 6c6216a8377..c17a5c01f07 100644 --- a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/utf8output.fs +++ b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/misc/utf8output.fs @@ -7,6 +7,7 @@ open FSharp.Test open FSharp.Test.Compiler open System +[] module utf8output = [] diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/times/times.fs b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/times/times.fs index b18e5472ec0..7b137c24c15 100644 --- a/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/times/times.fs +++ b/tests/FSharp.Compiler.ComponentTests/CompilerOptions/fsc/times/times.fs @@ -8,6 +8,8 @@ open FSharp.Test.Compiler open System open System.IO +// reportTime uses global state. +[] module times = // This test was automatically generated (moved from FSharpQA suite - CompilerOptions/fsc/times) diff --git a/tests/FSharp.Compiler.ComponentTests/CompilerService/AsyncMemoize.fs b/tests/FSharp.Compiler.ComponentTests/CompilerService/AsyncMemoize.fs index cdc7bdb1400..3e940c51ea6 100644 --- a/tests/FSharp.Compiler.ComponentTests/CompilerService/AsyncMemoize.fs +++ b/tests/FSharp.Compiler.ComponentTests/CompilerService/AsyncMemoize.fs @@ -28,7 +28,7 @@ let internal observe (cache: AsyncMemoize<_,_,_>) = cache.Event.Add arrivals.Post - let next () = collected.Receive(10_000) + let next () = collected.Receive() next diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/CustomAttributes/AttributeUsage/AssemblyVersion04.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/CustomAttributes/AttributeUsage/AssemblyVersion04.fs index 2a67d906999..fd876e72abb 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/CustomAttributes/AttributeUsage/AssemblyVersion04.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/CustomAttributes/AttributeUsage/AssemblyVersion04.fs @@ -14,5 +14,5 @@ let success = asm.Version.Major = 1 && asm.Version.Minor = 2 && asm.Version.Build = 3 && - (abs (asm.Version.Revision - (int defaultRevision))) < 10 // default value is seconds in the current day / 2. Check if within 10 sec of that. + (abs (asm.Version.Revision - (int defaultRevision))) < 60 // default value is seconds in the current day / 2. Check if within 60 sec of that. if success then () else failwith "Failed: 1" \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/Events/Basic/Basic.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/Events/Basic/Basic.fs index 87d12baea7c..caede79cd6b 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/Events/Basic/Basic.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/BasicGrammarElements/Events/Basic/Basic.fs @@ -6,6 +6,7 @@ open Xunit open FSharp.Test open FSharp.Test.Compiler +[] module Events = let verifyCompile compilation = diff --git a/tests/FSharp.Compiler.ComponentTests/FSharpChecker/TransparentCompiler.fs b/tests/FSharp.Compiler.ComponentTests/FSharpChecker/TransparentCompiler.fs index 4b5987f65e5..b523b814b72 100644 --- a/tests/FSharp.Compiler.ComponentTests/FSharpChecker/TransparentCompiler.fs +++ b/tests/FSharp.Compiler.ComponentTests/FSharpChecker/TransparentCompiler.fs @@ -1,4 +1,5 @@ -module FSharpChecker.TransparentCompiler +[] +module FSharpChecker.TransparentCompiler open System.Collections.Concurrent open System.Diagnostics @@ -991,6 +992,8 @@ type private LoadClosureTestShim(currentFileSystem: IFileSystem) = ?shouldShadowCopy = shouldShadowCopy ) +// Because it is mutating FileSystem! +[] module TestsMutatingFileSystem = [] diff --git a/tests/FSharp.Compiler.ComponentTests/Language/BooleanReturningAndReturnTypeDirectedPartialActivePatternTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/BooleanReturningAndReturnTypeDirectedPartialActivePatternTests.fs index 6562e347bbd..8ae8d85db6e 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/BooleanReturningAndReturnTypeDirectedPartialActivePatternTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/BooleanReturningAndReturnTypeDirectedPartialActivePatternTests.fs @@ -1,5 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// Because of shared fsi session. +[] module Language.BooleanReturningAndReturnTypeDirectedPartialActivePatternTests open Xunit diff --git a/tests/FSharp.Compiler.ComponentTests/Language/SequenceExpressions/SequenceExpressionTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/SequenceExpressions/SequenceExpressionTests.fs index 6d46a3718f0..9d98106bcdb 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/SequenceExpressions/SequenceExpressionTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/SequenceExpressions/SequenceExpressionTests.fs @@ -1,5 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// Run sequentially because of shared fsiSession. +[] module Language.SequenceExpression.SequenceExpressionTests open FSharp.Test diff --git a/tests/FSharp.Compiler.ComponentTests/Miscellaneous/FsharpSuiteMigrated.fs b/tests/FSharp.Compiler.ComponentTests/Miscellaneous/FsharpSuiteMigrated.fs index 5ab961176f5..8ab6a4ac584 100644 --- a/tests/FSharp.Compiler.ComponentTests/Miscellaneous/FsharpSuiteMigrated.fs +++ b/tests/FSharp.Compiler.ComponentTests/Miscellaneous/FsharpSuiteMigrated.fs @@ -36,13 +36,15 @@ module ScriptRunner = let res = evalScriptFromDiskInSharedSession engine cu match res with | CompilationResult.Failure _ -> res - | CompilationResult.Success s -> + | CompilationResult.Success _ -> if capture.OutText |> TestFramework.outputPassed then res else - failwith $"Results looked correct, but 'TEST PASSED OK' was not printed. Result: %A{s}" + failwith $"Results looked correct, but 'TEST PASSED OK' was not printed." - | _ -> failwith $"Compilation unit other than fsharp is not supported, cannot process %A{cu}" + | _ -> + printfn $"Cannot process %A{cu}" + failwith $"Compilation unit other than fsharp is not supported." /// This test file was created by porting over (slower) FsharpSuite.Tests /// In order to minimize human error, the test definitions have been copy-pasted and this adapter provides implementations of the test functions diff --git a/tests/FSharp.Compiler.ComponentTests/Miscellaneous/MigratedCoreTests.fs b/tests/FSharp.Compiler.ComponentTests/Miscellaneous/MigratedCoreTests.fs index 2d9c6657901..d0cd80472f1 100644 --- a/tests/FSharp.Compiler.ComponentTests/Miscellaneous/MigratedCoreTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Miscellaneous/MigratedCoreTests.fs @@ -93,14 +93,17 @@ let ``comprehensions-FSC_OPTIMIZED`` () = singleTestBuildAndRun "core/comprehens [] let ``comprehensions-FSI`` () = singleTestBuildAndRun "core/comprehensions" FSI -[] -let ``comprehensionshw-FSC_DEBUG`` () = singleTestBuildAndRun "core/comprehensions-hw" FSC_DEBUG +// Cancels default token. +[] +module Comprehensionshw = + [] + let ``comprehensionshw-FSC_DEBUG`` () = singleTestBuildAndRun "core/comprehensions-hw" FSC_DEBUG -[] -let ``comprehensionshw-FSC_OPTIMIZED`` () = singleTestBuildAndRun "core/comprehensions-hw" FSC_OPTIMIZED + [] + let ``comprehensionshw-FSC_OPTIMIZED`` () = singleTestBuildAndRun "core/comprehensions-hw" FSC_OPTIMIZED -[] -let ``comprehensionshw-FSI`` () = singleTestBuildAndRun "core/comprehensions-hw" FSI + [] + let ``comprehensionshw-FSI`` () = singleTestBuildAndRun "core/comprehensions-hw" FSI [] let ``genericmeasures-FSC_DEBUG`` () = singleTestBuildAndRun "core/genericmeasures" FSC_DEBUG @@ -375,18 +378,21 @@ let ``recordResolution-FSC_OPTIMIZED`` () = singleTestBuildAndRun "core/recordRe [] let ``recordResolution-FSI`` () = singleTestBuildAndRun "core/recordResolution" FSI -// This test has hardcoded expectations about current synchronization context -// Will be moved out of FsharpSuite.Tests in a later phase for desktop framework -[] -let ``control-FSC_OPTIMIZED`` () = singleTestBuildAndRun "core/control" FSC_OPTIMIZED +// Cancels default token. +[] +module CoreControl = + // This test has hardcoded expectations about current synchronization context + // Will be moved out of FsharpSuite.Tests in a later phase for desktop framework + [] + let ``control-FSC_OPTIMIZED`` () = singleTestBuildAndRun "core/control" FSC_OPTIMIZED -[] -let ``control-FSI`` () = singleTestBuildAndRun "core/control" FSI + [] + let ``control-FSI`` () = singleTestBuildAndRun "core/control" FSI -[] -let ``control --tailcalls`` () = - let cfg = "core/control" - singleTestBuildAndRunAux cfg ["--tailcalls"] FSC_OPTIMIZED + [] + let ``control --tailcalls`` () = + let cfg = "core/control" + singleTestBuildAndRunAux cfg ["--tailcalls"] FSC_OPTIMIZED [] let ``controlChamenos-FSC_OPTIMIZED`` () = @@ -401,7 +407,7 @@ let ``controlChamenos-FSI`` () = [] let ``controlMailbox-FSC_OPTIMIZED`` () = singleTestBuildAndRun "core/controlMailbox" FSC_OPTIMIZED -[] +[] let ``controlMailbox-FSI`` () = singleTestBuildAndRun "core/controlMailbox" FSI [] diff --git a/tests/FSharp.Compiler.ComponentTests/TypeChecks/Graph/Utils.fs b/tests/FSharp.Compiler.ComponentTests/TypeChecks/Graph/Utils.fs index d14ddb44de1..02dd073625d 100644 --- a/tests/FSharp.Compiler.ComponentTests/TypeChecks/Graph/Utils.fs +++ b/tests/FSharp.Compiler.ComponentTests/TypeChecks/Graph/Utils.fs @@ -5,7 +5,7 @@ open FSharp.Compiler.GraphChecking open FSharp.Compiler.Text open FSharp.Compiler.Syntax -let private checker = FSharpChecker.Create() +open FSharp.Test let parseSourceCode (name: string, code: string) = let sourceText = SourceText.ofString code @@ -16,7 +16,7 @@ let parseSourceCode (name: string, code: string) = } let result = - checker.ParseFile(name, sourceText, parsingOptions) |> Async.RunSynchronously + CompilerAssert.Checker.ParseFile(name, sourceText, parsingOptions) |> Async.RunSynchronously result.ParseTree diff --git a/tests/FSharp.Compiler.ComponentTests/xunit.runner.json b/tests/FSharp.Compiler.ComponentTests/xunit.runner.json index d1866b85c61..b01c50a3cb5 100644 --- a/tests/FSharp.Compiler.ComponentTests/xunit.runner.json +++ b/tests/FSharp.Compiler.ComponentTests/xunit.runner.json @@ -1,6 +1,5 @@ { "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", "appDomain": "denied", - "parallelizeTestCollections": false, - "maxParallelThreads": 1 + "parallelizeAssembly": true } diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs index 20c5919e00e..7f320fea23f 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs @@ -26,6 +26,7 @@ module Native = type scriptHost (?langVersion: LangVersion) = inherit FSharpScript(langVersion=defaultArg langVersion LangVersion.Preview) +[] type DependencyManagerInteractiveTests() = let getValue ((value: Result), (errors: FSharpDiagnostic[])) = diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj index a3ac4bd6d1a..e0d064e12f9 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj @@ -3,7 +3,7 @@ net472;$(FSharpNetCoreProductTargetFramework) - $(FSharpNetCoreProductTargetFramework) + $(FSharpNetCoreProductTargetFramework) Library true xunit diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/xunit.runner.json b/tests/FSharp.Compiler.Private.Scripting.UnitTests/xunit.runner.json index b180883cc0f..b01c50a3cb5 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/xunit.runner.json +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/xunit.runner.json @@ -1,6 +1,5 @@ { - "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", - "appDomain": "denied", - "parallelizeTestCollections": false, - "maxParallelThreads": 1 + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "appDomain": "denied", + "parallelizeAssembly": true } diff --git a/tests/FSharp.Compiler.Service.Tests/AssemblyContentProviderTests.fs b/tests/FSharp.Compiler.Service.Tests/AssemblyContentProviderTests.fs index cb4521b7af4..eabf028393c 100644 --- a/tests/FSharp.Compiler.Service.Tests/AssemblyContentProviderTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/AssemblyContentProviderTests.fs @@ -22,7 +22,7 @@ let private projectOptions : FSharpProjectOptions = UnresolvedReferences = None Stamp = None } -let private checker = FSharpChecker.Create(useTransparentCompiler=CompilerAssertHelpers.UseTransparentCompiler) +let private checker = FSharpChecker.Create(useTransparentCompiler = CompilerAssertHelpers.UseTransparentCompiler) let private assertAreEqual (expected, actual) = if actual <> expected then diff --git a/tests/FSharp.Compiler.Service.Tests/AssemblyInfo.fs b/tests/FSharp.Compiler.Service.Tests/AssemblyInfo.fs deleted file mode 100644 index 3433f928ba4..00000000000 --- a/tests/FSharp.Compiler.Service.Tests/AssemblyInfo.fs +++ /dev/null @@ -1,7 +0,0 @@ -module FSharp.Compiler.Service.Tests.AssemblyInfo - -open Xunit - -[] - -do() diff --git a/tests/FSharp.Compiler.Service.Tests/Common.fs b/tests/FSharp.Compiler.Service.Tests/Common.fs index 18276ae39a9..8ccb19b0f85 100644 --- a/tests/FSharp.Compiler.Service.Tests/Common.fs +++ b/tests/FSharp.Compiler.Service.Tests/Common.fs @@ -31,7 +31,7 @@ type Async with task.Result // Create one global interactive checker instance -let checker = FSharpChecker.Create(useTransparentCompiler=FSharp.Compiler.CompilerConfig.FSharpExperimentalFeaturesEnabledAutomatically) +let checker = FSharpChecker.Create(useTransparentCompiler = FSharp.Test.CompilerAssertHelpers.UseTransparentCompiler) type TempFile(ext, contents: string) = let tmpFile = Path.ChangeExtension(getTemporaryFileName (), ext) diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index fc64abb4138..57ce88d8f02 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -19,7 +19,6 @@ Never - XunitSetup.fs diff --git a/tests/FSharp.Compiler.Service.Tests/FileSystemTests.fs b/tests/FSharp.Compiler.Service.Tests/FileSystemTests.fs index ff62594067d..0e2a4adf4ae 100644 --- a/tests/FSharp.Compiler.Service.Tests/FileSystemTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/FileSystemTests.fs @@ -1,4 +1,6 @@ -module FSharp.Compiler.Service.Tests.FileSystemTests +// FileSystem is a global shared resource. +[] +module FSharp.Compiler.Service.Tests.FileSystemTests open Xunit open FSharp.Test.Assert @@ -38,17 +40,16 @@ type internal MyFileSystem() = | _ -> base.OpenFileForReadShim(filePath, useMemoryMappedFile, shouldShadowCopy) override _.FileExistsShim(fileName) = MyFileSystem.FilesCache.ContainsKey(fileName) || base.FileExistsShim(fileName) -let UseMyFileSystem() = - let myFileSystem = MyFileSystem() - FileSystemAutoOpens.FileSystem <- myFileSystem - { new IDisposable with member x.Dispose() = FileSystemAutoOpens.FileSystem <- myFileSystem } +let useFileSystemShim (shim: IFileSystem) = + let originalShim = FileSystem + FileSystem <- shim + { new IDisposable with member x.Dispose() = FileSystem <- originalShim } // .NET Core SKIPPED: need to check if these tests can be enabled for .NET Core testing of FSharp.Compiler.Service" [] let ``FileSystem compilation test``() = if Environment.OSVersion.Platform = PlatformID.Win32NT then // file references only valid on Windows - use myFileSystem = UseMyFileSystem() - let programFilesx86Folder = Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") + use myFileSystem = useFileSystemShim (MyFileSystem()) let projectOptions = let allFlags = @@ -83,3 +84,21 @@ let ``FileSystem compilation test``() = results.AssemblySignature.Entities.Count |> shouldEqual 2 results.AssemblySignature.Entities[0].MembersFunctionsAndValues.Count |> shouldEqual 1 results.AssemblySignature.Entities[0].MembersFunctionsAndValues[0].DisplayName |> shouldEqual "B" + +let checkEmptyScriptWithFsShim () = + let shim = DefaultFileSystem() + let ref: WeakReference = WeakReference(shim) + + use _ = useFileSystemShim shim + getParseAndCheckResults "" |> ignore + + ref + +[] +let ``File system shim should not leak`` () = + let shimRef = checkEmptyScriptWithFsShim () + + GC.Collect() + GC.WaitForPendingFinalizers() + + Assert.False(shimRef.IsAlive) diff --git a/tests/FSharp.Compiler.Service.Tests/FsiHelpTests.fs b/tests/FSharp.Compiler.Service.Tests/FsiHelpTests.fs index d17b3421ed9..110cc1a09e7 100644 --- a/tests/FSharp.Compiler.Service.Tests/FsiHelpTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/FsiHelpTests.fs @@ -3,7 +3,6 @@ open FSharp.Test.Assert open Xunit -[] module FsiHelpTests = [] diff --git a/tests/FSharp.Compiler.Service.Tests/FsiTests.fs b/tests/FSharp.Compiler.Service.Tests/FsiTests.fs index f6a785af4f1..bb3e8407d6f 100644 --- a/tests/FSharp.Compiler.Service.Tests/FsiTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/FsiTests.fs @@ -14,21 +14,17 @@ type Sentinel () = module MyModule = let test(x: int) = () -[] +// Running in parallel is unstable with occasional System.IO.FileLoadException: Could not load file or assembly 'FSI-ASSEMBLY... +[] module FsiTests = let createFsiSession (useOneDynamicAssembly: bool) = - // Initialize output and input streams - let inStream = new StringReader("") - let outStream = new CompilerOutputStream() - let errStream = new CompilerOutputStream() - // Build command line arguments & start FSI session let argv = [| "C:\\fsi.exe" |] let allArgs = Array.append argv [|"--noninteractive"; if useOneDynamicAssembly then "--multiemit-" else "--multiemit+" |] let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration() - FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, new StreamWriter(outStream), new StreamWriter(errStream), collectible = true) + FsiEvaluationSession.Create(fsiConfig, allArgs, stdin, stdout, stderr, collectible = true) [] let ``No bound values at the start of FSI session`` () = diff --git a/tests/FSharp.Compiler.Service.Tests/ModuleReaderCancellationTests.fs b/tests/FSharp.Compiler.Service.Tests/ModuleReaderCancellationTests.fs index 995d9dabfb2..62e36de58b9 100644 --- a/tests/FSharp.Compiler.Service.Tests/ModuleReaderCancellationTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/ModuleReaderCancellationTests.fs @@ -1,3 +1,5 @@ +// Sequential execution because of shared mutable state. +[] module FSharp.Compiler.Service.Tests.ModuleReaderCancellationTests open System diff --git a/tests/FSharp.Compiler.Service.Tests/PerfTests.fs b/tests/FSharp.Compiler.Service.Tests/PerfTests.fs index aa270182895..8a9ac73740a 100644 --- a/tests/FSharp.Compiler.Service.Tests/PerfTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/PerfTests.fs @@ -1,4 +1,5 @@ -module FSharp.Compiler.Service.Tests.PerfTests +[] +module FSharp.Compiler.Service.Tests.PerfTests open Xunit open FSharp.Test.Assert diff --git a/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs b/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs index dfce65ef186..1570cd34d0c 100644 --- a/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/ProjectAnalysisTests.fs @@ -105,28 +105,31 @@ let ``Test project1 whole project errors`` () = wholeProjectResults.Diagnostics[0].Range.StartColumn |> shouldEqual 43 wholeProjectResults.Diagnostics[0].Range.EndColumn |> shouldEqual 44 -[] -let ``Test project1 and make sure TcImports gets cleaned up`` () = +[] +module ClearLanguageServiceRootCachesTest = + [] + let ``Test project1 and make sure TcImports gets cleaned up`` () = - // A private checker for this test. - let checker = FSharpChecker.Create() + // A private checker for this test. + let checker = FSharpChecker.Create() - let test () = - let _, checkFileAnswer = checker.ParseAndCheckFileInProject(Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunImmediate - match checkFileAnswer with - | FSharpCheckFileAnswer.Aborted -> failwith "should not be aborted" - | FSharpCheckFileAnswer.Succeeded checkFileResults -> - let tcImportsOpt = checkFileResults.TryGetCurrentTcImports () - Assert.True tcImportsOpt.IsSome - let weakTcImports = WeakReference tcImportsOpt.Value - Assert.True weakTcImports.IsAlive - weakTcImports - - // Here we are only keeping a handle to weakTcImports and nothing else - let weakTcImports = test () - checker.InvalidateConfiguration Project1.options - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - System.Threading.SpinWait.SpinUntil(fun () -> not weakTcImports.IsAlive) + let test () = + let _, checkFileAnswer = checker.ParseAndCheckFileInProject(Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunImmediate + match checkFileAnswer with + | FSharpCheckFileAnswer.Aborted -> failwith "should not be aborted" + | FSharpCheckFileAnswer.Succeeded checkFileResults -> + let tcImportsOpt = checkFileResults.TryGetCurrentTcImports () + Assert.True tcImportsOpt.IsSome + let weakTcImports = WeakReference tcImportsOpt.Value + Assert.True weakTcImports.IsAlive + weakTcImports + + // Here we are only keeping a handle to weakTcImports and nothing else + let weakTcImports = test () + checker.InvalidateConfiguration Project1.options + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + GC.Collect() + System.Threading.SpinWait.SpinUntil(fun () -> not weakTcImports.IsAlive) [] let ``Test Project1 should have protected FullName and TryFullName return same results`` () = @@ -5788,18 +5791,20 @@ let checkContentAsScript content = | FSharpCheckFileAnswer.Aborted -> failwith "no check results" | FSharpCheckFileAnswer.Succeeded r -> r -[] -let ``References from #r nuget are included in script project options`` () = - let checkResults = checkContentAsScript """ -#i "nuget:https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" -#r "nuget: Dapper" -""" - let assemblyNames = - checkResults.ProjectContext.GetReferencedAssemblies() - |> Seq.choose (fun f -> f.FileName |> Option.map Path.GetFileName) - |> Seq.distinct - printfn "%s" (assemblyNames |> String.concat "\n") - Assert.Contains("Dapper.dll", assemblyNames) +[] +module ScriptClosureCacheUse = + [] + let ``References from #r nuget are included in script project options`` () = + let checkResults = checkContentAsScript """ + #i "nuget:https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" + #r "nuget: Dapper" + """ + let assemblyNames = + checkResults.ProjectContext.GetReferencedAssemblies() + |> Seq.choose (fun f -> f.FileName |> Option.map Path.GetFileName) + |> Seq.distinct + printfn "%s" (assemblyNames |> String.concat "\n") + Assert.Contains("Dapper.dll", assemblyNames) module internal EmptyProject = let base2 = getTemporaryFileName () diff --git a/tests/FSharp.Compiler.Service.Tests/ScriptOptionsTests.fs b/tests/FSharp.Compiler.Service.Tests/ScriptOptionsTests.fs index 328272defb8..43dfe12a0c0 100644 --- a/tests/FSharp.Compiler.Service.Tests/ScriptOptionsTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/ScriptOptionsTests.fs @@ -1,3 +1,5 @@ +// Because of script closure cache. +[] module FSharp.Compiler.Service.Tests.ScriptOptionsTests open Xunit diff --git a/tests/FSharp.Compiler.Service.Tests/expected-help-output.bsl b/tests/FSharp.Compiler.Service.Tests/expected-help-output.bsl index 61cf7105859..318bb051e59 100644 --- a/tests/FSharp.Compiler.Service.Tests/expected-help-output.bsl +++ b/tests/FSharp.Compiler.Service.Tests/expected-help-output.bsl @@ -10,11 +10,11 @@ another assembly --delaysign[+|-] Delay-sign the assembly using only the public portion of the strong - name key + name key (off by default) --publicsign[+|-] Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as - signed + signed (off by default) --doc: Write the xmldoc of the assembly to the given file --keyfile: Specify a strong name key file @@ -23,7 +23,7 @@ Itanium, anycpu32bitpreferred, or anycpu. The default is anycpu. --compressmetadata[+|-] Compress interface and optimization - data files + data files (on by default) --nooptimizationdata Only include optimization information essential for implementing inlined constructs. @@ -41,7 +41,7 @@ produced binaries --refonly[+|-] Produce a reference assembly, instead of a full assembly, as the - primary output + primary output (off by default) --refout: Produce a reference assembly with the specified file path. @@ -69,7 +69,7 @@ - CODE GENERATION - --debug[+|-] Emit debug information (Short form: - -g) + -g) (off by default) --debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, embedded, pdbonly. ('full' is the default if no debugging type @@ -80,39 +80,41 @@ cross-platform format embedded into the output file). --embed[+|-] Embed all source files in the - portable PDB file + portable PDB file (off by default) --embed: Embed specific source files in the portable PDB file --sourcelink: Source link information file to embed in the portable PDB file --optimize[+|-] Enable optimizations (Short form: - -O) ---tailcalls[+|-] Enable or disable tailcalls + -O) (off by default) +--tailcalls[+|-] Enable or disable tailcalls (on by + default) --deterministic[+|-] Produce a deterministic assembly (including module version GUID and - timestamp) + timestamp) (off by default) --realsig[+|-] Generate assembly with IL visibility that matches the source code - visibility + visibility (off by default) --pathmap: Maps physical paths to source path names output by the compiler --crossoptimize[+|-] Enable or disable cross-module - optimizations + optimizations (off by default) --reflectionfree Disable implicit generation of constructs using reflection - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-] Report all warnings as errors (off + by default) --warnaserror[+|-]: Report specific warnings as errors --warn: Set a warning level (0-5) --nowarn: Disable specific warning messages --warnon: Enable specific warnings that may be off by default --checknulls[+|-] Enable nullness declarations and - checks + checks (off by default) --consolecolors[+|-] Output warning and error messages in - color + color (on by default) - LANGUAGE - @@ -120,12 +122,14 @@ language version. --langversion:{version|latest|preview} Specify language version such as 'latest' or 'preview'. ---checked[+|-] Generate overflow checks +--checked[+|-] Generate overflow checks (off by + default) --define: Define conditional compilation symbols (Short form: -d) --mlcompatibility Ignore ML compatibility warnings --strict-indentation[+|-] Override indentation rules implied - by the language version + by the language version (off by + default) - MISCELLANEOUS - @@ -173,7 +177,9 @@ on this assembly. Use an assembly name e.g. mylib, not a DLL name. --pdb: Name the output debug file ---highentropyva[+|-] Enable high-entropy ASLR +--highentropyva[+|-] Enable high-entropy ASLR (off by + default) --subsystemversion: Specify subsystem version of this assembly --quotations-debug[+|-] Emit debug information in quotations + (off by default) diff --git a/tests/FSharp.Compiler.Service.Tests/xunit.runner.json b/tests/FSharp.Compiler.Service.Tests/xunit.runner.json index 2b65d19ea3e..b01c50a3cb5 100644 --- a/tests/FSharp.Compiler.Service.Tests/xunit.runner.json +++ b/tests/FSharp.Compiler.Service.Tests/xunit.runner.json @@ -1,4 +1,5 @@ { "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", - "appDomain": "denied" + "appDomain": "denied", + "parallelizeAssembly": true } diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj index 305d234a837..3e6bbbd282d 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj +++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj @@ -4,7 +4,7 @@ $(FSharpNetCoreProductTargetFramework);net472 - $(FSharpNetCoreProductTargetFramework) + $(FSharpNetCoreProductTargetFramework) Library FSharp.Core.UnitTests diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs index a8e42790090..59497654b5b 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs @@ -1747,6 +1747,7 @@ module ComparersRegression = open ComparersRegression open Xunit +[] type GeneratedTests () = let _ = () // ------------------------------------------------------------------------------ diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs index 97ea8fca1a8..ef75dff9e00 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs @@ -11,6 +11,8 @@ open Xunit open System.Threading open System.Threading.Tasks +// Cancels default token. +[] module AsyncType = type ExpectedContinuation = Success | Exception | Cancellation @@ -38,8 +40,7 @@ module AsyncType = async { return () } |> expect Success - - +[] type AsyncType() = let ignoreSynchCtx f = diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs index b4a75843369..3fc449546e1 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Cancellation.fs @@ -9,7 +9,7 @@ open FSharp.Test open System.Threading open System.Threading.Tasks - +[] type CancellationType() = let ordered() = diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs index 1e2fcd58545..4dd7797ae9f 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs @@ -24,6 +24,7 @@ type StartImmediateThreadInfo = type StartImmediateMessage = | GetThreadInfo of AsyncReplyChannel +[] type MailboxProcessorType() = let getSimpleMailbox() = diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs index 8097c2d10f5..cce271d58bb 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs @@ -192,6 +192,7 @@ module Helpers = let require x msg = if not x then failwith msg let failtest str = raise (TestException str) +[] type Basics() = [] member _.testShortCircuitResult() = @@ -1201,8 +1202,6 @@ type Basics() = } |> ignore -[] -type BasicsNotInParallel() = [] member _.testTaskUsesSyncContext() = diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/TasksDynamic.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/TasksDynamic.fs index 7f844e99d96..430b1b526e4 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/TasksDynamic.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/TasksDynamic.fs @@ -313,6 +313,7 @@ module Helpers = let require x msg = if not x then failwith msg let failtest str = raise (TestException str) +[] type Basics() = [] member _.testShortCircuitResult() = @@ -1259,10 +1260,6 @@ type Basics() = } |> ignore - -[] -type BasicsNotInParallel() = - [] member _.testTaskUsesSyncContext() = printfn "Running testBackgroundTask..." diff --git a/tests/FSharp.Core.UnitTests/xunit.runner.json b/tests/FSharp.Core.UnitTests/xunit.runner.json index d1866b85c61..b01c50a3cb5 100644 --- a/tests/FSharp.Core.UnitTests/xunit.runner.json +++ b/tests/FSharp.Core.UnitTests/xunit.runner.json @@ -1,6 +1,5 @@ { "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", "appDomain": "denied", - "parallelizeTestCollections": false, - "maxParallelThreads": 1 + "parallelizeAssembly": true } diff --git a/tests/FSharp.Test.Utilities/CompilerAssert.fs b/tests/FSharp.Test.Utilities/CompilerAssert.fs index 92f65970d73..f065d05430f 100644 --- a/tests/FSharp.Test.Utilities/CompilerAssert.fs +++ b/tests/FSharp.Test.Utilities/CompilerAssert.fs @@ -622,8 +622,7 @@ module CompilerAssertHelpers = let runtimeconfigPath = Path.ChangeExtension(outputFilePath, ".runtimeconfig.json") File.WriteAllText(runtimeconfigPath, runtimeconfig) #endif - let timeout = 30000 - let rc, output, errors = Commands.executeProcess fileName arguments (Path.GetDirectoryName(outputFilePath)) timeout + let rc, output, errors = Commands.executeProcess fileName arguments (Path.GetDirectoryName(outputFilePath)) let output = String.Join(Environment.NewLine, output) let errors = String.Join(Environment.NewLine, errors) ExitCode rc, output, errors diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index 0f6267504d0..61d1a6cfe7a 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -10,8 +10,11 @@ true false false - $(OtherFlags) --warnon:1182 --realsig- + false + $(OtherFlags) --warnon:1182 true + + XUNIT_EXTRAS @@ -106,7 +109,7 @@ - + diff --git a/tests/FSharp.Test.Utilities/ILChecker.fs b/tests/FSharp.Test.Utilities/ILChecker.fs index de0fbd8050b..b47ae4409f0 100644 --- a/tests/FSharp.Test.Utilities/ILChecker.fs +++ b/tests/FSharp.Test.Utilities/ILChecker.fs @@ -15,8 +15,7 @@ module ILChecker = let private exec exe args = let arguments = args |> String.concat " " - let timeout = 30000 - let exitCode, _output, errors = Commands.executeProcess exe arguments "" timeout + let exitCode, _output, errors = Commands.executeProcess exe arguments "" let errors = errors |> String.concat Environment.NewLine errors, exitCode diff --git a/tests/FSharp.Test.Utilities/Peverifier.fs b/tests/FSharp.Test.Utilities/Peverifier.fs index f3ccc7de2b1..0591a435484 100644 --- a/tests/FSharp.Test.Utilities/Peverifier.fs +++ b/tests/FSharp.Test.Utilities/Peverifier.fs @@ -24,8 +24,7 @@ module PEVerifier = let private exec exe args = let arguments = args |> String.concat " " - let timeout = 30000 - let exitCode, _output, errors = Commands.executeProcess exe arguments "" timeout + let exitCode, _output, errors = Commands.executeProcess exe arguments "" let errors = errors |> String.concat Environment.NewLine errors, exitCode diff --git a/tests/FSharp.Test.Utilities/ProjectGeneration.fs b/tests/FSharp.Test.Utilities/ProjectGeneration.fs index 5dc2891055f..d12e65ec063 100644 --- a/tests/FSharp.Test.Utilities/ProjectGeneration.fs +++ b/tests/FSharp.Test.Utilities/ProjectGeneration.fs @@ -32,6 +32,7 @@ open FSharp.Compiler.Text open Xunit open FSharp.Test.Utilities + open OpenTelemetry open OpenTelemetry.Resources open OpenTelemetry.Trace @@ -349,11 +350,11 @@ type SyntheticProject = UnresolvedReferences = None OriginalLoadReferences = [] Stamp = None } - - + OptionsCache.GetOrAdd(key, factory).Value + member this.GetAllProjects() = [ this for p in this.DependsOn do diff --git a/tests/FSharp.Test.Utilities/ScriptHelpers.fs b/tests/FSharp.Test.Utilities/ScriptHelpers.fs index f060cb91398..aa0593fa090 100644 --- a/tests/FSharp.Test.Utilities/ScriptHelpers.fs +++ b/tests/FSharp.Test.Utilities/ScriptHelpers.fs @@ -100,4 +100,4 @@ module TestHelpers = | Ok(value) -> value | Error ex -> raise ex - let ignoreValue x = getValue x |> ignore + let ignoreValue = getValue >> ignore diff --git a/tests/FSharp.Test.Utilities/TestFramework.fs b/tests/FSharp.Test.Utilities/TestFramework.fs index 2fea92164e4..c1250bff9ae 100644 --- a/tests/FSharp.Test.Utilities/TestFramework.fs +++ b/tests/FSharp.Test.Utilities/TestFramework.fs @@ -4,12 +4,11 @@ module TestFramework open System open System.IO -open System.Reflection open System.Diagnostics +open System.Reflection open Scripting open Xunit open FSharp.Compiler.IO -open Xunit.Sdk let getShortId() = Guid.NewGuid().ToString().[..7] @@ -64,7 +63,7 @@ module Commands = // Execute the process pathToExe passing the arguments: arguments with the working directory: workingDir timeout after timeout milliseconds -1 = wait forever // returns exit code, stdio and stderr as string arrays - let executeProcess pathToExe arguments workingDir (timeout:int) = + let executeProcess pathToExe arguments workingDir = let commandLine = ResizeArray() let errorsList = ResizeArray() let outputList = ResizeArray() @@ -103,11 +102,7 @@ module Commands = if p.Start() then p.BeginOutputReadLine() p.BeginErrorReadLine() - if not(p.WaitForExit(timeout)) then - // Timed out resolving throw a diagnostic. - raise (new TimeoutException(sprintf "Timeout executing command '%s' '%s'" (psi.FileName) (psi.Arguments))) - else - p.WaitForExit() + p.WaitForExit() #if DEBUG let workingDir' = if workingDir = "" @@ -564,8 +559,7 @@ module Command = | Output r -> use writer = openWrite r use outFile = redirectTo writer - use toLog = redirectToLog () - fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some (toLog.Post) } + fCont { cmdArgs with RedirectOutput = Some (outFile.Post); RedirectError = Some ignore } | OutputAndError (r1,r2) -> use writer1 = openWrite r1 use writer2 = openWrite r2 @@ -579,8 +573,7 @@ module Command = | Error r -> use writer = openWrite r use outFile = redirectTo writer - use toLog = redirectToLog () - fCont { cmdArgs with RedirectOutput = Some (toLog.Post); RedirectError = Some (outFile.Post) } + fCont { cmdArgs with RedirectOutput = Some ignore; RedirectError = Some (outFile.Post) } let exec cmdArgs = log "%s" (logExec dir path args redirect) diff --git a/tests/FSharp.Test.Utilities/Utilities.fs b/tests/FSharp.Test.Utilities/Utilities.fs index eb6caa063a9..d96c805bcd4 100644 --- a/tests/FSharp.Test.Utilities/Utilities.fs +++ b/tests/FSharp.Test.Utilities/Utilities.fs @@ -18,6 +18,7 @@ open System.Collections.Generic open FSharp.Compiler.CodeAnalysis open Newtonsoft.Json open Newtonsoft.Json.Linq +open Xunit.Sdk type TheoryForNETCOREAPPAttribute() = @@ -42,7 +43,7 @@ type FactForDESKTOPAttribute() = module Utilities = type Async with - static member RunImmediate (computation: Async<'T>, ?cancellationToken ) = + static member RunImmediate (computation: Async<'T>, ?cancellationToken) = let cancellationToken = defaultArg cancellationToken Async.DefaultCancellationToken let ts = TaskCompletionSource<'T>() let task = ts.Task @@ -215,8 +216,7 @@ let main argv = 0""" File.WriteAllText(directoryBuildPropsFileName, directoryBuildProps) File.WriteAllText(directoryBuildTargetsFileName, directoryBuildTargets) - let timeout = 120000 - let exitCode, dotnetoutput, dotneterrors = Commands.executeProcess config.DotNetExe "build" projectDirectory timeout + let exitCode, dotnetoutput, dotneterrors = Commands.executeProcess config.DotNetExe "build" projectDirectory if exitCode <> 0 || errors.Length > 0 then errors <- dotneterrors diff --git a/tests/FSharp.Test.Utilities/XunitHelpers.fs b/tests/FSharp.Test.Utilities/XunitHelpers.fs index cda74f7867c..7a41338200a 100644 --- a/tests/FSharp.Test.Utilities/XunitHelpers.fs +++ b/tests/FSharp.Test.Utilities/XunitHelpers.fs @@ -1,3 +1,7 @@ +#if XUNIT_EXTRAS +#nowarn "0044" +#endif + namespace FSharp.Test open System @@ -6,7 +10,13 @@ open Xunit.Abstractions open TestFramework -/// Installs console support for parallel test runs. +/// Disables custom internal parallelization added with XUNIT_EXTRAS. +/// Execute test cases in a class or a module one by one instead of all at once. Allow other collections to run simultaneously. +[] +type RunTestCasesInSequenceAttribute() = inherit Attribute() + +#if !XUNIT_EXTRAS +/// Installs console support for parallel test runs and conditionally enables optional xUnit customizations. type FSharpXunitFramework(sink: IMessageSink) = inherit XunitTestFramework(sink) do @@ -21,3 +31,153 @@ type FSharpXunitFramework(sink: IMessageSink) = cleanUpTemporaryDirectoryOfThisTestRun () base.Dispose() +#else + +// To use xUnit means to customize it. The following abomination adds 2 features: +// - Capturing full console output individually for each test case, viewable in Test Explorer as test stdout. +// - Internally parallelize test classes and theories. Test cases and theory cases included in a single class or F# module can execute simultaneously + +/// Passes captured console output to xUnit. +type ConsoleCapturingTestRunner(test, messageBus, testClass, constructorArguments, testMethod, testMethodArguments, skipReason, beforeAfterAttributes, aggregator, cancellationTokenSource) = + inherit XunitTestRunner(test, messageBus, testClass, constructorArguments, testMethod, testMethodArguments, skipReason, beforeAfterAttributes, aggregator, cancellationTokenSource) + + member _.BaseInvokeTestMethodAsync aggregator = base.InvokeTestMethodAsync aggregator + override this.InvokeTestAsync (aggregator: ExceptionAggregator) = + task { + use capture = new TestConsole.ExecutionCapture() + let! executionTime = this.BaseInvokeTestMethodAsync aggregator + let output = + seq { + capture.OutText + if not (String.IsNullOrEmpty capture.ErrorText) then + "" + "=========== Standard Error ===========" + "" + capture.ErrorText + } |> String.concat Environment.NewLine + return executionTime, output + } + +module TestCaseCustomizations = + // Internally parallelize test classes and theories. + // Based on https://www.meziantou.net/parallelize-test-cases-execution-in-xunit.htm + // The trick is to assign a unique test collection to each case. + // Since test collection is xUnit's unit of parallelization, it will execute everything in parallel including theory cases. + let rewriteTestMethod (testCase: ITestCase) : ITestMethod = + let canFullyParallelize = + // does not belong to a defined collection + isNull testCase.TestMethod.TestClass.TestCollection.CollectionDefinition + && testCase.TestMethod.TestClass.Class.GetCustomAttributes(typeof) |> Seq.isEmpty + // is not marked with `[]` attribute + && testCase.TestMethod.Method.GetCustomAttributes(typeof) |> Seq.isEmpty + && testCase.TestMethod.TestClass.Class.GetCustomAttributes(typeof) |> Seq.isEmpty + + if canFullyParallelize then + let oldTestMethod = testCase.TestMethod + let oldTestClass = oldTestMethod.TestClass + let oldTestCollection = oldTestMethod.TestClass.TestCollection + + // Create a new collection with a unique id for the test case. + let newTestCollection = + new TestCollection( + oldTestCollection.TestAssembly, + oldTestCollection.CollectionDefinition, + oldTestCollection.DisplayName, + Guid.NewGuid() + ) + + let newTestClass = new TestClass(newTestCollection, oldTestClass.Class) + TestMethod(newTestClass, oldTestMethod.Method) + else + testCase.TestMethod + +type CustomTestCase = + inherit XunitTestCase + // xUinit demands this constructor for deserialization. + new() = { inherit XunitTestCase() } + + new(sink: IMessageSink, md, mdo, testMethod, testMethodArgs) = { inherit XunitTestCase(sink, md, mdo, testMethod, testMethodArgs) } + + override testCase.RunAsync (_, bus, args, aggregator, cts) = + let runner : XunitTestCaseRunner = + { new XunitTestCaseRunner(testCase, testCase.DisplayName, testCase.SkipReason, args, testCase.TestMethodArguments, bus, aggregator, cts) with + override this.CreateTestRunner(test, bus, testCase, args, testMethod, methodArgs, skipReason, attrs, aggregator, cts) = + ConsoleCapturingTestRunner(test, bus, testCase, args, testMethod, methodArgs, skipReason, attrs, aggregator, cts) + } + runner.RunAsync() + + // Initialize is ensured by xUnit to run once before any property access. + override testCase.Initialize () = + base.Initialize() + testCase.TestMethod <- TestCaseCustomizations.rewriteTestMethod testCase + +type CustomTheoryTestCase = + inherit XunitTheoryTestCase + new() = { inherit XunitTheoryTestCase() } + + new(sink: IMessageSink, md, mdo, testMethod) = { inherit XunitTheoryTestCase(sink, md, mdo, testMethod) } + + override testCase.RunAsync (sink, bus, args, aggregator, cts) = + let runner : XunitTestCaseRunner = + { new XunitTheoryTestCaseRunner(testCase, testCase.DisplayName, testCase.SkipReason, args, sink, bus, aggregator, cts) with + override this.CreateTestRunner(test, bus, testCase, args, testMethod, methodArgs, skipReason, attrs, aggregator, cts) = + ConsoleCapturingTestRunner(test, bus, testCase, args, testMethod, methodArgs, skipReason, attrs, aggregator, cts) + } + runner.RunAsync() + + override testCase.Initialize () = + base.Initialize() + testCase.TestMethod <- TestCaseCustomizations.rewriteTestMethod testCase + +/// `XunitTestFramework` providing parallel console support and conditionally enabling optional xUnit customizations. +type FSharpXunitFramework(sink: IMessageSink) = + inherit XunitTestFramework(sink) + do + // Because xUnit v2 lacks assembly fixture, the next best place to ensure things get called + // right at the start of the test run is here in the constructor. + // This gets executed once per test assembly. + log "FSharpXunitFramework with XUNIT_EXTRAS installing TestConsole redirection" + TestConsole.install() + + interface IDisposable with + member _.Dispose() = + cleanUpTemporaryDirectoryOfThisTestRun () + base.Dispose() + + override this.CreateDiscoverer (assemblyInfo) = + { new XunitTestFrameworkDiscoverer(assemblyInfo, this.SourceInformationProvider, this.DiagnosticMessageSink) with + override _.FindTestsForType (testClass, includeSourceInformation, messageBus, options) = + // Intercepts test discovery messages to augment test cases with additional capabilities. + let customizingBus = + { new IMessageBus with + member _.QueueMessage (message: IMessageSinkMessage) = + match message with + | :? ITestCaseDiscoveryMessage as discoveryMessage -> + let customized: ITestCase = + match discoveryMessage.TestCase with + | :? XunitTheoryTestCase -> + new CustomTheoryTestCase( + sink, + options.MethodDisplayOrDefault(), + options.MethodDisplayOptionsOrDefault(), + discoveryMessage.TestCase.TestMethod, + SourceInformation = discoveryMessage.TestCase.SourceInformation + ) + | :? XunitTestCase -> + new CustomTestCase( + sink, + options.MethodDisplayOrDefault(), + options.MethodDisplayOptionsOrDefault(), + discoveryMessage.TestCase.TestMethod, + discoveryMessage.TestCase.TestMethodArguments, + SourceInformation = discoveryMessage.TestCase.SourceInformation + ) + | testCase -> testCase + messageBus.QueueMessage(TestCaseDiscoveryMessage customized) + | _ -> + messageBus.QueueMessage message + member _.Dispose () = messageBus.Dispose() } + base.FindTestsForType(testClass, includeSourceInformation, customizingBus, options) + } + +#endif diff --git a/tests/FSharp.Test.Utilities/XunitSetup.fs b/tests/FSharp.Test.Utilities/XunitSetup.fs index fb43569b1d0..97b4adbba01 100644 --- a/tests/FSharp.Test.Utilities/XunitSetup.fs +++ b/tests/FSharp.Test.Utilities/XunitSetup.fs @@ -2,6 +2,11 @@ namespace FSharp.Test open Xunit +/// Exclude from parallelization. Execute test cases in sequence and do not run any other collections at the same time. +/// see https://github.com/xunit/xunit/issues/1999#issuecomment-522635397 +[] +type NotThreadSafeResourceCollection = class end + module XUnitSetup = [] diff --git a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_net9.0.bsl b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_net9.0.bsl index bd1c0f3f56c..901f7434dfd 100644 --- a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_net9.0.bsl +++ b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_net9.0.bsl @@ -59,7 +59,7 @@ [IL]: Error [StackUnexpected]: : FSharp.Compiler.AbstractIL.IL::parseILVersion(string)][offset 0x0000000B][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : FSharp.Compiler.AbstractIL.IL::parseILVersion(string)][offset 0x00000021][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$FSharp.Compiler.DiagnosticsLogger::.cctor()][offset 0x000000CD][found Char] Unexpected type on the stack. -[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@548::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. +[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@546::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000037][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000043][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$Internal.Utilities.XmlAdapters::.cctor()][offset 0x0000000A][found Char] Unexpected type on the stack. diff --git a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_netstandard2.0.bsl b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_netstandard2.0.bsl index bd2d4888522..7ae4f3e43ca 100644 --- a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_netstandard2.0.bsl +++ b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Debug_netstandard2.0.bsl @@ -84,7 +84,7 @@ [IL]: Error [StackUnexpected]: : Internal.Utilities.FSharpEnvironment+probePathForDotnetHost@321::Invoke([FSharp.Core]Microsoft.FSharp.Core.Unit)][offset 0x00000028][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : FSharp.Compiler.CodeAnalysis.SimulatedMSBuildReferenceResolver+Pipe #6 input at line 68@68::FSharp.Compiler.CodeAnalysis.ILegacyReferenceResolver.Resolve([FSharp.Compiler.Service]FSharp.Compiler.CodeAnalysis.LegacyResolutionEnvironment, [S.P.CoreLib]System.Tuple`2[], string, [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1, string, string, [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1, string, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>>)][offset 0x0000034D][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$FSharp.Compiler.DiagnosticsLogger::.cctor()][offset 0x000000CD][found Char] Unexpected type on the stack. -[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@548::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. +[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@546::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000037][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000043][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$Internal.Utilities.XmlAdapters::.cctor()][offset 0x0000000A][found Char] Unexpected type on the stack. diff --git a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_net9.0.bsl b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_net9.0.bsl index 20f8131d238..99af17bef5a 100644 --- a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_net9.0.bsl +++ b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_net9.0.bsl @@ -85,7 +85,7 @@ [IL]: Error [StackUnexpected]: : FSharp.Compiler.AbstractIL.IL::parseILVersion(string)][offset 0x0000000B][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : FSharp.Compiler.AbstractIL.IL::parseILVersion(string)][offset 0x00000021][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$FSharp.Compiler.DiagnosticsLogger::.cctor()][offset 0x000000B6][found Char] Unexpected type on the stack. -[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@548::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. +[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@546::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000035][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000041][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$Internal.Utilities.XmlAdapters::.cctor()][offset 0x0000000A][found Char] Unexpected type on the stack. diff --git a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_netstandard2.0.bsl b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_netstandard2.0.bsl index c5ce02a7c08..3ef589fcd21 100644 --- a/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_netstandard2.0.bsl +++ b/tests/ILVerify/ilverify_FSharp.Compiler.Service_Release_netstandard2.0.bsl @@ -111,7 +111,7 @@ [IL]: Error [StackUnexpected]: : Internal.Utilities.FSharpEnvironment::probePathForDotnetHost@320([FSharp.Core]Microsoft.FSharp.Core.Unit)][offset 0x0000002A][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : FSharp.Compiler.CodeAnalysis.SimulatedMSBuildReferenceResolver+SimulatedMSBuildResolver@68::FSharp.Compiler.CodeAnalysis.ILegacyReferenceResolver.Resolve([FSharp.Compiler.Service]FSharp.Compiler.CodeAnalysis.LegacyResolutionEnvironment, [S.P.CoreLib]System.Tuple`2[], string, [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1, string, string, [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1, string, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>>)][offset 0x000002F5][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$FSharp.Compiler.DiagnosticsLogger::.cctor()][offset 0x000000B6][found Char] Unexpected type on the stack. -[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@548::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. +[IL]: Error [CallVirtOnValueType]: : FSharp.Compiler.Text.RangeModule+comparer@546::System.Collections.Generic.IEqualityComparer.GetHashCode([FSharp.Compiler.Service]FSharp.Compiler.Text.Range)][offset 0x00000002] Callvirt on a value type method. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000035][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : Internal.Utilities.PathMapModule::applyDir([FSharp.Compiler.Service]Internal.Utilities.PathMap, string)][offset 0x00000041][found Char] Unexpected type on the stack. [IL]: Error [StackUnexpected]: : .$Internal.Utilities.XmlAdapters::.cctor()][offset 0x0000000A][found Char] Unexpected type on the stack. diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/DeterministicTests.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/DeterministicTests.fs index 057004ff01f..c29c0ecb8a5 100644 --- a/tests/fsharp/Compiler/CodeGen/EmittedIL/DeterministicTests.fs +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/DeterministicTests.fs @@ -8,7 +8,7 @@ open FSharp.Test.Compiler open Xunit - +[] module DeterministicTests = let commonOptions = ["--refonly";"--deterministic";"--nooptimizationdata"] diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index dc8fb5a164e..753af0ce4aa 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -20,7 +20,6 @@ XunitSetup.fs - diff --git a/tests/fsharp/TypeProviderTests.fs b/tests/fsharp/TypeProviderTests.fs index ab9f2e7e5ef..8ce84d59338 100644 --- a/tests/fsharp/TypeProviderTests.fs +++ b/tests/fsharp/TypeProviderTests.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. #if INTERACTIVE //#r @"../../release/net40/bin/FSharp.Compiler.dll" diff --git a/tests/fsharp/XunitHelpers.fs b/tests/fsharp/XunitHelpers.fs deleted file mode 100644 index 6bfb5031f13..00000000000 --- a/tests/fsharp/XunitHelpers.fs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Xunit - -open Xunit - -module Assert = - - [] - do() diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 8b13fc003a3..0dc078e506c 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -763,7 +763,7 @@ module CoreTests = #endif -#if !NETCOREAPP +#if !NETCOREAPP [] let quotes () = let cfg = testConfig "core/quotes" diff --git a/tests/fsharp/xunit.runner.json b/tests/fsharp/xunit.runner.json index c222a4167a8..f47fec5d745 100644 --- a/tests/fsharp/xunit.runner.json +++ b/tests/fsharp/xunit.runner.json @@ -1,4 +1,5 @@ { "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", - "appDomain": "denied" + "appDomain": "denied", + "parallelizeAssembly": true } \ No newline at end of file diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl index ef072f38185..b8e35227384 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl @@ -18,7 +18,7 @@ Usage: fsiAnyCpu [script.fsx []] - CODE GENERATION - --debug[+|-] Emit debug information (Short form: - -g) + -g) (on by default) --debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, embedded, pdbonly. ('pdbonly' is the default if no @@ -29,33 +29,35 @@ Usage: fsiAnyCpu [script.fsx []] a cross-platform format embedded into the output file). --optimize[+|-] Enable optimizations (Short form: - -O) ---tailcalls[+|-] Enable or disable tailcalls + -O) (on by default) +--tailcalls[+|-] Enable or disable tailcalls (on by + default) --deterministic[+|-] Produce a deterministic assembly (including module version GUID and - timestamp) + timestamp) (off by default) --realsig[+|-] Generate assembly with IL visibility that matches the source code - visibility + visibility (off by default) --pathmap: Maps physical paths to source path names output by the compiler --crossoptimize[+|-] Enable or disable cross-module - optimizations + optimizations (on by default) --reflectionfree Disable implicit generation of constructs using reflection - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-] Report all warnings as errors (off + by default) --warnaserror[+|-]: Report specific warnings as errors --warn: Set a warning level (0-5) --nowarn: Disable specific warning messages --warnon: Enable specific warnings that may be off by default --checknulls[+|-] Enable nullness declarations and - checks + checks (off by default) --consolecolors[+|-] Output warning and error messages in - color + color (on by default) - LANGUAGE - @@ -63,12 +65,14 @@ Usage: fsiAnyCpu [script.fsx []] language version. --langversion:{version|latest|preview} Specify language version such as 'latest' or 'preview'. ---checked[+|-] Generate overflow checks +--checked[+|-] Generate overflow checks (off by + default) --define: Define conditional compilation symbols (Short form: -d) --mlcompatibility Ignore ML compatibility warnings --strict-indentation[+|-] Override indentation rules implied - by the language version + by the language version (off by + default) - MISCELLANEOUS - @@ -110,9 +114,11 @@ Usage: fsiAnyCpu [script.fsx []] --readline[+|-] Support TAB completion in console (on by default) --quotations-debug[+|-] Emit debug information in quotations + (off by default) --shadowcopyreferences[+|-] Prevents references from being locked by the F# Interactive process + (off by default) --multiemit[+|-] Emit multiple assemblies (on by default) -See https://learn.microsoft.com/dotnet/fsharp/language-reference/fsharp-interactive-options for more details. \ No newline at end of file +See https://learn.microsoft.com/dotnet/fsharp/language-reference/fsharp-interactive-options for more details. diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl index 63845b3e13a..7c8c9a4f4ba 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl @@ -1,4 +1,4 @@ -Microsoft (R) F# Interactive version 10.2.3 for F# 4.5 +Microsoft (R) F# Interactive version 13.9.200.0 for F# 9.0 Copyright (c) Microsoft Corporation. All Rights Reserved. Usage: fsiAnyCpu [script.fsx []] @@ -20,7 +20,7 @@ Usage: fsiAnyCpu [script.fsx []] - CODE GENERATION - --debug[+|-] Emit debug information (Short form: - -g) + -g) (on by default) --debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, embedded, pdbonly. ('pdbonly' is the default if no @@ -31,33 +31,35 @@ Usage: fsiAnyCpu [script.fsx []] a cross-platform format embedded into the output file). --optimize[+|-] Enable optimizations (Short form: - -O) ---tailcalls[+|-] Enable or disable tailcalls + -O) (on by default) +--tailcalls[+|-] Enable or disable tailcalls (on by + default) --deterministic[+|-] Produce a deterministic assembly (including module version GUID and - timestamp) + timestamp) (off by default) --realsig[+|-] Generate assembly with IL visibility that matches the source code - visibility + visibility (off by default) --pathmap: Maps physical paths to source path names output by the compiler --crossoptimize[+|-] Enable or disable cross-module - optimizations + optimizations (on by default) --reflectionfree Disable implicit generation of constructs using reflection - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-] Report all warnings as errors (off + by default) --warnaserror[+|-]: Report specific warnings as errors --warn: Set a warning level (0-5) --nowarn: Disable specific warning messages --warnon: Enable specific warnings that may be off by default --checknulls[+|-] Enable nullness declarations and - checks + checks (off by default) --consolecolors[+|-] Output warning and error messages in - color + color (on by default) - LANGUAGE - @@ -65,12 +67,14 @@ Usage: fsiAnyCpu [script.fsx []] language version. --langversion:{version|latest|preview} Specify language version such as 'latest' or 'preview'. ---checked[+|-] Generate overflow checks +--checked[+|-] Generate overflow checks (off by + default) --define: Define conditional compilation symbols (Short form: -d) --mlcompatibility Ignore ML compatibility warnings --strict-indentation[+|-] Override indentation rules implied - by the language version + by the language version (off by + default) - MISCELLANEOUS - @@ -112,9 +116,11 @@ Usage: fsiAnyCpu [script.fsx []] --readline[+|-] Support TAB completion in console (on by default) --quotations-debug[+|-] Emit debug information in quotations + (off by default) --shadowcopyreferences[+|-] Prevents references from being locked by the F# Interactive process + (off by default) --multiemit[+|-] Emit multiple assemblies (on by default) -See https://learn.microsoft.com/dotnet/fsharp/language-reference/fsharp-interactive-options for more details. \ No newline at end of file +See https://learn.microsoft.com/dotnet/fsharp/language-reference/fsharp-interactive-options for more details. diff --git a/tests/scripts/scriptlib.fsx b/tests/scripts/scriptlib.fsx index 04b23a93fa8..ea1a5a63737 100644 --- a/tests/scripts/scriptlib.fsx +++ b/tests/scripts/scriptlib.fsx @@ -31,7 +31,7 @@ module Scripting = let info = ProcessStartInfo(Arguments=arguments, UseShellExecute=false, RedirectStandardOutput=true, RedirectStandardError=true, CreateNoWindow=true, FileName=fileName) - let p = new Process(StartInfo=info) + use p = new Process(StartInfo=info) p.OutputDataReceived.Add(fun x -> processWriteMessage stdout x.Data) p.ErrorDataReceived.Add(fun x -> processWriteMessage stderr x.Data) if p.Start() then @@ -121,7 +121,7 @@ module Scripting = ignore envs // work out what to do about this - let p = new Process() + use p = new Process() p.EnableRaisingEvents <- true p.StartInfo <- processInfo let out = StringBuilder() @@ -163,11 +163,14 @@ module Scripting = p.WaitForExit() + printf $"{string out}" + eprintf $"{string err}" + match p.ExitCode with | 0 -> Success(string out) | errCode -> - let msg = sprintf "Error running command '%s' with args '%s' in directory '%s'.\n---- stdout below --- \n%s\n---- stderr below --- \n%s " exePath arguments workDir (out.ToString()) (err.ToString()) + let msg = sprintf "Error running command '%s' with args '%s' in directory '%s'" exePath arguments workDir ErrorLevel (msg, errCode) type OutPipe (writer: TextWriter) = @@ -177,8 +180,6 @@ module Scripting = let redirectTo (writer: TextWriter) = new OutPipe (writer) - let redirectToLog () = redirectTo System.Console.Out - #if !NETCOREAPP let defaultPlatform = match Environment.OSVersion.Platform, Environment.Is64BitOperatingSystem with @@ -192,7 +193,7 @@ module Scripting = let info = ProcessStartInfo(Arguments=arguments, UseShellExecute=false, RedirectStandardOutput=true, RedirectStandardError=true,RedirectStandardInput=true, CreateNoWindow=true, FileName=fileName) - let p = new Process(StartInfo=info) + use p = new Process(StartInfo=info) if p.Start() then async { try