@@ -188,12 +188,14 @@ module internal ParseAndCheck =
188188 // restore all cached typecheck entries above file
189189 cachedAbove |> Array.iter ( fun ( key , value ) -> compilerState.checkCache.TryAdd( key, value) |> ignore)
190190
191- let ParseFile ( fileName : string , sourceHash : int , source : Lazy < string >, parsingOptions : FSharpParsingOptions , compilerState ) =
191+ let ParseFile ( fileName : string , sourceHash : int , source : Lazy < string >, parsingOptions : FSharpParsingOptions , compilerState , ct ) =
192192 let parseCacheKey = fileName, sourceHash
193193 compilerState.parseCache.GetOrAdd( parseCacheKey, fun _ ->
194194 ClearStaleCache( fileName, parsingOptions, compilerState)
195195 let sourceText = SourceText.ofString source.Value
196- let parseErrors , parseTreeOpt , anyErrors = ParseAndCheckFile.parseFile ( sourceText, fileName, parsingOptions, userOpName, suggestNamesForErrors, captureIdentifiersWhenParsing)
196+ let flatErrors = compilerState.tcConfig.flatErrors
197+ let parseErrors , parseTreeOpt , anyErrors =
198+ ParseAndCheckFile.parseFile ( sourceText, fileName, parsingOptions, userOpName, suggestNamesForErrors, flatErrors, captureIdentifiersWhenParsing, ct)
197199 let dependencyFiles = [||] // interactions have no dependencies
198200 FSharpParseFileResults ( parseErrors, parseTreeOpt, anyErrors, dependencyFiles) )
199201
@@ -213,7 +215,9 @@ module internal ParseAndCheck =
213215 |> Cancellable.runWithoutCancellation
214216
215217 let fileName = parseResults.FileName
216- let tcErrors = DiagnosticHelpers.CreateDiagnostics ( diagnosticsOptions, false , fileName, ( capturingLogger.GetDiagnostics()), suggestNamesForErrors)
218+ let flatErrors = compilerState.tcConfig.flatErrors
219+ let parseDiagnostics = capturingLogger.GetDiagnostics()
220+ let tcErrors = DiagnosticHelpers.CreateDiagnostics ( diagnosticsOptions, false , fileName, parseDiagnostics, suggestNamesForErrors, flatErrors, None)
217221 ( tcResult, tcErrors), ( tcState, moduleNamesDict)
218222
219223 let CheckFile ( projectFileName : string , parseResults : FSharpParseFileResults , tcState : TcState , moduleNamesDict : ModuleNamesDict , compilerState ) =
@@ -295,17 +299,19 @@ type InteractiveChecker internal (compilerStateCache) =
295299 /// Compile project to file. If project has already been type checked,
296300 /// check results will be taken from the cache.
297301 member _.Compile ( fileNames : string [], sourceReader : string -> int * Lazy < string >, outFile : string ) = async {
302+ let! ct = Async.CancellationToken
298303 let! compilerState = compilerStateCache.Get()
299304 let parsingOptions = FSharpParsingOptions.FromTcConfig( compilerState.tcConfig, fileNames, false )
300305 let parseResults = fileNames |> Array.map ( fun fileName ->
301306 let sourceHash , source = sourceReader fileName
302- ParseFile( fileName, sourceHash, source, parsingOptions, compilerState))
307+ ParseFile( fileName, sourceHash, source, parsingOptions, compilerState, ct ))
303308
304309 let ( tcState , topAttrs , tcImplFiles , _tcEnvAtEnd , _moduleNamesDict , _tcErrors ) =
305310 TypeCheckClosedInputSet ( parseResults, compilerState.tcInitialState, compilerState, None)
306311
307312 let ctok = CompilationThreadToken()
308- let errors , diagnosticsLogger , _loggerProvider = CompileHelpers.mkCompilationDiagnosticsHandlers()
313+ let flatErrors = compilerState.tcConfig.flatErrors
314+ let errors , diagnosticsLogger , _loggerProvider = CompileHelpers.mkCompilationDiagnosticsHandlers( flatErrors)
309315 let exitCode =
310316 CompileHelpers.tryCompile diagnosticsLogger ( fun exiter ->
311317 CompileFromTypedAst ( ctok, compilerState.tcGlobals, compilerState.tcImports, tcState.Ccu,
@@ -319,6 +325,7 @@ type InteractiveChecker internal (compilerStateCache) =
319325 /// Already parsed files will be cached so subsequent compilations will be faster.
320326 member _.ParseAndCheckProject ( projectFileName : string , fileNames : string [], sourceReader : string -> int * Lazy < string >,
321327 ?lastFile : string , ?subscriber : FSharpImplementationFileContents -> unit ) = async {
328+ let! ct = Async.CancellationToken
322329 let! compilerState = compilerStateCache.Get()
323330 // parse files
324331 let parsingOptions = FSharpParsingOptions.FromTcConfig( compilerState.tcConfig, fileNames, false )
@@ -332,7 +339,7 @@ type InteractiveChecker internal (compilerStateCache) =
332339
333340 let parseFile fileName =
334341 let sourceHash , source = sourceReader fileName
335- ParseFile( fileName, sourceHash, source, parsingOptions, compilerState)
342+ ParseFile( fileName, sourceHash, source, parsingOptions, compilerState, ct )
336343
337344 // Don't parallelize if we have cached files, as it would create issues with invalidation
338345 if compilerState.parseCache.Count = 0 then
@@ -358,6 +365,7 @@ type InteractiveChecker internal (compilerStateCache) =
358365 /// up to and including the file requested. Returns parse and typecheck results containing
359366 /// name resolutions and symbol uses for the file requested only, so intellisense etc. works.
360367 member _.ParseAndCheckFileInProject ( projectFileName : string , fileNames : string [], sourceReader : string -> int * Lazy < string >, fileName : string ) = async {
368+ let! ct = Async.CancellationToken
361369 let! compilerState = compilerStateCache.Get()
362370
363371 // get files before file
@@ -368,7 +376,7 @@ type InteractiveChecker internal (compilerStateCache) =
368376 let parsingOptions = FSharpParsingOptions.FromTcConfig( compilerState.tcConfig, fileNames, false )
369377 let parseFile fileName =
370378 let sourceHash , source = sourceReader fileName
371- ParseFile ( fileName, sourceHash, source, parsingOptions, compilerState)
379+ ParseFile ( fileName, sourceHash, source, parsingOptions, compilerState, ct )
372380 let parseResults = fileNamesBeforeFile |> Array.map parseFile
373381
374382 // type check files before file
0 commit comments