Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Commit c761b9b

Browse files
alfonsogarciacaroncave
authored andcommitted
Keep source hashes through watch compilations
1 parent e3c9888 commit c761b9b

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

fcs/FSharp.Compiler.Service/service_slim.fs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ type InteractiveChecker internal (tcConfig, tcGlobals, tcImports, tcInitialState
7777
let tcInitialEnv = GetInitialTcEnv (assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals)
7878
let tcInitialState = GetInitialTcState (rangeStartup, assemblyName, tcConfig, tcGlobals, tcImports, niceNameGen, tcInitialEnv)
7979

80-
let reactorOps =
80+
let reactorOps =
8181
{ new IReactorOperations with
8282
member __.EnqueueAndAwaitOpAsync (userOpName, opName, opArg, op) =
8383
async.Return (Cancellable.runWithoutCancellation (op ctok))
@@ -115,11 +115,11 @@ type InteractiveChecker internal (tcConfig, tcGlobals, tcImports, tcInitialState
115115
// restore all cached typecheck entries above file
116116
cachedAbove |> Array.iter (fun (key, value) -> checkCache.TryAdd(key, value) |> ignore)
117117

118-
member private x.ParseFile (fileName: string, source: string, parsingOptions: FSharpParsingOptions) =
119-
let parseCacheKey = fileName, hash source
118+
member private x.ParseFile (fileName: string, sourceHash: int, source: Lazy<string>, parsingOptions: FSharpParsingOptions) =
119+
let parseCacheKey = fileName, sourceHash
120120
parseCache.GetOrAdd(parseCacheKey, fun _ ->
121121
x.ClearStaleCache(fileName, parsingOptions)
122-
let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile (source, fileName, parsingOptions, userOpName)
122+
let parseErrors, parseTreeOpt, anyErrors = Parser.parseFile (source.Value, fileName, parsingOptions, userOpName)
123123
let dependencyFiles = [||] // interactions have no dependencies
124124
FSharpParseFileResults (parseErrors, parseTreeOpt, anyErrors, dependencyFiles) )
125125

@@ -196,11 +196,12 @@ type InteractiveChecker internal (tcConfig, tcGlobals, tcImports, tcInitialState
196196
/// Parses and checks the whole project, good for compilers (Fable etc.)
197197
/// Does not retain name resolutions and symbol uses which are quite memory hungry (so no intellisense etc.).
198198
/// Already parsed files will be cached so subsequent compilations will be faster.
199-
member x.ParseAndCheckProject (projectFileName: string, fileNames: string[], sources: string[]) =
199+
member x.ParseAndCheckProject (projectFileName: string, fileNames: string[], sourceReader: string->int*Lazy<string>) =
200200
// parse files
201201
let parsingOptions = FSharpParsingOptions.FromTcConfig(tcConfig, fileNames, false)
202-
let parseFile (fileName, source) = x.ParseFile (fileName, source, parsingOptions)
203-
let parseResults = Array.zip fileNames sources |> Array.map parseFile
202+
let parseResults = fileNames |> Array.map (fun fileName ->
203+
let sourceHash, source = sourceReader fileName
204+
x.ParseFile(fileName, sourceHash, source, parsingOptions))
204205

205206
// type check files
206207
let tcState, topAttrs, tcImplFiles, _tcEnvAtEnd, _moduleNamesDict, tcErrors =
@@ -227,7 +228,7 @@ type InteractiveChecker internal (tcConfig, tcGlobals, tcImports, tcInitialState
227228

228229
// parse files before file
229230
let parsingOptions = FSharpParsingOptions.FromTcConfig(tcConfig, fileNames, false)
230-
let parseFile (fileName, source) = x.ParseFile (fileName, source, parsingOptions)
231+
let parseFile (fileName, source) = x.ParseFile (fileName, hash source, lazy source, parsingOptions)
231232
let parseResults = Array.zip fileNamesBeforeFile sourcesBeforeFile |> Array.map parseFile
232233

233234
// type check files before file

0 commit comments

Comments
 (0)