@@ -99,14 +99,14 @@ module Helpers =
9999 | _ -> false
100100
101101module CompileHelpers =
102- let mkCompilationDiagnosticsHandlers () =
102+ let mkCompilationDiagnosticsHandlers ( flatErrors ) =
103103 let diagnostics = ResizeArray<_>()
104104
105105 let diagnosticsLogger =
106106 { new DiagnosticsLogger( " CompileAPI" ) with
107107
108108 member _.DiagnosticSink ( diag , isError ) =
109- diagnostics.Add( FSharpDiagnostic.CreateFromException( diag, isError, range0, true )) // Suggest names for errors
109+ diagnostics.Add( FSharpDiagnostic.CreateFromException( diag, isError, range0, true , flatErrors )) // Suggest names for errors
110110
111111 member _.ErrorCount =
112112 diagnostics
@@ -137,7 +137,8 @@ module CompileHelpers =
137137 /// Compile using the given flags. Source files names are resolved via the FileSystem API. The output file must be given by a -o flag.
138138 let compileFromArgs ( ctok , argv : string [], legacyReferenceResolver , tcImportsCapture , dynamicAssemblyCreator ) =
139139
140- let diagnostics , diagnosticsLogger , loggerProvider = mkCompilationDiagnosticsHandlers ()
140+ let diagnostics , diagnosticsLogger , loggerProvider =
141+ mkCompilationDiagnosticsHandlers ( argv |> Array.contains " --flaterrors" )
141142
142143 let result =
143144 tryCompile diagnosticsLogger ( fun exiter ->
@@ -487,7 +488,7 @@ type BackgroundCompiler
487488 checkFileInProjectCache.Set( ltok, key, res)
488489 res)
489490
490- member _.ParseFile ( fileName : string , sourceText : ISourceText , options : FSharpParsingOptions , cache : bool , userOpName : string ) =
491+ member _.ParseFile ( fileName : string , sourceText : ISourceText , options : FSharpParsingOptions , cache : bool , flatErrors : bool , userOpName : string ) =
491492 async {
492493 use _ =
493494 Activity.start
@@ -507,14 +508,22 @@ type BackgroundCompiler
507508 Interlocked.Increment(& actualParseFileCount) |> ignore
508509
509510 let parseDiagnostics , parseTree , anyErrors =
510- ParseAndCheckFile.parseFile ( sourceText, fileName, options, userOpName, suggestNamesForErrors, captureIdentifiersWhenParsing)
511+ ParseAndCheckFile.parseFile (
512+ sourceText,
513+ fileName,
514+ options,
515+ userOpName,
516+ suggestNamesForErrors,
517+ flatErrors,
518+ captureIdentifiersWhenParsing
519+ )
511520
512521 let res = FSharpParseFileResults( parseDiagnostics, parseTree, anyErrors, options.SourceFiles)
513522 parseCacheLock.AcquireLock( fun ltok -> parseFileCache.Set( ltok, ( fileName, hash, options), res))
514523 return res
515524 else
516525 let parseDiagnostics , parseTree , anyErrors =
517- ParseAndCheckFile.parseFile ( sourceText, fileName, options, userOpName, false , captureIdentifiersWhenParsing)
526+ ParseAndCheckFile.parseFile ( sourceText, fileName, options, userOpName, false , flatErrors , captureIdentifiersWhenParsing)
518527
519528 return FSharpParseFileResults( parseDiagnostics, parseTree, anyErrors, options.SourceFiles)
520529 }
@@ -537,7 +546,14 @@ type BackgroundCompiler
537546 let parseTree , _ , _ , parseDiagnostics = builder.GetParseResultsForFile fileName
538547
539548 let parseDiagnostics =
540- DiagnosticHelpers.CreateDiagnostics( builder.TcConfig.diagnosticsOptions, false , fileName, parseDiagnostics, suggestNamesForErrors)
549+ DiagnosticHelpers.CreateDiagnostics(
550+ builder.TcConfig.diagnosticsOptions,
551+ false ,
552+ fileName,
553+ parseDiagnostics,
554+ suggestNamesForErrors,
555+ builder.TcConfig.flatErrors
556+ )
541557
542558 let diagnostics = [| yield ! creationDiags; yield ! parseDiagnostics |]
543559
@@ -767,6 +783,7 @@ type BackgroundCompiler
767783 parsingOptions,
768784 userOpName,
769785 suggestNamesForErrors,
786+ builder.TcConfig.flatErrors,
770787 captureIdentifiersWhenParsing
771788 )
772789
@@ -835,12 +852,26 @@ type BackgroundCompiler
835852 let diagnosticsOptions = builder.TcConfig.diagnosticsOptions
836853
837854 let parseDiagnostics =
838- DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, false , fileName, parseDiagnostics, suggestNamesForErrors)
855+ DiagnosticHelpers.CreateDiagnostics(
856+ diagnosticsOptions,
857+ false ,
858+ fileName,
859+ parseDiagnostics,
860+ suggestNamesForErrors,
861+ builder.TcConfig.flatErrors
862+ )
839863
840864 let parseDiagnostics = [| yield ! creationDiags; yield ! parseDiagnostics |]
841865
842866 let tcDiagnostics =
843- DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, false , fileName, tcDiagnostics, suggestNamesForErrors)
867+ DiagnosticHelpers.CreateDiagnostics(
868+ diagnosticsOptions,
869+ false ,
870+ fileName,
871+ tcDiagnostics,
872+ suggestNamesForErrors,
873+ builder.TcConfig.flatErrors
874+ )
844875
845876 let tcDiagnostics = [| yield ! creationDiags; yield ! tcDiagnostics |]
846877
@@ -994,7 +1025,14 @@ type BackgroundCompiler
9941025 let tcDependencyFiles = tcInfo.tcDependencyFiles
9951026
9961027 let tcDiagnostics =
997- DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, true , fileName, tcDiagnostics, suggestNamesForErrors)
1028+ DiagnosticHelpers.CreateDiagnostics(
1029+ diagnosticsOptions,
1030+ true ,
1031+ fileName,
1032+ tcDiagnostics,
1033+ suggestNamesForErrors,
1034+ builder.TcConfig.flatErrors
1035+ )
9981036
9991037 let diagnostics = [| yield ! creationDiags; yield ! tcDiagnostics |]
10001038
@@ -1083,8 +1121,6 @@ type BackgroundCompiler
10831121 [| Activity.Tags.fileName, fileName; Activity.Tags.userOpName, _ userOpName |]
10841122
10851123 cancellable {
1086- use diagnostics = new DiagnosticsScope()
1087-
10881124 // Do we add a reference to FSharp.Compiler.Interactive.Settings by default?
10891125 let useFsiAuxLib = defaultArg useFsiAuxLib true
10901126 let useSdkRefs = defaultArg useSdkRefs true
@@ -1102,6 +1138,8 @@ type BackgroundCompiler
11021138
11031139 let otherFlags = defaultArg otherFlags extraFlags
11041140
1141+ use diagnostics = new DiagnosticsScope( otherFlags |> Array.contains " --flaterrors" )
1142+
11051143 let useSimpleResolution = otherFlags |> Array.exists ( fun x -> x = " --simpleresolution" )
11061144
11071145 let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading
@@ -1159,7 +1197,8 @@ type BackgroundCompiler
11591197
11601198 let diags =
11611199 loadClosure.LoadClosureRootFileDiagnostics
1162- |> List.map ( fun ( exn , isError ) -> FSharpDiagnostic.CreateFromException( exn, isError, range.Zero, false ))
1200+ |> List.map ( fun ( exn , isError ) ->
1201+ FSharpDiagnostic.CreateFromException( exn, isError, range.Zero, false , options.OtherOptions |> Array.contains " --flaterrors" ))
11631202
11641203 return options, ( diags @ diagnostics.Diagnostics)
11651204 }
@@ -1414,7 +1453,7 @@ type FSharpChecker
14141453 member _.ParseFile ( fileName , sourceText , options , ? cache , ? userOpName : string ) =
14151454 let cache = defaultArg cache true
14161455 let userOpName = defaultArg userOpName " Unknown"
1417- backgroundCompiler.ParseFile( fileName, sourceText, options, cache, userOpName)
1456+ backgroundCompiler.ParseFile( fileName, sourceText, options, cache, false , userOpName)
14181457
14191458 member ic.ParseFileInProject ( fileName , source : string , options , ? cache : bool , ? userOpName : string ) =
14201459 let parsingOptions , _ = ic.GetParsingOptionsFromProjectOptions( options)
@@ -1650,7 +1689,7 @@ type FSharpChecker
16501689 member _.GetParsingOptionsFromCommandLineArgs ( sourceFiles , argv , ? isInteractive , ? isEditing ) =
16511690 let isEditing = defaultArg isEditing false
16521691 let isInteractive = defaultArg isInteractive false
1653- use errorScope = new DiagnosticsScope()
1692+ use errorScope = new DiagnosticsScope( argv |> List.contains " --flaterrors " )
16541693
16551694 let tcConfigB =
16561695 TcConfigBuilder.CreateNew(
0 commit comments