@nielspeter/eess-ts 0.5.0 → 0.6.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.
- package/README.md +1 -1
- package/dist/builders/class-rule-builder.d.ts +6 -3
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +6 -3
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/function-rule-builder.d.ts +29 -7
- package/dist/builders/function-rule-builder.d.ts.map +1 -1
- package/dist/builders/function-rule-builder.js +34 -8
- package/dist/builders/function-rule-builder.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +96 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/explain.d.ts.map +1 -1
- package/dist/cli/commands/explain.js +21 -2
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/import-rule-module.d.ts +23 -4
- package/dist/cli/import-rule-module.d.ts.map +1 -1
- package/dist/cli/import-rule-module.js +30 -5
- package/dist/cli/import-rule-module.js.map +1 -1
- package/dist/conditions/body-analysis-function.d.ts.map +1 -1
- package/dist/conditions/body-analysis-function.js +19 -1
- package/dist/conditions/body-analysis-function.js.map +1 -1
- package/dist/conditions/body-analysis.d.ts +5 -2
- package/dist/conditions/body-analysis.d.ts.map +1 -1
- package/dist/conditions/body-analysis.js +9 -6
- package/dist/conditions/body-analysis.js.map +1 -1
- package/dist/conditions/call.d.ts +4 -2
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +11 -8
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/catch-analysis.d.ts +7 -1
- package/dist/conditions/catch-analysis.d.ts.map +1 -1
- package/dist/conditions/catch-analysis.js +26 -27
- package/dist/conditions/catch-analysis.js.map +1 -1
- package/dist/conditions/class.d.ts +5 -3
- package/dist/conditions/class.d.ts.map +1 -1
- package/dist/conditions/class.js +9 -6
- package/dist/conditions/class.js.map +1 -1
- package/dist/conditions/function.d.ts +4 -4
- package/dist/conditions/function.js +4 -4
- package/dist/core/execute-rule.js +1 -1
- package/dist/graphql/resolver-rule-builder.d.ts.map +1 -1
- package/dist/graphql/resolver-rule-builder.js +16 -2
- package/dist/graphql/resolver-rule-builder.js.map +1 -1
- package/dist/helpers/body-traversal.d.ts +63 -9
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +179 -30
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/heritage.d.ts +25 -0
- package/dist/helpers/heritage.d.ts.map +1 -0
- package/dist/helpers/heritage.js +41 -0
- package/dist/helpers/heritage.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/models/arch-function.d.ts +42 -12
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +104 -18
- package/dist/models/arch-function.js.map +1 -1
- package/dist/predicates/class.d.ts +9 -9
- package/dist/predicates/class.d.ts.map +1 -1
- package/dist/predicates/class.js +14 -13
- package/dist/predicates/class.js.map +1 -1
- package/dist/predicates/function.d.ts +16 -4
- package/dist/predicates/function.d.ts.map +1 -1
- package/dist/predicates/function.js +56 -3
- package/dist/predicates/function.js.map +1 -1
- package/dist/predicates/type.d.ts +2 -1
- package/dist/predicates/type.d.ts.map +1 -1
- package/dist/predicates/type.js +6 -2
- package/dist/predicates/type.js.map +1 -1
- package/dist/presets/agent-guardrails.js +5 -5
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/rules/code-quality.d.ts +12 -1
- package/dist/rules/code-quality.d.ts.map +1 -1
- package/dist/rules/code-quality.js +106 -12
- package/dist/rules/code-quality.js.map +1 -1
- package/dist/rules/errors.d.ts +4 -2
- package/dist/rules/errors.d.ts.map +1 -1
- package/dist/rules/errors.js +18 -16
- package/dist/rules/errors.js.map +1 -1
- package/dist/rules/hygiene.d.ts +3 -1
- package/dist/rules/hygiene.d.ts.map +1 -1
- package/dist/rules/hygiene.js +3 -1
- package/dist/rules/hygiene.js.map +1 -1
- package/dist/rules/metrics.d.ts +6 -4
- package/dist/rules/metrics.d.ts.map +1 -1
- package/dist/rules/metrics.js +40 -20
- package/dist/rules/metrics.js.map +1 -1
- package/dist/rules/security.d.ts +13 -5
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +144 -19
- package/dist/rules/security.js.map +1 -1
- package/dist/rules/typescript.d.ts +2 -2
- package/dist/rules/typescript.js +2 -2
- package/dist/smells/duplicate-bodies.js +2 -2
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/sibling-files.js +2 -2
- package/dist/smells/sibling-files.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -380,7 +380,7 @@ smells
|
|
|
380
380
|
| -------------- | ----------------------------------------- | ----------------------------------------------------- |
|
|
381
381
|
| `modules(p)` | Source files | Import/dependency rules |
|
|
382
382
|
| `classes(p)` | Class declarations | Inheritance, decorators, methods, body analysis |
|
|
383
|
-
| `functions(p)` | Functions, arrow functions, class
|
|
383
|
+
| `functions(p)` | Functions, arrow functions, class members | Naming, parameters, body analysis |
|
|
384
384
|
| `types(p)` | Interfaces + type aliases | Property types, type safety |
|
|
385
385
|
| `slices(p)` | Groups of files | Cycles, layer ordering |
|
|
386
386
|
| `calls(p)` | Call expressions | Framework-agnostic route/handler matching |
|
|
@@ -204,12 +204,15 @@ export declare class ClassRuleBuilder extends RuleBuilder<ClassDeclaration> {
|
|
|
204
204
|
notAcceptParameterOfType(matcher: TypeMatcher): this;
|
|
205
205
|
/**
|
|
206
206
|
* Assert that the class body contains at least one match.
|
|
207
|
-
* "Body" =
|
|
207
|
+
* "Body" = the member code only — method, constructor and accessor bodies, parameter defaults,
|
|
208
|
+
* property initializers and static blocks. A decorator, a computed name or a base class is
|
|
209
|
+
* wiring, and cannot satisfy it (bug 0307).
|
|
208
210
|
*/
|
|
209
211
|
contain(matcher: ExpressionMatcher): this;
|
|
210
212
|
/**
|
|
211
|
-
* Assert that the class
|
|
212
|
-
*
|
|
213
|
+
* Assert that no code the class runs contains a match: its member code, and every decorator
|
|
214
|
+
* expression, computed member name and the `extends` expression (bug 0307). Produces one
|
|
215
|
+
* violation per matching node found.
|
|
213
216
|
*/
|
|
214
217
|
notContain(matcher: ExpressionMatcher): this;
|
|
215
218
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"class-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -298,14 +298,17 @@ export class ClassRuleBuilder extends RuleBuilder {
|
|
|
298
298
|
// --- Body analysis condition methods (plan 0011) ---
|
|
299
299
|
/**
|
|
300
300
|
* Assert that the class body contains at least one match.
|
|
301
|
-
* "Body" =
|
|
301
|
+
* "Body" = the member code only — method, constructor and accessor bodies, parameter defaults,
|
|
302
|
+
* property initializers and static blocks. A decorator, a computed name or a base class is
|
|
303
|
+
* wiring, and cannot satisfy it (bug 0307).
|
|
302
304
|
*/
|
|
303
305
|
contain(matcher) {
|
|
304
306
|
return this.addCondition(classContain(matcher));
|
|
305
307
|
}
|
|
306
308
|
/**
|
|
307
|
-
* Assert that the class
|
|
308
|
-
*
|
|
309
|
+
* Assert that no code the class runs contains a match: its member code, and every decorator
|
|
310
|
+
* expression, computed member name and the `extends` expression (bug 0307). Produces one
|
|
311
|
+
* violation per matching node found.
|
|
309
312
|
*/
|
|
310
313
|
notContain(matcher) {
|
|
311
314
|
return this.addCondition(classNotContain(matcher));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-rule-builder.js","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"class-rule-builder.js","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,15 @@ import type { Condition } from '@nielspeter/eess';
|
|
|
3
3
|
import { RuleBuilder } from '../core/rule-builder.js';
|
|
4
4
|
import type { ExpressionMatcher } from '../helpers/matchers.js';
|
|
5
5
|
import type { ArchFunction } from '../models/arch-function.js';
|
|
6
|
-
import { type FunctionCollectionOptions } from '../models/arch-function.js';
|
|
6
|
+
import { type FunctionCollectionOptions, type FunctionKind } from '../models/arch-function.js';
|
|
7
7
|
import type { ArchPattern } from '../helpers/pattern.js';
|
|
8
8
|
import type { TypeMatcher } from '../helpers/type-matchers.js';
|
|
9
9
|
/**
|
|
10
10
|
* Rule builder for function-level architecture rules.
|
|
11
11
|
*
|
|
12
|
-
* Operates on
|
|
13
|
-
*
|
|
12
|
+
* Operates on every named function — declarations, variables holding a function, and class
|
|
13
|
+
* members: methods, constructors, accessors and function-valued properties (bug 0315) — unified
|
|
14
|
+
* through the ArchFunction model.
|
|
14
15
|
*
|
|
15
16
|
* @example
|
|
16
17
|
* ```typescript
|
|
@@ -136,6 +137,27 @@ export declare class FunctionRuleBuilder extends RuleBuilder<ArchFunction> {
|
|
|
136
137
|
* rule pass having asserted nothing.
|
|
137
138
|
*/
|
|
138
139
|
areNotAsync(): this;
|
|
140
|
+
/**
|
|
141
|
+
* Narrows the selection to functions of any of the given kinds: `'function'`, `'method'`,
|
|
142
|
+
* `'constructor'`, `'getter'`, `'setter'` or `'property'` (bug 0315).
|
|
143
|
+
*
|
|
144
|
+
* **Predicate only**, unlike the dual-use methods on this builder: it never
|
|
145
|
+
* becomes an assertion. Written after `.should()` it still filters, and the
|
|
146
|
+
* assertion gate reports it as a misplaced predicate rather than letting the
|
|
147
|
+
* rule pass having asserted nothing.
|
|
148
|
+
*/
|
|
149
|
+
areOfKind(...kinds: FunctionKind[]): this;
|
|
150
|
+
/**
|
|
151
|
+
* Narrows the selection to functions of none of the given kinds. A rule that requires something a
|
|
152
|
+
* constructor or an accessor cannot give — `beAsync()`, `contain(call(...))` — keeps to the
|
|
153
|
+
* functions that can with `.that().areNotOfKind('constructor', 'getter', 'setter')` (bug 0315).
|
|
154
|
+
*
|
|
155
|
+
* **Predicate only**, unlike the dual-use methods on this builder: it never
|
|
156
|
+
* becomes an assertion. Written after `.should()` it still filters, and the
|
|
157
|
+
* assertion gate reports it as a misplaced predicate rather than letting the
|
|
158
|
+
* rule pass having asserted nothing.
|
|
159
|
+
*/
|
|
160
|
+
areNotOfKind(...kinds: FunctionKind[]): this;
|
|
139
161
|
/**
|
|
140
162
|
* Narrows the selection to functions that have exactly `n` parameters.
|
|
141
163
|
*
|
|
@@ -240,8 +262,8 @@ export declare class FunctionRuleBuilder extends RuleBuilder<ArchFunction> {
|
|
|
240
262
|
* Assert that at least one parameter has a type matching the given matcher.
|
|
241
263
|
*
|
|
242
264
|
* **Scope note:** Scans only the function's own parameter list.
|
|
243
|
-
*
|
|
244
|
-
*
|
|
265
|
+
* A set accessor is a function of its own, `Class.set x`, since bug 0315;
|
|
266
|
+
* the class-level counterpart scans the whole class at once.
|
|
245
267
|
*/
|
|
246
268
|
acceptParameterOfType(matcher: TypeMatcher): this;
|
|
247
269
|
/**
|
|
@@ -249,8 +271,8 @@ export declare class FunctionRuleBuilder extends RuleBuilder<ArchFunction> {
|
|
|
249
271
|
* Reports one violation per matching parameter.
|
|
250
272
|
*
|
|
251
273
|
* **Scope note:** Scans only the function's own parameter list.
|
|
252
|
-
*
|
|
253
|
-
*
|
|
274
|
+
* A set accessor is a function of its own, `Class.set x`, since bug 0315;
|
|
275
|
+
* the class-level counterpart scans the whole class at once.
|
|
254
276
|
*/
|
|
255
277
|
notAcceptParameterOfType(matcher: TypeMatcher): this;
|
|
256
278
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/function-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAO/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,
|
|
1
|
+
{"version":3,"file":"function-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/function-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { RuleBuilder } from '../core/rule-builder.js';
|
|
2
2
|
import { functionContain, functionNotContain, functionUseInsteadOf, functionNotHaveEmptyBody, } from '../conditions/body-analysis-function.js';
|
|
3
3
|
import { createElementCache, SOLE_POPULATION } from '../core/element-cache.js';
|
|
4
|
-
import { collectFunctions } from '../models/arch-function.js';
|
|
4
|
+
import { collectFunctions, } from '../models/arch-function.js';
|
|
5
5
|
import { followPattern as followPatternCondition } from '../conditions/pattern.js';
|
|
6
6
|
import { notExist as fnNotExist, beExported as fnBeExported, beAsync as fnBeAsync, haveNameMatching as fnConditionHaveNameMatching, acceptParameterOfType as fnAcceptParameterOfType, notAcceptParameterOfType as fnNotAcceptParameterOfType, haveReturnTypeMatching as fnHaveReturnTypeMatching, resideInFile as fnConditionResideInFile, resideInFolder as fnConditionResideInFolder, } from '../conditions/function.js';
|
|
7
7
|
import { haveNameMatching as identityHaveNameMatching, haveNameStartingWith as identityHaveNameStartingWith, haveNameEndingWith as identityHaveNameEndingWith, resideInFile as identityResideInFile, resideInFolder as identityResideInFolder, areExported as identityAreExported, areNotExported as identityAreNotExported, } from '../predicates/identity.js';
|
|
8
|
-
import { arePublic as fnArePublic, areProtected as fnAreProtected, arePrivate as fnArePrivate, areAsync as fnAreAsync, areNotAsync as fnAreNotAsync, haveParameterCount as fnHaveParameterCount, haveParameterCountGreaterThan as fnHaveParameterCountGreaterThan, haveParameterCountLessThan as fnHaveParameterCountLessThan, haveParameterNamed as fnHaveParameterNamed, haveReturnType as fnHaveReturnType, haveRestParameter as fnHaveRestParameter, haveOptionalParameter as fnHaveOptionalParameter, haveParameterOfType as fnHaveParameterOfType, haveParameterNameMatching as fnHaveParameterNameMatching, } from '../predicates/function.js';
|
|
8
|
+
import { arePublic as fnArePublic, areProtected as fnAreProtected, arePrivate as fnArePrivate, areAsync as fnAreAsync, areNotAsync as fnAreNotAsync, areOfKind as fnAreOfKind, areNotOfKind as fnAreNotOfKind, haveParameterCount as fnHaveParameterCount, haveParameterCountGreaterThan as fnHaveParameterCountGreaterThan, haveParameterCountLessThan as fnHaveParameterCountLessThan, haveParameterNamed as fnHaveParameterNamed, haveReturnType as fnHaveReturnType, haveRestParameter as fnHaveRestParameter, haveOptionalParameter as fnHaveOptionalParameter, haveParameterOfType as fnHaveParameterOfType, haveParameterNameMatching as fnHaveParameterNameMatching, } from '../predicates/function.js';
|
|
9
9
|
/** One collection per (project, collection options), shared by every rule (plan 0075). */
|
|
10
10
|
const cache = createElementCache();
|
|
11
11
|
/**
|
|
@@ -27,8 +27,9 @@ function optionsKey(options) {
|
|
|
27
27
|
/**
|
|
28
28
|
* Rule builder for function-level architecture rules.
|
|
29
29
|
*
|
|
30
|
-
* Operates on
|
|
31
|
-
*
|
|
30
|
+
* Operates on every named function — declarations, variables holding a function, and class
|
|
31
|
+
* members: methods, constructors, accessors and function-valued properties (bug 0315) — unified
|
|
32
|
+
* through the ArchFunction model.
|
|
32
33
|
*
|
|
33
34
|
* @example
|
|
34
35
|
* ```typescript
|
|
@@ -194,6 +195,31 @@ export class FunctionRuleBuilder extends RuleBuilder {
|
|
|
194
195
|
areNotAsync() {
|
|
195
196
|
return this.addPredicate(fnAreNotAsync());
|
|
196
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Narrows the selection to functions of any of the given kinds: `'function'`, `'method'`,
|
|
200
|
+
* `'constructor'`, `'getter'`, `'setter'` or `'property'` (bug 0315).
|
|
201
|
+
*
|
|
202
|
+
* **Predicate only**, unlike the dual-use methods on this builder: it never
|
|
203
|
+
* becomes an assertion. Written after `.should()` it still filters, and the
|
|
204
|
+
* assertion gate reports it as a misplaced predicate rather than letting the
|
|
205
|
+
* rule pass having asserted nothing.
|
|
206
|
+
*/
|
|
207
|
+
areOfKind(...kinds) {
|
|
208
|
+
return this.addPredicate(fnAreOfKind(...kinds));
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Narrows the selection to functions of none of the given kinds. A rule that requires something a
|
|
212
|
+
* constructor or an accessor cannot give — `beAsync()`, `contain(call(...))` — keeps to the
|
|
213
|
+
* functions that can with `.that().areNotOfKind('constructor', 'getter', 'setter')` (bug 0315).
|
|
214
|
+
*
|
|
215
|
+
* **Predicate only**, unlike the dual-use methods on this builder: it never
|
|
216
|
+
* becomes an assertion. Written after `.should()` it still filters, and the
|
|
217
|
+
* assertion gate reports it as a misplaced predicate rather than letting the
|
|
218
|
+
* rule pass having asserted nothing.
|
|
219
|
+
*/
|
|
220
|
+
areNotOfKind(...kinds) {
|
|
221
|
+
return this.addPredicate(fnAreNotOfKind(...kinds));
|
|
222
|
+
}
|
|
197
223
|
/**
|
|
198
224
|
* Narrows the selection to functions that have exactly `n` parameters.
|
|
199
225
|
*
|
|
@@ -328,8 +354,8 @@ export class FunctionRuleBuilder extends RuleBuilder {
|
|
|
328
354
|
* Assert that at least one parameter has a type matching the given matcher.
|
|
329
355
|
*
|
|
330
356
|
* **Scope note:** Scans only the function's own parameter list.
|
|
331
|
-
*
|
|
332
|
-
*
|
|
357
|
+
* A set accessor is a function of its own, `Class.set x`, since bug 0315;
|
|
358
|
+
* the class-level counterpart scans the whole class at once.
|
|
333
359
|
*/
|
|
334
360
|
acceptParameterOfType(matcher) {
|
|
335
361
|
return this.addCondition(fnAcceptParameterOfType(matcher));
|
|
@@ -339,8 +365,8 @@ export class FunctionRuleBuilder extends RuleBuilder {
|
|
|
339
365
|
* Reports one violation per matching parameter.
|
|
340
366
|
*
|
|
341
367
|
* **Scope note:** Scans only the function's own parameter list.
|
|
342
|
-
*
|
|
343
|
-
*
|
|
368
|
+
* A set accessor is a function of its own, `Class.set x`, since bug 0315;
|
|
369
|
+
* the class-level counterpart scans the whole class at once.
|
|
344
370
|
*/
|
|
345
371
|
notAcceptParameterOfType(matcher) {
|
|
346
372
|
return this.addCondition(fnNotAcceptParameterOfType(matcher));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-rule-builder.js","sourceRoot":"","sources":["../../src/builders/function-rule-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,
|
|
1
|
+
{"version":3,"file":"function-rule-builder.js","sourceRoot":"","sources":["../../src/builders/function-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAmFA,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAyJjE"}
|
|
@@ -3,6 +3,81 @@ import { isArchRuleError } from '@nielspeter/eess';
|
|
|
3
3
|
import { loadRuleFiles } from '../load-rules.js';
|
|
4
4
|
import { writeStderr } from '@nielspeter/eess/internal';
|
|
5
5
|
import { orphanExclusions } from '../../core/orphan-exclusions.js';
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import { Project, ScriptKind, Node } from 'ts-morph';
|
|
8
|
+
/**
|
|
9
|
+
* The runners whose presence makes `doctor` genuinely unable to load a file:
|
|
10
|
+
* importing one starts a test runtime that owns the process.
|
|
11
|
+
*/
|
|
12
|
+
const TEST_RUNNERS = [
|
|
13
|
+
'vitest',
|
|
14
|
+
'jest',
|
|
15
|
+
'@jest/globals',
|
|
16
|
+
'node:test',
|
|
17
|
+
'mocha',
|
|
18
|
+
'bun:test',
|
|
19
|
+
'ava',
|
|
20
|
+
'uvu',
|
|
21
|
+
'tap',
|
|
22
|
+
];
|
|
23
|
+
/** Exact match or a subpath of one — `vitest/config` is still vitest. */
|
|
24
|
+
function isTestRunner(specifier) {
|
|
25
|
+
return TEST_RUNNERS.some((name) => specifier === name || specifier.startsWith(`${name}/`));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Does this file import a test runner?
|
|
29
|
+
*
|
|
30
|
+
* Parsed with ts-morph rather than grepped, per ADR-002 — the same lesson
|
|
31
|
+
* `scripts/lib/import-statements.mjs` records, where a regex missed
|
|
32
|
+
* `export … from` entirely and matched the word inside comments and template
|
|
33
|
+
* literals. Here a false positive would restore exactly the misdirection bug
|
|
34
|
+
* 0223 filed.
|
|
35
|
+
*
|
|
36
|
+
* Answers false on any read or parse failure: the sentence it gates is an
|
|
37
|
+
* optional extra, and guessing it onto a file we could not read is the defect.
|
|
38
|
+
*/
|
|
39
|
+
function importsTestRunner(file) {
|
|
40
|
+
try {
|
|
41
|
+
const project = new Project({
|
|
42
|
+
useInMemoryFileSystem: true,
|
|
43
|
+
skipFileDependencyResolution: true,
|
|
44
|
+
compilerOptions: { allowJs: false, noResolve: true },
|
|
45
|
+
});
|
|
46
|
+
const sf = project.createSourceFile('__rule__.ts', fs.readFileSync(file, 'utf8'), {
|
|
47
|
+
scriptKind: ScriptKind.TS,
|
|
48
|
+
});
|
|
49
|
+
// `getImportStringLiterals()` and not `getImportDeclarations()`, which is
|
|
50
|
+
// the shape `core/module-edges.ts` records as defective (ts-archunit bug
|
|
51
|
+
// 0022): it sees static imports only, missing `import('vitest')`,
|
|
52
|
+
// `require('vitest')` and `import x = require('vitest')`. Low stakes here —
|
|
53
|
+
// it gates one sentence — but a second, worse enumerator in the dialect that
|
|
54
|
+
// owns the good one is how the good one stops being the only one.
|
|
55
|
+
// A type-only import is ERASED before the module runs, so it cannot be the
|
|
56
|
+
// reason a file failed to load — an adopter review measured `import type
|
|
57
|
+
// { TestAPI } from 'vitest'` drawing the sentence onto a file whose real
|
|
58
|
+
// fault was a throw. `getImportStringLiterals()` returns the literal, so the
|
|
59
|
+
// type-only-ness is read from its declaration.
|
|
60
|
+
return sf.getImportStringLiterals().some((literal) => {
|
|
61
|
+
if (!isTestRunner(literal.getLiteralValue()))
|
|
62
|
+
return false;
|
|
63
|
+
const declaration = literal.getFirstAncestor((node) => Node.isImportDeclaration(node) || Node.isExportDeclaration(node));
|
|
64
|
+
if (Node.isImportDeclaration(declaration))
|
|
65
|
+
return !declaration.isTypeOnly();
|
|
66
|
+
if (Node.isExportDeclaration(declaration))
|
|
67
|
+
return !declaration.isTypeOnly();
|
|
68
|
+
return true;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
// Deliberately swallowed, and the reason is the point: this only decides
|
|
73
|
+
// whether an OPTIONAL extra sentence is appended to a message that is
|
|
74
|
+
// already reporting a failure. A file we cannot read or parse is a file we
|
|
75
|
+
// cannot claim imports a test runner, and surfacing a second error here
|
|
76
|
+
// would bury the first one the reader actually needs.
|
|
77
|
+
void error;
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
6
81
|
/**
|
|
7
82
|
* Report what each rule cannot enforce, without evaluating their conditions.
|
|
8
83
|
*
|
|
@@ -70,12 +145,28 @@ export async function runDoctor(args) {
|
|
|
70
145
|
// The remedy is CONDITIONAL: this branch fires for any load failure —
|
|
71
146
|
// a syntax error, a missing dependency — and asserting "this imports a
|
|
72
147
|
// test runner" unconditionally would be a false cause (ADR-009 rule 2,
|
|
73
|
-
// caught in review).
|
|
74
|
-
//
|
|
148
|
+
// caught in review).
|
|
149
|
+
//
|
|
150
|
+
// Offering it as "the common case" was not enough, measured. Bug 0223's
|
|
151
|
+
// reporter read the sentence as the diagnosis and concluded in writing
|
|
152
|
+
// that doctor refuses any file importing vitest — which it does not.
|
|
153
|
+
//
|
|
154
|
+
// Gating it on the import was the first repair and it was still wrong,
|
|
155
|
+
// caught in review: it turned a hedge into a confident, usually-false
|
|
156
|
+
// diagnosis. Measured — a rule file that IMPORTS vitest diagnoses fine
|
|
157
|
+
// (exit 0); one that CALLS `describe()` at module scope fails with a
|
|
158
|
+
// vitest-internal error. So the gate keeps it off files it cannot apply
|
|
159
|
+
// to, and the wording states the distinction the record measured rather
|
|
160
|
+
// than asserting a cause.
|
|
75
161
|
writeStderr(`Error: ${file} could not be loaded (${error instanceof Error ? error.message : String(error)}), ` +
|
|
76
|
-
`so none of it could be diagnosed
|
|
77
|
-
|
|
78
|
-
|
|
162
|
+
`so none of it could be diagnosed.` +
|
|
163
|
+
(importsTestRunner(file)
|
|
164
|
+
? ` This file imports a test runner. Importing one is fine — but if it also ` +
|
|
165
|
+
`CALLS one at module scope (a \`describe(…)\` outside a test run), doctor ` +
|
|
166
|
+
`cannot load it; run your test suite instead, where the runtime writes the ` +
|
|
167
|
+
`same diagnostics to stderr.`
|
|
168
|
+
: '') +
|
|
169
|
+
`\n`);
|
|
79
170
|
}
|
|
80
171
|
loadFailures.push({ file, error: error instanceof Error ? error.message : String(error) });
|
|
81
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCjE"}
|
|
@@ -1,10 +1,29 @@
|
|
|
1
|
-
import { isDescribable } from '@nielspeter/eess/internal';
|
|
1
|
+
import { isDescribable, writeStderr } from '@nielspeter/eess/internal';
|
|
2
2
|
import { loadRuleFiles } from '../load-rules.js';
|
|
3
3
|
/**
|
|
4
4
|
* Dump all active rules as structured JSON or markdown.
|
|
5
5
|
*/
|
|
6
6
|
export async function runExplain(args) {
|
|
7
|
-
|
|
7
|
+
// `check` and `doctor` both wrap this load; `explain` did not, so a rule file
|
|
8
|
+
// that fails to load left Node's own `ERR_MODULE_NOT_FOUND` stack on stderr
|
|
9
|
+
// with no mention of which file or why. Bug 0223's reporter hit exactly that,
|
|
10
|
+
// and the repair for the specifier substitution did not cover it: a typo in a
|
|
11
|
+
// sibling path is far more common than the substitution, and it was the one
|
|
12
|
+
// command of three answering with Node internals.
|
|
13
|
+
//
|
|
14
|
+
// It already failed CLOSED — the process exits non-zero either way. What
|
|
15
|
+
// changes is that the reader is told what happened.
|
|
16
|
+
let builders;
|
|
17
|
+
try {
|
|
18
|
+
builders = await loadRuleFiles(args.ruleFiles);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
writeStderr(`Error: ${args.ruleFiles.join(', ')} could not be loaded ` +
|
|
22
|
+
`(${error instanceof Error ? error.message : String(error)}), so there is ` +
|
|
23
|
+
`nothing to explain.\n`);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
8
27
|
const descriptions = [];
|
|
9
28
|
for (const builder of builders) {
|
|
10
29
|
if (isDescribable(builder)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Load a rule file or config module — natively when Node can, via jiti when it cannot.
|
|
3
3
|
*
|
|
4
|
-
* **Native first, and that ordering is the whole design
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* **Native first, and that ordering is the whole design — but not for the reason
|
|
5
|
+
* this comment used to give.** It said a rule file loaded through jiti "gets
|
|
6
|
+
* jiti's own module registry, so the copy of eess-ts it imports is a DIFFERENT
|
|
7
|
+
* instance from the CLI's". Measured and false: under the pinned jiti 2.7.0 a
|
|
8
|
+
* transpiled rule file resolves its bare specifiers to the instances the host
|
|
9
|
+
* already holds. A second physical copy on disk splits them; the loader does not.
|
|
10
|
+
* [Bug 0199](../../../../work/bugs/fixed/0199-a-bare-preset-call-throws-before-baseline-filtering.md)
|
|
11
|
+
* had already disproved the same claim three ways, and this file kept repeating it.
|
|
12
|
+
*
|
|
13
|
+
* The real reason to load natively is that the loader decides which PROGRAMS are
|
|
14
|
+
* valid rule files: jiti transpiles, so it accepts TypeScript that Node's
|
|
15
|
+
* strip-only mode refuses. See ADR-015.
|
|
16
|
+
*
|
|
17
|
+
* The two hazards plan 0165 named are recorded below because the SECOND physical
|
|
18
|
+
* copy case is real and neither is fixed by a loader choice:
|
|
8
19
|
*
|
|
9
20
|
* - `instanceof ArchRuleError` is false for an error that is one, so
|
|
10
21
|
* `check.ts` skipped `ruleFileTruncated()` and a truncated run said nothing
|
|
@@ -24,6 +35,14 @@
|
|
|
24
35
|
* `npm init -y` writes. Everything else rethrows, including an `ArchRuleError`
|
|
25
36
|
* thrown by a self-executing rule file, which must never be retried (a second
|
|
26
37
|
* execution would print its findings twice).
|
|
38
|
+
*
|
|
39
|
+
* **The second condition does not involve jiti at all.** Bug 0223: under
|
|
40
|
+
* `"type": "module"`, a rule file importing `./sibling.js` — the specifier
|
|
41
|
+
* TypeScript REQUIRES — fails with `ERR_MODULE_NOT_FOUND`, because Node performs
|
|
42
|
+
* no `.js` → `.ts` substitution. Widening the jiti fallback to cover it was the
|
|
43
|
+
* obvious fix and the wrong one: it would reopen both hazards above. Instead the
|
|
44
|
+
* process loader is taught the substitution and the NATIVE import is retried, so
|
|
45
|
+
* the rule file still lands in this registry.
|
|
27
46
|
*/
|
|
28
47
|
export declare function importRuleModule(file: string, fresh: boolean): Promise<unknown>;
|
|
29
48
|
//# sourceMappingURL=import-rule-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-rule-module.d.ts","sourceRoot":"","sources":["../../src/cli/import-rule-module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"import-rule-module.d.ts","sourceRoot":"","sources":["../../src/cli/import-rule-module.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBrF"}
|