版博士V2.0程序
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

49 lignes
1.5 KiB

  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;