@@ -188,12 +188,14 @@ module internal ParseAndCheck =
188
188
// restore all cached typecheck entries above file
189
189
cachedAbove |> Array.iter ( fun ( key , value ) -> compilerState.checkCache.TryAdd( key, value) |> ignore)
190
190
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 ) =
192
192
let parseCacheKey = fileName, sourceHash
193
193
compilerState.parseCache.GetOrAdd( parseCacheKey, fun _ ->
194
194
ClearStaleCache( fileName, parsingOptions, compilerState)
195
195
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)
197
199
let dependencyFiles = [||] // interactions have no dependencies
198
200
FSharpParseFileResults ( parseErrors, parseTreeOpt, anyErrors, dependencyFiles) )
199
201
@@ -213,7 +215,9 @@ module internal ParseAndCheck =
213
215
|> Cancellable.runWithoutCancellation
214
216
215
217
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)
217
221
( tcResult, tcErrors), ( tcState, moduleNamesDict)
218
222
219
223
let CheckFile ( projectFileName : string , parseResults : FSharpParseFileResults , tcState : TcState , moduleNamesDict : ModuleNamesDict , compilerState ) =
@@ -295,17 +299,19 @@ type InteractiveChecker internal (compilerStateCache) =
295
299
/// Compile project to file. If project has already been type checked,
296
300
/// check results will be taken from the cache.
297
301
member _.Compile ( fileNames : string [], sourceReader : string -> int * Lazy < string >, outFile : string ) = async {
302
+ let! ct = Async.CancellationToken
298
303
let! compilerState = compilerStateCache.Get()
299
304
let parsingOptions = FSharpParsingOptions.FromTcConfig( compilerState.tcConfig, fileNames, false )
300
305
let parseResults = fileNames |> Array.map ( fun fileName ->
301
306
let sourceHash , source = sourceReader fileName
302
- ParseFile( fileName, sourceHash, source, parsingOptions, compilerState))
307
+ ParseFile( fileName, sourceHash, source, parsingOptions, compilerState, ct ))
303
308
304
309
let ( tcState , topAttrs , tcImplFiles , _tcEnvAtEnd , _moduleNamesDict , _tcErrors ) =
305
310
TypeCheckClosedInputSet ( parseResults, compilerState.tcInitialState, compilerState, None)
306
311
307
312
let ctok = CompilationThreadToken()
308
- let errors , diagnosticsLogger , _loggerProvider = CompileHelpers.mkCompilationDiagnosticsHandlers()
313
+ let flatErrors = compilerState.tcConfig.flatErrors
314
+ let errors , diagnosticsLogger , _loggerProvider = CompileHelpers.mkCompilationDiagnosticsHandlers( flatErrors)
309
315
let exitCode =
310
316
CompileHelpers.tryCompile diagnosticsLogger ( fun exiter ->
311
317
CompileFromTypedAst ( ctok, compilerState.tcGlobals, compilerState.tcImports, tcState.Ccu,
@@ -319,6 +325,7 @@ type InteractiveChecker internal (compilerStateCache) =
319
325
/// Already parsed files will be cached so subsequent compilations will be faster.
320
326
member _.ParseAndCheckProject ( projectFileName : string , fileNames : string [], sourceReader : string -> int * Lazy < string >,
321
327
?lastFile : string , ?subscriber : FSharpImplementationFileContents -> unit ) = async {
328
+ let! ct = Async.CancellationToken
322
329
let! compilerState = compilerStateCache.Get()
323
330
// parse files
324
331
let parsingOptions = FSharpParsingOptions.FromTcConfig( compilerState.tcConfig, fileNames, false )
@@ -332,7 +339,7 @@ type InteractiveChecker internal (compilerStateCache) =
332
339
333
340
let parseFile fileName =
334
341
let sourceHash , source = sourceReader fileName
335
- ParseFile( fileName, sourceHash, source, parsingOptions, compilerState)
342
+ ParseFile( fileName, sourceHash, source, parsingOptions, compilerState, ct )
336
343
337
344
// Don't parallelize if we have cached files, as it would create issues with invalidation
338
345
if compilerState.parseCache.Count = 0 then
@@ -358,6 +365,7 @@ type InteractiveChecker internal (compilerStateCache) =
358
365
/// up to and including the file requested. Returns parse and typecheck results containing
359
366
/// name resolutions and symbol uses for the file requested only, so intellisense etc. works.
360
367
member _.ParseAndCheckFileInProject ( projectFileName : string , fileNames : string [], sourceReader : string -> int * Lazy < string >, fileName : string ) = async {
368
+ let! ct = Async.CancellationToken
361
369
let! compilerState = compilerStateCache.Get()
362
370
363
371
// get files before file
@@ -368,7 +376,7 @@ type InteractiveChecker internal (compilerStateCache) =
368
376
let parsingOptions = FSharpParsingOptions.FromTcConfig( compilerState.tcConfig, fileNames, false )
369
377
let parseFile fileName =
370
378
let sourceHash , source = sourceReader fileName
371
- ParseFile ( fileName, sourceHash, source, parsingOptions, compilerState)
379
+ ParseFile ( fileName, sourceHash, source, parsingOptions, compilerState, ct )
372
380
let parseResults = fileNamesBeforeFile |> Array.map parseFile
373
381
374
382
// type check files before file
0 commit comments