Skip to content

Commit d0e25ea

Browse files
committed
Tokenize only once per file
1 parent b0e78c0 commit d0e25ea

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

tests/build.ts

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@ function getInputFile(oriLines: string[]): string {
3131
"\n-----------------------------------\n\n";
3232
}
3333

34-
function getScopesAtMarkers(text: string, grammar: vt.IGrammar): string {
34+
function getScopesAtMarkers(text: string, grammar: vt.IGrammar): { markerScopes: string, wholeBaseline: string } {
3535
let oriLines = text.split('\n');
3636
let ruleStack:vt.StackElement[] = undefined;
3737
let outputLines: string[] = [];
38+
let baselineLines: string[] = [];
3839
let markers = 0;
3940
for (let i in oriLines) {
4041
let oriLine = oriLines[i];
@@ -45,16 +46,23 @@ function getScopesAtMarkers(text: string, grammar: vt.IGrammar): string {
4546
ruleStack = lineTokens.ruleStack;
4647

4748
outputLines.push(">" + line);
49+
baselineLines.push(">" + line);
4850
for (let token of lineTokens.tokens) {
4951
for (let markerLocation of markerLocations) {
5052
if (token.startIndex <= markerLocation && markerLocation < token.endIndex) {
5153
writeTokenLine(token, '[' + (parseInt(i) + 1) + ', ' + (markerLocation + 1) + ']: ', ' ', outputLines);
5254
}
5355
}
56+
57+
writeTokenLine(token, "", "", baselineLines);
5458
}
5559
}
5660

57-
return markers ? (getInputFile(oriLines) + outputLines.join('\n')) : null;
61+
const oriLineText = getInputFile(oriLines);
62+
return {
63+
markerScopes: markers ? (oriLineText + outputLines.join('\n')) : null,
64+
wholeBaseline: oriLineText + baselineLines.join('\n')
65+
};
5866
}
5967

6068
function writeTokenLine(token: vt.IToken, preTextForToken: string, postTextForToken: string, outputLines: string[]) {
@@ -71,26 +79,6 @@ function writeTokenLine(token: vt.IToken, preTextForToken: string, postTextForTo
7179
outputLines.push(startingSpaces + preTextForToken + token.scopes.join(' ') + postTextForToken);
7280
}
7381

74-
function baselineWholeFile(text: string, grammar: vt.IGrammar): string {
75-
let oriLines = text.split('\n');
76-
let ruleStack: vt.StackElement[] = undefined;
77-
let outputLines: string[] = [];
78-
for (let i in oriLines) {
79-
let oriLine = oriLines[i];
80-
let markerLocations = getMarkerLocations(oriLine);
81-
let line = oriLine.split(marker).join('');
82-
let lineTokens = grammar.tokenizeLine(line, ruleStack);
83-
ruleStack = lineTokens.ruleStack;
84-
85-
outputLines.push(">" + line);
86-
for (let token of lineTokens.tokens) {
87-
writeTokenLine(token, "", "", outputLines);
88-
}
89-
}
90-
91-
return getInputFile(oriLines) + outputLines.join('\n');
92-
}
93-
9482
for (var fileName of fs.readdirSync('cases')) {
9583
const text = fs.readFileSync(path.join('./cases', fileName), 'utf8');
9684
let parsedFileName = path.parse(fileName);
@@ -99,11 +87,11 @@ for (var fileName of fs.readdirSync('cases')) {
9987
fs.mkdirSync('generated');
10088
}
10189
let outputFileName = path.join('./generated', parsedFileName.name + '.txt');
102-
let scopesFileText = getScopesAtMarkers(text, grammar);
103-
if (scopesFileText) {
104-
fs.writeFile(outputFileName, getScopesAtMarkers(text, grammar), "utf8");
90+
const { markerScopes, wholeBaseline } = getScopesAtMarkers(text, grammar);
91+
if (markerScopes) {
92+
fs.writeFile(outputFileName, markerScopes, "utf8");
10593
}
10694

10795
let outputBaselineName = path.join('./generated', parsedFileName.name + '.baseline.txt');
108-
fs.writeFile(outputBaselineName, baselineWholeFile(text, grammar), "utf8");
96+
fs.writeFile(outputBaselineName, wholeBaseline, "utf8");
10997
}

0 commit comments

Comments
 (0)