未验证 提交 1821ffc8 编写于 作者: T Tomas Grosup 提交者: GitHub

Prevent IDE crash in case of file duplicate in fsproj (#14496)

* Prevent IDE crash in case of file duplicate in fsproj

- Prevent IDE error in the first place
- Report diagnostics in case of fsc.exe build
- Report warning in case of service build
- Fix bug in componenttest framework for .fsi compilation
上级 8ba08345
......@@ -2304,6 +2304,23 @@ let GetCoreFsiCompilerOptions (tcConfigB: TcConfigBuilder) =
)
]
let CheckAndReportSourceFileDuplicates (sourceFiles: ResizeArray<string>) =
let visited = Dictionary.newWithSize (sourceFiles.Count * 2)
let count = sourceFiles.Count
[
for i = 0 to (count - 1) do
let source = sourceFiles[i]
match visited.TryGetValue source with
| true, duplicatePosition ->
warning (Error(FSComp.SR.buildDuplicateFile (source, i + 1, count, duplicatePosition + 1, count), range0))
| false, _ ->
visited.Add(source, i)
yield source
]
let ApplyCommandLineArgs (tcConfigB: TcConfigBuilder, sourceFiles: string list, argv) =
try
let sourceFilesAcc = ResizeArray sourceFiles
......@@ -2313,7 +2330,7 @@ let ApplyCommandLineArgs (tcConfigB: TcConfigBuilder, sourceFiles: string list,
sourceFilesAcc.Add name
ParseCompilerOptions(collect, GetCoreServiceCompilerOptions tcConfigB, argv)
ResizeArray.toList sourceFilesAcc
sourceFilesAcc |> CheckAndReportSourceFileDuplicates
with e ->
errorRecovery e range0
sourceFiles
......
......@@ -66,6 +66,8 @@ val GetCoreFsiCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list
val GetCoreServiceCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list
val CheckAndReportSourceFileDuplicates: ResizeArray<string> -> string list
/// Apply args to TcConfigBuilder and return new list of source files
val ApplyCommandLineArgs: tcConfigB: TcConfigBuilder * sourceFiles: string list * argv: string list -> string list
......
......@@ -536,6 +536,7 @@ let main1
// Rather than start processing, just collect names, then process them.
try
let files = ProcessCommandLineFlags(tcConfigB, lcidFromCodePage, argv)
let files = CheckAndReportSourceFileDuplicates(ResizeArray.ofList files)
AdjustForScriptCompile(tcConfigB, files, lexResourceManager, dependencyProvider)
with e ->
errorRecovery e rangeStartup
......
......@@ -1663,4 +1663,5 @@ reprStateMachineInvalidForm,"The state machine has an unexpected form"
3548,matchNotAllowedForUnionCaseWithNoData,"Pattern discard is not allowed for union case that takes no data."
3549,tcSynTypeOrInvalidInDeclaration,"SynType.Or is not permitted in this declaration"
3550,chkDuplicatedMethodParameter,"Duplicate parameter. The parameter '%s' has been used more that once in this method."
3551,buildDuplicateFile,"The source file '%s' (at position %d/%d) already appeared in the compilation list (at position %d/%d). Please verify that it is included only once in the project file."
featureEscapeBracesInFormattableString,"Escapes curly braces before calling FormattableStringFactory.Create when interpolated string literal is typed as FormattableString"
\ No newline at end of file
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">Soubor {0} má nerozpoznanou příponu. Zdrojové soubory musí mít příponu .fs, .fsi, .fsx nebo .fsscript. Pokud chcete povolit použití zastaralých přípon .ml nebo .mli, použijte parametry --langversion:5.0 a --mlcompatibility.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">Die Dateierweiterung von „{0}“ wurde nicht erkannt. Quelldateien müssen die Erweiterung .fs, .fsi, .fsx oder .fsscript haben. Um die veraltete Verwendung der Erweiterungen .ml oder .mli zu aktivieren, verwenden Sie „--langversion:5.0“ und „--mlcompatibility“.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">No se reconoce la extensión de archivo de '{0}'. Los archivos de código fuente deben tener las extensiones .fs, .fsi, .fsx o .fsscript. Para habilitar el uso en desuso de las extensiones .ml o .mli, use '--langversion:5.0' y '--mlcompatibility'.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">L’extension de fichier « {0} » n’est pas reconnue. Les fichiers sources doivent avoir l’extension. FS,. FSI,. FSX ou. fsscript. Pour activer l’utilisation déconseillée des extensions. ml ou. MLI, utilisez'--langversion : 5.0 'et'--mlcompatibility'.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">L'estensione di file di '{0}' non è riconosciuta. I file di origine devono avere estensione fs, fsi, fsx o fsscript. Per abilitare l'uso deprecato delle estensioni ml o mli, usare '--langversion:5.0' e '--mlcompatibility'.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">'{0}' のファイル拡張子を認識できません。ソース ファイル拡張子は .fs、.fsi、.fsx、または .fsscript にする必要があります。非推奨の拡張子 .ml または .mli の使用を有効にするには、'--langversion:5.0' および '--mlcompatibility' を使用してください。</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">'{0}'의 파일 확장자가 인식되지 않습니다. 원본 파일의 확장자는 .fs, .fsi, .fsx 또는 .fsscript여야 합니다. 더 이상 사용되지 않는 .ml 또는 .mli 확장자를 사용하려면 '--langversion:5.0' 및 '--mlcompatibility'를 사용하세요.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">Rozszerzenie pliku "{0}" nie zostało rozpoznane. Pliki źródłowe muszą mieć rozszerzenie .fs, .fsi, .fsx lub .fsscript. Aby włączyć przestarzałe używanie rozszerzeń. ml lub .mli, użyj polecenia "--langversion: 5.0" i "--mlcompatibility".</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">A extensão do arquivo '{0}' não foi reconhecida. Os arquivos de origem devem ter a extensão .fs, .fsi, .fsx ou .fsscript. Para ativar o uso preterido das extensões .ml ou .mli, use '--langversion:5.0' e '--mlcompatibility'.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">Расширение файла "{0}" не распознано. Исходные файлы должны иметь расширения FS, FSI, FSX или FSSCRIPT. Чтобы включить использование нерекомендуемых расширений ML или MLI, примените команду "--langversion:5.0" и "--mlcompatibility".</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">'{0}' kaynak dosyasının dosya uzantısı tanınmadı. Kaynak dosyaların uzantısı .fs, .fsi, .fsx veya .fsscript olmalıdır. Kullanım dışı .ml veya .mli uzantılarını etkinleştirmek için '--langversion:5.0' ve '--mlcompatibility' kullanın.</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">无法识别“{0}”的文件扩展名。源文件必须具有扩展名 .fs、.fsi、.fsx 或 .fsscript。要启用已弃用的 .ml 或 .mli 扩展名,请使用 “--langversion:5.0” 和 “--mlcompatibility”。</target>
......
......@@ -7,6 +7,11 @@
<target state="new">All elements of an array must be implicitly convertible to the type of the first element, which here is a tuple of length {0} of type\n {1} \nThis element is a tuple of length {2} of type\n {3} \n</target>
<note />
</trans-unit>
<trans-unit id="buildDuplicateFile">
<source>The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</source>
<target state="new">The source file '{0}' (at position {1}/{2}) already appeared in the compilation list (at position {3}/{4}). Please verify that it is included only once in the project file.</target>
<note />
</trans-unit>
<trans-unit id="buildInvalidSourceFileExtensionML">
<source>The file extension of '{0}' is not recognized. Source files must have extension .fs, .fsi, .fsx or .fsscript. To enable the deprecated use of .ml or .mli extensions, use '--langversion:5.0' and '--mlcompatibility'.</source>
<target state="translated">無法辨識 '{0}' 的副檔名。來源檔案的副檔名必須是 fsi、.fsx 或 .fsscript。若要啟用已被取代的 .ml 或 .mli 副檔名,請使用 '--langversion:5.0' and '--mlcompatibility'。</target>
......
// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
module FSharp.Compiler.ComponentTests.CompilerOptions.FscSourceFilesArguments
open Xunit
open FSharp.Test
open FSharp.Test.Compiler
[<Fact>]
let ``Reports duplicate sources via warning``() =
let file = SourceCodeFileKind.Fs({FileName="test.fs"; SourceText=Some """printfn "Hello" """ })
fsFromString file
|> FS
|> asExe
|> withAdditionalSourceFile file
|> compile
|> withWarningCodes [3551]
|> withErrorCodes []
\ No newline at end of file
......@@ -2,7 +2,7 @@
// Regression test for FSHARP1.0:4040
// "Signature files do not prevent compiler-generated public constructors from leaking out of discriminated unions"
// Note that the corresponsing .fsi file is NOT missing the "| C of int" part of the DU
namespace N
module N
type T = | C of int
......
......@@ -199,6 +199,7 @@
<Compile Include="CompilerOptions\fsc\reference.fs" />
<Compile Include="CompilerOptions\fsc\reflectionfree.fs" />
<Compile Include="CompilerOptions\fsc\refonlyrefout.fs" />
<Compile Include="CompilerOptions\fsc\sourceFiles.fs" />
<Compile Include="Debugger\PortablePdbs.fs" />
<Compile Include="Diagnostics\async.fs" />
<Compile Include="Diagnostics\General.fs" />
......
......@@ -89,3 +89,13 @@ let ``Changes in a referenced project`` () =
saveFile "Library"
checkFile "Last" expectSignatureChanged
}
[<Fact>]
let ``Language service works if the same file is listed twice`` () =
let file = sourceFile "First" []
let project = SyntheticProject.Create(file)
project.Workflow {
checkFile "First" expectOk
addFileAbove "First" file
checkFile "First" (expectSingleWarningAndNoErrors "Please verify that it is included only once in the project file.")
}
\ No newline at end of file
......@@ -193,7 +193,7 @@ module rec Compiler =
// Load the source file from the path
let loadSourceFromFile path = getSource(TestType.Path path)
let private fsFromString (source: SourceCodeFileKind): FSharpCompilationSource =
let fsFromString (source: SourceCodeFileKind): FSharpCompilationSource =
{
Source = source
AdditionalSources = []
......@@ -321,6 +321,7 @@ module rec Compiler =
let asFs (cUnit: CompilationUnit) : CompilationUnit =
match cUnit with
| FS { Source = SourceCodeFileKind.Fsi _} -> cUnit
| FS src -> FS {src with Source=SourceCodeFileKind.Fs({FileName=src.Source.GetSourceFileName; SourceText=src.Source.GetSourceText})}
| _ -> failwith "Only F# compilation can be of type Fs."
......
......@@ -222,15 +222,6 @@ module Internal =
let content = renderSourceFile p f
writeFileIfChanged fileName content
let validateFileIdsAreUnique (project: SyntheticProject) =
let ids = [ for _, f in project.GetAllFiles() -> f.Id ]
let duplicates = ids |> List.groupBy id |> List.filter (fun (_, g) -> g.Length > 1)
if duplicates.Length > 0 then
failwith
$"""Source file IDs have to be unique across the project and all referenced projects. Found duplicates: {String.Join(", ", duplicates |> List.map fst)}"""
open Internal
......@@ -311,6 +302,21 @@ module ProjectOperations =
if checkResult.Diagnostics.Length > 0 then
failwith $"Expected no errors, but there were some: \n%A{checkResult.Diagnostics}"
let expectSingleWarningAndNoErrors (warningSubString:string) parseAndCheckResults _ =
let checkResult = getTypeCheckResult parseAndCheckResults
let errors = checkResult.Diagnostics|> Array.filter (fun d -> d.Severity = FSharpDiagnosticSeverity.Error)
if errors.Length > 0 then
failwith $"Expected no errors, but there were some: \n%A{errors}"
let warnings = checkResult.Diagnostics|> Array.filter (fun d -> d.Severity = FSharpDiagnosticSeverity.Warning)
match warnings |> Array.tryExactlyOne with
| None -> failwith $"Expected 1 warning, but got {warnings.Length} instead: \n%A{warnings}"
| Some w ->
if w.Message.Contains warningSubString then
()
else
failwith $"Expected 1 warning with substring '{warningSubString}' but got %A{w}"
let expectErrors parseAndCheckResults _ =
let checkResult = getTypeCheckResult parseAndCheckResults
......@@ -378,7 +384,6 @@ type WorkflowContext =
let SaveAndCheckProject project checker =
async {
validateFileIdsAreUnique project
do! saveProject project true checker
......
ReqENU SOURCE=gccerrors01.fs COMPILE_ONLY=1 SCFLAGS="--gccerrors --nologo gccerrors01.fs >gccerrors01.txt" POSTCMD="\$FSI_PIPE --nologo --quiet --exec ..\\..\\..\\comparer.fsx gccerrors01.txt gccerrors01.bsl"
ReqENU SOURCE=gccerrors01.fs COMPILE_ONLY=1 SCFLAGS="--gccerrors --nologo >gccerrors01.txt" POSTCMD="\$FSI_PIPE --nologo --quiet --exec ..\\..\\..\\comparer.fsx gccerrors01.txt gccerrors01.bsl"
......@@ -10,7 +10,7 @@ CompilerOptions01,NoMT CompilerOptions\fsc\crossoptimize
CompilerOptions01,NoMT,Determinism CompilerOptions\fsc\determinism
CompilerOptions01,NoMT CompilerOptions\fsc\dumpAllCommandLineOptions
CompilerOptions01,NoMT CompilerOptions\fsc\flaterrors
CompilerOptions02,NoMT CompilerOptions\fsc\gccerrors
CompilerOptions02,NoMT,gcc CompilerOptions\fsc\gccerrors
CompilerOptions01,NoMT,help CompilerOptions\fsc\help
CompilerOptions01,NoMT CompilerOptions\fsc\highentropyva
CompilerOptions01,NoMT CompilerOptions\fsc\langversion
......
......@@ -60,4 +60,4 @@ let runPerl arguments =
let testResultDir = Path.Combine(rootFolder, "tests", "TestResults")
let perlScript = Path.Combine(rootFolder, "tests", "fsharpqa", "testenv", "bin", "runall.pl")
runPerl [|perlScript; "-resultsroot";testResultDir ;"-ttags:Determinism"|]
\ No newline at end of file
runPerl [|perlScript; "-resultsroot";testResultDir ;"-ttags:gcc"|]
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册