版博士V2.0程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

token-store.js 1.5 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.isComma = exports.TokenStore = void 0;
  4. class TokenStore {
  5. constructor(tokens) {
  6. this.tokens = tokens;
  7. }
  8. add(token) {
  9. this.tokens.push(token);
  10. }
  11. findIndexByOffset(offset) {
  12. return this.tokens.findIndex((token) => token.range[0] <= offset && offset < token.range[1]);
  13. }
  14. findTokenByOffset(offset) {
  15. return this.tokens[this.findIndexByOffset(offset)];
  16. }
  17. getFirstToken(nodeOrToken) {
  18. return this.findTokenByOffset(nodeOrToken.range[0]);
  19. }
  20. getLastToken(nodeOrToken) {
  21. return this.findTokenByOffset(nodeOrToken.range[1] - 1);
  22. }
  23. getTokenBefore(nodeOrToken, filter) {
  24. const tokenIndex = this.findIndexByOffset(nodeOrToken.range[0]);
  25. for (let index = tokenIndex - 1; index >= 0; index--) {
  26. const token = this.tokens[index];
  27. if (!filter || filter(token)) {
  28. return token;
  29. }
  30. }
  31. return null;
  32. }
  33. getTokenAfter(nodeOrToken, filter) {
  34. const tokenIndex = this.findIndexByOffset(nodeOrToken.range[0]);
  35. for (let index = tokenIndex + 1; index < this.tokens.length; index++) {
  36. const token = this.tokens[index];
  37. if (!filter || filter(token)) {
  38. return token;
  39. }
  40. }
  41. return null;
  42. }
  43. }
  44. exports.TokenStore = TokenStore;
  45. function isComma(token) {
  46. return token.type === "Punctuator" && token.value === ",";
  47. }
  48. exports.isComma = isComma;