skir-internal 0.0.1

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 (132) hide show
  1. package/README.md +2 -0
  2. package/dist/casing.d.ts +8 -0
  3. package/dist/casing.d.ts.map +1 -0
  4. package/dist/casing.js +43 -0
  5. package/dist/casing.js.map +1 -0
  6. package/dist/casing.test.d.ts.map +1 -0
  7. package/dist/casing.test.js +136 -0
  8. package/dist/casing.test.js.map +1 -0
  9. package/dist/command_line_parser.d.ts +33 -0
  10. package/dist/command_line_parser.d.ts.map +1 -0
  11. package/dist/command_line_parser.js +168 -0
  12. package/dist/command_line_parser.js.map +1 -0
  13. package/dist/command_line_parser.test.d.ts +2 -0
  14. package/dist/command_line_parser.test.d.ts.map +1 -0
  15. package/dist/command_line_parser.test.js +297 -0
  16. package/dist/command_line_parser.test.js.map +1 -0
  17. package/dist/compatibility_checker.d.ts +74 -0
  18. package/dist/compatibility_checker.d.ts.map +1 -0
  19. package/dist/compatibility_checker.js +341 -0
  20. package/dist/compatibility_checker.js.map +1 -0
  21. package/dist/compatibility_checker.test.d.ts +2 -0
  22. package/dist/compatibility_checker.test.d.ts.map +1 -0
  23. package/dist/compatibility_checker.test.js +582 -0
  24. package/dist/compatibility_checker.test.js.map +1 -0
  25. package/dist/compiler.d.ts.map +1 -0
  26. package/dist/compiler.js +375 -0
  27. package/dist/compiler.js.map +1 -0
  28. package/dist/config.d.ts +47 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +23 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/definition_finder.d.ts +12 -0
  33. package/dist/definition_finder.d.ts.map +1 -0
  34. package/dist/definition_finder.js +180 -0
  35. package/dist/definition_finder.js.map +1 -0
  36. package/dist/definition_finder.test.d.ts +2 -0
  37. package/dist/definition_finder.test.d.ts.map +1 -0
  38. package/dist/definition_finder.test.js +164 -0
  39. package/dist/definition_finder.test.js.map +1 -0
  40. package/dist/doc_comment_parser.d.ts +3 -0
  41. package/dist/doc_comment_parser.d.ts.map +1 -0
  42. package/dist/doc_comment_parser.js +219 -0
  43. package/dist/doc_comment_parser.js.map +1 -0
  44. package/dist/doc_comment_parser.test.d.ts +2 -0
  45. package/dist/doc_comment_parser.test.d.ts.map +1 -0
  46. package/dist/doc_comment_parser.test.js +494 -0
  47. package/dist/doc_comment_parser.test.js.map +1 -0
  48. package/dist/encoding.d.ts +2 -0
  49. package/dist/encoding.d.ts.map +1 -0
  50. package/dist/encoding.js +38 -0
  51. package/dist/encoding.js.map +1 -0
  52. package/dist/encoding.test.d.ts +2 -0
  53. package/dist/encoding.test.d.ts.map +1 -0
  54. package/dist/encoding.test.js +23 -0
  55. package/dist/encoding.test.js.map +1 -0
  56. package/dist/error_renderer.d.ts +10 -0
  57. package/dist/error_renderer.d.ts.map +1 -0
  58. package/dist/error_renderer.js +266 -0
  59. package/dist/error_renderer.js.map +1 -0
  60. package/dist/formatter.d.ts +16 -0
  61. package/dist/formatter.d.ts.map +1 -0
  62. package/dist/formatter.js +220 -0
  63. package/dist/formatter.js.map +1 -0
  64. package/dist/formatter.test.d.ts +2 -0
  65. package/dist/formatter.test.d.ts.map +1 -0
  66. package/dist/formatter.test.js +390 -0
  67. package/dist/formatter.test.js.map +1 -0
  68. package/dist/formatter2.d.ts +3 -0
  69. package/dist/formatter2.d.ts.map +1 -0
  70. package/dist/formatter2.js +67 -0
  71. package/dist/formatter2.js.map +1 -0
  72. package/dist/index.d.ts +6 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +5 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/index.test.d.ts.map +1 -0
  77. package/dist/index.test.js +14 -0
  78. package/dist/index.test.js.map +1 -0
  79. package/dist/io.d.ts.map +1 -0
  80. package/dist/io.js +22 -0
  81. package/dist/io.js.map +1 -0
  82. package/dist/language_server.d.ts +15 -0
  83. package/dist/language_server.d.ts.map +1 -0
  84. package/dist/language_server.js +248 -0
  85. package/dist/language_server.js.map +1 -0
  86. package/dist/literals.d.ts +13 -0
  87. package/dist/literals.d.ts.map +1 -0
  88. package/dist/literals.js +100 -0
  89. package/dist/literals.js.map +1 -0
  90. package/dist/literals.test.d.ts.map +1 -0
  91. package/dist/literals.test.js +149 -0
  92. package/dist/literals.test.js.map +1 -0
  93. package/dist/module_collector.d.ts +3 -0
  94. package/dist/module_collector.d.ts.map +1 -0
  95. package/dist/module_collector.js +22 -0
  96. package/dist/module_collector.js.map +1 -0
  97. package/dist/module_set.d.ts +40 -0
  98. package/dist/module_set.d.ts.map +1 -0
  99. package/dist/module_set.js +1178 -0
  100. package/dist/module_set.js.map +1 -0
  101. package/dist/module_set.test.d.ts.map +1 -0
  102. package/dist/module_set.test.js +1897 -0
  103. package/dist/module_set.test.js.map +1 -0
  104. package/dist/parser.d.ts +7 -0
  105. package/dist/parser.d.ts.map +1 -0
  106. package/dist/parser.js +1075 -0
  107. package/dist/parser.js.map +1 -0
  108. package/dist/parser.test.d.ts.map +1 -0
  109. package/dist/parser.test.js +1594 -0
  110. package/dist/parser.test.js.map +1 -0
  111. package/dist/project_initializer.d.ts +2 -0
  112. package/dist/project_initializer.d.ts.map +1 -0
  113. package/dist/project_initializer.js +30 -0
  114. package/dist/project_initializer.js.map +1 -0
  115. package/dist/snapshotter.d.ts +9 -0
  116. package/dist/snapshotter.d.ts.map +1 -0
  117. package/dist/snapshotter.js +144 -0
  118. package/dist/snapshotter.js.map +1 -0
  119. package/dist/tokenizer.d.ts +10 -0
  120. package/dist/tokenizer.d.ts.map +1 -0
  121. package/dist/tokenizer.js +198 -0
  122. package/dist/tokenizer.js.map +1 -0
  123. package/dist/tokenizer.test.d.ts.map +1 -0
  124. package/dist/tokenizer.test.js +441 -0
  125. package/dist/tokenizer.test.js.map +1 -0
  126. package/dist/types.d.ts +439 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +2 -0
  129. package/dist/types.js.map +1 -0
  130. package/package.json +58 -0
  131. package/src/casing.ts +53 -0
  132. package/src/types.ts +585 -0
@@ -0,0 +1,266 @@
1
+ import { caseMatches } from "./casing.js";
2
+ import { getTokenForBreakingChange, } from "./compatibility_checker.js";
3
+ export function renderErrors(errors) {
4
+ const MAX_ERRORS = 10;
5
+ for (let i = 0; i < errors.length && i < MAX_ERRORS; ++i) {
6
+ const error = errors[i];
7
+ console.error(formatError(error));
8
+ }
9
+ // Count the number of distinct modules with errors.
10
+ if (errors.length) {
11
+ const modules = new Set();
12
+ for (const error of errors) {
13
+ modules.add(error.token.line.modulePath);
14
+ }
15
+ const numErrors = `${errors.length} error${errors.length <= 1 ? "" : "s"}`;
16
+ const numFiles = `${modules.size} file${modules.size <= 1 ? "" : "s"}`;
17
+ console.error(`Found ${numErrors} in ${numFiles}\n`);
18
+ }
19
+ }
20
+ export function formatError(error) {
21
+ const { token } = error;
22
+ const { line, colNumber } = token;
23
+ const lineNumberStr = (line.lineNumber + 1).toString();
24
+ let result = formatLocation(token);
25
+ result += " - ";
26
+ if (error.expected !== undefined) {
27
+ result += makeRed("expected");
28
+ result += `: ${error.expected}`;
29
+ }
30
+ else {
31
+ result += makeRed("error");
32
+ result += `: ${error.message}`;
33
+ }
34
+ result += "\n\n";
35
+ result += makeBlackOnWhite(lineNumberStr);
36
+ result += " ";
37
+ result += line.line;
38
+ result += "\n";
39
+ result += makeBlackOnWhite(" ".repeat(lineNumberStr.length));
40
+ result += " ".repeat(colNumber + 1);
41
+ result += makeRed("~".repeat(Math.max(token.originalText.length, 1)));
42
+ result += "\n";
43
+ return result;
44
+ }
45
+ export function renderBreakingChanges(breakingChanges, moduleSet) {
46
+ const MAX = 10;
47
+ for (let i = 0; i < breakingChanges.length && i < MAX; ++i) {
48
+ const breakingChange = breakingChanges[i];
49
+ console.error(formatBreakingChange(breakingChange, moduleSet));
50
+ console.error();
51
+ }
52
+ const numBreakingChanges = breakingChanges.length;
53
+ const s = numBreakingChanges === 1 ? "" : "s";
54
+ if (numBreakingChanges) {
55
+ console.error(`Found ${numBreakingChanges} breaking change${s}\n`);
56
+ }
57
+ }
58
+ function formatBreakingChange(breakingChange, moduleSet) {
59
+ const token = getTokenForBreakingChange(breakingChange);
60
+ const locationPrefix = token ? formatLocation(token) + " - " : "";
61
+ switch (breakingChange.kind) {
62
+ case "illegal-type-change": {
63
+ const { expression, type } = breakingChange;
64
+ const errorHeader = makeRed("Illegal type change");
65
+ return [
66
+ `${locationPrefix}${errorHeader}\n`,
67
+ " [Last snapshot]\n",
68
+ ` ${makeGray("Expression:")} ${formatExpression(expression.before)}`,
69
+ ` ${makeGray("Type:")} ${formatType(type.before, moduleSet.before)}\n`,
70
+ " [Now]\n",
71
+ ` ${makeGray("Expression:")} ${formatExpression(expression.after)}`,
72
+ ` ${makeGray("Type:")} ${formatType(type.after, moduleSet.after)}`,
73
+ ].join("\n");
74
+ }
75
+ case "missing-slots": {
76
+ const { missingRangeEnd, missingRangeStart, recordExpression, record } = breakingChange;
77
+ const errorHeader = makeRed("Missing slots in record");
78
+ return [
79
+ `${locationPrefix}${errorHeader}\n`,
80
+ " [Last snapshot]\n",
81
+ ` ${makeGray("Expression:")} ${formatExpression(recordExpression.before)}`,
82
+ ` ${makeGray("Record:")} ${record.before.record.name.text}`,
83
+ ` ${makeGray("Slots:")} ${missingRangeEnd}\n`,
84
+ " [Now]\n",
85
+ ` ${makeGray("Expression:")} ${formatExpression(recordExpression.after)}`,
86
+ ` ${makeGray("Record:")} ${record.after.record.name.text}`,
87
+ ` ${makeGray("Slots:")} ${missingRangeStart}\n`,
88
+ ` ${makeGray("Fix:")} mark the field numbers as removed`,
89
+ ].join("\n");
90
+ }
91
+ case "missing-record": {
92
+ const { record, recordNumber } = breakingChange;
93
+ const recordDefinition = [
94
+ record.record.recordType,
95
+ " ",
96
+ getQualifiedName(record),
97
+ ].join("");
98
+ return [
99
+ `${makeRed("Missing record")}\n`,
100
+ " [Last snapshot]\n",
101
+ ` ${makeGray("Record:")} ${recordDefinition}`,
102
+ ` ${makeGray("Number:")} ${recordNumber}`,
103
+ ].join("\n");
104
+ }
105
+ case "missing-method": {
106
+ const { method } = breakingChange;
107
+ const methodDefinition = [
108
+ "method ",
109
+ method.name.text,
110
+ "(",
111
+ formatType(method.requestType, moduleSet.before),
112
+ "): ",
113
+ formatType(method.responseType, moduleSet.before),
114
+ ].join("");
115
+ return [
116
+ `${makeRed("Missing method")}\n`,
117
+ " [Last snapshot]\n",
118
+ ` ${makeGray("Method:")} ${methodDefinition}`,
119
+ ` ${makeGray("Number:")} ${method.number}`,
120
+ ].join("\n");
121
+ }
122
+ case "variant-kind-change": {
123
+ const { enumEpression, number, record, variantName } = breakingChange;
124
+ const errorHeader = makeRed("Illegal variant kind change");
125
+ const enumName = map(record, getQualifiedName);
126
+ const variantKind = map(variantName, (vn) => {
127
+ caseMatches(vn.text, "lower_underscore") ? "wrapper" : "constant";
128
+ });
129
+ return [
130
+ `${locationPrefix}${errorHeader}\n`,
131
+ " [Last snapshot]\n",
132
+ ` ${makeGray("Expression:")} ${formatExpression(enumEpression.before)}`,
133
+ ` ${makeGray("Enum:")} ${enumName.before}`,
134
+ ` ${makeGray("Variant:")} ${variantName.before.text}`,
135
+ ` ${makeGray("Number:")} ${number}`,
136
+ ` ${makeGray("Kind:")} ${variantKind.before}\n`,
137
+ " [Now]\n",
138
+ ` ${makeGray("Expression:")} ${formatExpression(enumEpression.after)}`,
139
+ ` ${makeGray("Enum:")} ${enumName.after}`,
140
+ ` ${makeGray("Variant:")} ${variantName.after.text}`,
141
+ ` ${makeGray("Number:")} ${number}`,
142
+ ` ${makeGray("Kind:")} ${variantKind.after}`,
143
+ ].join("\n");
144
+ }
145
+ case "missing-variant": {
146
+ const { enumEpression, number, record, variantName } = breakingChange;
147
+ const errorHeader = makeRed("Missing variant");
148
+ const enumName = map(record, getQualifiedName);
149
+ return [
150
+ `${locationPrefix}${errorHeader}\n`,
151
+ " [Last snapshot]\n",
152
+ ` ${makeGray("Expression:")} ${formatExpression(enumEpression.before)}`,
153
+ ` ${makeGray("Enum:")} ${enumName.before}`,
154
+ ` ${makeGray("Variant:")} ${variantName.text}`,
155
+ ` ${makeGray("Number:")} ${number}\n`,
156
+ " [Now]\n",
157
+ ` ${makeGray("Expression:")} ${formatExpression(enumEpression.after)}`,
158
+ ` ${makeGray("Enum:")} ${enumName.after}`,
159
+ ].join("\n");
160
+ }
161
+ case "record-kind-change": {
162
+ const { record, recordExpression, recordType } = breakingChange;
163
+ const errorHeader = makeRed("Record kind change");
164
+ return [
165
+ `${locationPrefix}${errorHeader}\n`,
166
+ " [Last snapshot]\n",
167
+ ` ${makeGray("Expression:")} ${formatExpression(recordExpression.before)}`,
168
+ ` ${makeGray("Record:")} ${record.before.record.name.text}`,
169
+ ` ${makeGray("Kind:")} ${recordType.before}\n`,
170
+ " [Now]\n",
171
+ ` ${makeGray("Expression:")} ${formatExpression(recordExpression.after)}`,
172
+ ` ${makeGray("Record:")} ${record.after.record.name.text}`,
173
+ ` ${makeGray("Kind:")} ${recordType.after}`,
174
+ ].join("\n");
175
+ }
176
+ case "removed-number-reintroduced": {
177
+ const { record, recordExpression, reintroducedAs, removedNumber } = breakingChange;
178
+ const errorHeader = makeRed("Removed number reintroduced");
179
+ return [
180
+ `${locationPrefix}${errorHeader}\n`,
181
+ " [Last snapshot]\n",
182
+ ` ${makeGray("Expression:")} ${formatExpression(recordExpression.before)}`,
183
+ ` ${makeGray("Record:")} ${record.before.record.name.text}`,
184
+ ` ${makeGray("Removed:")} ${removedNumber}\n`,
185
+ " [Now]\n",
186
+ ` ${makeGray("Expression:")} ${formatExpression(recordExpression.after)}`,
187
+ ` ${makeGray("Record:")} ${record.after.record.name.text}`,
188
+ record.after.record.recordType === "struct"
189
+ ? ` ${makeGray("Field:")} ${reintroducedAs.text}`
190
+ : ` ${makeGray("Variant:")} ${reintroducedAs.text}`,
191
+ ].join("\n");
192
+ }
193
+ }
194
+ }
195
+ function formatLocation(token) {
196
+ const { line, colNumber } = token;
197
+ return [
198
+ makeCyan(line.modulePath),
199
+ makeYellow((line.lineNumber + 1).toString()),
200
+ makeYellow((colNumber + 1).toString()),
201
+ ].join(":");
202
+ }
203
+ function formatExpression(expression) {
204
+ switch (expression.kind) {
205
+ case "request-type":
206
+ return `(${expression.methodName.text}::request)`;
207
+ case "response-type":
208
+ return `(${expression.methodName.text}::response)`;
209
+ case "record":
210
+ return `${expression.recordName.text}`;
211
+ case "item":
212
+ return formatExpression(expression.arrayExpression) + "[*]";
213
+ case "optional-value":
214
+ return formatExpression(expression.optionalExpression) + "!";
215
+ case "property": {
216
+ const structExpression = formatExpression(expression.structExpression);
217
+ return `${structExpression}.${expression.fieldName.text}`;
218
+ }
219
+ case "as-variant": {
220
+ const enumExpression = formatExpression(expression.enumExpression);
221
+ return `${enumExpression}.as_${expression.variantName.text}`;
222
+ }
223
+ }
224
+ }
225
+ function formatType(resolvedType, moduleSet) {
226
+ switch (resolvedType.kind) {
227
+ case "array":
228
+ return `[${formatType(resolvedType.item, moduleSet)}]`;
229
+ case "optional":
230
+ return `${formatType(resolvedType.other, moduleSet)}?`;
231
+ case "primitive":
232
+ return resolvedType.primitive;
233
+ case "record": {
234
+ const record = moduleSet.recordMap.get(resolvedType.key);
235
+ return getQualifiedName(record);
236
+ }
237
+ }
238
+ }
239
+ function getQualifiedName(recordLocation) {
240
+ return recordLocation.recordAncestors.map((r) => r.name.text).join(".");
241
+ }
242
+ function map(beforeAfter, fn) {
243
+ return {
244
+ before: fn(beforeAfter.before),
245
+ after: fn(beforeAfter.after),
246
+ };
247
+ }
248
+ export function makeRed(text) {
249
+ return `\x1b[31m${text}\x1b[0m`;
250
+ }
251
+ export function makeGreen(text) {
252
+ return `\x1b[32m${text}\x1b[0m`;
253
+ }
254
+ export function makeGray(text) {
255
+ return `\x1b[90m${text}\x1b[0m`;
256
+ }
257
+ function makeCyan(text) {
258
+ return `\x1b[36m${text}\x1b[0m`;
259
+ }
260
+ function makeYellow(text) {
261
+ return `\x1b[33m${text}\x1b[0m`;
262
+ }
263
+ function makeBlackOnWhite(text) {
264
+ return `\x1b[47m${text}\x1b[0m`;
265
+ }
266
+ //# sourceMappingURL=error_renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error_renderer.js","sourceRoot":"","sources":["../src/error_renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ModuleTokens } from "./tokenizer.js";
2
+ export interface FormattedModule {
3
+ readonly newSourceCode: string;
4
+ readonly textEdits: readonly TextEdit[];
5
+ }
6
+ export interface TextEdit {
7
+ readonly oldStart: number;
8
+ readonly oldEnd: number;
9
+ readonly newText: string;
10
+ }
11
+ /**
12
+ * Formats the given module and returns the new source code.
13
+ * Preserves token ordering.
14
+ */
15
+ export declare function formatModule(moduleTokens: ModuleTokens): FormattedModule;
16
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAG/B,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,YAAY,GAAG,eAAe,CA2ExE"}
@@ -0,0 +1,220 @@
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: "" }],
10
+ };
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
+ });
21
+ }
22
+ newSourceCode += newToken;
23
+ };
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;
34
+ break;
35
+ }
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);
57
+ }
58
+ return {
59
+ newSourceCode: newSourceCode,
60
+ textEdits: textEdits,
61
+ };
62
+ }
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
+ });
75
+ }
76
+ else if (token.text === "(" &&
77
+ ["struct", "enum"].includes(nextNonComment.text)) {
78
+ context.indentStack.push({
79
+ indent: topOfStack().indent + indentUnit,
80
+ inlineRecordInBracket: true,
81
+ });
82
+ }
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);
128
+ }
129
+ else if (token.text === "}") {
130
+ return [",", ";"].includes(next.text)
131
+ ? ""
132
+ : oneOrTwoLineBreaks(token, next);
133
+ }
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";
140
+ }
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 "";
161
+ }
162
+ }
163
+ function shouldAddTrailingComma(first, nextNonComment, context) {
164
+ return (context.context === "in-value" &&
165
+ ["]", "}", "|}"].includes(nextNonComment.text) &&
166
+ !["[", "{", "{|", ","].includes(first.text));
167
+ }
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";
173
+ }
174
+ else {
175
+ return "\n";
176
+ }
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);
192
+ }
193
+ else {
194
+ return "// " + token.slice(2);
195
+ }
196
+ }
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, "");
202
+ }
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, "") + '"';
209
+ }
210
+ }
211
+ else if (token.startsWith('"')) {
212
+ // A double-quoted string
213
+ // Remove escape characters before double quotes.
214
+ return token.replace(/\\(?=(?:\\\\)*')/g, "");
215
+ }
216
+ else {
217
+ return token;
218
+ }
219
+ }
220
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formatter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.test.d.ts","sourceRoot":"","sources":["../src/formatter.test.ts"],"names":[],"mappings":""}