@trebired/code-discipline 4.10.2 → 5.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.
Files changed (97) hide show
  1. package/CHANGELOG.md +19 -6
  2. package/README.md +35 -33
  3. package/dist/checks/apply-fixes.d.ts +2 -2
  4. package/dist/checks/apply-fixes.d.ts.map +1 -1
  5. package/dist/checks/apply-fixes.js +5 -5
  6. package/dist/checks/apply-fixes.js.map +1 -1
  7. package/dist/checks/format.d.ts +14 -0
  8. package/dist/checks/format.d.ts.map +1 -0
  9. package/dist/checks/{prettier.js → format.js} +9 -9
  10. package/dist/checks/format.js.map +1 -0
  11. package/dist/checks/index.js +4 -4
  12. package/dist/checks/index.js.map +1 -1
  13. package/dist/checks/rule-slugs.d.ts +1 -1
  14. package/dist/checks/rule-slugs.d.ts.map +1 -1
  15. package/dist/checks/rule-slugs.js +4 -4
  16. package/dist/checks/rule-slugs.js.map +1 -1
  17. package/dist/checks/rules/banned/patterns.d.ts.map +1 -1
  18. package/dist/checks/rules/banned/patterns.js +38 -4
  19. package/dist/checks/rules/banned/patterns.js.map +1 -1
  20. package/dist/checks/rules/blank-lines/comments.d.ts.map +1 -1
  21. package/dist/checks/rules/blank-lines/comments.js +0 -1
  22. package/dist/checks/rules/blank-lines/comments.js.map +1 -1
  23. package/dist/checks/rules/comments/c-like.d.ts +4 -0
  24. package/dist/checks/rules/comments/c-like.d.ts.map +1 -0
  25. package/dist/checks/rules/comments/c-like.js +28 -0
  26. package/dist/checks/rules/comments/c-like.js.map +1 -0
  27. package/dist/checks/rules/comments/qml.d.ts +5 -0
  28. package/dist/checks/rules/comments/qml.d.ts.map +1 -0
  29. package/dist/checks/rules/comments/qml.js +125 -0
  30. package/dist/checks/rules/comments/qml.js.map +1 -0
  31. package/dist/checks/rules/comments/ranges.d.ts.map +1 -1
  32. package/dist/checks/rules/comments/ranges.js +9 -32
  33. package/dist/checks/rules/comments/ranges.js.map +1 -1
  34. package/dist/checks/rules/max/function-lines.d.ts.map +1 -1
  35. package/dist/checks/rules/max/function-lines.js +4 -1
  36. package/dist/checks/rules/max/function-lines.js.map +1 -1
  37. package/dist/checks/rules/max/qml.d.ts +10 -0
  38. package/dist/checks/rules/max/qml.d.ts.map +1 -0
  39. package/dist/checks/rules/max/qml.js +77 -0
  40. package/dist/checks/rules/max/qml.js.map +1 -0
  41. package/dist/checks/severity.js +1 -1
  42. package/dist/checks/severity.js.map +1 -1
  43. package/dist/checks/types.d.ts +16 -9
  44. package/dist/checks/types.d.ts.map +1 -1
  45. package/dist/cli/logging.js +1 -1
  46. package/dist/cli/logging.js.map +1 -1
  47. package/dist/config/normalize/check-options.d.ts.map +1 -1
  48. package/dist/config/normalize/check-options.js +18 -15
  49. package/dist/config/normalize/check-options.js.map +1 -1
  50. package/dist/config/normalize/formatter-options.d.ts +9 -5
  51. package/dist/config/normalize/formatter-options.d.ts.map +1 -1
  52. package/dist/config/normalize/formatter-options.js +62 -20
  53. package/dist/config/normalize/formatter-options.js.map +1 -1
  54. package/dist/formatters/{prettier.d.ts → code.d.ts} +6 -6
  55. package/dist/formatters/code.d.ts.map +1 -0
  56. package/dist/formatters/code.js +158 -0
  57. package/dist/formatters/code.js.map +1 -0
  58. package/dist/formatters/files.d.ts +15 -0
  59. package/dist/formatters/files.d.ts.map +1 -0
  60. package/dist/formatters/files.js +138 -0
  61. package/dist/formatters/files.js.map +1 -0
  62. package/dist/imports/scan.d.ts.map +1 -1
  63. package/dist/imports/scan.js +12 -5
  64. package/dist/imports/scan.js.map +1 -1
  65. package/dist/index.d.ts +1 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/native/native.d.ts +2 -0
  68. package/dist/native/native.d.ts.map +1 -1
  69. package/dist/native/native.js.map +1 -1
  70. package/dist/shared/constants.d.ts +2 -1
  71. package/dist/shared/constants.d.ts.map +1 -1
  72. package/dist/shared/constants.js +4 -3
  73. package/dist/shared/constants.js.map +1 -1
  74. package/dist/shared/discipline-types.d.ts +1 -1
  75. package/dist/shared/discipline-types.d.ts.map +1 -1
  76. package/dist/shared/languages.d.ts +3 -1
  77. package/dist/shared/languages.d.ts.map +1 -1
  78. package/dist/shared/languages.js +10 -3
  79. package/dist/shared/languages.js.map +1 -1
  80. package/dist/shared/rule-exclusions.d.ts.map +1 -1
  81. package/dist/shared/rule-exclusions.js +3 -1
  82. package/dist/shared/rule-exclusions.js.map +1 -1
  83. package/dist/shared/utils.d.ts +2 -1
  84. package/dist/shared/utils.d.ts.map +1 -1
  85. package/dist/shared/utils.js +6 -2
  86. package/dist/shared/utils.js.map +1 -1
  87. package/native/darwin-arm64.node +0 -0
  88. package/native/darwin-x64.node +0 -0
  89. package/native/linux-arm64-gnu.node +0 -0
  90. package/native/linux-x64-gnu.node +0 -0
  91. package/package.json +3 -3
  92. package/dist/checks/prettier.d.ts +0 -14
  93. package/dist/checks/prettier.d.ts.map +0 -1
  94. package/dist/checks/prettier.js.map +0 -1
  95. package/dist/formatters/prettier.d.ts.map +0 -1
  96. package/dist/formatters/prettier.js +0 -239
  97. package/dist/formatters/prettier.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trebired/code-discipline",
3
- "version": "4.10.2",
3
+ "version": "5.0.0",
4
4
  "description": "Configurable codebase discipline checks and rule-driven fixes for Bun projects.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -40,19 +40,19 @@
40
40
  "demo": "bun run examples/dummy.ts",
41
41
  "discipline": "bun node_modules/@trebired/code-discipline/dist/cli.js check",
42
42
  "discipline:fix": "bun node_modules/@trebired/code-discipline/dist/cli.js fix",
43
- "prepublishOnly": "bun run typecheck && bun run build && bun run verify:max-line-fixer && bun run verify:language-support && bun run verify:generated-artifacts",
43
+ "prepublishOnly": "bun run typecheck && bun run build && bun run build:native && bun run verify:max-line-fixer && bun run verify:language-support && bun run verify:formatter && bun run verify:generated-artifacts",
44
44
  "prepare:generated": "bun ./scripts/build/generated/tsconfig.mjs",
45
45
  "publish:package": "bun run build:native:matrix && bun publish",
46
46
  "publish:package:host": "bun run build:native && bun publish",
47
47
  "typecheck": "bun run prepare:generated && tsc --noEmit",
48
48
  "verify:generated-artifacts": "bun ./scripts/verify/generated/artifacts.mjs",
49
+ "verify:formatter": "bun ./scripts/verify/formatter.mjs",
49
50
  "verify:language-support": "bun ./scripts/verify/language/support.mjs",
50
51
  "verify:max-line-fixer": "bun ./scripts/verify/max/line/fixer.mjs"
51
52
  },
52
53
  "dependencies": {
53
54
  "@package/logger": "npm:@trebired/logger@^2.5.13",
54
55
  "@package/result": "npm:@trebired/result@^1.1.6",
55
- "prettier": "3.9.6",
56
56
  "typescript": "^6.0.3"
57
57
  },
58
58
  "devDependencies": {
@@ -1,14 +0,0 @@
1
- import type { CodeDisciplineViolation } from "../shared/discipline-types.js";
2
- import type { FixCodeDisciplineRuleResult, NormalizedCheckCodeDisciplineOptions } from "./types.js";
3
- type PrettierFixApplication = {
4
- formattedFiles: number;
5
- rewrittenFiles: number;
6
- ruleResult: FixCodeDisciplineRuleResult;
7
- unchangedFiles: number;
8
- violations: CodeDisciplineViolation[];
9
- };
10
- declare function collectPrettierViolations(options: NormalizedCheckCodeDisciplineOptions): Promise<CodeDisciplineViolation[]>;
11
- declare function applyPrettierFormatterFix(options: NormalizedCheckCodeDisciplineOptions): Promise<PrettierFixApplication | null>;
12
- export { applyPrettierFormatterFix, collectPrettierViolations };
13
- export type { PrettierFixApplication };
14
- //# sourceMappingURL=prettier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prettier.d.ts","sourceRoot":"","sources":["../../src/checks/prettier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,KAAK,EACV,2BAA2B,EAC3B,oCAAoC,EACrC,MAAM,YAAY,CAAC;AAEpB,KAAK,sBAAsB,GAAG;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,2BAA2B,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,uBAAuB,EAAE,CAAC;CACvC,CAAC;AAEF,iBAAe,yBAAyB,CACtC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAGpC;AAED,iBAAe,yBAAyB,CACtC,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAmBxC;AAED,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,CAAC;AAChE,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../src/checks/prettier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAchD,KAAK,UAAU,yBAAyB,CACtC,OAA6C;IAE7C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7F,OAAO,CAAC,MAAM,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,OAA6C;IAE7C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/F,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE1D,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,eAAe;QACtC,cAAc,EAAE,MAAM,CAAC,eAAe;QACtC,cAAc,EAAE,MAAM,CAAC,eAAe;QACtC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE;YACV,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,eAAe;SACxC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prettier.d.ts","sourceRoot":"","sources":["../../src/formatters/prettier.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAI7D,OAAO,KAAK,EAAE,oCAAoC,EAA+B,MAAM,eAAe,CAAC;AAEvG,KAAK,YAAY,GAAG,OAAO,GAAG,KAAK,CAAC;AAOpC,KAAK,uBAAuB,GAAG;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,uBAAuB,EAAE,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAqMF,iBAAe,oBAAoB,CACjC,OAAO,EAAE,oCAAoC,EAC7C,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,uBAAuB,CAAC,CAuFlC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,239 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import path from "node:path";
3
- import * as prettier from "prettier";
4
- import { matchesGlob } from "../shared/globs.js";
5
- import { isInsideDirectory, normalizeRelativePath, toPosixPath, uniqueStrings } from "../shared/utils.js";
6
- import { createRuleProgress, emitRuleChunk, emitRuleCompleted } from "../checks/progress.js";
7
- const DEFAULT_PRETTIER_IGNORE = [
8
- ".git",
9
- ".gitignore",
10
- "node_modules",
11
- ".prettierignore",
12
- ];
13
- function normalizePatterns(patterns) {
14
- return uniqueStrings(patterns.map((pattern) => normalizeRelativePath(pattern.trim())).filter(Boolean));
15
- }
16
- function resolvePrettierIgnorePatterns(options, formatter) {
17
- const codeDisciplinePatterns = formatter.ignore
18
- ? [
19
- ...(options.ignore?.entries ?? []).map((entry) => entry.pattern),
20
- ...(options.ignore?.gitignorePatterns ?? []),
21
- ]
22
- : [];
23
- return normalizePatterns([
24
- ...DEFAULT_PRETTIER_IGNORE,
25
- ...codeDisciplinePatterns,
26
- ]);
27
- }
28
- function matchesIgnorePattern(relativePath, basename, pattern) {
29
- if (!pattern.includes("/")) {
30
- return basename === pattern || matchesGlob(basename, pattern);
31
- }
32
- return relativePath === pattern
33
- || relativePath.startsWith(`${pattern}/`)
34
- || matchesGlob(relativePath, pattern);
35
- }
36
- function shouldIgnore(relativePath, patterns) {
37
- const normalized = normalizeRelativePath(relativePath);
38
- const basename = path.posix.basename(normalized);
39
- return patterns.some((pattern) => matchesIgnorePattern(normalized, basename, pattern));
40
- }
41
- function createPrettierViolation(args) {
42
- return {
43
- rule: "prettier",
44
- fix: args.fix,
45
- filePath: args.filePath,
46
- message: args.message,
47
- details: args.details ?? {},
48
- };
49
- }
50
- async function collectDirectoryFiles(projectRoot, absoluteDir, ignorePatterns, files) {
51
- const entries = await fs.readdir(absoluteDir, { withFileTypes: true });
52
- entries.sort((left, right) => left.name.localeCompare(right.name));
53
- for (const entry of entries) {
54
- const absolutePath = path.join(absoluteDir, entry.name);
55
- const relativePath = toPosixPath(path.relative(projectRoot, absolutePath));
56
- if (shouldIgnore(relativePath, ignorePatterns))
57
- continue;
58
- if (entry.isDirectory()) {
59
- await collectDirectoryFiles(projectRoot, absolutePath, ignorePatterns, files);
60
- continue;
61
- }
62
- if (entry.isFile()) {
63
- files.push({ absolutePath, relativePath });
64
- }
65
- }
66
- }
67
- async function collectPrettierFiles(options, formatter) {
68
- const files = [];
69
- const violations = [];
70
- const ignorePatterns = resolvePrettierIgnorePatterns(options, formatter);
71
- for (const target of formatter.targets) {
72
- const absoluteTarget = path.resolve(options.projectRoot, target);
73
- const relativeTarget = toPosixPath(path.relative(options.projectRoot, absoluteTarget));
74
- if (!isInsideDirectory(absoluteTarget, options.projectRoot) || shouldIgnore(relativeTarget, ignorePatterns)) {
75
- continue;
76
- }
77
- try {
78
- const stat = await fs.stat(absoluteTarget);
79
- if (stat.isDirectory()) {
80
- await collectDirectoryFiles(options.projectRoot, absoluteTarget, ignorePatterns, files);
81
- continue;
82
- }
83
- if (stat.isFile()) {
84
- files.push({
85
- absolutePath: absoluteTarget,
86
- relativePath: normalizeRelativePath(relativeTarget),
87
- });
88
- }
89
- }
90
- catch (caught) {
91
- violations.push(createPrettierViolation({
92
- filePath: normalizeRelativePath(relativeTarget) || target,
93
- fix: false,
94
- message: `target could not be read: ${caught instanceof Error ? caught.message : String(caught)}`,
95
- }));
96
- }
97
- }
98
- return {
99
- files: uniqueFiles(files),
100
- violations,
101
- };
102
- }
103
- function uniqueFiles(files) {
104
- const seen = new Set();
105
- const result = [];
106
- for (const file of files) {
107
- if (seen.has(file.absolutePath))
108
- continue;
109
- seen.add(file.absolutePath);
110
- result.push(file);
111
- }
112
- return result.sort((left, right) => left.relativePath.localeCompare(right.relativePath));
113
- }
114
- async function isSupportedByPrettier(file, formatter) {
115
- const info = await prettier.getFileInfo(file.absolutePath, {
116
- plugins: formatter.options.plugins,
117
- resolveConfig: false,
118
- withNodeModules: false,
119
- });
120
- return !info.ignored && Boolean(info.inferredParser || formatter.options.parser);
121
- }
122
- async function runPrettierOnFile(file, formatter, mode) {
123
- try {
124
- const source = await fs.readFile(file.absolutePath, "utf8");
125
- const formatted = await prettier.format(source, {
126
- ...formatter.options,
127
- filepath: file.absolutePath,
128
- });
129
- const changed = formatted !== source;
130
- if (mode === "fix" && changed) {
131
- await fs.writeFile(file.absolutePath, formatted, "utf8");
132
- }
133
- return {
134
- changed,
135
- violation: mode === "check" && changed
136
- ? createPrettierViolation({
137
- filePath: file.relativePath,
138
- fix: true,
139
- message: "needs formatting",
140
- details: { formatter: "prettier" },
141
- })
142
- : undefined,
143
- };
144
- }
145
- catch (caught) {
146
- return {
147
- changed: false,
148
- violation: createPrettierViolation({
149
- filePath: file.relativePath,
150
- fix: mode === "fix",
151
- message: `failed to ${mode === "fix" ? "format" : "check"}: ${caught instanceof Error ? caught.message : String(caught)}`,
152
- details: { formatter: "prettier" },
153
- }),
154
- };
155
- }
156
- }
157
- async function runPrettierFormatter(options, mode) {
158
- const formatter = options.formatters.prettier;
159
- if (!formatter) {
160
- return {
161
- ok: true,
162
- violationCount: 0,
163
- violations: [],
164
- checked_files: 0,
165
- formatted_files: 0,
166
- unchanged_files: 0,
167
- ignored_files: 0,
168
- errored_files: 0,
169
- };
170
- }
171
- const collected = await collectPrettierFiles(options, formatter);
172
- const violations = [...collected.violations];
173
- let checkedFiles = 0;
174
- let formattedFiles = 0;
175
- let unchangedFiles = 0;
176
- let ignoredFiles = 0;
177
- let erroredFiles = violations.length;
178
- const progress = createRuleProgress({
179
- observer: options.progressObserver,
180
- rule: "prettier",
181
- stage: mode,
182
- totalItems: collected.files.length,
183
- });
184
- for (let index = 0; index < collected.files.length; index += 1) {
185
- const file = collected.files[index];
186
- let supported = false;
187
- try {
188
- supported = await isSupportedByPrettier(file, formatter);
189
- }
190
- catch (caught) {
191
- violations.push(createPrettierViolation({
192
- filePath: file.relativePath,
193
- fix: false,
194
- message: `failed to inspect: ${caught instanceof Error ? caught.message : String(caught)}`,
195
- details: { formatter: "prettier" },
196
- }));
197
- erroredFiles += 1;
198
- emitRuleChunk(progress, index + 1, violations.length);
199
- continue;
200
- }
201
- if (!supported) {
202
- ignoredFiles += 1;
203
- emitRuleChunk(progress, index + 1, violations.length);
204
- continue;
205
- }
206
- checkedFiles += 1;
207
- const result = await runPrettierOnFile(file, formatter, mode);
208
- if (result.violation) {
209
- violations.push(result.violation);
210
- if (result.violation.message.startsWith("failed to ")) {
211
- erroredFiles += 1;
212
- }
213
- }
214
- if (result.changed) {
215
- formattedFiles += mode === "fix" ? 1 : 0;
216
- }
217
- else if (!result.violation || !result.violation.message.startsWith("failed to ")) {
218
- unchangedFiles += 1;
219
- }
220
- emitRuleChunk(progress, index + 1, violations.length, mode === "fix" ? {
221
- rewrittenFiles: formattedFiles,
222
- } : {});
223
- }
224
- emitRuleCompleted(progress, violations.length, mode === "fix" ? {
225
- rewrittenFiles: formattedFiles,
226
- } : {});
227
- return {
228
- ok: violations.length === 0,
229
- violationCount: violations.length,
230
- violations,
231
- checked_files: checkedFiles,
232
- formatted_files: formattedFiles,
233
- unchanged_files: unchangedFiles,
234
- ignored_files: ignoredFiles,
235
- errored_files: erroredFiles,
236
- };
237
- }
238
- export { runPrettierFormatter };
239
- //# sourceMappingURL=prettier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../src/formatters/prettier.ts"],"names":[],"mappings":"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"}