49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.isComma = exports.TokenStore = void 0;
|
|
class TokenStore {
|
|
constructor(tokens) {
|
|
this.tokens = tokens;
|
|
}
|
|
add(token) {
|
|
this.tokens.push(token);
|
|
}
|
|
findIndexByOffset(offset) {
|
|
return this.tokens.findIndex((token) => token.range[0] <= offset && offset < token.range[1]);
|
|
}
|
|
findTokenByOffset(offset) {
|
|
return this.tokens[this.findIndexByOffset(offset)];
|
|
}
|
|
getFirstToken(nodeOrToken) {
|
|
return this.findTokenByOffset(nodeOrToken.range[0]);
|
|
}
|
|
getLastToken(nodeOrToken) {
|
|
return this.findTokenByOffset(nodeOrToken.range[1] - 1);
|
|
}
|
|
getTokenBefore(nodeOrToken, filter) {
|
|
const tokenIndex = this.findIndexByOffset(nodeOrToken.range[0]);
|
|
for (let index = tokenIndex - 1; index >= 0; index--) {
|
|
const token = this.tokens[index];
|
|
if (!filter || filter(token)) {
|
|
return token;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
getTokenAfter(nodeOrToken, filter) {
|
|
const tokenIndex = this.findIndexByOffset(nodeOrToken.range[0]);
|
|
for (let index = tokenIndex + 1; index < this.tokens.length; index++) {
|
|
const token = this.tokens[index];
|
|
if (!filter || filter(token)) {
|
|
return token;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
exports.TokenStore = TokenStore;
|
|
function isComma(token) {
|
|
return token.type === "Punctuator" && token.value === ",";
|
|
}
|
|
exports.isComma = isComma;
|