mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-28 09:22:42 -05:00
Project References Core support
This commit is contained in:
@@ -172,9 +172,10 @@ namespace ts {
|
||||
|
||||
const bucket = getBucketForCompilationSettings(key, /*createIfMissing*/ true);
|
||||
let entry = bucket.get(path);
|
||||
const scriptTarget = scriptKind === ScriptKind.JSON ? ScriptTarget.JSON : compilationSettings.target;
|
||||
if (!entry) {
|
||||
// Have never seen this file with these settings. Create a new source file for it.
|
||||
const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, compilationSettings.target, version, /*setNodeParents*/ false, scriptKind);
|
||||
const sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, scriptTarget, version, /*setNodeParents*/ false, scriptKind);
|
||||
|
||||
entry = {
|
||||
sourceFile,
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace ts {
|
||||
if (checker.getSymbolAtLocation(importStringLiteral)) continue;
|
||||
|
||||
const resolved = program.getResolvedModuleWithFailedLookupLocationsFromCache(importStringLiteral.text, sourceFile.fileName);
|
||||
if (contains(resolved.failedLookupLocations, oldFilePath)) {
|
||||
if (resolved && contains(resolved.failedLookupLocations, oldFilePath)) {
|
||||
result.push({ sourceFile, toUpdate: importStringLiteral });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -878,6 +878,10 @@ namespace ts {
|
||||
return this._compilationSettings;
|
||||
}
|
||||
|
||||
public getProjectReferences(): ReadonlyArray<ProjectReference> | undefined {
|
||||
return this.host.getProjectReferences && this.host.getProjectReferences();
|
||||
}
|
||||
|
||||
private createEntry(fileName: string, path: Path) {
|
||||
let entry: CachedHostFileInformation;
|
||||
const scriptSnapshot = this.host.getScriptSnapshot(fileName);
|
||||
@@ -912,9 +916,18 @@ namespace ts {
|
||||
}
|
||||
|
||||
public getRootFileNames(): string[] {
|
||||
return arrayFrom(this.fileNameToEntry.values(), entry => {
|
||||
return isString(entry) ? entry : entry.hostFileName;
|
||||
const names: string[] = [];
|
||||
this.fileNameToEntry.forEach(entry => {
|
||||
if (isString(entry)) {
|
||||
names.push(entry);
|
||||
}
|
||||
else {
|
||||
if (entry.scriptKind !== ScriptKind.JSON) {
|
||||
names.push(entry.hostFileName);
|
||||
}
|
||||
}
|
||||
});
|
||||
return names;
|
||||
}
|
||||
|
||||
public getVersion(path: Path): string {
|
||||
@@ -1241,7 +1254,14 @@ namespace ts {
|
||||
}
|
||||
|
||||
const documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings);
|
||||
program = createProgram(rootFileNames, newSettings, compilerHost, program);
|
||||
const options: CreateProgramOptions = {
|
||||
rootNames: rootFileNames,
|
||||
options: newSettings,
|
||||
host: compilerHost,
|
||||
oldProgram: program,
|
||||
projectReferences: hostCache.getProjectReferences()
|
||||
};
|
||||
program = createProgram(options);
|
||||
|
||||
// hostCache is captured in the closure for 'getOrCreateSourceFile' but it should not be used past this point.
|
||||
// It needs to be cleared to allow all collected snapshots to be released
|
||||
@@ -1501,6 +1521,12 @@ namespace ts {
|
||||
return checker.getSymbolAtLocation(node);
|
||||
}
|
||||
|
||||
function toLineColumnOffset(fileName: string, position: number) {
|
||||
const path = toPath(fileName, currentDirectory, getCanonicalFileName);
|
||||
const file = program.getSourceFile(path) || sourcemappedFileCache.get(path);
|
||||
return file.getLineAndCharacterOfPosition(position);
|
||||
}
|
||||
|
||||
// Sometimes tools can sometimes see the following line as a source mapping url comment, so we mangle it a bit (the [M])
|
||||
const sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/gm;
|
||||
const base64UrlRegExp = /^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\/=]+)$)?/;
|
||||
@@ -2265,6 +2291,7 @@ namespace ts {
|
||||
getProgram,
|
||||
getApplicableRefactors,
|
||||
getEditsForRefactor,
|
||||
toLineColumnOffset
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -179,6 +179,7 @@ namespace ts {
|
||||
getScriptKind?(fileName: string): ScriptKind;
|
||||
getScriptVersion(fileName: string): string;
|
||||
getScriptSnapshot(fileName: string): IScriptSnapshot | undefined;
|
||||
getProjectReferences?(): ReadonlyArray<ProjectReference> | undefined;
|
||||
getLocalizedDiagnosticMessages?(): any;
|
||||
getCancellationToken?(): HostCancellationToken;
|
||||
getCurrentDirectory(): string;
|
||||
@@ -320,6 +321,8 @@ namespace ts {
|
||||
|
||||
getSpanOfEnclosingComment(fileName: string, position: number, onlyMultiLine: boolean): TextSpan;
|
||||
|
||||
toLineColumnOffset?(fileName: string, position: number): LineAndCharacter;
|
||||
|
||||
getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: ReadonlyArray<number>, formatOptions: FormatCodeSettings, preferences: UserPreferences): ReadonlyArray<CodeFixAction>;
|
||||
getCombinedCodeFix(scope: CombinedCodeFixScope, fixId: {}, formatOptions: FormatCodeSettings, preferences: UserPreferences): CombinedCodeActions;
|
||||
applyCodeActionCommand(action: CodeActionCommand): Promise<ApplyCodeActionCommandResult>;
|
||||
|
||||
Reference in New Issue
Block a user