diff --git a/.vscode/launch.json b/.vscode/launch.json
index 07c4b527e5e..f46299ddc42 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -92,7 +92,7 @@
"name": "FCS Test",
"type": "coreclr",
"request": "launch",
- "program": "${workspaceFolder}/artifacts/bin/fcs-test/Debug/net7.0/fcs-test.dll",
+ "program": "${workspaceFolder}/artifacts/bin/fcs-test/Debug/net8.0/fcs-test.dll",
"args": [],
"cwd": "${workspaceFolder}/fcs/fcs-test",
"console": "internalConsole",
diff --git a/buildtools/AssemblyCheck/AssemblyCheck.fsproj b/buildtools/AssemblyCheck/AssemblyCheck.fsproj
index bc9584cf701..46ffb722cd4 100644
--- a/buildtools/AssemblyCheck/AssemblyCheck.fsproj
+++ b/buildtools/AssemblyCheck/AssemblyCheck.fsproj
@@ -3,8 +3,6 @@
Exe
net8.0
- net6.0
- net7.0
true
false
diff --git a/buildtools/buildtools.targets b/buildtools/buildtools.targets
index 3b2fa489c66..b4160b714f2 100644
--- a/buildtools/buildtools.targets
+++ b/buildtools/buildtools.targets
@@ -20,7 +20,7 @@
BeforeTargets="CoreCompile">
- $(ArtifactsDir)\bin\fslex\Release\net7.0\fslex.dll
+ $(ArtifactsDir)\bin\fslex\Release\net8.0\fslex.dll
@@ -44,7 +44,7 @@
BeforeTargets="CoreCompile">
- $(ArtifactsDir)\bin\fsyacc\Release\net7.0\fsyacc.dll
+ $(ArtifactsDir)\bin\fsyacc\Release\net8.0\fsyacc.dll
diff --git a/buildtools/fslex/fslex.fsproj b/buildtools/fslex/fslex.fsproj
index 72d3d7d420c..674dde7c759 100644
--- a/buildtools/fslex/fslex.fsproj
+++ b/buildtools/fslex/fslex.fsproj
@@ -3,8 +3,6 @@
Exe
net8.0
- net7.0
- INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstants)
true
false
LatestMajor
diff --git a/buildtools/fsyacc/fsyacc.fsproj b/buildtools/fsyacc/fsyacc.fsproj
index 3bc4c7c5203..fc072b7cf02 100644
--- a/buildtools/fsyacc/fsyacc.fsproj
+++ b/buildtools/fsyacc/fsyacc.fsproj
@@ -3,8 +3,6 @@
Exe
net8.0
- net7.0
- INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstants)
true
false
LatestMajor
diff --git a/fcs/fcs-test/fcs-test.fsproj b/fcs/fcs-test/fcs-test.fsproj
index 3a8c1940791..fd951e954ea 100644
--- a/fcs/fcs-test/fcs-test.fsproj
+++ b/fcs/fcs-test/fcs-test.fsproj
@@ -2,7 +2,7 @@
Exe
- net7.0
+ net8.0
true
@@ -19,9 +19,9 @@
-
-
-
+
+
+
diff --git a/fcs/service_slim.fs b/fcs/service_slim.fs
index f7c5b9b2343..7cccc9f4168 100644
--- a/fcs/service_slim.fs
+++ b/fcs/service_slim.fs
@@ -188,12 +188,14 @@ module internal ParseAndCheck =
// restore all cached typecheck entries above file
cachedAbove |> Array.iter (fun (key, value) -> compilerState.checkCache.TryAdd(key, value) |> ignore)
- let ParseFile (fileName: string, sourceHash: int, source: Lazy, parsingOptions: FSharpParsingOptions, compilerState) =
+ let ParseFile (fileName: string, sourceHash: int, source: Lazy, parsingOptions: FSharpParsingOptions, compilerState, ct) =
let parseCacheKey = fileName, sourceHash
compilerState.parseCache.GetOrAdd(parseCacheKey, fun _ ->
ClearStaleCache(fileName, parsingOptions, compilerState)
let sourceText = SourceText.ofString source.Value
- let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile (sourceText, fileName, parsingOptions, userOpName, suggestNamesForErrors, captureIdentifiersWhenParsing)
+ let flatErrors = compilerState.tcConfig.flatErrors
+ let parseErrors, parseTreeOpt, anyErrors =
+ ParseAndCheckFile.parseFile (sourceText, fileName, parsingOptions, userOpName, suggestNamesForErrors, flatErrors, captureIdentifiersWhenParsing, ct)
let dependencyFiles = [||] // interactions have no dependencies
FSharpParseFileResults (parseErrors, parseTreeOpt, anyErrors, dependencyFiles) )
@@ -213,7 +215,9 @@ module internal ParseAndCheck =
|> Cancellable.runWithoutCancellation
let fileName = parseResults.FileName
- let tcErrors = DiagnosticHelpers.CreateDiagnostics (diagnosticsOptions, false, fileName, (capturingLogger.GetDiagnostics()), suggestNamesForErrors)
+ let flatErrors = compilerState.tcConfig.flatErrors
+ let parseDiagnostics = capturingLogger.GetDiagnostics()
+ let tcErrors = DiagnosticHelpers.CreateDiagnostics (diagnosticsOptions, false, fileName, parseDiagnostics, suggestNamesForErrors, flatErrors, None)
(tcResult, tcErrors), (tcState, moduleNamesDict)
let CheckFile (projectFileName: string, parseResults: FSharpParseFileResults, tcState: TcState, moduleNamesDict: ModuleNamesDict, compilerState) =
@@ -295,17 +299,19 @@ type InteractiveChecker internal (compilerStateCache) =
/// Compile project to file. If project has already been type checked,
/// check results will be taken from the cache.
member _.Compile(fileNames: string[], sourceReader: string -> int * Lazy, outFile: string) = async {
+ let! ct = Async.CancellationToken
let! compilerState = compilerStateCache.Get()
let parsingOptions = FSharpParsingOptions.FromTcConfig(compilerState.tcConfig, fileNames, false)
let parseResults = fileNames |> Array.map (fun fileName ->
let sourceHash, source = sourceReader fileName
- ParseFile(fileName, sourceHash, source, parsingOptions, compilerState))
+ ParseFile(fileName, sourceHash, source, parsingOptions, compilerState, ct))
let (tcState, topAttrs, tcImplFiles, _tcEnvAtEnd, _moduleNamesDict, _tcErrors) =
TypeCheckClosedInputSet (parseResults, compilerState.tcInitialState, compilerState, None)
let ctok = CompilationThreadToken()
- let errors, diagnosticsLogger, _loggerProvider = CompileHelpers.mkCompilationDiagnosticsHandlers()
+ let flatErrors = compilerState.tcConfig.flatErrors
+ let errors, diagnosticsLogger, _loggerProvider = CompileHelpers.mkCompilationDiagnosticsHandlers(flatErrors)
let exitCode =
CompileHelpers.tryCompile diagnosticsLogger (fun exiter ->
CompileFromTypedAst (ctok, compilerState.tcGlobals, compilerState.tcImports, tcState.Ccu,
@@ -319,6 +325,7 @@ type InteractiveChecker internal (compilerStateCache) =
/// Already parsed files will be cached so subsequent compilations will be faster.
member _.ParseAndCheckProject (projectFileName: string, fileNames: string[], sourceReader: string -> int * Lazy,
?lastFile: string, ?subscriber: FSharpImplementationFileContents -> unit) = async {
+ let! ct = Async.CancellationToken
let! compilerState = compilerStateCache.Get()
// parse files
let parsingOptions = FSharpParsingOptions.FromTcConfig(compilerState.tcConfig, fileNames, false)
@@ -332,7 +339,7 @@ type InteractiveChecker internal (compilerStateCache) =
let parseFile fileName =
let sourceHash, source = sourceReader fileName
- ParseFile(fileName, sourceHash, source, parsingOptions, compilerState)
+ ParseFile(fileName, sourceHash, source, parsingOptions, compilerState, ct)
// Don't parallelize if we have cached files, as it would create issues with invalidation
if compilerState.parseCache.Count = 0 then
@@ -358,6 +365,7 @@ type InteractiveChecker internal (compilerStateCache) =
/// up to and including the file requested. Returns parse and typecheck results containing
/// name resolutions and symbol uses for the file requested only, so intellisense etc. works.
member _.ParseAndCheckFileInProject (projectFileName: string, fileNames: string[], sourceReader: string -> int * Lazy, fileName: string) = async {
+ let! ct = Async.CancellationToken
let! compilerState = compilerStateCache.Get()
// get files before file
@@ -368,7 +376,7 @@ type InteractiveChecker internal (compilerStateCache) =
let parsingOptions = FSharpParsingOptions.FromTcConfig(compilerState.tcConfig, fileNames, false)
let parseFile fileName =
let sourceHash, source = sourceReader fileName
- ParseFile (fileName, sourceHash, source, parsingOptions, compilerState)
+ ParseFile (fileName, sourceHash, source, parsingOptions, compilerState, ct)
let parseResults = fileNamesBeforeFile |> Array.map parseFile
// type check files before file
diff --git a/src/Compiler/Service/service.fs b/src/Compiler/Service/service.fs
index c5b6e64ffdc..4e1a25e3beb 100644
--- a/src/Compiler/Service/service.fs
+++ b/src/Compiler/Service/service.fs
@@ -157,6 +157,7 @@ module CompileHelpers =
diagnostics.ToArray(), result
+#if !FABLE_CLI
let setOutputStreams execute =
// Set the output streams, if requested
match execute with
@@ -164,6 +165,7 @@ module CompileHelpers =
Console.SetOut writer
Console.SetError error
| None -> ()
+#endif
type SourceTextHash = int64
type CacheStamp = int64
diff --git a/src/Compiler/Service/service.fsi b/src/Compiler/Service/service.fsi
index d999a2d86c0..f981e12fe2b 100644
--- a/src/Compiler/Service/service.fsi
+++ b/src/Compiler/Service/service.fsi
@@ -19,7 +19,7 @@ open FSharp.Compiler.DiagnosticsLogger
open FSharp.Compiler.Driver
module internal CompileHelpers =
- val mkCompilationDiagnosticsHandlers: unit -> ResizeArray * DiagnosticsLogger * IDiagnosticsLoggerProvider
+ val mkCompilationDiagnosticsHandlers: bool -> ResizeArray * DiagnosticsLogger * IDiagnosticsLoggerProvider
val tryCompile: DiagnosticsLogger -> (StopProcessingExiter -> unit) -> int
[]