Skip to content

Commit 7def921

Browse files
committed
Remove range parameter, passing cheater text instead
Now the diff is isolated to the services layer, although it's a hackier change. I'll think of a way to make it cleaner.
1 parent 5f2443a commit 7def921

File tree

3 files changed

+21
-25
lines changed

3 files changed

+21
-25
lines changed

src/compiler/parser.ts

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -445,9 +445,9 @@ namespace ts {
445445
}
446446
}
447447

448-
export function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes = false, scriptKind?: ScriptKind, range?: TextRange): SourceFile {
448+
export function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes = false, scriptKind?: ScriptKind): SourceFile {
449449
performance.mark("beforeParse");
450-
const result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, range);
450+
const result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind);
451451
performance.mark("afterParse");
452452
performance.measure("Parse", "beforeParse", "afterParse");
453453
return result;
@@ -470,8 +470,8 @@ namespace ts {
470470
// from this SourceFile that are being held onto may change as a result (including
471471
// becoming detached from any SourceFile). It is recommended that this SourceFile not
472472
// be used once 'update' is called on it.
473-
export function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean, range?: TextRange): SourceFile {
474-
return IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks, range);
473+
export function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean): SourceFile {
474+
return IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks);
475475
}
476476

477477
/* @internal */
@@ -596,10 +596,10 @@ namespace ts {
596596
// attached to the EOF token.
597597
let parseErrorBeforeNextFinishedNode = false;
598598

599-
export function parseSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, syntaxCursor: IncrementalParser.SyntaxCursor, setParentNodes?: boolean, scriptKind?: ScriptKind, range?: TextRange): SourceFile {
599+
export function parseSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, syntaxCursor: IncrementalParser.SyntaxCursor, setParentNodes?: boolean, scriptKind?: ScriptKind): SourceFile {
600600
scriptKind = ensureScriptKind(fileName, scriptKind);
601601

602-
initializeState(sourceText, languageVersion, syntaxCursor, scriptKind, range);
602+
initializeState(sourceText, languageVersion, syntaxCursor, scriptKind);
603603

604604
const result = parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind);
605605

@@ -623,7 +623,7 @@ namespace ts {
623623
return scriptKind === ScriptKind.TSX || scriptKind === ScriptKind.JSX || scriptKind === ScriptKind.JS ? LanguageVariant.JSX : LanguageVariant.Standard;
624624
}
625625

626-
function initializeState(_sourceText: string, languageVersion: ScriptTarget, _syntaxCursor: IncrementalParser.SyntaxCursor, scriptKind: ScriptKind, range?: TextRange) {
626+
function initializeState(_sourceText: string, languageVersion: ScriptTarget, _syntaxCursor: IncrementalParser.SyntaxCursor, scriptKind: ScriptKind) {
627627
NodeConstructor = objectAllocator.getNodeConstructor();
628628
TokenConstructor = objectAllocator.getTokenConstructor();
629629
IdentifierConstructor = objectAllocator.getIdentifierConstructor();
@@ -642,13 +642,7 @@ namespace ts {
642642
parseErrorBeforeNextFinishedNode = false;
643643

644644
// Initialize and prime the scanner before parsing the source elements.
645-
if (range) {
646-
// create a scanner with different start and stop values
647-
scanner.setText(sourceText, range.pos, range.end - range.pos);
648-
}
649-
else {
650-
scanner.setText(sourceText);
651-
}
645+
scanner.setText(sourceText);
652646
scanner.setOnError(scanError);
653647
scanner.setScriptTarget(languageVersion);
654648
scanner.setLanguageVariant(getLanguageVariant(scriptKind));
@@ -6908,7 +6902,7 @@ namespace ts {
69086902
}
69096903

69106904
namespace IncrementalParser {
6911-
export function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks: boolean, range?: TextRange): SourceFile {
6905+
export function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks: boolean): SourceFile {
69126906
aggressiveChecks = aggressiveChecks || Debug.shouldAssert(AssertionLevel.Aggressive);
69136907

69146908
checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks);
@@ -6920,7 +6914,7 @@ namespace ts {
69206914
if (sourceFile.statements.length === 0) {
69216915
// If we don't have any statements in the current source file, then there's no real
69226916
// way to incrementally parse. So just do a full parse instead.
6923-
return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, /*syntaxCursor*/ undefined, /*setParentNodes*/ true, sourceFile.scriptKind, range);
6917+
return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, /*syntaxCursor*/ undefined, /*setParentNodes*/ true, sourceFile.scriptKind);
69246918
}
69256919

69266920
// Make sure we're not trying to incrementally update a source file more than once. Once
@@ -6984,7 +6978,7 @@ namespace ts {
69846978
// inconsistent tree. Setting the parents on the new tree should be very fast. We
69856979
// will immediately bail out of walking any subtrees when we can see that their parents
69866980
// are already correct.
6987-
return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, /*setParentNodes*/ true, sourceFile.scriptKind, range);
6981+
return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, /*setParentNodes*/ true, sourceFile.scriptKind);
69886982
}
69896983

69906984
function moveElementEntirelyPastChangeRange(element: IncrementalElement, isArray: boolean, delta: number, oldText: string, newText: string, aggressiveChecks: boolean) {

src/server/project.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ namespace ts.server {
106106
}
107107

108108
export type PluginSourceFileChange = {
109-
createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, range?: TextRange): SourceFile,
110-
updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean, range?: TextRange): SourceFile,
109+
createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, cheat?: string): SourceFile,
110+
updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean, cheat?: string): SourceFile,
111111
};
112112

113113
export interface PluginModuleFactory {

src/services/services.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -890,16 +890,16 @@ namespace ts {
890890
sourceFile.scriptSnapshot = scriptSnapshot;
891891
}
892892

893-
export function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, range?: TextRange): SourceFile {
894-
const text = scriptSnapshot.getText(0, scriptSnapshot.getLength());
895-
const sourceFile = createSourceFile(fileName, text, scriptTarget, setNodeParents, scriptKind, range);
893+
export function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, setNodeParents: boolean, scriptKind?: ScriptKind, cheat?: string): SourceFile {
894+
const text = cheat || scriptSnapshot.getText(0, scriptSnapshot.getLength());
895+
const sourceFile = createSourceFile(fileName, text, scriptTarget, setNodeParents, scriptKind);
896896
setSourceFileFields(sourceFile, scriptSnapshot, version);
897897
return sourceFile;
898898
}
899899

900900
export let disableIncrementalParsing = false;
901901

902-
export function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean, range?: TextRange): SourceFile {
902+
export function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean, cheat?: string): SourceFile {
903903
// If we were given a text change range, and our version or open-ness changed, then
904904
// incrementally parse this file.
905905
if (textChangeRange) {
@@ -933,7 +933,9 @@ namespace ts {
933933
: (changedText + suffix);
934934
}
935935

936-
const newSourceFile = updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks, range);
936+
// TODO: Previously I passed the cheat parameter to updateSourceFile even though this code path never happened (afaict)
937+
// now I am no longer passing it and hoping for the best
938+
const newSourceFile = updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks);
937939
setSourceFileFields(newSourceFile, scriptSnapshot, version);
938940
// after incremental parsing nameTable might not be up-to-date
939941
// drop it so it can be lazily recreated later
@@ -954,7 +956,7 @@ namespace ts {
954956
}
955957

956958
// Otherwise, just create a new source file.
957-
return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, sourceFile.languageVersion, version, /*setNodeParents*/ true, sourceFile.scriptKind, range);
959+
return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, sourceFile.languageVersion, version, /*setNodeParents*/ true, sourceFile.scriptKind, cheat);
958960
}
959961

960962
class CancellationTokenObject implements CancellationToken {

0 commit comments

Comments
 (0)