|
4 | 4 | import { parse } from '@typescript-eslint/typescript-estree'; |
5 | 5 | import { sourceText, initSourceText } from './source_code.js'; |
6 | 6 |
|
7 | | -import type { Comment, Node, NodeOrToken, Token } from './types.ts'; |
| 7 | +import type { Comment, Node, NodeOrToken } from './types.ts'; |
| 8 | +import type { Span } from './location.ts'; |
8 | 9 |
|
9 | 10 | /** |
10 | 11 | * Options for various `SourceCode` methods e.g. `getFirstToken`. |
@@ -43,6 +44,89 @@ export interface RangeOptions { |
43 | 44 | */ |
44 | 45 | export type FilterFn = (token: Token) => boolean; |
45 | 46 |
|
| 47 | +// AST token type. |
| 48 | +export type Token = |
| 49 | + | BooleanToken |
| 50 | + | CommentToken |
| 51 | + | IdentifierToken |
| 52 | + | JSXIdentifierToken |
| 53 | + | JSXTextToken |
| 54 | + | KeywordToken |
| 55 | + | NullToken |
| 56 | + | NumericToken |
| 57 | + | PrivateIdentifierToken |
| 58 | + | PunctuatorToken |
| 59 | + | RegularExpressionToken |
| 60 | + | StringToken |
| 61 | + | TemplateToken; |
| 62 | + |
| 63 | +interface BaseToken extends Omit<Span, 'start' | 'end'> { |
| 64 | + type: Token['type']; |
| 65 | + value: string; |
| 66 | +} |
| 67 | + |
| 68 | +export interface BooleanToken extends BaseToken { |
| 69 | + type: 'Boolean'; |
| 70 | +} |
| 71 | + |
| 72 | +export type CommentToken = BlockCommentToken | LineCommentToken; |
| 73 | + |
| 74 | +export interface BlockCommentToken extends BaseToken { |
| 75 | + type: 'Block'; |
| 76 | +} |
| 77 | + |
| 78 | +export interface LineCommentToken extends BaseToken { |
| 79 | + type: 'Line'; |
| 80 | +} |
| 81 | + |
| 82 | +export interface IdentifierToken extends BaseToken { |
| 83 | + type: 'Identifier'; |
| 84 | +} |
| 85 | + |
| 86 | +export interface JSXIdentifierToken extends BaseToken { |
| 87 | + type: 'JSXIdentifier'; |
| 88 | +} |
| 89 | + |
| 90 | +export interface JSXTextToken extends BaseToken { |
| 91 | + type: 'JSXText'; |
| 92 | +} |
| 93 | + |
| 94 | +export interface KeywordToken extends BaseToken { |
| 95 | + type: 'Keyword'; |
| 96 | +} |
| 97 | + |
| 98 | +export interface NullToken extends BaseToken { |
| 99 | + type: 'Null'; |
| 100 | +} |
| 101 | + |
| 102 | +export interface NumericToken extends BaseToken { |
| 103 | + type: 'Numeric'; |
| 104 | +} |
| 105 | + |
| 106 | +export interface PrivateIdentifierToken extends BaseToken { |
| 107 | + type: 'PrivateIdentifier'; |
| 108 | +} |
| 109 | + |
| 110 | +export interface PunctuatorToken extends BaseToken { |
| 111 | + type: 'Punctuator'; |
| 112 | +} |
| 113 | + |
| 114 | +export interface RegularExpressionToken extends BaseToken { |
| 115 | + type: 'RegularExpression'; |
| 116 | + regex: { |
| 117 | + flags: string; |
| 118 | + pattern: string; |
| 119 | + }; |
| 120 | +} |
| 121 | + |
| 122 | +export interface StringToken extends BaseToken { |
| 123 | + type: 'String'; |
| 124 | +} |
| 125 | + |
| 126 | +export interface TemplateToken extends BaseToken { |
| 127 | + type: 'Template'; |
| 128 | +} |
| 129 | + |
46 | 130 | // Tokens for the current file parsed by TS-ESLint. |
47 | 131 | // Created lazily only when needed. |
48 | 132 | let tokens: Token[] | null = null; |
|
0 commit comments