skir 0.0.1 → 0.0.2

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.
Files changed (115) hide show
  1. package/dist/casing.d.ts +1 -4
  2. package/dist/casing.d.ts.map +1 -1
  3. package/dist/casing.js +0 -29
  4. package/dist/casing.js.map +1 -1
  5. package/dist/casing.test.js +2 -13
  6. package/dist/casing.test.js.map +1 -1
  7. package/dist/command_line_parser.d.ts +3 -3
  8. package/dist/command_line_parser.d.ts.map +1 -1
  9. package/dist/command_line_parser.js +35 -38
  10. package/dist/command_line_parser.js.map +1 -1
  11. package/dist/command_line_parser.test.js +73 -78
  12. package/dist/command_line_parser.test.js.map +1 -1
  13. package/dist/compatibility_checker.d.ts +9 -3
  14. package/dist/compatibility_checker.d.ts.map +1 -1
  15. package/dist/compatibility_checker.js +17 -4
  16. package/dist/compatibility_checker.js.map +1 -1
  17. package/dist/compatibility_checker.test.js +55 -1
  18. package/dist/compatibility_checker.test.js.map +1 -1
  19. package/dist/compiler.js +34 -17
  20. package/dist/compiler.js.map +1 -1
  21. package/dist/config.d.ts +5 -35
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/definition_finder.d.ts +1 -1
  24. package/dist/definition_finder.d.ts.map +1 -1
  25. package/dist/doc_comment_parser.d.ts +3 -0
  26. package/dist/doc_comment_parser.d.ts.map +1 -0
  27. package/dist/doc_comment_parser.js +219 -0
  28. package/dist/doc_comment_parser.js.map +1 -0
  29. package/dist/doc_comment_parser.test.d.ts +2 -0
  30. package/dist/doc_comment_parser.test.d.ts.map +1 -0
  31. package/dist/doc_comment_parser.test.js +494 -0
  32. package/dist/doc_comment_parser.test.js.map +1 -0
  33. package/dist/error_renderer.d.ts +1 -1
  34. package/dist/error_renderer.d.ts.map +1 -1
  35. package/dist/error_renderer.js +84 -65
  36. package/dist/error_renderer.js.map +1 -1
  37. package/dist/formatter.d.ts +15 -2
  38. package/dist/formatter.d.ts.map +1 -1
  39. package/dist/formatter.js +191 -234
  40. package/dist/formatter.js.map +1 -1
  41. package/dist/formatter.test.js +322 -88
  42. package/dist/formatter.test.js.map +1 -1
  43. package/dist/index.d.ts +1 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/language_server.js +1 -1
  48. package/dist/language_server.js.map +1 -1
  49. package/dist/literals.d.ts +1 -2
  50. package/dist/literals.d.ts.map +1 -1
  51. package/dist/literals.js +1 -12
  52. package/dist/literals.js.map +1 -1
  53. package/dist/literals.test.js +1 -4
  54. package/dist/literals.test.js.map +1 -1
  55. package/dist/module_set.d.ts +3 -7
  56. package/dist/module_set.d.ts.map +1 -1
  57. package/dist/module_set.js +205 -51
  58. package/dist/module_set.js.map +1 -1
  59. package/dist/module_set.test.js +595 -28
  60. package/dist/module_set.test.js.map +1 -1
  61. package/dist/parser.d.ts +3 -4
  62. package/dist/parser.d.ts.map +1 -1
  63. package/dist/parser.js +185 -92
  64. package/dist/parser.js.map +1 -1
  65. package/dist/parser.test.js +243 -15
  66. package/dist/parser.test.js.map +1 -1
  67. package/dist/project_initializer.d.ts +2 -0
  68. package/dist/project_initializer.d.ts.map +1 -0
  69. package/dist/project_initializer.js +30 -0
  70. package/dist/project_initializer.js.map +1 -0
  71. package/dist/snapshotter.d.ts +3 -0
  72. package/dist/snapshotter.d.ts.map +1 -1
  73. package/dist/snapshotter.js +43 -6
  74. package/dist/snapshotter.js.map +1 -1
  75. package/dist/tokenizer.d.ts +8 -2
  76. package/dist/tokenizer.d.ts.map +1 -1
  77. package/dist/tokenizer.js +26 -20
  78. package/dist/tokenizer.js.map +1 -1
  79. package/dist/tokenizer.test.js +285 -269
  80. package/dist/tokenizer.test.js.map +1 -1
  81. package/package.json +7 -5
  82. package/src/casing.ts +1 -36
  83. package/src/command_line_parser.ts +42 -48
  84. package/src/compatibility_checker.ts +29 -7
  85. package/src/compiler.ts +35 -18
  86. package/src/definition_finder.ts +1 -1
  87. package/src/doc_comment_parser.ts +246 -0
  88. package/src/error_renderer.ts +90 -66
  89. package/src/formatter.ts +249 -238
  90. package/src/index.ts +0 -6
  91. package/src/language_server.ts +8 -8
  92. package/src/literals.ts +5 -14
  93. package/src/module_set.ts +259 -79
  94. package/src/parser.ts +213 -98
  95. package/src/project_initializer.ts +39 -0
  96. package/src/snapshotter.ts +46 -5
  97. package/src/tokenizer.ts +47 -25
  98. package/dist/encoding.d.ts +0 -2
  99. package/dist/encoding.d.ts.map +0 -1
  100. package/dist/encoding.js +0 -38
  101. package/dist/encoding.js.map +0 -1
  102. package/dist/encoding.test.d.ts +0 -2
  103. package/dist/encoding.test.d.ts.map +0 -1
  104. package/dist/encoding.test.js +0 -23
  105. package/dist/encoding.test.js.map +0 -1
  106. package/dist/index.test.d.ts +0 -2
  107. package/dist/index.test.d.ts.map +0 -1
  108. package/dist/index.test.js +0 -14
  109. package/dist/index.test.js.map +0 -1
  110. package/dist/types.d.ts +0 -375
  111. package/dist/types.d.ts.map +0 -1
  112. package/dist/types.js +0 -2
  113. package/dist/types.js.map +0 -1
  114. package/src/encoding.ts +0 -32
  115. package/src/types.ts +0 -518
package/dist/formatter.js CHANGED
@@ -1,263 +1,220 @@
1
- export function formatModule(tokens) {
2
- const sink = new CodeSink();
3
- let inValue = false;
4
- let indentDepth = 0;
5
- const iterator = new TokenIterator(tokens);
6
- const copyInlineComments = () => {
7
- while (iterator.hasNext() &&
8
- isComment(iterator.peek().text) &&
9
- iterator.peek().line.lineNumber === iterator.current.line.lineNumber) {
10
- // Preserve comments before line break.
11
- sink.write(" " + iterator.next().text);
12
- }
1
+ /**
2
+ * Formats the given module and returns the new source code.
3
+ * Preserves token ordering.
4
+ */
5
+ export function formatModule(moduleTokens) {
6
+ const tokens = moduleTokens.tokensWithComments;
7
+ const context = {
8
+ context: null,
9
+ indentStack: [{ indent: "" }],
13
10
  };
14
- const breakLine = () => {
15
- copyInlineComments();
16
- const { lastLineOnlyHasWhitespaces } = sink;
17
- if (iterator.hasNext()) {
18
- const current = iterator.current;
19
- const next = iterator.peek();
20
- if (next.line.lineNumber >= current.line.lineNumber + 2) {
21
- // Preserve double line breaks.
22
- sink.write("\n");
23
- }
11
+ let newSourceCode = "";
12
+ const textEdits = [];
13
+ const appendToken = (t) => {
14
+ const newToken = normalizeToken(t.text);
15
+ if (newToken !== t.text) {
16
+ textEdits.push({
17
+ oldStart: t.position,
18
+ oldEnd: t.position + t.text.length,
19
+ newText: newToken,
20
+ });
24
21
  }
25
- if (!lastLineOnlyHasWhitespaces) {
26
- sink.write("\n" + " ".repeat(indentDepth));
27
- }
28
- };
29
- const breakLineAndIndent = () => {
30
- ++indentDepth;
31
- breakLine();
22
+ newSourceCode += newToken;
32
23
  };
33
- const unindent = () => {
34
- --indentDepth;
35
- sink.removeWhitespaceSuffix(" ");
36
- };
37
- while (iterator.hasNext()) {
38
- const token = iterator.next();
39
- switch (token.text) {
40
- case "as":
41
- case "const":
42
- case "enum":
43
- case "import":
44
- case "method":
45
- case "struct":
46
- case "*":
47
- case ":": {
48
- sink.write(token.text + " ");
49
- break;
50
- }
51
- case "from": {
52
- sink.write(" from ");
53
- break;
54
- }
55
- case "removed": {
56
- if (iterator.hasNext() && iterator.peek().text === ";") {
57
- sink.write("removed");
58
- }
59
- else {
60
- sink.write("removed ");
61
- }
62
- break;
63
- }
64
- case "{": {
65
- if (iterator.hasNext() && iterator.peek().text === "}") {
66
- sink.write(inValue ? "{}" : " {}");
67
- iterator.next();
68
- if (!inValue) {
69
- breakLine();
70
- }
71
- }
72
- else {
73
- sink.write(inValue ? "{" : " {");
74
- breakLineAndIndent();
75
- }
76
- break;
77
- }
78
- case "{|": {
79
- if (iterator.hasNext() && iterator.peek().text === "|}") {
80
- sink.write(inValue ? "{||}" : " {||}");
81
- iterator.next();
82
- if (!inValue) {
83
- breakLine();
84
- }
85
- }
86
- else {
87
- sink.write(inValue ? "{|" : " {|");
88
- breakLineAndIndent();
89
- }
90
- break;
91
- }
92
- case "}": {
93
- if (inValue) {
94
- sink.maybeWriteTrailingComma();
95
- breakLine();
96
- }
97
- unindent();
98
- sink.write("}");
99
- if (!inValue) {
100
- breakLine();
101
- }
24
+ appendToken(tokens[0]);
25
+ for (let i = 1; i < tokens.length; i++) {
26
+ const token = tokens[i - 1];
27
+ const next = tokens[i];
28
+ // Find the next non-comment token
29
+ let nextNonComment = next;
30
+ for (let j = i; j < tokens.length; j++) {
31
+ const token = tokens[j];
32
+ if (!isComment(token)) {
33
+ nextNonComment = token;
102
34
  break;
103
35
  }
104
- case "|}": {
105
- if (inValue) {
106
- sink.maybeWriteTrailingComma();
107
- breakLine();
108
- }
109
- unindent();
110
- sink.write("|}");
111
- if (!inValue) {
112
- breakLine();
113
- }
114
- break;
115
- }
116
- case "[": {
117
- if (iterator.hasNext() && iterator.peek().text === "]") {
118
- sink.write("[]");
119
- iterator.next();
120
- }
121
- else {
122
- sink.write("[");
123
- if (inValue) {
124
- breakLineAndIndent();
125
- }
126
- }
127
- break;
128
- }
129
- case "]": {
130
- if (inValue) {
131
- sink.maybeWriteTrailingComma();
132
- breakLine();
133
- unindent();
134
- }
135
- sink.write("]");
136
- break;
137
- }
138
- case ";": {
139
- sink.write(";");
140
- inValue = false;
141
- breakLine();
142
- break;
143
- }
144
- case "=": {
145
- inValue = true;
146
- sink.write(" = ");
147
- break;
148
- }
149
- case ",": {
150
- if (inValue) {
151
- sink.write(",");
152
- breakLine();
153
- }
154
- else {
155
- sink.write(", ");
156
- }
157
- break;
158
- }
159
- default: {
160
- if (isComment(token.text)) {
161
- sink.writeComment(token.text);
162
- breakLine();
163
- }
164
- else if (token.text.startsWith("'")) {
165
- const unescapedDoubleQuoteRegex = /(?:^|[^\\])(?:\\\\)*"/;
166
- if (unescapedDoubleQuoteRegex.test(token.text)) {
167
- sink.write(token.text);
168
- }
169
- else {
170
- // Switch to double quotes.
171
- const unquoted = token.text.slice(1, -1);
172
- sink.write(`"${unquoted}"`);
173
- }
174
- }
175
- else {
176
- sink.write(token.text);
177
- }
178
- }
179
36
  }
37
+ // Determine the text to add after 'token' and before 'next': a possible
38
+ // trailing comma followed by whitespace.
39
+ let newSeparator = shouldAddTrailingComma(token, nextNonComment, context)
40
+ ? ","
41
+ : "";
42
+ newSeparator += getWhitespaceAfterToken(token, next, nextNonComment, context);
43
+ const topOfStack = context.indentStack.at(-1);
44
+ if (newSeparator.endsWith("\n")) {
45
+ newSeparator = newSeparator + topOfStack.indent;
46
+ }
47
+ const oldSeparator = moduleTokens.sourceCode.slice(token.position + token.text.length, next.position);
48
+ if (oldSeparator !== newSeparator) {
49
+ textEdits.push({
50
+ oldStart: token.position + token.text.length,
51
+ oldEnd: next.position,
52
+ newText: newSeparator,
53
+ });
54
+ }
55
+ newSourceCode += newSeparator;
56
+ appendToken(next);
180
57
  }
181
- const result = sink.code;
182
- if (indentDepth !== 0) {
183
- throw new Error(`result=${result}`);
184
- }
185
- return result;
58
+ return {
59
+ newSourceCode: newSourceCode,
60
+ textEdits: textEdits,
61
+ };
186
62
  }
187
- class TokenIterator {
188
- constructor(tokens) {
189
- this.tokens = tokens;
190
- this.nextIndex = 0;
63
+ function getWhitespaceAfterToken(token, next,
64
+ // If 'next' is a comment, the next non-comment token after 'next'.
65
+ // Otherwise, 'next' itself.
66
+ nextNonComment, context) {
67
+ const topOfStack = () => context.indentStack.at(-1);
68
+ const indentUnit = " ";
69
+ if (token.text === "{" ||
70
+ token.text === "{|" ||
71
+ (context.context === "in-value" && token.text === "[")) {
72
+ context.indentStack.push({
73
+ indent: topOfStack().indent + indentUnit,
74
+ });
191
75
  }
192
- next() {
193
- if (this.nextIndex < this.tokens.length) {
194
- return this.tokens[this.nextIndex++];
195
- }
196
- throw new Error();
76
+ else if (token.text === "(" &&
77
+ ["struct", "enum"].includes(nextNonComment.text)) {
78
+ context.indentStack.push({
79
+ indent: topOfStack().indent + indentUnit,
80
+ inlineRecordInBracket: true,
81
+ });
197
82
  }
198
- peek() {
199
- if (this.nextIndex < this.tokens.length) {
200
- return this.tokens[this.nextIndex];
201
- }
202
- throw new Error();
83
+ if (next.text === "}" ||
84
+ next.text === "|}" ||
85
+ (context.context === "in-value" && next.text === "]") ||
86
+ (next.text === ")" && topOfStack().inlineRecordInBracket)) {
87
+ context.indentStack.pop();
88
+ }
89
+ if (isComment(token)) {
90
+ return oneOrTwoLineBreaks(token, next);
91
+ }
92
+ else if (token.text !== "{" &&
93
+ next.text === "}" &&
94
+ context.context !== "in-value") {
95
+ return "\n";
96
+ }
97
+ else if (isComment(next)) {
98
+ return token.line.lineNumber === next.line.lineNumber
99
+ ? " "
100
+ : oneOrTwoLineBreaks(token, next);
101
+ }
102
+ else if (next.text === "=") {
103
+ return " ";
104
+ }
105
+ else if ((token.text === "[" && next.text === "]") ||
106
+ (token.text === "{" && next.text === "}") ||
107
+ (token.text === "{|" && next.text === "|}")) {
108
+ return "";
109
+ }
110
+ else if (["{", "{|"].includes(token.text)) {
111
+ return "\n";
112
+ }
113
+ else if (token.text === "[") {
114
+ return context.context === "in-value" ? "\n" : "";
115
+ }
116
+ else if (["*", ":"].includes(token.text)) {
117
+ return " ";
118
+ }
119
+ else if (token.text === "(") {
120
+ return ["struct", "enum"].includes(next.text) ? "\n" : "";
121
+ }
122
+ else if (token.text === ")") {
123
+ return next.text === "{" ? " " : "";
124
+ }
125
+ else if (token.text === ";") {
126
+ context.context = null;
127
+ return oneOrTwoLineBreaks(token, next);
203
128
  }
204
- hasNext() {
205
- return this.nextIndex < this.tokens.length;
129
+ else if (token.text === "}") {
130
+ return [",", ";"].includes(next.text)
131
+ ? ""
132
+ : oneOrTwoLineBreaks(token, next);
206
133
  }
207
- get current() {
208
- const index = this.nextIndex - 1;
209
- if (index < this.tokens.length) {
210
- return this.tokens[index];
134
+ else if (token.text === ",") {
135
+ return context.context === "removed" ? " " : "\n";
136
+ }
137
+ else if (token.text === "=") {
138
+ if (context.context === "const") {
139
+ context.context = "in-value";
211
140
  }
212
- throw new Error();
141
+ return " ";
142
+ }
143
+ else if (token.text === "const") {
144
+ context.context = "const";
145
+ return " ";
146
+ }
147
+ else if (token.text === "removed") {
148
+ context.context = "removed";
149
+ return next.text === ";" ? "" : " ";
150
+ }
151
+ else if (context.context === "in-value" &&
152
+ ["]", "}", "|}"].includes(next.text)) {
153
+ return "\n";
154
+ }
155
+ else if (/^[A-Za-z]/.test(token.text) &&
156
+ !["(", ":", ",", ";", "|", ".", ")", "]", "?"].includes(next.text)) {
157
+ return " ";
158
+ }
159
+ else {
160
+ return "";
213
161
  }
214
162
  }
215
- function isComment(token) {
216
- return token.startsWith("//") || token.startsWith("/*");
163
+ function shouldAddTrailingComma(first, nextNonComment, context) {
164
+ return (context.context === "in-value" &&
165
+ ["]", "}", "|}"].includes(nextNonComment.text) &&
166
+ !["[", "{", "{|", ","].includes(first.text));
217
167
  }
218
- class CodeSink {
219
- constructor() {
220
- this._code = "";
221
- // Position after the last non-whitespace character which is not part of a
222
- // comment.
223
- this.endPosition = 0;
168
+ function oneOrTwoLineBreaks(first, second) {
169
+ const firstLineNumber = first.line.lineNumber + first.text.split("\n").length - 1;
170
+ if (firstLineNumber < second.line.lineNumber - 1 &&
171
+ (isComment(second) || /^[A-Za-z]/.test(second.text))) {
172
+ return "\n\n";
224
173
  }
225
- /** Writes a token possibly preceded or followed by whitespaces. */
226
- write(text) {
227
- const trimmed = text.trim();
228
- if (trimmed && !isComment(trimmed)) {
229
- this.endPosition = trimmed.endsWith(",")
230
- ? 0
231
- : this.code.length + text.trimEnd().length;
232
- }
233
- this._code += text;
174
+ else {
175
+ return "\n";
234
176
  }
235
- writeComment(text) {
236
- if (this.lastLineOnlyHasWhitespaces) {
237
- this._code += text;
177
+ }
178
+ function isComment(token) {
179
+ return token.text.startsWith("//") || token.text.startsWith("/*");
180
+ }
181
+ function normalizeToken(token) {
182
+ if (token.startsWith("//")) {
183
+ // Make sure there is a space between the double slash and the comment text.
184
+ if (token.startsWith("// ") ||
185
+ token.startsWith("/// ") ||
186
+ token === "//" ||
187
+ token === "///") {
188
+ return token;
189
+ }
190
+ else if (token.startsWith("///")) {
191
+ return "/// " + token.slice(3);
238
192
  }
239
193
  else {
240
- this._code = this.code.trimEnd() + " " + text;
194
+ return "// " + token.slice(2);
241
195
  }
242
196
  }
243
- maybeWriteTrailingComma() {
244
- if (this.endPosition === 0) {
245
- return;
197
+ else if (token.startsWith("'")) {
198
+ // A single-quoted string
199
+ if (token.includes('"')) {
200
+ // Remove escape characters before single quotes.
201
+ return token.replace(/\\(?=(?:\\\\)*')/g, "");
246
202
  }
247
- const { code } = this;
248
- this._code =
249
- code.slice(0, this.endPosition) + "," + code.slice(this.endPosition);
250
- }
251
- removeWhitespaceSuffix(suffix) {
252
- if (this.code.endsWith(suffix)) {
253
- this._code = this.code.slice(0, -suffix.length);
203
+ else {
204
+ // If the string does not contain double quotes, turn it into a
205
+ // double-quoted string for consistency
206
+ const content = token.slice(1, -1);
207
+ // Remove escape characters before double quotes.
208
+ return '"' + content.replace(/\\(?=(?:\\\\)*")/g, "") + '"';
254
209
  }
255
210
  }
256
- get lastLineOnlyHasWhitespaces() {
257
- return /^$|\n\s*$/.test(this.code);
211
+ else if (token.startsWith('"')) {
212
+ // A double-quoted string
213
+ // Remove escape characters before double quotes.
214
+ return token.replace(/\\(?=(?:\\\\)*')/g, "");
258
215
  }
259
- get code() {
260
- return this._code;
216
+ else {
217
+ return token;
261
218
  }
262
219
  }
263
220
  //# sourceMappingURL=formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}