@renovatebot/good-enough-parser 1.1.24 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/cjs/index.d.ts +4 -4
- package/dist/cjs/index.js +7 -7
- package/dist/cjs/lang/groovy.d.ts +6 -6
- package/dist/cjs/lang/groovy.js +83 -83
- package/dist/cjs/lang/index.d.ts +20 -20
- package/dist/cjs/lang/index.js +56 -56
- package/dist/cjs/lang/index.js.map +1 -1
- package/dist/cjs/lang/python.d.ts +6 -6
- package/dist/cjs/lang/python.js +73 -73
- package/dist/cjs/lang/scala.d.ts +6 -6
- package/dist/cjs/lang/scala.js +71 -71
- package/dist/cjs/lang/starlark.d.ts +6 -6
- package/dist/cjs/lang/starlark.js +58 -58
- package/dist/cjs/lang/types.d.ts +6 -6
- package/dist/cjs/lang/types.js +2 -2
- package/dist/cjs/lexer/bracket.d.ts +6 -6
- package/dist/cjs/lexer/bracket.js +56 -57
- package/dist/cjs/lexer/bracket.js.map +1 -1
- package/dist/cjs/lexer/comment.d.ts +3 -3
- package/dist/cjs/lexer/comment.js +43 -44
- package/dist/cjs/lexer/comment.js.map +1 -1
- package/dist/cjs/lexer/index.d.ts +5 -5
- package/dist/cjs/lexer/index.js +154 -155
- package/dist/cjs/lexer/index.js.map +1 -1
- package/dist/cjs/lexer/number.d.ts +2 -2
- package/dist/cjs/lexer/number.js +17 -18
- package/dist/cjs/lexer/number.js.map +1 -1
- package/dist/cjs/lexer/operator.d.ts +2 -2
- package/dist/cjs/lexer/operator.js +23 -24
- package/dist/cjs/lexer/operator.js.map +1 -1
- package/dist/cjs/lexer/rules.d.ts +4 -4
- package/dist/cjs/lexer/rules.js +74 -74
- package/dist/cjs/lexer/rules.js.map +1 -1
- package/dist/cjs/lexer/string.d.ts +2 -2
- package/dist/cjs/lexer/string.js +180 -181
- package/dist/cjs/lexer/string.js.map +1 -1
- package/dist/cjs/lexer/symbol.d.ts +2 -2
- package/dist/cjs/lexer/symbol.js +17 -18
- package/dist/cjs/lexer/symbol.js.map +1 -1
- package/dist/cjs/lexer/token.d.ts +3 -3
- package/dist/cjs/lexer/token.js +63 -64
- package/dist/cjs/lexer/token.js.map +1 -1
- package/dist/cjs/lexer/types.d.ts +142 -142
- package/dist/cjs/lexer/types.js +2 -2
- package/dist/cjs/parser/cursor.d.ts +2 -2
- package/dist/cjs/parser/cursor.js +12 -13
- package/dist/cjs/parser/cursor.js.map +1 -1
- package/dist/cjs/parser/index.d.ts +3 -3
- package/dist/cjs/parser/index.js +19 -19
- package/dist/cjs/parser/tree.d.ts +4 -4
- package/dist/cjs/parser/tree.js +245 -246
- package/dist/cjs/parser/tree.js.map +1 -1
- package/dist/cjs/parser/types.d.ts +33 -33
- package/dist/cjs/parser/types.js +2 -2
- package/dist/cjs/query/builder.d.ts +144 -144
- package/dist/cjs/query/builder.d.ts.map +1 -1
- package/dist/cjs/query/builder.js +333 -332
- package/dist/cjs/query/builder.js.map +1 -1
- package/dist/cjs/query/handler.d.ts +2 -2
- package/dist/cjs/query/handler.js +9 -10
- package/dist/cjs/query/handler.js.map +1 -1
- package/dist/cjs/query/index.d.ts +2 -2
- package/dist/cjs/query/index.js +32 -32
- package/dist/cjs/query/matchers/abstract-matcher.d.ts +9 -9
- package/dist/cjs/query/matchers/abstract-matcher.js +36 -36
- package/dist/cjs/query/matchers/abstract-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/alt-matcher.d.ts +10 -10
- package/dist/cjs/query/matchers/alt-matcher.js +33 -33
- package/dist/cjs/query/matchers/alt-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/anchor-matcher.d.ts +17 -17
- package/dist/cjs/query/matchers/anchor-matcher.js +50 -50
- package/dist/cjs/query/matchers/anchor-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/comment-matcher.d.ts +10 -10
- package/dist/cjs/query/matchers/comment-matcher.js +39 -39
- package/dist/cjs/query/matchers/comment-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/index.d.ts +6 -6
- package/dist/cjs/query/matchers/index.js +22 -22
- package/dist/cjs/query/matchers/many-matcher.d.ts +13 -13
- package/dist/cjs/query/matchers/many-matcher.js +61 -61
- package/dist/cjs/query/matchers/many-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/num-matcher.d.ts +8 -8
- package/dist/cjs/query/matchers/num-matcher.js +34 -34
- package/dist/cjs/query/matchers/num-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/op-matcher.d.ts +8 -8
- package/dist/cjs/query/matchers/op-matcher.js +34 -34
- package/dist/cjs/query/matchers/op-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/seq-matcher.d.ts +14 -14
- package/dist/cjs/query/matchers/seq-matcher.js +76 -76
- package/dist/cjs/query/matchers/seq-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/str-matcher.d.ts +38 -38
- package/dist/cjs/query/matchers/str-matcher.js +108 -108
- package/dist/cjs/query/matchers/str-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/sym-matcher.d.ts +8 -8
- package/dist/cjs/query/matchers/sym-matcher.js +34 -34
- package/dist/cjs/query/matchers/sym-matcher.js.map +1 -1
- package/dist/cjs/query/matchers/tree-matcher.d.ts +23 -23
- package/dist/cjs/query/matchers/tree-matcher.js +121 -121
- package/dist/cjs/query/matchers/tree-matcher.js.map +1 -1
- package/dist/cjs/query/options.d.ts +10 -10
- package/dist/cjs/query/options.js +148 -149
- package/dist/cjs/query/options.js.map +1 -1
- package/dist/cjs/query/regex.d.ts +1 -1
- package/dist/cjs/query/regex.js +12 -13
- package/dist/cjs/query/regex.js.map +1 -1
- package/dist/cjs/query/types.d.ts +100 -100
- package/dist/cjs/query/types.d.ts.map +1 -1
- package/dist/cjs/query/types.js +2 -2
- package/dist/cjs/util/clone.d.ts +1 -1
- package/dist/cjs/util/clone.js +5 -5
- package/dist/cjs/util/regex.d.ts +1 -1
- package/dist/cjs/util/regex.js +6 -7
- package/dist/cjs/util/regex.js.map +1 -1
- package/dist/esm/index.d.ts +4 -4
- package/dist/esm/index.js +8 -8
- package/dist/esm/lang/groovy.d.ts +6 -6
- package/dist/esm/lang/groovy.js +80 -80
- package/dist/esm/lang/index.d.ts +20 -20
- package/dist/esm/lang/index.js +37 -37
- package/dist/esm/lang/python.d.ts +6 -6
- package/dist/esm/lang/python.js +70 -70
- package/dist/esm/lang/scala.d.ts +6 -6
- package/dist/esm/lang/scala.js +68 -68
- package/dist/esm/lang/starlark.d.ts +6 -6
- package/dist/esm/lang/starlark.js +55 -55
- package/dist/esm/lang/types.d.ts +6 -6
- package/dist/esm/lang/types.js +1 -1
- package/dist/esm/lexer/bracket.d.ts +6 -6
- package/dist/esm/lexer/bracket.js +49 -49
- package/dist/esm/lexer/bracket.js.map +1 -1
- package/dist/esm/lexer/comment.d.ts +3 -3
- package/dist/esm/lexer/comment.js +39 -39
- package/dist/esm/lexer/comment.js.map +1 -1
- package/dist/esm/lexer/index.d.ts +5 -5
- package/dist/esm/lexer/index.js +136 -136
- package/dist/esm/lexer/index.js.map +1 -1
- package/dist/esm/lexer/number.d.ts +2 -2
- package/dist/esm/lexer/number.js +14 -14
- package/dist/esm/lexer/operator.d.ts +2 -2
- package/dist/esm/lexer/operator.js +20 -20
- package/dist/esm/lexer/rules.d.ts +4 -4
- package/dist/esm/lexer/rules.js +69 -69
- package/dist/esm/lexer/rules.js.map +1 -1
- package/dist/esm/lexer/string.d.ts +2 -2
- package/dist/esm/lexer/string.js +177 -177
- package/dist/esm/lexer/string.js.map +1 -1
- package/dist/esm/lexer/symbol.d.ts +2 -2
- package/dist/esm/lexer/symbol.js +14 -14
- package/dist/esm/lexer/token.d.ts +3 -3
- package/dist/esm/lexer/token.js +60 -60
- package/dist/esm/lexer/token.js.map +1 -1
- package/dist/esm/lexer/types.d.ts +142 -142
- package/dist/esm/lexer/types.js +1 -1
- package/dist/esm/parser/cursor.d.ts +2 -2
- package/dist/esm/parser/cursor.js +9 -9
- package/dist/esm/parser/index.d.ts +3 -3
- package/dist/esm/parser/index.js +3 -3
- package/dist/esm/parser/tree.d.ts +4 -4
- package/dist/esm/parser/tree.js +241 -241
- package/dist/esm/parser/tree.js.map +1 -1
- package/dist/esm/parser/types.d.ts +33 -33
- package/dist/esm/parser/types.js +1 -1
- package/dist/esm/query/builder.d.ts +144 -144
- package/dist/esm/query/builder.d.ts.map +1 -1
- package/dist/esm/query/builder.js +305 -304
- package/dist/esm/query/builder.js.map +1 -1
- package/dist/esm/query/handler.d.ts +2 -2
- package/dist/esm/query/handler.js +6 -6
- package/dist/esm/query/index.d.ts +2 -2
- package/dist/esm/query/index.js +2 -2
- package/dist/esm/query/matchers/abstract-matcher.d.ts +9 -9
- package/dist/esm/query/matchers/abstract-matcher.js +32 -32
- package/dist/esm/query/matchers/abstract-matcher.js.map +1 -1
- package/dist/esm/query/matchers/alt-matcher.d.ts +10 -10
- package/dist/esm/query/matchers/alt-matcher.js +29 -29
- package/dist/esm/query/matchers/alt-matcher.js.map +1 -1
- package/dist/esm/query/matchers/anchor-matcher.d.ts +17 -17
- package/dist/esm/query/matchers/anchor-matcher.js +44 -44
- package/dist/esm/query/matchers/anchor-matcher.js.map +1 -1
- package/dist/esm/query/matchers/comment-matcher.d.ts +10 -10
- package/dist/esm/query/matchers/comment-matcher.js +35 -35
- package/dist/esm/query/matchers/comment-matcher.js.map +1 -1
- package/dist/esm/query/matchers/index.d.ts +6 -6
- package/dist/esm/query/matchers/index.js +6 -6
- package/dist/esm/query/matchers/many-matcher.d.ts +13 -13
- package/dist/esm/query/matchers/many-matcher.js +57 -57
- package/dist/esm/query/matchers/many-matcher.js.map +1 -1
- package/dist/esm/query/matchers/num-matcher.d.ts +8 -8
- package/dist/esm/query/matchers/num-matcher.js +30 -30
- package/dist/esm/query/matchers/num-matcher.js.map +1 -1
- package/dist/esm/query/matchers/op-matcher.d.ts +8 -8
- package/dist/esm/query/matchers/op-matcher.js +30 -30
- package/dist/esm/query/matchers/op-matcher.js.map +1 -1
- package/dist/esm/query/matchers/seq-matcher.d.ts +14 -14
- package/dist/esm/query/matchers/seq-matcher.js +72 -72
- package/dist/esm/query/matchers/seq-matcher.js.map +1 -1
- package/dist/esm/query/matchers/str-matcher.d.ts +38 -38
- package/dist/esm/query/matchers/str-matcher.js +102 -102
- package/dist/esm/query/matchers/str-matcher.js.map +1 -1
- package/dist/esm/query/matchers/sym-matcher.d.ts +8 -8
- package/dist/esm/query/matchers/sym-matcher.js +30 -30
- package/dist/esm/query/matchers/sym-matcher.js.map +1 -1
- package/dist/esm/query/matchers/tree-matcher.d.ts +23 -23
- package/dist/esm/query/matchers/tree-matcher.js +117 -117
- package/dist/esm/query/matchers/tree-matcher.js.map +1 -1
- package/dist/esm/query/options.d.ts +10 -10
- package/dist/esm/query/options.js +139 -139
- package/dist/esm/query/options.js.map +1 -1
- package/dist/esm/query/regex.d.ts +1 -1
- package/dist/esm/query/regex.js +9 -9
- package/dist/esm/query/regex.js.map +1 -1
- package/dist/esm/query/types.d.ts +100 -100
- package/dist/esm/query/types.d.ts.map +1 -1
- package/dist/esm/query/types.js +1 -1
- package/dist/esm/util/clone.d.ts +1 -1
- package/dist/esm/util/clone.js +1 -1
- package/dist/esm/util/regex.d.ts +1 -1
- package/dist/esm/util/regex.js +3 -3
- package/package.json +42 -46
package/README.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
TypeScript library aiming to fill the gap between usage of ad-hoc regular expressions and generation of complete grammar descriptions.
|
|
4
4
|
|
|
5
|
-
[](https://github.com/
|
|
6
|
-
[](https://github.com/renovatebot/good-enough-parser/blob/main/LICENSE)
|
|
6
|
+
[](https://github.com/renovatebot/good-enough-parser/actions/workflows/build.yml)
|
|
7
7
|
|
|
8
8
|
## Motivation
|
|
9
9
|
|
|
@@ -27,7 +27,7 @@ While most programming languages provide parser tooling for the language they're
|
|
|
27
27
|
|
|
28
28
|
The library is divided into multiple levels of abstraction, from the lowest to the highest one:
|
|
29
29
|
|
|
30
|
-
### [`lib/lexer`](https://github.com/
|
|
30
|
+
### [`lib/lexer`](https://github.com/renovatebot/good-enough-parser/tree/main/lib/lexer)
|
|
31
31
|
|
|
32
32
|
Configures the [moo](https://github.com/no-context/moo) tokenizer for specific language features such as:
|
|
33
33
|
|
|
@@ -40,14 +40,14 @@ Configures the [moo](https://github.com/no-context/moo) tokenizer for specific l
|
|
|
40
40
|
- Line joins: if the line ends with `\`, the next one will be treated as its continuation
|
|
41
41
|
|
|
42
42
|
Refer to the `LexerConfig` interface for more details.
|
|
43
|
-
Also check out [our usage example for Python](https://github.com/
|
|
43
|
+
Also check out [our usage example for Python](https://github.com/renovatebot/good-enough-parser/blob/main/lib/lang/python.ts).
|
|
44
44
|
|
|
45
|
-
### [`lib/parser`](https://github.com/
|
|
45
|
+
### [`lib/parser`](https://github.com/renovatebot/good-enough-parser/tree/main/lib/tree)
|
|
46
46
|
|
|
47
47
|
This layer is responsible for transforming the token sequence to the nested tree with the tokens as leafs.
|
|
48
48
|
Internally, we're using functional [zipper](<https://en.wikipedia.org/wiki/Zipper_(data_structure)>) data structure to perform queries on the tree.
|
|
49
49
|
|
|
50
|
-
### [`lib/query`](https://github.com/
|
|
50
|
+
### [`lib/query`](https://github.com/renovatebot/good-enough-parser/tree/main/lib/query)
|
|
51
51
|
|
|
52
52
|
To understand `parser-utils` queries, it's useful to keep in mind the principle of how regular expressions work.
|
|
53
53
|
Each query represents sequence of adjacent tokens and tree elements.
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * as lang from './lang';
|
|
2
|
-
export * as lexer from './lexer';
|
|
3
|
-
export * as parser from './parser';
|
|
4
|
-
export * as query from './query';
|
|
1
|
+
export * as lang from './lang';
|
|
2
|
+
export * as lexer from './lexer';
|
|
3
|
+
export * as parser from './parser';
|
|
4
|
+
export * as query from './query';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.query = exports.parser = exports.lexer = exports.lang = void 0;
|
|
4
|
-
exports.lang = require("./lang");
|
|
5
|
-
exports.lexer = require("./lexer");
|
|
6
|
-
exports.parser = require("./parser");
|
|
7
|
-
exports.query = require("./query");
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.query = exports.parser = exports.lexer = exports.lang = void 0;
|
|
4
|
+
exports.lang = require("./lang");
|
|
5
|
+
exports.lexer = require("./lexer");
|
|
6
|
+
exports.parser = require("./parser");
|
|
7
|
+
exports.query = require("./query");
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { LexerConfig } from '../lexer/types';
|
|
2
|
-
import type { ParserConfig } from '../parser/types';
|
|
3
|
-
import type { LanguageConfig } from './types';
|
|
4
|
-
export declare const lexer: LexerConfig;
|
|
5
|
-
export declare const parser: ParserConfig;
|
|
6
|
-
export declare const lang: LanguageConfig;
|
|
1
|
+
import type { LexerConfig } from '../lexer/types';
|
|
2
|
+
import type { ParserConfig } from '../parser/types';
|
|
3
|
+
import type { LanguageConfig } from './types';
|
|
4
|
+
export declare const lexer: LexerConfig;
|
|
5
|
+
export declare const parser: ParserConfig;
|
|
6
|
+
export declare const lang: LanguageConfig;
|
|
7
7
|
//# sourceMappingURL=groovy.d.ts.map
|
package/dist/cjs/lang/groovy.js
CHANGED
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.lang = exports.parser = exports.lexer = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @see https://docs.groovy-lang.org/latest/html/documentation/#groovy-operators
|
|
6
|
-
*/
|
|
7
|
-
const operators =
|
|
8
|
-
/* prettier-ignore */ [
|
|
9
|
-
'+', '-', '*', '/', '%', '**',
|
|
10
|
-
'++', '--',
|
|
11
|
-
'+=', '-=', '*=', '/=', '%=', '**=',
|
|
12
|
-
'==', '!=', '<', '<=', '>', '>=', '===', '!==', '<=>',
|
|
13
|
-
'&&', '||', '!',
|
|
14
|
-
'&', '|', '^', '~',
|
|
15
|
-
'<<', '>>', '>>>',
|
|
16
|
-
'?', '?:',
|
|
17
|
-
'=', '?=',
|
|
18
|
-
'.', '?.', '.@', '.&', '::',
|
|
19
|
-
'=~', '==~',
|
|
20
|
-
'*.', ':',
|
|
21
|
-
'..', '..<',
|
|
22
|
-
'<>',
|
|
23
|
-
'<<=', '>>=', '>>>=', '&=', '^=', '|=', '?=',
|
|
24
|
-
'->',
|
|
25
|
-
',', ';',
|
|
26
|
-
];
|
|
27
|
-
/**
|
|
28
|
-
* Borrowed from Python implementation:
|
|
29
|
-
*
|
|
30
|
-
* @see https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
|
|
31
|
-
*/
|
|
32
|
-
const bindigit = '[01]';
|
|
33
|
-
const octdigit = '[0-7]';
|
|
34
|
-
const digit = '[0-9]';
|
|
35
|
-
const nonzerodigit = '[1-9]';
|
|
36
|
-
const hexdigit = `(?:${digit}|[a-fA-F])`;
|
|
37
|
-
const bininteger = `(?:0[bB](?:_?${bindigit})+)`;
|
|
38
|
-
const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
|
|
39
|
-
const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
|
|
40
|
-
const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
|
|
41
|
-
const integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;
|
|
42
|
-
const digitpart = `(?:${digit}(?:_?${digit})*)`;
|
|
43
|
-
const fraction = `(?:\\.${digitpart})`;
|
|
44
|
-
const exponent = `(?:[eE][-+]?${digitpart})`;
|
|
45
|
-
const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
|
|
46
|
-
const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
|
|
47
|
-
const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
|
|
48
|
-
const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
|
|
49
|
-
const templates = [
|
|
50
|
-
{
|
|
51
|
-
type: 'var',
|
|
52
|
-
startsWith: '$',
|
|
53
|
-
symbols: /[a-zA-Z_][a-zA-Z0-9_]*/,
|
|
54
|
-
operators: ['.'],
|
|
55
|
-
},
|
|
56
|
-
{ type: 'expr', startsWith: '${', endsWith: '}' },
|
|
57
|
-
];
|
|
58
|
-
exports.lexer = {
|
|
59
|
-
joinLines: '\\',
|
|
60
|
-
comments: [
|
|
61
|
-
{ type: 'line-comment', startsWith: '#!' },
|
|
62
|
-
{ type: 'line-comment', startsWith: '//' },
|
|
63
|
-
{ type: 'multiline-comment', startsWith: '/*', endsWith: '*/' },
|
|
64
|
-
],
|
|
65
|
-
symbols: /[a-zA-Z$_][a-zA-Z0-9$_]*/,
|
|
66
|
-
numbers,
|
|
67
|
-
operators,
|
|
68
|
-
brackets: [
|
|
69
|
-
{ startsWith: '{', endsWith: '}' },
|
|
70
|
-
{ startsWith: '[', endsWith: ']' },
|
|
71
|
-
{ startsWith: '(', endsWith: ')' },
|
|
72
|
-
],
|
|
73
|
-
strings: [
|
|
74
|
-
{ startsWith: "'", escapeChar: '\\' },
|
|
75
|
-
{ startsWith: "'''", escapeChar: '\\' },
|
|
76
|
-
{ startsWith: '"', templates, escapeChar: '\\' },
|
|
77
|
-
{ startsWith: '"""', templates, escapeChar: '\\' },
|
|
78
|
-
],
|
|
79
|
-
};
|
|
80
|
-
exports.parser = {
|
|
81
|
-
useIndentBlocks: false,
|
|
82
|
-
};
|
|
83
|
-
exports.lang = { lexer: exports.lexer, parser: exports.parser };
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lang = exports.parser = exports.lexer = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @see https://docs.groovy-lang.org/latest/html/documentation/#groovy-operators
|
|
6
|
+
*/
|
|
7
|
+
const operators =
|
|
8
|
+
/* prettier-ignore */ [
|
|
9
|
+
'+', '-', '*', '/', '%', '**',
|
|
10
|
+
'++', '--',
|
|
11
|
+
'+=', '-=', '*=', '/=', '%=', '**=',
|
|
12
|
+
'==', '!=', '<', '<=', '>', '>=', '===', '!==', '<=>',
|
|
13
|
+
'&&', '||', '!',
|
|
14
|
+
'&', '|', '^', '~',
|
|
15
|
+
'<<', '>>', '>>>',
|
|
16
|
+
'?', '?:',
|
|
17
|
+
'=', '?=',
|
|
18
|
+
'.', '?.', '.@', '.&', '::',
|
|
19
|
+
'=~', '==~',
|
|
20
|
+
'*.', ':',
|
|
21
|
+
'..', '..<',
|
|
22
|
+
'<>',
|
|
23
|
+
'<<=', '>>=', '>>>=', '&=', '^=', '|=', '?=',
|
|
24
|
+
'->',
|
|
25
|
+
',', ';',
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Borrowed from Python implementation:
|
|
29
|
+
*
|
|
30
|
+
* @see https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
|
|
31
|
+
*/
|
|
32
|
+
const bindigit = '[01]';
|
|
33
|
+
const octdigit = '[0-7]';
|
|
34
|
+
const digit = '[0-9]';
|
|
35
|
+
const nonzerodigit = '[1-9]';
|
|
36
|
+
const hexdigit = `(?:${digit}|[a-fA-F])`;
|
|
37
|
+
const bininteger = `(?:0[bB](?:_?${bindigit})+)`;
|
|
38
|
+
const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
|
|
39
|
+
const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
|
|
40
|
+
const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
|
|
41
|
+
const integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;
|
|
42
|
+
const digitpart = `(?:${digit}(?:_?${digit})*)`;
|
|
43
|
+
const fraction = `(?:\\.${digitpart})`;
|
|
44
|
+
const exponent = `(?:[eE][-+]?${digitpart})`;
|
|
45
|
+
const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
|
|
46
|
+
const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
|
|
47
|
+
const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
|
|
48
|
+
const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
|
|
49
|
+
const templates = [
|
|
50
|
+
{
|
|
51
|
+
type: 'var',
|
|
52
|
+
startsWith: '$',
|
|
53
|
+
symbols: /[a-zA-Z_][a-zA-Z0-9_]*/,
|
|
54
|
+
operators: ['.'],
|
|
55
|
+
},
|
|
56
|
+
{ type: 'expr', startsWith: '${', endsWith: '}' },
|
|
57
|
+
];
|
|
58
|
+
exports.lexer = {
|
|
59
|
+
joinLines: '\\',
|
|
60
|
+
comments: [
|
|
61
|
+
{ type: 'line-comment', startsWith: '#!' },
|
|
62
|
+
{ type: 'line-comment', startsWith: '//' },
|
|
63
|
+
{ type: 'multiline-comment', startsWith: '/*', endsWith: '*/' },
|
|
64
|
+
],
|
|
65
|
+
symbols: /[a-zA-Z$_][a-zA-Z0-9$_]*/,
|
|
66
|
+
numbers,
|
|
67
|
+
operators,
|
|
68
|
+
brackets: [
|
|
69
|
+
{ startsWith: '{', endsWith: '}' },
|
|
70
|
+
{ startsWith: '[', endsWith: ']' },
|
|
71
|
+
{ startsWith: '(', endsWith: ')' },
|
|
72
|
+
],
|
|
73
|
+
strings: [
|
|
74
|
+
{ startsWith: "'", escapeChar: '\\' },
|
|
75
|
+
{ startsWith: "'''", escapeChar: '\\' },
|
|
76
|
+
{ startsWith: '"', templates, escapeChar: '\\' },
|
|
77
|
+
{ startsWith: '"""', templates, escapeChar: '\\' },
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
exports.parser = {
|
|
81
|
+
useIndentBlocks: false,
|
|
82
|
+
};
|
|
83
|
+
exports.lang = { lexer: exports.lexer, parser: exports.parser };
|
|
84
84
|
//# sourceMappingURL=groovy.js.map
|
package/dist/cjs/lang/index.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import type { Cursor, Node } from '../parser/types';
|
|
2
|
-
import type { QueryBuilder } from '../query/types';
|
|
3
|
-
import type { LanguageConfig } from './types';
|
|
4
|
-
export * from './types';
|
|
5
|
-
export declare class Language {
|
|
6
|
-
readonly config: LanguageConfig;
|
|
7
|
-
private lexer;
|
|
8
|
-
constructor(config: LanguageConfig);
|
|
9
|
-
parse(input: string): Cursor;
|
|
10
|
-
query<Ctx, T extends Node>(input: string | Cursor, q: QueryBuilder<Ctx, T>, context: Ctx): Ctx | null;
|
|
11
|
-
}
|
|
12
|
-
declare const languagePresets: {
|
|
13
|
-
groovy: LanguageConfig;
|
|
14
|
-
python: LanguageConfig;
|
|
15
|
-
scala: LanguageConfig;
|
|
16
|
-
starlark: LanguageConfig;
|
|
17
|
-
};
|
|
18
|
-
type LanguagePreset = keyof typeof languagePresets;
|
|
19
|
-
export declare function createLang(key: LanguagePreset): Language;
|
|
20
|
-
export declare function createLang(config: LanguageConfig): Language;
|
|
1
|
+
import type { Cursor, Node } from '../parser/types';
|
|
2
|
+
import type { QueryBuilder } from '../query/types';
|
|
3
|
+
import type { LanguageConfig } from './types';
|
|
4
|
+
export * from './types';
|
|
5
|
+
export declare class Language {
|
|
6
|
+
readonly config: LanguageConfig;
|
|
7
|
+
private lexer;
|
|
8
|
+
constructor(config: LanguageConfig);
|
|
9
|
+
parse(input: string): Cursor;
|
|
10
|
+
query<Ctx, T extends Node>(input: string | Cursor, q: QueryBuilder<Ctx, T>, context: Ctx): Ctx | null;
|
|
11
|
+
}
|
|
12
|
+
declare const languagePresets: {
|
|
13
|
+
groovy: LanguageConfig;
|
|
14
|
+
python: LanguageConfig;
|
|
15
|
+
scala: LanguageConfig;
|
|
16
|
+
starlark: LanguageConfig;
|
|
17
|
+
};
|
|
18
|
+
type LanguagePreset = keyof typeof languagePresets;
|
|
19
|
+
export declare function createLang(key: LanguagePreset): Language;
|
|
20
|
+
export declare function createLang(config: LanguageConfig): Language;
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/lang/index.js
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Language = void 0;
|
|
18
|
+
exports.createLang = createLang;
|
|
19
|
+
const lexer_1 = require("../lexer");
|
|
20
|
+
const parser_1 = require("../parser");
|
|
21
|
+
const query_1 = require("../query");
|
|
22
|
+
const clone_1 = require("../util/clone");
|
|
23
|
+
const groovy_1 = require("./groovy");
|
|
24
|
+
const python_1 = require("./python");
|
|
25
|
+
const scala_1 = require("./scala");
|
|
26
|
+
const starlark_1 = require("./starlark");
|
|
27
|
+
__exportStar(require("./types"), exports);
|
|
28
|
+
class Language {
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.config = config;
|
|
31
|
+
this.lexer = (0, lexer_1.createLexer)(config.lexer);
|
|
32
|
+
}
|
|
33
|
+
parse(input) {
|
|
34
|
+
this.lexer.reset(input);
|
|
35
|
+
const root = (0, parser_1.createTree)(this.lexer, this.config.parser);
|
|
36
|
+
return (0, parser_1.createCursor)(root);
|
|
37
|
+
}
|
|
38
|
+
query(input, q, context) {
|
|
39
|
+
const matcher = (0, query_1.buildRoot)(q);
|
|
40
|
+
const cursor = typeof input === 'string' ? this.parse(input) : input;
|
|
41
|
+
const checkpoint = matcher.match({ cursor, context });
|
|
42
|
+
const result = checkpoint === null || checkpoint === void 0 ? void 0 : checkpoint.context;
|
|
43
|
+
return result ? (0, clone_1.clone)(result) : null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.Language = Language;
|
|
47
|
+
const languagePresets = {
|
|
48
|
+
groovy: groovy_1.lang,
|
|
49
|
+
python: python_1.lang,
|
|
50
|
+
scala: scala_1.lang,
|
|
51
|
+
starlark: starlark_1.lang,
|
|
52
|
+
};
|
|
53
|
+
function createLang(arg1) {
|
|
54
|
+
const config = typeof arg1 === 'string' ? languagePresets[arg1] : arg1;
|
|
55
|
+
return new Language(config);
|
|
56
|
+
}
|
|
57
57
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/lang/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/lang/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAoDA,gCAGC;AAvDD,oCAAuC;AAEvC,sCAAqD;AAErD,oCAAqC;AAErC,yCAAsC;AACtC,qCAA0C;AAC1C,qCAA0C;AAC1C,mCAAwC;AACxC,yCAA8C;AAG9C,0CAAwB;AAExB,MAAa,QAAQ;IAGnB,YAAqB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;QACzC,IAAI,CAAC,KAAK,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,IAAA,qBAAY,EAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CACH,KAAsB,EACtB,CAAuB,EACvB,OAAY;QAEZ,MAAM,OAAO,GAAG,IAAA,iBAAS,EAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC;QACnC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAA,aAAK,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;CACF;AAxBD,4BAwBC;AAED,MAAM,eAAe,GAAG;IACtB,MAAM,EAAN,aAAM;IACN,MAAM,EAAN,aAAM;IACN,KAAK,EAAL,YAAK;IACL,QAAQ,EAAR,eAAQ;CACT,CAAC;AAMF,SAAgB,UAAU,CAAC,IAAqC;IAC9D,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { LexerConfig } from '../lexer/types';
|
|
2
|
-
import type { ParserConfig } from '../parser/types';
|
|
3
|
-
import type { LanguageConfig } from './types';
|
|
4
|
-
export declare const lexer: LexerConfig;
|
|
5
|
-
export declare const parser: ParserConfig;
|
|
6
|
-
export declare const lang: LanguageConfig;
|
|
1
|
+
import type { LexerConfig } from '../lexer/types';
|
|
2
|
+
import type { ParserConfig } from '../parser/types';
|
|
3
|
+
import type { LanguageConfig } from './types';
|
|
4
|
+
export declare const lexer: LexerConfig;
|
|
5
|
+
export declare const parser: ParserConfig;
|
|
6
|
+
export declare const lang: LanguageConfig;
|
|
7
7
|
//# sourceMappingURL=python.d.ts.map
|
package/dist/cjs/lang/python.js
CHANGED
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.lang = exports.parser = exports.lexer = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* @see https://docs.python.org/3/reference/lexical_analysis.html#operators
|
|
6
|
-
*/
|
|
7
|
-
const operators =
|
|
8
|
-
/* prettier-ignore */ [
|
|
9
|
-
// Operators
|
|
10
|
-
'+', '-', '*', '**', '/', '//', '%', '@',
|
|
11
|
-
'<<', '>>', '&', '|', '^', '~', ':=',
|
|
12
|
-
'<', '>', '<=', '>=', '==', '!=',
|
|
13
|
-
// Delimiters
|
|
14
|
-
',', ':', '.', ';', '@', '=', '->',
|
|
15
|
-
'+=', '-=', '*=', '/=', '//=', '%=', '@=',
|
|
16
|
-
'&=', '|=', '^=', '>>=', '<<=', '**=',
|
|
17
|
-
];
|
|
18
|
-
/**
|
|
19
|
-
* @see https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
|
|
20
|
-
*/
|
|
21
|
-
const bindigit = '[01]';
|
|
22
|
-
const octdigit = '[0-7]';
|
|
23
|
-
const digit = '[0-9]';
|
|
24
|
-
const nonzerodigit = '[1-9]';
|
|
25
|
-
const hexdigit = `(?:${digit}|[a-fA-F])`;
|
|
26
|
-
const bininteger = `(?:0[bB](?:_?${bindigit})+)`;
|
|
27
|
-
const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
|
|
28
|
-
const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
|
|
29
|
-
const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
|
|
30
|
-
const integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;
|
|
31
|
-
const digitpart = `(?:${digit}(?:_?${digit})*)`;
|
|
32
|
-
const fraction = `(?:\\.${digitpart})`;
|
|
33
|
-
const exponent = `(?:[eE][-+]?${digitpart})`;
|
|
34
|
-
const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
|
|
35
|
-
const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
|
|
36
|
-
const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
|
|
37
|
-
const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
|
|
38
|
-
exports.lexer = {
|
|
39
|
-
joinLines: '\\',
|
|
40
|
-
comments: [{ type: 'line-comment', startsWith: '#' }],
|
|
41
|
-
symbols: /[_a-zA-Z][_a-zA-Z0-9]*/,
|
|
42
|
-
numbers,
|
|
43
|
-
operators,
|
|
44
|
-
brackets: [
|
|
45
|
-
{ startsWith: '{', endsWith: '}' },
|
|
46
|
-
{ startsWith: '[', endsWith: ']' },
|
|
47
|
-
{ startsWith: '(', endsWith: ')' },
|
|
48
|
-
],
|
|
49
|
-
strings: [
|
|
50
|
-
{ startsWith: "'", escapeChar: '\\' },
|
|
51
|
-
{ startsWith: '"', escapeChar: '\\' },
|
|
52
|
-
{ startsWith: "'''", escapeChar: '\\' },
|
|
53
|
-
{ startsWith: '"""', escapeChar: '\\' },
|
|
54
|
-
{
|
|
55
|
-
startsWith: "f'",
|
|
56
|
-
endsWith: "'",
|
|
57
|
-
escapeChar: '\\',
|
|
58
|
-
templates: [{ type: 'expr', startsWith: '{', endsWith: '}' }],
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
startsWith: 'f"',
|
|
62
|
-
endsWith: '"',
|
|
63
|
-
escapeChar: '\\',
|
|
64
|
-
templates: [{ type: 'expr', startsWith: '{', endsWith: '}' }],
|
|
65
|
-
},
|
|
66
|
-
{ startsWith: "r'", endsWith: "'" },
|
|
67
|
-
{ startsWith: 'r"', endsWith: '"' },
|
|
68
|
-
],
|
|
69
|
-
};
|
|
70
|
-
exports.parser = {
|
|
71
|
-
useIndentBlocks: true,
|
|
72
|
-
};
|
|
73
|
-
exports.lang = { lexer: exports.lexer, parser: exports.parser };
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lang = exports.parser = exports.lexer = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @see https://docs.python.org/3/reference/lexical_analysis.html#operators
|
|
6
|
+
*/
|
|
7
|
+
const operators =
|
|
8
|
+
/* prettier-ignore */ [
|
|
9
|
+
// Operators
|
|
10
|
+
'+', '-', '*', '**', '/', '//', '%', '@',
|
|
11
|
+
'<<', '>>', '&', '|', '^', '~', ':=',
|
|
12
|
+
'<', '>', '<=', '>=', '==', '!=',
|
|
13
|
+
// Delimiters
|
|
14
|
+
',', ':', '.', ';', '@', '=', '->',
|
|
15
|
+
'+=', '-=', '*=', '/=', '//=', '%=', '@=',
|
|
16
|
+
'&=', '|=', '^=', '>>=', '<<=', '**=',
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* @see https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
|
|
20
|
+
*/
|
|
21
|
+
const bindigit = '[01]';
|
|
22
|
+
const octdigit = '[0-7]';
|
|
23
|
+
const digit = '[0-9]';
|
|
24
|
+
const nonzerodigit = '[1-9]';
|
|
25
|
+
const hexdigit = `(?:${digit}|[a-fA-F])`;
|
|
26
|
+
const bininteger = `(?:0[bB](?:_?${bindigit})+)`;
|
|
27
|
+
const octinteger = `(?:0[oO](?:_?${octdigit})+)`;
|
|
28
|
+
const hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;
|
|
29
|
+
const decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;
|
|
30
|
+
const integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;
|
|
31
|
+
const digitpart = `(?:${digit}(?:_?${digit})*)`;
|
|
32
|
+
const fraction = `(?:\\.${digitpart})`;
|
|
33
|
+
const exponent = `(?:[eE][-+]?${digitpart})`;
|
|
34
|
+
const pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\.)`;
|
|
35
|
+
const exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;
|
|
36
|
+
const floatnumber = `(?:${pointfloat}|${exponentfloat})`;
|
|
37
|
+
const numbers = new RegExp(`(?:${integer}|${floatnumber})`);
|
|
38
|
+
exports.lexer = {
|
|
39
|
+
joinLines: '\\',
|
|
40
|
+
comments: [{ type: 'line-comment', startsWith: '#' }],
|
|
41
|
+
symbols: /[_a-zA-Z][_a-zA-Z0-9]*/,
|
|
42
|
+
numbers,
|
|
43
|
+
operators,
|
|
44
|
+
brackets: [
|
|
45
|
+
{ startsWith: '{', endsWith: '}' },
|
|
46
|
+
{ startsWith: '[', endsWith: ']' },
|
|
47
|
+
{ startsWith: '(', endsWith: ')' },
|
|
48
|
+
],
|
|
49
|
+
strings: [
|
|
50
|
+
{ startsWith: "'", escapeChar: '\\' },
|
|
51
|
+
{ startsWith: '"', escapeChar: '\\' },
|
|
52
|
+
{ startsWith: "'''", escapeChar: '\\' },
|
|
53
|
+
{ startsWith: '"""', escapeChar: '\\' },
|
|
54
|
+
{
|
|
55
|
+
startsWith: "f'",
|
|
56
|
+
endsWith: "'",
|
|
57
|
+
escapeChar: '\\',
|
|
58
|
+
templates: [{ type: 'expr', startsWith: '{', endsWith: '}' }],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
startsWith: 'f"',
|
|
62
|
+
endsWith: '"',
|
|
63
|
+
escapeChar: '\\',
|
|
64
|
+
templates: [{ type: 'expr', startsWith: '{', endsWith: '}' }],
|
|
65
|
+
},
|
|
66
|
+
{ startsWith: "r'", endsWith: "'" },
|
|
67
|
+
{ startsWith: 'r"', endsWith: '"' },
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
exports.parser = {
|
|
71
|
+
useIndentBlocks: true,
|
|
72
|
+
};
|
|
73
|
+
exports.lang = { lexer: exports.lexer, parser: exports.parser };
|
|
74
74
|
//# sourceMappingURL=python.js.map
|
package/dist/cjs/lang/scala.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { LexerConfig } from '../lexer/types';
|
|
2
|
-
import type { ParserConfig } from '../parser/types';
|
|
3
|
-
import type { LanguageConfig } from './types';
|
|
4
|
-
export declare const lexer: LexerConfig;
|
|
5
|
-
export declare const parser: ParserConfig;
|
|
6
|
-
export declare const lang: LanguageConfig;
|
|
1
|
+
import type { LexerConfig } from '../lexer/types';
|
|
2
|
+
import type { ParserConfig } from '../parser/types';
|
|
3
|
+
import type { LanguageConfig } from './types';
|
|
4
|
+
export declare const lexer: LexerConfig;
|
|
5
|
+
export declare const parser: ParserConfig;
|
|
6
|
+
export declare const lang: LanguageConfig;
|
|
7
7
|
//# sourceMappingURL=scala.d.ts.map
|