@@ -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,7 @@ 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 = mkCompilationDiagnosticsHandlers ( argv |> Array.contains " --flaterrors " )
141141
142142 let result =
143143 tryCompile diagnosticsLogger ( fun exiter ->
@@ -487,7 +487,7 @@ type BackgroundCompiler
487487 checkFileInProjectCache.Set( ltok, key, res)
488488 res)
489489
490- member _.ParseFile ( fileName : string , sourceText : ISourceText , options : FSharpParsingOptions , cache : bool , userOpName : string ) =
490+ member _.ParseFile ( fileName : string , sourceText : ISourceText , options : FSharpParsingOptions , cache : bool , flatErrors : bool , userOpName : string ) =
491491 async {
492492 use _ =
493493 Activity.start
@@ -507,14 +507,14 @@ type BackgroundCompiler
507507 Interlocked.Increment(& actualParseFileCount) |> ignore
508508
509509 let parseDiagnostics , parseTree , anyErrors =
510- ParseAndCheckFile.parseFile ( sourceText, fileName, options, userOpName, suggestNamesForErrors, captureIdentifiersWhenParsing)
510+ ParseAndCheckFile.parseFile ( sourceText, fileName, options, userOpName, suggestNamesForErrors, flatErrors , captureIdentifiersWhenParsing)
511511
512512 let res = FSharpParseFileResults( parseDiagnostics, parseTree, anyErrors, options.SourceFiles)
513513 parseCacheLock.AcquireLock( fun ltok -> parseFileCache.Set( ltok, ( fileName, hash, options), res))
514514 return res
515515 else
516516 let parseDiagnostics , parseTree , anyErrors =
517- ParseAndCheckFile.parseFile ( sourceText, fileName, options, userOpName, false , captureIdentifiersWhenParsing)
517+ ParseAndCheckFile.parseFile ( sourceText, fileName, options, userOpName, false , flatErrors , captureIdentifiersWhenParsing)
518518
519519 return FSharpParseFileResults( parseDiagnostics, parseTree, anyErrors, options.SourceFiles)
520520 }
@@ -537,7 +537,7 @@ type BackgroundCompiler
537537 let parseTree , _ , _ , parseDiagnostics = builder.GetParseResultsForFile fileName
538538
539539 let parseDiagnostics =
540- DiagnosticHelpers.CreateDiagnostics( builder.TcConfig.diagnosticsOptions, false , fileName, parseDiagnostics, suggestNamesForErrors)
540+ DiagnosticHelpers.CreateDiagnostics( builder.TcConfig.diagnosticsOptions, false , fileName, parseDiagnostics, suggestNamesForErrors, builder.TcConfig.flatErrors )
541541
542542 let diagnostics = [| yield ! creationDiags; yield ! parseDiagnostics |]
543543
@@ -767,6 +767,7 @@ type BackgroundCompiler
767767 parsingOptions,
768768 userOpName,
769769 suggestNamesForErrors,
770+ builder.TcConfig.flatErrors,
770771 captureIdentifiersWhenParsing
771772 )
772773
@@ -835,12 +836,12 @@ type BackgroundCompiler
835836 let diagnosticsOptions = builder.TcConfig.diagnosticsOptions
836837
837838 let parseDiagnostics =
838- DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, false , fileName, parseDiagnostics, suggestNamesForErrors)
839+ DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, false , fileName, parseDiagnostics, suggestNamesForErrors, builder.TcConfig.flatErrors )
839840
840841 let parseDiagnostics = [| yield ! creationDiags; yield ! parseDiagnostics |]
841842
842843 let tcDiagnostics =
843- DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, false , fileName, tcDiagnostics, suggestNamesForErrors)
844+ DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, false , fileName, tcDiagnostics, suggestNamesForErrors, builder.TcConfig.flatErrors )
844845
845846 let tcDiagnostics = [| yield ! creationDiags; yield ! tcDiagnostics |]
846847
@@ -994,7 +995,7 @@ type BackgroundCompiler
994995 let tcDependencyFiles = tcInfo.tcDependencyFiles
995996
996997 let tcDiagnostics =
997- DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, true , fileName, tcDiagnostics, suggestNamesForErrors)
998+ DiagnosticHelpers.CreateDiagnostics( diagnosticsOptions, true , fileName, tcDiagnostics, suggestNamesForErrors, builder.TcConfig.flatErrors )
998999
9991000 let diagnostics = [| yield ! creationDiags; yield ! tcDiagnostics |]
10001001
@@ -1083,8 +1084,6 @@ type BackgroundCompiler
10831084 [| Activity.Tags.fileName, fileName; Activity.Tags.userOpName, _ userOpName |]
10841085
10851086 cancellable {
1086- use diagnostics = new DiagnosticsScope()
1087-
10881087 // Do we add a reference to FSharp.Compiler.Interactive.Settings by default?
10891088 let useFsiAuxLib = defaultArg useFsiAuxLib true
10901089 let useSdkRefs = defaultArg useSdkRefs true
@@ -1102,6 +1101,8 @@ type BackgroundCompiler
11021101
11031102 let otherFlags = defaultArg otherFlags extraFlags
11041103
1104+ use diagnostics = new DiagnosticsScope ( otherFlags |> Array.contains " --flaterrors" )
1105+
11051106 let useSimpleResolution = otherFlags |> Array.exists ( fun x -> x = " --simpleresolution" )
11061107
11071108 let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading
@@ -1159,7 +1160,7 @@ type BackgroundCompiler
11591160
11601161 let diags =
11611162 loadClosure.LoadClosureRootFileDiagnostics
1162- |> List.map ( fun ( exn , isError ) -> FSharpDiagnostic.CreateFromException( exn, isError, range.Zero, false ))
1163+ |> List.map ( fun ( exn , isError ) -> FSharpDiagnostic.CreateFromException( exn, isError, range.Zero, false , options.OtherOptions |> Array.contains " --flaterrors " ))
11631164
11641165 return options, ( diags @ diagnostics.Diagnostics)
11651166 }
@@ -1414,7 +1415,7 @@ type FSharpChecker
14141415 member _.ParseFile ( fileName , sourceText , options , ? cache , ? userOpName : string ) =
14151416 let cache = defaultArg cache true
14161417 let userOpName = defaultArg userOpName " Unknown"
1417- backgroundCompiler.ParseFile( fileName, sourceText, options, cache, userOpName)
1418+ backgroundCompiler.ParseFile( fileName, sourceText, options, cache, false , userOpName)
14181419
14191420 member ic.ParseFileInProject ( fileName , source : string , options , ? cache : bool , ? userOpName : string ) =
14201421 let parsingOptions , _ = ic.GetParsingOptionsFromProjectOptions( options)
@@ -1650,7 +1651,7 @@ type FSharpChecker
16501651 member _.GetParsingOptionsFromCommandLineArgs ( sourceFiles , argv , ? isInteractive , ? isEditing ) =
16511652 let isEditing = defaultArg isEditing false
16521653 let isInteractive = defaultArg isInteractive false
1653- use errorScope = new DiagnosticsScope( )
1654+ use errorScope = new DiagnosticsScope ( argv |> List.contains " --flaterrors " )
16541655
16551656 let tcConfigB =
16561657 TcConfigBuilder.CreateNew(
0 commit comments