skir 1.2.4 → 1.2.5
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/dist/config_parser.d.ts.map +1 -1
- package/dist/module_collector.d.ts.map +1 -1
- package/package.json +5 -3
- package/src/config_parser.ts +4 -1
- package/src/module_collector.ts +18 -20
- package/src/project_initializer.ts +18 -0
- package/dist/casing.d.ts +0 -5
- package/dist/casing.js +0 -23
- package/dist/casing.js.map +0 -1
- package/dist/command_line_parser.d.ts +0 -36
- package/dist/command_line_parser.d.ts.map +0 -1
- package/dist/command_line_parser.js +0 -240
- package/dist/command_line_parser.js.map +0 -1
- package/dist/compatibility_checker.d.ts +0 -74
- package/dist/compatibility_checker.js +0 -331
- package/dist/compatibility_checker.js.map +0 -1
- package/dist/compiler.d.ts +0 -3
- package/dist/compiler.js +0 -406
- package/dist/compiler.js.map +0 -1
- package/dist/completion_helper.d.ts +0 -27
- package/dist/completion_helper.js +0 -101
- package/dist/completion_helper.js.map +0 -1
- package/dist/config.d.ts +0 -18
- package/dist/config.js +0 -19
- package/dist/config.js.map +0 -1
- package/dist/config_parser.d.ts +0 -34
- package/dist/config_parser.js +0 -214
- package/dist/config_parser.js.map +0 -1
- package/dist/definition_finder.d.ts +0 -16
- package/dist/definition_finder.js +0 -375
- package/dist/definition_finder.js.map +0 -1
- package/dist/dependency_manager.d.ts +0 -14
- package/dist/dependency_manager.js +0 -109
- package/dist/dependency_manager.js.map +0 -1
- package/dist/doc_comment_parser.d.ts +0 -6
- package/dist/doc_comment_parser.js +0 -269
- package/dist/doc_comment_parser.js.map +0 -1
- package/dist/doc_reference_resolver.d.ts +0 -5
- package/dist/doc_reference_resolver.js +0 -232
- package/dist/doc_reference_resolver.js.map +0 -1
- package/dist/error_renderer.d.ts +0 -24
- package/dist/error_renderer.js +0 -326
- package/dist/error_renderer.js.map +0 -1
- package/dist/exit_error.d.ts +0 -8
- package/dist/exit_error.d.ts.map +0 -1
- package/dist/exit_error.js +0 -8
- package/dist/exit_error.js.map +0 -1
- package/dist/expected_names.d.ts +0 -11
- package/dist/expected_names.js +0 -34
- package/dist/expected_names.js.map +0 -1
- package/dist/formatter.d.ts +0 -28
- package/dist/formatter.js +0 -338
- package/dist/formatter.js.map +0 -1
- package/dist/get_dependencies_flow.d.ts +0 -40
- package/dist/get_dependencies_flow.js +0 -177
- package/dist/get_dependencies_flow.js.map +0 -1
- package/dist/import_block_formatter.d.ts +0 -3
- package/dist/import_block_formatter.js +0 -36
- package/dist/import_block_formatter.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/io.d.ts +0 -23
- package/dist/io.d.ts.map +0 -1
- package/dist/io.js +0 -58
- package/dist/io.js.map +0 -1
- package/dist/literals.d.ts +0 -12
- package/dist/literals.js +0 -96
- package/dist/literals.js.map +0 -1
- package/dist/module_collector.d.ts +0 -9
- package/dist/module_collector.js +0 -75
- package/dist/module_collector.js.map +0 -1
- package/dist/module_set.d.ts +0 -51
- package/dist/module_set.js +0 -1331
- package/dist/module_set.js.map +0 -1
- package/dist/package_downloader.d.ts +0 -4
- package/dist/package_downloader.js +0 -256
- package/dist/package_downloader.js.map +0 -1
- package/dist/package_types.d.ts +0 -30
- package/dist/package_types.d.ts.map +0 -1
- package/dist/package_types.js +0 -2
- package/dist/package_types.js.map +0 -1
- package/dist/parser.d.ts +0 -7
- package/dist/parser.js +0 -1335
- package/dist/parser.js.map +0 -1
- package/dist/project_initializer.d.ts +0 -2
- package/dist/project_initializer.d.ts.map +0 -1
- package/dist/project_initializer.js +0 -189
- package/dist/project_initializer.js.map +0 -1
- package/dist/snapshotter.d.ts +0 -16
- package/dist/snapshotter.js +0 -263
- package/dist/snapshotter.js.map +0 -1
- package/dist/tokenizer.d.ts +0 -18
- package/dist/tokenizer.js +0 -244
- package/dist/tokenizer.js.map +0 -1
package/dist/tokenizer.js
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { unquoteAndUnescape, } from "skir-internal";
|
|
2
|
-
import { parseDocComment } from "./doc_comment_parser.js";
|
|
3
|
-
/** Tokenizes the given module. */
|
|
4
|
-
export function tokenizeModule(sourceCode, modulePath, completionMode) {
|
|
5
|
-
const tokens = [];
|
|
6
|
-
const errors = [];
|
|
7
|
-
const lines = new Lines(sourceCode, modulePath);
|
|
8
|
-
// Multiline comment: \/\*([^*]|\*[^\/])*(\*\/)?
|
|
9
|
-
// Single-line comment: \/\/[^\n\r]*
|
|
10
|
-
// Number: -?(0|[1-9][0-9]*)(\.[0-9]+)?\b
|
|
11
|
-
// Word: \b\w+\b
|
|
12
|
-
// Whitespaces: [ \n\r\t]+
|
|
13
|
-
// Symbol: \.\.|\{\||\|\}|[{}[\]()*.:=;|?,]
|
|
14
|
-
// Double-quote string literal: "(\\(\n|\r|\n\r|.)|[^\\\"\n\r])*"?
|
|
15
|
-
// Single-quote string literal: '(\\(\n|\r|\n\r|.)|[^\\\'\n\r])*'?
|
|
16
|
-
//
|
|
17
|
-
// To iterate on this regex, use https://regex101.com/.
|
|
18
|
-
const re = /(\/\*([^*]|\*[^/])*(\*\/)?)|(\/\/[^\n\r]*)|(-?(0|[1-9][0-9]*)(\.[0-9]+)?\b)|\b(\w+)\b|([ \n\r\t]+)|(\.\.|\{\||\|\}|[{}[\]()*.:=;|?,])|("(\\(\n|\r|\n\r|.)|[^\\"\n\r])*"?)|('(\\(\n|\r|\n\r|.)|[^\\'\n\r])*'?)|($)/g;
|
|
19
|
-
// 1 2 3 4 5 6 7 8 9 10 11 13 14 16 17
|
|
20
|
-
let group;
|
|
21
|
-
let expectedPosition = 0;
|
|
22
|
-
while ((group = re.exec(sourceCode)) !== null) {
|
|
23
|
-
const position = re.lastIndex - group[0].length;
|
|
24
|
-
// Check that all the regex matches are consecutive.
|
|
25
|
-
// If there is a gap between two matches, it means that we have an invalid
|
|
26
|
-
// sequence of characters.
|
|
27
|
-
if (position !== expectedPosition) {
|
|
28
|
-
const line = lines.advancePosition(expectedPosition);
|
|
29
|
-
const colNumber = expectedPosition - line.position;
|
|
30
|
-
const text = sourceCode.substring(expectedPosition, position);
|
|
31
|
-
errors.push({
|
|
32
|
-
token: {
|
|
33
|
-
text: text,
|
|
34
|
-
originalText: text,
|
|
35
|
-
position: expectedPosition,
|
|
36
|
-
line: line,
|
|
37
|
-
colNumber: colNumber,
|
|
38
|
-
},
|
|
39
|
-
message: "Invalid sequence of characters",
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
expectedPosition = re.lastIndex;
|
|
43
|
-
const line = lines.advancePosition(position);
|
|
44
|
-
const colNumber = position - line.position;
|
|
45
|
-
const token = {
|
|
46
|
-
text: group[0],
|
|
47
|
-
originalText: group[0],
|
|
48
|
-
position: position,
|
|
49
|
-
line: line,
|
|
50
|
-
colNumber: colNumber,
|
|
51
|
-
};
|
|
52
|
-
if (group[1] !== undefined && !group[1].endsWith("*/")) {
|
|
53
|
-
errors.push({
|
|
54
|
-
token: token,
|
|
55
|
-
message: "Unterminated multi-line comment",
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
if (group[8] !== undefined) {
|
|
59
|
-
if (!validateWord(token, errors)) {
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Skip whitespaces.
|
|
64
|
-
if (group[9] !== undefined)
|
|
65
|
-
continue;
|
|
66
|
-
// Validate string literals.
|
|
67
|
-
const stringLiteral = group[11] || group[14];
|
|
68
|
-
if (stringLiteral !== undefined) {
|
|
69
|
-
if (!stringLiteral.endsWith(stringLiteral[0])) {
|
|
70
|
-
errors.push({
|
|
71
|
-
token: token,
|
|
72
|
-
message: "Unterminated string literal",
|
|
73
|
-
});
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
const stringLiteralRe = /^["'](\\(\r\n|u[0-9A-Fa-f]{4}|["'\\/bfnrt\n\r])|[^\\])*["']$/;
|
|
77
|
-
if (!stringLiteralRe.test(stringLiteral)) {
|
|
78
|
-
errors.push({
|
|
79
|
-
token: token,
|
|
80
|
-
message: "String literal contains invalid escape sequence",
|
|
81
|
-
});
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
// Check that the string doesn't contain lone surrogates.
|
|
85
|
-
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/isWellFormed
|
|
86
|
-
const unquoted = unquoteAndUnescape(stringLiteral);
|
|
87
|
-
try {
|
|
88
|
-
encodeURIComponent(unquoted);
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
errors.push({
|
|
92
|
-
token: token,
|
|
93
|
-
message: "String literal contains lone surrogates",
|
|
94
|
-
});
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
tokens.push(token);
|
|
99
|
-
if (group[17] !== undefined) {
|
|
100
|
-
// The end of the string has been reached.
|
|
101
|
-
// The last token we added is an empty string.
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (completionMode !== undefined) {
|
|
106
|
-
const { position } = completionMode;
|
|
107
|
-
const existingToken = tokens.find((t) => {
|
|
108
|
-
const start = t.position;
|
|
109
|
-
const end = t.position + t.text.length;
|
|
110
|
-
if (/^\w/.test(t.text)) {
|
|
111
|
-
// Word token: inclusive comparisons.
|
|
112
|
-
return position >= start && position <= end;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
// Non-word token: exclusive comparisons.
|
|
116
|
-
return position > start && position < end;
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
if (existingToken === undefined) {
|
|
120
|
-
const fakeLines = new Lines(sourceCode, modulePath);
|
|
121
|
-
const line = fakeLines.advancePosition(position);
|
|
122
|
-
const colNumber = position - line.position;
|
|
123
|
-
const fakeToken = {
|
|
124
|
-
text: "...",
|
|
125
|
-
originalText: "",
|
|
126
|
-
position: position,
|
|
127
|
-
line: line,
|
|
128
|
-
colNumber: colNumber,
|
|
129
|
-
};
|
|
130
|
-
const insertIndex = tokens.findIndex((t) => t.position >= position);
|
|
131
|
-
if (insertIndex === -1) {
|
|
132
|
-
tokens.push(fakeToken);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
tokens.splice(insertIndex, 0, fakeToken);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
// Parse the doc comments.
|
|
140
|
-
const posToDoc = {};
|
|
141
|
-
for (const token of tokens) {
|
|
142
|
-
if (!token.text.startsWith("///")) {
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
const docResult = parseDocComment(token, completionMode);
|
|
146
|
-
posToDoc[token.position] = docResult.result;
|
|
147
|
-
docResult.errors.forEach((e) => errors.push(e));
|
|
148
|
-
}
|
|
149
|
-
return {
|
|
150
|
-
result: {
|
|
151
|
-
tokens: tokens.filter((t) => !isRegularComment(t.originalText)),
|
|
152
|
-
tokensWithComments: tokens,
|
|
153
|
-
posToDoc: posToDoc,
|
|
154
|
-
sourceCode: sourceCode,
|
|
155
|
-
modulePath: modulePath,
|
|
156
|
-
},
|
|
157
|
-
errors: errors,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
function validateWord(token, errors) {
|
|
161
|
-
if (/^[0-9]/.test(token.text)) {
|
|
162
|
-
errors.push({
|
|
163
|
-
token: token,
|
|
164
|
-
message: "Invalid number",
|
|
165
|
-
});
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
if (token.text.startsWith("_")) {
|
|
169
|
-
errors.push({
|
|
170
|
-
token: token,
|
|
171
|
-
message: "Identifier cannot start with _",
|
|
172
|
-
});
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
if (token.text.endsWith("_")) {
|
|
176
|
-
errors.push({
|
|
177
|
-
token: token,
|
|
178
|
-
message: "Identifier cannot end with _",
|
|
179
|
-
});
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
if (token.text.includes("__")) {
|
|
183
|
-
errors.push({
|
|
184
|
-
token: token,
|
|
185
|
-
message: "Identifier cannot contain __ sequence",
|
|
186
|
-
});
|
|
187
|
-
return false;
|
|
188
|
-
}
|
|
189
|
-
if (/_[0-9]/.test(token.text)) {
|
|
190
|
-
// The problem is we could end up with duplicate field names when converting
|
|
191
|
-
// to camel case. For example: "field0" and "field_0" would both be
|
|
192
|
-
// converted to "field0".
|
|
193
|
-
errors.push({
|
|
194
|
-
token: token,
|
|
195
|
-
message: "Digit cannot follow _",
|
|
196
|
-
});
|
|
197
|
-
return false;
|
|
198
|
-
}
|
|
199
|
-
return true;
|
|
200
|
-
}
|
|
201
|
-
function isRegularComment(token) {
|
|
202
|
-
return (token.startsWith("/*") ||
|
|
203
|
-
(token.startsWith("//") && !token.startsWith("///")));
|
|
204
|
-
}
|
|
205
|
-
class Lines {
|
|
206
|
-
/** Splits the given code into multiple lines. */
|
|
207
|
-
constructor(code, modulePath) {
|
|
208
|
-
this.lines = [];
|
|
209
|
-
const lines = this.lines;
|
|
210
|
-
let lineStart = 0;
|
|
211
|
-
let group;
|
|
212
|
-
const re = /\n|\r|\n\r|$/g;
|
|
213
|
-
while ((group = re.exec(code)) !== null) {
|
|
214
|
-
const match = group[0];
|
|
215
|
-
const lineEnd = re.lastIndex - match.length;
|
|
216
|
-
const lineString = code.substring(lineStart, lineEnd);
|
|
217
|
-
lines.push({
|
|
218
|
-
lineNumber: lines.length,
|
|
219
|
-
line: lineString,
|
|
220
|
-
position: lineStart,
|
|
221
|
-
modulePath: modulePath,
|
|
222
|
-
});
|
|
223
|
-
// Record the position after the EOL or EOF.
|
|
224
|
-
lineStart = re.lastIndex;
|
|
225
|
-
if (match === "") {
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Returns the line at the given position, where the position is the char
|
|
232
|
-
* index within `code`.
|
|
233
|
-
* Requires the position to be >= the position given the last time the method
|
|
234
|
-
* was called.
|
|
235
|
-
*/
|
|
236
|
-
advancePosition(position) {
|
|
237
|
-
const lines = this.lines;
|
|
238
|
-
while (lines.length >= 2 && position >= this.lines[1].position) {
|
|
239
|
-
lines.shift();
|
|
240
|
-
}
|
|
241
|
-
return lines[0];
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
//# sourceMappingURL=tokenizer.js.map
|
package/dist/tokenizer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"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"}
|