Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/fsharp/NameResolution.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1702,6 +1702,8 @@ type TcSymbolUses(g, capturedNameResolutions: ResizeArray<CapturedNameResolution

member this.GetFormatSpecifierLocationsAndArity() = formatSpecifierLocations

static member Empty = TcSymbolUses(Unchecked.defaultof<_>, ResizeArray(), Array.empty)

/// An accumulator for the results being emitted into the tcSink.
type TcResultsSinkImpl(g, ?sourceText: ISourceText) =
let capturedEnvs = ResizeArray<_>()
Expand Down
3 changes: 3 additions & 0 deletions src/fsharp/NameResolution.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,9 @@ type internal TcSymbolUses =
/// Get the locations of all the printf format specifiers in the file
member GetFormatSpecifierLocationsAndArity : unit -> (range * int)[]

/// Empty collection of symbol uses
static member Empty : TcSymbolUses

/// Represents open declaration statement.
type internal OpenDeclaration =
{ /// Long identifier as it's presented in source code.
Expand Down
9 changes: 5 additions & 4 deletions src/fsharp/service/IncrementalBuild.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1208,7 +1208,7 @@ type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState:
type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInputs, nonFrameworkResolutions, unresolvedReferences, tcConfig: TcConfig, projectDirectory, outfile,
assemblyName, niceNameGen: NiceNameGenerator, lexResourceManager,
sourceFiles, loadClosureOpt: LoadClosure option,
keepAssemblyContents, keepAllBackgroundResolutions, maxTimeShareMilliseconds) =
keepAssemblyContents, keepAllBackgroundResolutions, maxTimeShareMilliseconds, keepAllBackgroundSymbolUses) =

let tcConfigP = TcConfigProvider.Constant tcConfig
let fileParsed = new Event<string>()
Expand Down Expand Up @@ -1386,7 +1386,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput
let implFile = if keepAssemblyContents then implFile else None
let tcResolutions = if keepAllBackgroundResolutions then sink.GetResolutions() else TcResolutions.Empty
let tcEnvAtEndOfFile = (if keepAllBackgroundResolutions then tcEnvAtEndOfFile else tcState.TcEnvFromImpls)
let tcSymbolUses = sink.GetSymbolUses()
let tcSymbolUses = if keepAllBackgroundSymbolUses then sink.GetSymbolUses() else TcSymbolUses.Empty

RequireCompilationThread ctok // Note: events get raised on the CompilationThread

Expand Down Expand Up @@ -1700,7 +1700,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput
projectReferences, projectDirectory,
useScriptResolutionRules, keepAssemblyContents,
keepAllBackgroundResolutions, maxTimeShareMilliseconds,
tryGetMetadataSnapshot, suggestNamesForErrors) =
tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses) =
let useSimpleResolutionSwitch = "--simpleresolution"

cancellable {
Expand Down Expand Up @@ -1820,7 +1820,8 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput
resourceManager, sourceFilesNew, loadClosureOpt,
keepAssemblyContents=keepAssemblyContents,
keepAllBackgroundResolutions=keepAllBackgroundResolutions,
maxTimeShareMilliseconds=maxTimeShareMilliseconds)
maxTimeShareMilliseconds=maxTimeShareMilliseconds,
keepAllBackgroundSymbolUses=keepAllBackgroundSymbolUses)
return Some builder
with e ->
errorRecoveryNoRange e
Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/service/IncrementalBuild.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ type internal IncrementalBuilder =
/// This may be a marginally long-running operation (parses are relatively quick, only one file needs to be parsed)
member GetParseResultsForFile : CompilationThreadToken * filename:string -> Cancellable<Ast.ParsedInput option * Range.range * string * (PhasedDiagnostic * FSharpErrorSeverity)[]>

static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool -> Cancellable<IncrementalBuilder option * FSharpErrorInfo[]>
static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool * keepAllBackgroundSymbolUses: bool -> Cancellable<IncrementalBuilder option * FSharpErrorInfo[]>

/// Generalized Incremental Builder. This is exposed only for unit testing purposes.
module internal IncrementalBuild =
Expand Down
14 changes: 8 additions & 6 deletions src/fsharp/service/service.fs
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ type ScriptClosureCacheToken() = interface LockToken


// There is only one instance of this type, held in FSharpChecker
type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors) as self =
type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses) as self =
// STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.reactor: The one and only Reactor
let reactor = Reactor.Singleton
let beforeFileChecked = Event<string * obj option>()
Expand Down Expand Up @@ -306,7 +306,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC
(ctok, legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, frameworkTcImportsCache, loadClosure, Array.toList options.SourceFiles,
Array.toList options.OtherOptions, projectReferences, options.ProjectDirectory,
options.UseScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, FSharpCheckerResultsSettings.maxTimeShareMilliseconds,
tryGetMetadataSnapshot, suggestNamesForErrors)
tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses)

match builderOpt with
| None -> ()
Expand Down Expand Up @@ -905,9 +905,10 @@ type FSharpChecker(legacyReferenceResolver,
keepAssemblyContents,
keepAllBackgroundResolutions,
tryGetMetadataSnapshot,
suggestNamesForErrors) =
suggestNamesForErrors,
keepAllBackgroundSymbolUses) =

let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors)
let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses)

static let globalInstance = lazy FSharpChecker.Create()

Expand All @@ -924,7 +925,7 @@ type FSharpChecker(legacyReferenceResolver,
let maxMemEvent = new Event<unit>()

/// Instantiate an interactive checker.
static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot, ?suggestNamesForErrors) =
static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot, ?suggestNamesForErrors, ?keepAllBackgroundSymbolUses) =

let legacyReferenceResolver =
match legacyReferenceResolver with
Expand All @@ -936,7 +937,8 @@ type FSharpChecker(legacyReferenceResolver,
let projectCacheSizeReal = defaultArg projectCacheSize projectCacheSizeDefault
let tryGetMetadataSnapshot = defaultArg tryGetMetadataSnapshot (fun _ -> None)
let suggestNamesForErrors = defaultArg suggestNamesForErrors false
new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors)
let keepAllBackgroundSymbolUses = defaultArg keepAllBackgroundSymbolUses true
new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses)

member __.ReferenceResolver = legacyReferenceResolver

Expand Down
2 changes: 1 addition & 1 deletion src/fsharp/service/service.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ type public FSharpChecker =
/// <param name="keepAllBackgroundResolutions">If false, do not keep full intermediate checking results from background checking suitable for returning from GetBackgroundCheckResultsForFileInProject. This reduces memory usage.</param>
/// <param name="legacyReferenceResolver">An optional resolver for non-file references, for legacy purposes</param>
/// <param name="tryGetMetadataSnapshot">An optional resolver to access the contents of .NET binaries in a memory-efficient way</param>
static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool -> FSharpChecker
static member Create : ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool * ?keepAllBackgroundSymbolUses: bool -> FSharpChecker

/// <summary>
/// Parse a source code file, returning information about brace matching in the file.
Expand Down