@trebired/code-discipline 5.4.0 → 5.5.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.
Files changed (169) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +76 -42
  3. package/dist/checks/apply-fixes.d.ts.map +1 -1
  4. package/dist/checks/apply-fixes.js.map +1 -1
  5. package/dist/checks/fix-redundant-path-segments.d.ts.map +1 -1
  6. package/dist/checks/fix-redundant-path-segments.js +2 -1
  7. package/dist/checks/fix-redundant-path-segments.js.map +1 -1
  8. package/dist/checks/format.d.ts.map +1 -1
  9. package/dist/checks/index.d.ts.map +1 -1
  10. package/dist/checks/index.js +2 -1
  11. package/dist/checks/index.js.map +1 -1
  12. package/dist/checks/parse-failures.d.ts.map +1 -1
  13. package/dist/checks/parse-failures.js.map +1 -1
  14. package/dist/checks/progress.d.ts.map +1 -1
  15. package/dist/checks/progress.js.map +1 -1
  16. package/dist/checks/rule-slugs.js.map +1 -1
  17. package/dist/checks/rules/banned/files.js.map +1 -1
  18. package/dist/checks/rules/banned/fold.d.ts.map +1 -1
  19. package/dist/checks/rules/banned/fold.js +5 -1
  20. package/dist/checks/rules/banned/fold.js.map +1 -1
  21. package/dist/checks/rules/banned/patterns.d.ts.map +1 -1
  22. package/dist/checks/rules/banned/patterns.js +3 -1
  23. package/dist/checks/rules/banned/patterns.js.map +1 -1
  24. package/dist/checks/rules/blank-lines/classify.js.map +1 -1
  25. package/dist/checks/rules/blank-lines/comments.js.map +1 -1
  26. package/dist/checks/rules/blank-lines/generic.d.ts.map +1 -1
  27. package/dist/checks/rules/blank-lines/generic.js +6 -1
  28. package/dist/checks/rules/blank-lines/generic.js.map +1 -1
  29. package/dist/checks/rules/blank-lines/index.js.map +1 -1
  30. package/dist/checks/rules/blank-lines/rewrite.js.map +1 -1
  31. package/dist/checks/rules/blank-lines/types.d.ts.map +1 -1
  32. package/dist/checks/rules/comments/qml.js.map +1 -1
  33. package/dist/checks/rules/comments/ranges.js.map +1 -1
  34. package/dist/checks/rules/comments/stripping.js.map +1 -1
  35. package/dist/checks/rules/dry/behavior/conditions.js.map +1 -1
  36. package/dist/checks/rules/dry/behavior/expressions.js.map +1 -1
  37. package/dist/checks/rules/dry/behavior/index.js.map +1 -1
  38. package/dist/checks/rules/dry/behavior/model.d.ts.map +1 -1
  39. package/dist/checks/rules/dry/behavior/model.js.map +1 -1
  40. package/dist/checks/rules/dry/behavior/statements.js.map +1 -1
  41. package/dist/checks/rules/dry/candidates.js.map +1 -1
  42. package/dist/checks/rules/dry/fingerprint.js.map +1 -1
  43. package/dist/checks/rules/dry/generic.js.map +1 -1
  44. package/dist/checks/rules/dry/matching.js.map +1 -1
  45. package/dist/checks/rules/dry/serialize/bindings.d.ts.map +1 -1
  46. package/dist/checks/rules/dry/serialize/bindings.js +5 -1
  47. package/dist/checks/rules/dry/serialize/bindings.js.map +1 -1
  48. package/dist/checks/rules/dry/serialize/context.js.map +1 -1
  49. package/dist/checks/rules/dry/serialize/expressions.d.ts.map +1 -1
  50. package/dist/checks/rules/dry/serialize/expressions.js +5 -1
  51. package/dist/checks/rules/dry/serialize/expressions.js.map +1 -1
  52. package/dist/checks/rules/dry/serialize/node.js.map +1 -1
  53. package/dist/checks/rules/dry/serialize/statements.d.ts.map +1 -1
  54. package/dist/checks/rules/dry/serialize/statements.js +5 -1
  55. package/dist/checks/rules/dry/serialize/statements.js.map +1 -1
  56. package/dist/checks/rules/dry/similarity.js.map +1 -1
  57. package/dist/checks/rules/max/characters-per-line/fix.js.map +1 -1
  58. package/dist/checks/rules/max/characters-per-line.js.map +1 -1
  59. package/dist/checks/rules/max/file-lines.js.map +1 -1
  60. package/dist/checks/rules/max/function-lines.d.ts.map +1 -1
  61. package/dist/checks/rules/max/function-lines.js +6 -2
  62. package/dist/checks/rules/max/function-lines.js.map +1 -1
  63. package/dist/checks/rules/max/python.js.map +1 -1
  64. package/dist/checks/rules/max/qml.js.map +1 -1
  65. package/dist/checks/rules/max/shell.js.map +1 -1
  66. package/dist/checks/rules/max/strip.js.map +1 -1
  67. package/dist/checks/rules/min/declaration-name.d.ts.map +1 -1
  68. package/dist/checks/rules/min/declaration-name.js +6 -309
  69. package/dist/checks/rules/min/declaration-name.js.map +1 -1
  70. package/dist/checks/rules/min/declarations.d.ts +10 -0
  71. package/dist/checks/rules/min/declarations.d.ts.map +1 -0
  72. package/dist/checks/rules/min/declarations.js +309 -0
  73. package/dist/checks/rules/min/declarations.js.map +1 -0
  74. package/dist/checks/rules/min/file/lines/fix.js.map +1 -1
  75. package/dist/checks/rules/min/file/lines.js.map +1 -1
  76. package/dist/checks/rules/redundant-path-segments/index.js.map +1 -1
  77. package/dist/checks/rules/redundant-path-segments/plan.js.map +1 -1
  78. package/dist/checks/rules/remove-comments.js.map +1 -1
  79. package/dist/checks/rules/typescript-functions.js.map +1 -1
  80. package/dist/checks/severity.js.map +1 -1
  81. package/dist/checks/sync-options.js.map +1 -1
  82. package/dist/checks/types.d.ts +4 -2
  83. package/dist/checks/types.d.ts.map +1 -1
  84. package/dist/cli/logging.js.map +1 -1
  85. package/dist/cli/output.d.ts.map +1 -1
  86. package/dist/cli/output.js.map +1 -1
  87. package/dist/cli/progress.d.ts.map +1 -1
  88. package/dist/cli/progress.js +3 -1
  89. package/dist/cli/progress.js.map +1 -1
  90. package/dist/cli/run.d.ts.map +1 -1
  91. package/dist/cli/run.js.map +1 -1
  92. package/dist/config/index.d.ts.map +1 -1
  93. package/dist/config/index.js.map +1 -1
  94. package/dist/config/normalize/check-options.d.ts.map +1 -1
  95. package/dist/config/normalize/check-options.js +8 -7
  96. package/dist/config/normalize/check-options.js.map +1 -1
  97. package/dist/config/normalize/exclusions.d.ts.map +1 -1
  98. package/dist/config/normalize/exclusions.js +3 -1
  99. package/dist/config/normalize/exclusions.js.map +1 -1
  100. package/dist/config/normalize/formatter-options.js.map +1 -1
  101. package/dist/config/normalize/imports-options.d.ts.map +1 -1
  102. package/dist/config/normalize/imports-options.js +12 -1
  103. package/dist/config/normalize/imports-options.js.map +1 -1
  104. package/dist/config/normalize/logging-options.js.map +1 -1
  105. package/dist/config/normalize/presets.d.ts +5 -3
  106. package/dist/config/normalize/presets.d.ts.map +1 -1
  107. package/dist/config/normalize/presets.js +190 -78
  108. package/dist/config/normalize/presets.js.map +1 -1
  109. package/dist/config/normalize/rule-options.d.ts.map +1 -1
  110. package/dist/config/normalize/rule-options.js +7 -1
  111. package/dist/config/normalize/rule-options.js.map +1 -1
  112. package/dist/config/normalize/source-options.d.ts.map +1 -1
  113. package/dist/config/normalize/source-options.js.map +1 -1
  114. package/dist/formatters/code.js.map +1 -1
  115. package/dist/formatters/files.d.ts.map +1 -1
  116. package/dist/formatters/files.js.map +1 -1
  117. package/dist/imports/aliases.d.ts.map +1 -1
  118. package/dist/imports/aliases.js.map +1 -1
  119. package/dist/imports/check.js.map +1 -1
  120. package/dist/imports/dead.js.map +1 -1
  121. package/dist/imports/folder.d.ts.map +1 -1
  122. package/dist/imports/folder.js.map +1 -1
  123. package/dist/imports/imports.js.map +1 -1
  124. package/dist/imports/module-specifiers.js.map +1 -1
  125. package/dist/imports/resolve.d.ts.map +1 -1
  126. package/dist/imports/resolve.js.map +1 -1
  127. package/dist/imports/rewrite.js.map +1 -1
  128. package/dist/imports/scan.d.ts.map +1 -1
  129. package/dist/imports/scan.js.map +1 -1
  130. package/dist/imports/strategies.js.map +1 -1
  131. package/dist/imports/types.d.ts.map +1 -1
  132. package/dist/index.d.ts +1 -1
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/native/native.js.map +1 -1
  135. package/dist/run.d.ts.map +1 -1
  136. package/dist/run.js +2 -0
  137. package/dist/run.js.map +1 -1
  138. package/dist/runtime/gate-command.d.ts.map +1 -1
  139. package/dist/runtime/gate-command.js +0 -1
  140. package/dist/runtime/gate-command.js.map +1 -1
  141. package/dist/runtime/imports-sync.d.ts.map +1 -1
  142. package/dist/runtime/imports-sync.js.map +1 -1
  143. package/dist/runtime/orchestrate.d.ts.map +1 -1
  144. package/dist/runtime/orchestrate.js.map +1 -1
  145. package/dist/runtime/tsconfig-paths.d.ts.map +1 -1
  146. package/dist/runtime/tsconfig-paths.js.map +1 -1
  147. package/dist/shared/constants.d.ts.map +1 -1
  148. package/dist/shared/constants.js +29 -1
  149. package/dist/shared/constants.js.map +1 -1
  150. package/dist/shared/directories.d.ts.map +1 -1
  151. package/dist/shared/directories.js +0 -1
  152. package/dist/shared/directories.js.map +1 -1
  153. package/dist/shared/discipline-types.d.ts.map +1 -1
  154. package/dist/shared/errors.d.ts.map +1 -1
  155. package/dist/shared/errors.js.map +1 -1
  156. package/dist/shared/generated-artifacts.d.ts.map +1 -1
  157. package/dist/shared/generated-artifacts.js.map +1 -1
  158. package/dist/shared/languages.js.map +1 -1
  159. package/dist/shared/logging.js.map +1 -1
  160. package/dist/shared/package-metadata.d.ts.map +1 -1
  161. package/dist/shared/package-metadata.js +2 -1
  162. package/dist/shared/package-metadata.js.map +1 -1
  163. package/dist/shared/rule-exclusions.js.map +1 -1
  164. package/dist/shared/utils.js.map +1 -1
  165. package/native/darwin-arm64.node +0 -0
  166. package/native/darwin-x64.node +0 -0
  167. package/native/linux-arm64-gnu.node +0 -0
  168. package/native/linux-x64-gnu.node +0 -0
  169. package/package.json +4 -3
@@ -1,319 +1,15 @@
1
1
  import fs from "node:fs/promises";
2
- import ts from "typescript";
3
- import { parseSource } from "../../../imports/module-specifiers.js";
4
- import { isCppExtension, isCsharpExtension, isGoExtension, isPythonExtension, isQmlExtension, isRustExtension, isScssExtension, isShellExtension, isStyleExtension, isTypeScriptFamilyExtension, supportsMinDeclarationName, } from "../../../shared/languages.js";
5
- import { collectLanguageFunctionDescriptors } from "../max/function-lines.js";
2
+ import { supportsMinDeclarationName } from "../../../shared/languages.js";
6
3
  import { createRuleProgress, emitRuleChunk, emitRuleCompleted } from "../../progress.js";
7
- import { getStartLine } from "../typescript-functions.js";
8
4
  import { collectWithParseFailure } from "../../parse-failures.js";
9
- import { stripCommentsAndStrings } from "../max/strip.js";
10
- import { updatePythonTripleState } from "../max/python.js";
11
- import { maskQmlCommentsAndStrings } from "../comments/qml.js";
12
- import { stripShellStringsAndComments } from "../max/shell.js";
13
- function isConstDeclaration(node) {
14
- return (ts.getCombinedNodeFlags(node) & ts.NodeFlags.Const) !== 0;
15
- }
16
- function collectNamedDeclarations(sourceFile) {
17
- const declarations = [];
18
- function visit(node) {
19
- if (ts.isFunctionDeclaration(node) && node.name) {
20
- declarations.push({
21
- kind: "function",
22
- line: getStartLine(sourceFile, node.name),
23
- name: node.name.text,
24
- });
25
- }
26
- if (ts.isVariableDeclaration(node) && isConstDeclaration(node) && ts.isIdentifier(node.name)) {
27
- declarations.push({
28
- kind: "const",
29
- line: getStartLine(sourceFile, node.name),
30
- name: node.name.text,
31
- });
32
- }
33
- ts.forEachChild(node, visit);
34
- }
35
- visit(sourceFile);
36
- return declarations;
37
- }
38
- function collectPatternDeclarations(text, patterns) {
39
- const declarations = [];
40
- const lines = text.split(/\r?\n/u);
41
- for (let index = 0; index < lines.length; index += 1) {
42
- const line = lines[index] ?? "";
43
- for (const entry of patterns) {
44
- const match = entry.pattern.exec(line);
45
- if (!match?.[1])
46
- continue;
47
- declarations.push({
48
- kind: entry.kind,
49
- line: index + 1,
50
- name: match[1],
51
- });
52
- break;
53
- }
54
- }
55
- return declarations;
56
- }
57
- function collectGoDeclarations(text) {
58
- const declarations = [];
59
- const lines = stripCommentsAndStrings(text).split(/\r?\n/u);
60
- let blockKind = null;
61
- for (let index = 0; index < lines.length; index += 1) {
62
- const line = lines[index] ?? "";
63
- const functionMatch = /^\s*func(?:\s*\([^)]*\))?\s+([A-Za-z_]\w*)/u.exec(line);
64
- if (functionMatch?.[1]) {
65
- declarations.push({
66
- kind: /\bfunc\s*\(/u.test(line) ? "method" : "function",
67
- line: index + 1,
68
- name: functionMatch[1],
69
- });
70
- continue;
71
- }
72
- const blockStart = /^\s*(const|var|type)\s*\(/u.exec(line);
73
- if (blockStart?.[1]) {
74
- blockKind = blockStart[1];
75
- continue;
76
- }
77
- if (blockKind && /^\s*\)/u.test(line)) {
78
- blockKind = null;
79
- continue;
80
- }
81
- const declarationMatch = blockKind
82
- ? /^\s*([A-Za-z_]\w*)\b/u.exec(line)
83
- : /^\s*(const|var|type)\s+([A-Za-z_]\w*)/u.exec(line);
84
- const name = blockKind ? declarationMatch?.[1] : declarationMatch?.[2];
85
- const kind = blockKind ?? declarationMatch?.[1];
86
- if (!name || !kind)
87
- continue;
88
- declarations.push({
89
- kind,
90
- line: index + 1,
91
- name,
92
- });
93
- }
94
- return declarations;
95
- }
96
- function collectRustDeclarations(text) {
97
- return collectPatternDeclarations(stripCommentsAndStrings(text), [
98
- {
99
- kind: "function",
100
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?(?:const\s+)?(?:unsafe\s+)?fn\s+([A-Za-z_]\w*)/u,
101
- },
102
- {
103
- kind: "const",
104
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?const\s+([A-Za-z_]\w*)/u,
105
- },
106
- {
107
- kind: "static",
108
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?static\s+([A-Za-z_]\w*)/u,
109
- },
110
- {
111
- kind: "struct",
112
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?struct\s+([A-Za-z_]\w*)/u,
113
- },
114
- {
115
- kind: "enum",
116
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?enum\s+([A-Za-z_]\w*)/u,
117
- },
118
- {
119
- kind: "trait",
120
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?trait\s+([A-Za-z_]\w*)/u,
121
- },
122
- {
123
- kind: "type",
124
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?type\s+([A-Za-z_]\w*)/u,
125
- },
126
- {
127
- kind: "module",
128
- pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?mod\s+([A-Za-z_]\w*)/u,
129
- },
130
- ]);
131
- }
132
- function collectCFamilyFunctionDeclarations(text, extension, filePath) {
133
- return collectLanguageFunctionDescriptors(text, extension, filePath).map((entry) => ({
134
- kind: entry.kind,
135
- line: entry.startLine,
136
- name: entry.name,
137
- }));
138
- }
139
- function collectCppDeclarations(text, extension, filePath) {
140
- return [
141
- ...collectCFamilyFunctionDeclarations(text, extension, filePath),
142
- ...collectPatternDeclarations(stripCommentsAndStrings(text), [
143
- {
144
- kind: "namespace",
145
- pattern: /^\s*namespace\s+([A-Za-z_]\w*)/u,
146
- },
147
- {
148
- kind: "class",
149
- pattern: /^\s*(?:template\s*<[^>]*>\s*)?class\s+([A-Za-z_]\w*)/u,
150
- },
151
- {
152
- kind: "struct",
153
- pattern: /^\s*(?:template\s*<[^>]*>\s*)?struct\s+([A-Za-z_]\w*)/u,
154
- },
155
- {
156
- kind: "enum",
157
- pattern: /^\s*enum(?:\s+class)?\s+([A-Za-z_]\w*)/u,
158
- },
159
- {
160
- kind: "using",
161
- pattern: /^\s*using\s+([A-Za-z_]\w*)\s*=/u,
162
- },
163
- ]),
164
- ];
165
- }
166
- function collectCsharpDeclarations(text, extension, filePath) {
167
- return [
168
- ...collectCFamilyFunctionDeclarations(text, extension, filePath),
169
- ...collectPatternDeclarations(stripCommentsAndStrings(text), [
170
- {
171
- kind: "namespace",
172
- pattern: /^\s*namespace\s+([A-Za-z_][\w.]*)/u,
173
- },
174
- {
175
- kind: "class",
176
- pattern: /^\s*(?:(?:public|private|protected|internal|static|sealed|abstract|partial)\s+)*class\s+([A-Za-z_]\w*)/u,
177
- },
178
- {
179
- kind: "interface",
180
- pattern: /^\s*(?:(?:public|private|protected|internal|partial)\s+)*interface\s+([A-Za-z_]\w*)/u,
181
- },
182
- {
183
- kind: "struct",
184
- pattern: /^\s*(?:(?:public|private|protected|internal|readonly|partial)\s+)*struct\s+([A-Za-z_]\w*)/u,
185
- },
186
- {
187
- kind: "enum",
188
- pattern: /^\s*(?:(?:public|private|protected|internal)\s+)*enum\s+([A-Za-z_]\w*)/u,
189
- },
190
- ]),
191
- ];
192
- }
193
- function collectPythonDeclarations(text) {
194
- const declarations = [];
195
- const state = { quote: null };
196
- const lines = text.split(/\r?\n/u);
197
- for (let index = 0; index < lines.length; index += 1) {
198
- const line = lines[index] ?? "";
199
- const insideTripleString = state.quote !== null;
200
- if (!insideTripleString) {
201
- const functionMatch = /^\s*(async\s+def|def)\s+([A-Za-z_]\w*)\s*\(/u.exec(line);
202
- const classMatch = /^\s*class\s+([A-Za-z_]\w*)\s*(?:\(|:)/u.exec(line);
203
- const assignmentMatch = /^\s*([A-Za-z_]\w*)\s*(?::[^=]+)?=(?!=)/u.exec(line);
204
- const declaration = functionMatch?.[2]
205
- ? { kind: functionMatch[1] === "def" ? "function" : "async-function", name: functionMatch[2] }
206
- : classMatch?.[1]
207
- ? { kind: "class", name: classMatch[1] }
208
- : assignmentMatch?.[1]
209
- ? { kind: "assignment", name: assignmentMatch[1] }
210
- : null;
211
- if (declaration) {
212
- declarations.push({
213
- ...declaration,
214
- line: index + 1,
215
- });
216
- }
217
- }
218
- updatePythonTripleState(line, state);
219
- }
220
- return declarations;
221
- }
222
- function collectQmlDeclarations(text) {
223
- return collectPatternDeclarations(maskQmlCommentsAndStrings(text), [
224
- {
225
- kind: "function",
226
- pattern: /^\s*(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(/u,
227
- },
228
- {
229
- kind: "function",
230
- pattern: /^\s*(?:property\s+\w+\s+)?([A-Za-z_$][\w$]*)\s*:\s*function\s*\(/u,
231
- },
232
- {
233
- kind: "signal-handler",
234
- pattern: /^\s*(on[A-Z][\w$]*)\s*:/u,
235
- },
236
- {
237
- kind: "property",
238
- pattern: /^\s*property\s+\w+\s+([A-Za-z_$][\w$]*)\b/u,
239
- },
240
- {
241
- kind: "signal",
242
- pattern: /^\s*signal\s+([A-Za-z_$][\w$]*)\s*\(/u,
243
- },
244
- {
245
- kind: "id",
246
- pattern: /^\s*id\s*:\s*([A-Za-z_$][\w$]*)/u,
247
- },
248
- ]);
249
- }
250
- function collectShellDeclarations(text) {
251
- const stripped = text.split(/\r?\n/u).map(stripShellStringsAndComments).join("\n");
252
- return collectPatternDeclarations(stripped, [
253
- {
254
- kind: "function",
255
- pattern: /^\s*(?:function\s+)?([A-Za-z_][\w-]*)\s*(?:\(\s*\))?\s*\{/u,
256
- },
257
- {
258
- kind: "assignment",
259
- pattern: /^\s*(?:export\s+|local\s+|readonly\s+|declare\s+(?:-[A-Za-z]+\s+)?)?([A-Za-z_]\w*)=/u,
260
- },
261
- ]);
262
- }
263
- function collectStyleDeclarations(text, extension) {
264
- const patterns = [
265
- {
266
- kind: "custom-property",
267
- pattern: /^\s*(--[A-Za-z_][\w-]*)\s*:/u,
268
- },
269
- ];
270
- if (isScssExtension(extension)) {
271
- patterns.unshift({
272
- kind: "variable",
273
- pattern: /^\s*(\$[A-Za-z_][\w-]*)\s*:/u,
274
- }, {
275
- kind: "mixin",
276
- pattern: /^\s*@mixin\s+([A-Za-z_][\w-]*)/u,
277
- }, {
278
- kind: "function",
279
- pattern: /^\s*@function\s+([A-Za-z_][\w-]*)/u,
280
- }, {
281
- kind: "placeholder",
282
- pattern: /^\s*(%[A-Za-z_][\w-]*)/u,
283
- });
284
- }
285
- return collectPatternDeclarations(stripCommentsAndStrings(text), patterns);
286
- }
287
- function collectLanguageDeclarations(text, extension, filePath) {
288
- if (isTypeScriptFamilyExtension(extension))
289
- return collectNamedDeclarations(parseSource(text, filePath));
290
- if (isGoExtension(extension))
291
- return collectGoDeclarations(text);
292
- if (isRustExtension(extension))
293
- return collectRustDeclarations(text);
294
- if (isCppExtension(extension))
295
- return collectCppDeclarations(text, extension, filePath);
296
- if (isCsharpExtension(extension))
297
- return collectCsharpDeclarations(text, extension, filePath);
298
- if (isPythonExtension(extension))
299
- return collectPythonDeclarations(text);
300
- if (isQmlExtension(extension))
301
- return collectQmlDeclarations(text);
302
- if (isShellExtension(extension))
303
- return collectShellDeclarations(text);
304
- if (isStyleExtension(extension))
305
- return collectStyleDeclarations(text, extension);
306
- return [];
307
- }
308
- function measureDeclarationName(name) {
309
- return Array.from(name.replace(/^(?:--|[$%])/u, "")).length;
310
- }
5
+ import { collectLanguageDeclarations, measureDeclarationName, } from "./declarations.js";
311
6
  function createMinDeclarationNameViolation(file, declaration, min, length) {
7
+ const characterLabel = length === 1 ? "character" : "characters";
312
8
  return {
313
9
  rule: "min-declaration-name",
314
10
  fix: false,
315
11
  filePath: file.relativeFromProjectRoot,
316
- message: `${declaration.kind} ${declaration.name} has ${length} character${length === 1 ? "" : "s"} and is below the minimum name length of ${min}`,
12
+ message: `${declaration.kind} ${declaration.name} has ${length} ${characterLabel} and is below the minimum name length of ${min}`,
317
13
  details: {
318
14
  declarationKind: declaration.kind,
319
15
  declarationName: declaration.name,
@@ -344,7 +40,8 @@ async function runMinDeclarationNameRule(sourceFiles, options) {
344
40
  const length = measureDeclarationName(declaration.name);
345
41
  if (length >= options.rules.minDeclarationName.min)
346
42
  continue;
347
- violations.push(createMinDeclarationNameViolation(file, declaration, options.rules.minDeclarationName.min, length));
43
+ const violation = createMinDeclarationNameViolation(file, declaration, options.rules.minDeclarationName.min, length);
44
+ violations.push(violation);
348
45
  }
349
46
  emitRuleChunk(progress, index + 1, violations.length);
350
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"declaration-name.js","sourceRoot":"","sources":["../../../../src/checks/rules/min/declaration-name.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"declaration-name.js","sourceRoot":"","sources":["../../../../src/checks/rules/min/declaration-name.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ type NamedDeclaration = {
2
+ kind: string;
3
+ line: number;
4
+ name: string;
5
+ };
6
+ declare function collectLanguageDeclarations(text: string, extension: string, filePath: string): NamedDeclaration[];
7
+ declare function measureDeclarationName(name: string): number;
8
+ export { collectLanguageDeclarations, measureDeclarationName, };
9
+ export type { NamedDeclaration };
10
+ //# sourceMappingURL=declarations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../../../../src/checks/rules/min/declarations.ts"],"names":[],"mappings":"AAsBA,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAwTF,iBAAS,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAW1G;AAED,iBAAS,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,CAAC;AAEF,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,309 @@
1
+ import ts from "typescript";
2
+ import { parseSource } from "../../../imports/module-specifiers.js";
3
+ import { isCppExtension, isCsharpExtension, isGoExtension, isPythonExtension, isQmlExtension, isRustExtension, isScssExtension, isShellExtension, isStyleExtension, isTypeScriptFamilyExtension, } from "../../../shared/languages.js";
4
+ import { collectLanguageFunctionDescriptors } from "../max/function-lines.js";
5
+ import { getStartLine } from "../typescript-functions.js";
6
+ import { stripCommentsAndStrings } from "../max/strip.js";
7
+ import { updatePythonTripleState } from "../max/python.js";
8
+ import { maskQmlCommentsAndStrings } from "../comments/qml.js";
9
+ import { stripShellStringsAndComments } from "../max/shell.js";
10
+ function isConstDeclaration(node) {
11
+ return (ts.getCombinedNodeFlags(node) & ts.NodeFlags.Const) !== 0;
12
+ }
13
+ function collectNamedDeclarations(sourceFile) {
14
+ const declarations = [];
15
+ function visit(node) {
16
+ if (ts.isFunctionDeclaration(node) && node.name) {
17
+ declarations.push({
18
+ kind: "function",
19
+ line: getStartLine(sourceFile, node.name),
20
+ name: node.name.text,
21
+ });
22
+ }
23
+ if (ts.isVariableDeclaration(node) && isConstDeclaration(node) && ts.isIdentifier(node.name)) {
24
+ declarations.push({
25
+ kind: "const",
26
+ line: getStartLine(sourceFile, node.name),
27
+ name: node.name.text,
28
+ });
29
+ }
30
+ ts.forEachChild(node, visit);
31
+ }
32
+ visit(sourceFile);
33
+ return declarations;
34
+ }
35
+ function collectPatternDeclarations(text, patterns) {
36
+ const declarations = [];
37
+ const lines = text.split(/\r?\n/u);
38
+ for (let index = 0; index < lines.length; index += 1) {
39
+ const line = lines[index] ?? "";
40
+ for (const entry of patterns) {
41
+ const match = entry.pattern.exec(line);
42
+ if (!match?.[1])
43
+ continue;
44
+ declarations.push({
45
+ kind: entry.kind,
46
+ line: index + 1,
47
+ name: match[1],
48
+ });
49
+ break;
50
+ }
51
+ }
52
+ return declarations;
53
+ }
54
+ function collectGoDeclarations(text) {
55
+ const declarations = [];
56
+ const lines = stripCommentsAndStrings(text).split(/\r?\n/u);
57
+ let blockKind = null;
58
+ for (let index = 0; index < lines.length; index += 1) {
59
+ const line = lines[index] ?? "";
60
+ const functionMatch = /^\s*func(?:\s*\([^)]*\))?\s+([A-Za-z_]\w*)/u.exec(line);
61
+ if (functionMatch?.[1]) {
62
+ declarations.push({
63
+ kind: /\bfunc\s*\(/u.test(line) ? "method" : "function",
64
+ line: index + 1,
65
+ name: functionMatch[1],
66
+ });
67
+ continue;
68
+ }
69
+ const blockStart = /^\s*(const|var|type)\s*\(/u.exec(line);
70
+ if (blockStart?.[1]) {
71
+ blockKind = blockStart[1];
72
+ continue;
73
+ }
74
+ if (blockKind && /^\s*\)/u.test(line)) {
75
+ blockKind = null;
76
+ continue;
77
+ }
78
+ const declarationMatch = blockKind
79
+ ? /^\s*([A-Za-z_]\w*)\b/u.exec(line)
80
+ : /^\s*(const|var|type)\s+([A-Za-z_]\w*)/u.exec(line);
81
+ const name = blockKind ? declarationMatch?.[1] : declarationMatch?.[2];
82
+ const kind = blockKind ?? declarationMatch?.[1];
83
+ if (!name || !kind)
84
+ continue;
85
+ declarations.push({
86
+ kind,
87
+ line: index + 1,
88
+ name,
89
+ });
90
+ }
91
+ return declarations;
92
+ }
93
+ function collectRustDeclarations(text) {
94
+ return collectPatternDeclarations(stripCommentsAndStrings(text), [
95
+ {
96
+ kind: "function",
97
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?(?:const\s+)?(?:unsafe\s+)?fn\s+([A-Za-z_]\w*)/u,
98
+ },
99
+ {
100
+ kind: "const",
101
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?const\s+([A-Za-z_]\w*)/u,
102
+ },
103
+ {
104
+ kind: "static",
105
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?static\s+([A-Za-z_]\w*)/u,
106
+ },
107
+ {
108
+ kind: "struct",
109
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?struct\s+([A-Za-z_]\w*)/u,
110
+ },
111
+ {
112
+ kind: "enum",
113
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?enum\s+([A-Za-z_]\w*)/u,
114
+ },
115
+ {
116
+ kind: "trait",
117
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?trait\s+([A-Za-z_]\w*)/u,
118
+ },
119
+ {
120
+ kind: "type",
121
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?type\s+([A-Za-z_]\w*)/u,
122
+ },
123
+ {
124
+ kind: "module",
125
+ pattern: /^\s*(?:pub(?:\([^)]*\))?\s+)?mod\s+([A-Za-z_]\w*)/u,
126
+ },
127
+ ]);
128
+ }
129
+ function collectCFamilyFunctionDeclarations(text, extension, filePath) {
130
+ return collectLanguageFunctionDescriptors(text, extension, filePath).map((entry) => ({
131
+ kind: entry.kind,
132
+ line: entry.startLine,
133
+ name: entry.name,
134
+ }));
135
+ }
136
+ function collectCppDeclarations(text, extension, filePath) {
137
+ return [
138
+ ...collectCFamilyFunctionDeclarations(text, extension, filePath),
139
+ ...collectPatternDeclarations(stripCommentsAndStrings(text), [
140
+ {
141
+ kind: "namespace",
142
+ pattern: /^\s*namespace\s+([A-Za-z_]\w*)/u,
143
+ },
144
+ {
145
+ kind: "class",
146
+ pattern: /^\s*(?:template\s*<[^>]*>\s*)?class\s+([A-Za-z_]\w*)/u,
147
+ },
148
+ {
149
+ kind: "struct",
150
+ pattern: /^\s*(?:template\s*<[^>]*>\s*)?struct\s+([A-Za-z_]\w*)/u,
151
+ },
152
+ {
153
+ kind: "enum",
154
+ pattern: /^\s*enum(?:\s+class)?\s+([A-Za-z_]\w*)/u,
155
+ },
156
+ {
157
+ kind: "using",
158
+ pattern: /^\s*using\s+([A-Za-z_]\w*)\s*=/u,
159
+ },
160
+ ]),
161
+ ];
162
+ }
163
+ function collectCsharpDeclarations(text, extension, filePath) {
164
+ return [
165
+ ...collectCFamilyFunctionDeclarations(text, extension, filePath),
166
+ ...collectPatternDeclarations(stripCommentsAndStrings(text), [
167
+ {
168
+ kind: "namespace",
169
+ pattern: /^\s*namespace\s+([A-Za-z_][\w.]*)/u,
170
+ },
171
+ {
172
+ kind: "class",
173
+ pattern: /^\s*(?:(?:public|private|protected|internal|static|sealed|abstract|partial)\s+)*class\s+([A-Za-z_]\w*)/u,
174
+ },
175
+ {
176
+ kind: "interface",
177
+ pattern: /^\s*(?:(?:public|private|protected|internal|partial)\s+)*interface\s+([A-Za-z_]\w*)/u,
178
+ },
179
+ {
180
+ kind: "struct",
181
+ pattern: /^\s*(?:(?:public|private|protected|internal|readonly|partial)\s+)*struct\s+([A-Za-z_]\w*)/u,
182
+ },
183
+ {
184
+ kind: "enum",
185
+ pattern: /^\s*(?:(?:public|private|protected|internal)\s+)*enum\s+([A-Za-z_]\w*)/u,
186
+ },
187
+ ]),
188
+ ];
189
+ }
190
+ function collectPythonDeclarations(text) {
191
+ const declarations = [];
192
+ const state = { quote: null };
193
+ const lines = text.split(/\r?\n/u);
194
+ for (let index = 0; index < lines.length; index += 1) {
195
+ const line = lines[index] ?? "";
196
+ const insideTripleString = state.quote !== null;
197
+ if (!insideTripleString) {
198
+ const functionMatch = /^\s*(async\s+def|def)\s+([A-Za-z_]\w*)\s*\(/u.exec(line);
199
+ const classMatch = /^\s*class\s+([A-Za-z_]\w*)\s*(?:\(|:)/u.exec(line);
200
+ const assignmentMatch = /^\s*([A-Za-z_]\w*)\s*(?::[^=]+)?=(?!=)/u.exec(line);
201
+ const declaration = functionMatch?.[2]
202
+ ? { kind: functionMatch[1] === "def" ? "function" : "async-function", name: functionMatch[2] }
203
+ : classMatch?.[1]
204
+ ? { kind: "class", name: classMatch[1] }
205
+ : assignmentMatch?.[1]
206
+ ? { kind: "assignment", name: assignmentMatch[1] }
207
+ : null;
208
+ if (declaration) {
209
+ declarations.push({
210
+ ...declaration,
211
+ line: index + 1,
212
+ });
213
+ }
214
+ }
215
+ updatePythonTripleState(line, state);
216
+ }
217
+ return declarations;
218
+ }
219
+ function collectQmlDeclarations(text) {
220
+ return collectPatternDeclarations(maskQmlCommentsAndStrings(text), [
221
+ {
222
+ kind: "function",
223
+ pattern: /^\s*(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(/u,
224
+ },
225
+ {
226
+ kind: "function",
227
+ pattern: /^\s*(?:property\s+\w+\s+)?([A-Za-z_$][\w$]*)\s*:\s*function\s*\(/u,
228
+ },
229
+ {
230
+ kind: "signal-handler",
231
+ pattern: /^\s*(on[A-Z][\w$]*)\s*:/u,
232
+ },
233
+ {
234
+ kind: "property",
235
+ pattern: /^\s*property\s+\w+\s+([A-Za-z_$][\w$]*)\b/u,
236
+ },
237
+ {
238
+ kind: "signal",
239
+ pattern: /^\s*signal\s+([A-Za-z_$][\w$]*)\s*\(/u,
240
+ },
241
+ {
242
+ kind: "id",
243
+ pattern: /^\s*id\s*:\s*([A-Za-z_$][\w$]*)/u,
244
+ },
245
+ ]);
246
+ }
247
+ function collectShellDeclarations(text) {
248
+ const stripped = text.split(/\r?\n/u).map(stripShellStringsAndComments).join("\n");
249
+ return collectPatternDeclarations(stripped, [
250
+ {
251
+ kind: "function",
252
+ pattern: /^\s*(?:function\s+)?([A-Za-z_][\w-]*)\s*(?:\(\s*\))?\s*\{/u,
253
+ },
254
+ {
255
+ kind: "assignment",
256
+ pattern: /^\s*(?:export\s+|local\s+|readonly\s+|declare\s+(?:-[A-Za-z]+\s+)?)?([A-Za-z_]\w*)=/u,
257
+ },
258
+ ]);
259
+ }
260
+ function collectStyleDeclarations(text, extension) {
261
+ const patterns = [
262
+ {
263
+ kind: "custom-property",
264
+ pattern: /^\s*(--[A-Za-z_][\w-]*)\s*:/u,
265
+ },
266
+ ];
267
+ if (isScssExtension(extension)) {
268
+ patterns.unshift({
269
+ kind: "variable",
270
+ pattern: /^\s*(\$[A-Za-z_][\w-]*)\s*:/u,
271
+ }, {
272
+ kind: "mixin",
273
+ pattern: /^\s*@mixin\s+([A-Za-z_][\w-]*)/u,
274
+ }, {
275
+ kind: "function",
276
+ pattern: /^\s*@function\s+([A-Za-z_][\w-]*)/u,
277
+ }, {
278
+ kind: "placeholder",
279
+ pattern: /^\s*(%[A-Za-z_][\w-]*)/u,
280
+ });
281
+ }
282
+ return collectPatternDeclarations(stripCommentsAndStrings(text), patterns);
283
+ }
284
+ function collectLanguageDeclarations(text, extension, filePath) {
285
+ if (isTypeScriptFamilyExtension(extension))
286
+ return collectNamedDeclarations(parseSource(text, filePath));
287
+ if (isGoExtension(extension))
288
+ return collectGoDeclarations(text);
289
+ if (isRustExtension(extension))
290
+ return collectRustDeclarations(text);
291
+ if (isCppExtension(extension))
292
+ return collectCppDeclarations(text, extension, filePath);
293
+ if (isCsharpExtension(extension))
294
+ return collectCsharpDeclarations(text, extension, filePath);
295
+ if (isPythonExtension(extension))
296
+ return collectPythonDeclarations(text);
297
+ if (isQmlExtension(extension))
298
+ return collectQmlDeclarations(text);
299
+ if (isShellExtension(extension))
300
+ return collectShellDeclarations(text);
301
+ if (isStyleExtension(extension))
302
+ return collectStyleDeclarations(text, extension);
303
+ return [];
304
+ }
305
+ function measureDeclarationName(name) {
306
+ return Array.from(name.replace(/^(?:--|[$%])/u, "")).length;
307
+ }
308
+ export { collectLanguageDeclarations, measureDeclarationName, };
309
+ //# sourceMappingURL=declarations.js.map