1
>
/*---------------------------------------------------------------------------------------------
scanner.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { CharCode } from '../../../base/common/charCode.js';
7
>
import { illegalState } from '../../../base/common/errors.js';
8
>
import { localize } from '../../../nls.js';
9
>
10
>
export const enum TokenType {
11
>
LParen,
12
>
RParen,
13
>
Neg,
14
>
Eq,
15
>
NotEq,
16
>
Lt,
17
>
LtEq,
18
>
Gt,
19
>
GtEq,
20
>
RegexOp,
21
>
RegexStr,
22
>
True,
23
>
False,
24
>
In,
25
>
Not,
26
>
And,
27
>
Or,
28
>
Str,
29
>
QuotedStr,
30
>
Error,
31
>
EOF,
32
>
}
33
>
34
>
export type Token =
35
>
| { type: TokenType.LParen; offset: number }
36
>
| { type: TokenType.RParen; offset: number }
37
>
| { type: TokenType.Neg; offset: number }
38
>
| { type: TokenType.Eq; offset: number; isTripleEq: boolean }
39
>
| { type: TokenType.NotEq; offset: number; isTripleEq: boolean }
40
>
| { type: TokenType.Lt; offset: number }
41
>
| { type: TokenType.LtEq; offset: number }
42
>
| { type: TokenType.Gt; offset: number }
43
>
| { type: TokenType.GtEq; offset: number }
44
>
| { type: TokenType.RegexOp; offset: number }
45
>
| { type: TokenType.RegexStr; offset: number; lexeme: string }
46
>
| { type: TokenType.True; offset: number }
47
>
| { type: TokenType.False; offset: number }
48
>
| { type: TokenType.In; offset: number }
49
>
| { type: TokenType.Not; offset: number }
50
>
| { type: TokenType.And; offset: number }
51
>
| { type: TokenType.Or; offset: number }
52
>
| { type: TokenType.Str; offset: number; lexeme: string }
53
>
| { type: TokenType.QuotedStr; offset: number; lexeme: string }
54
>
| { type: TokenType.Error; offset: number; lexeme: string }
55
>
| { type: TokenType.EOF; offset: number };
56
>
57
>
type KeywordTokenType = TokenType.Not | TokenType.In | TokenType.False | TokenType.True;
58
>
type TokenTypeWithoutLexeme =
59
>
TokenType.LParen |
60
>
TokenType.RParen |
61
>
TokenType.Neg |
62
>
TokenType.Lt |
63
>
TokenType.LtEq |
64
>
TokenType.Gt |
65
>
TokenType.GtEq |
66
>
TokenType.RegexOp |
67
>
TokenType.True |
68
>
TokenType.False |
69
>
TokenType.In |
70
>
TokenType.Not |
71
>
TokenType.And |
72
>
TokenType.Or |
73
>
TokenType.EOF;
74
>
75
>
/**
76
>
* Example:
77
>
* `foo == bar'` - note how single quote doesn't have a corresponding closing quote,
78
>
* so it's reported as unexpected
79
>
*/
80
>
export type LexingError = {
81
>
offset: number; /** note that this doesn't take into account escape characters from the original encoding of the string, e.g., within an extension manifest file's JSON encoding */
82
>
lexeme: string;
83
>
additionalInfo?: string;
84
>
};
85
>
86
function hintDidYouMean(...meant: string[]) {
87
switch (meant.length) {