@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
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { ArchConfigError } from '@nielspeter/eess';
|
|
2
|
+
import { functionKindOf } from '../models/arch-function.js';
|
|
1
3
|
// --- Visibility predicates (plan 0032) ---
|
|
2
4
|
/**
|
|
3
5
|
* Matches functions/methods with public visibility.
|
|
4
6
|
*
|
|
5
|
-
* - Class
|
|
7
|
+
* - Class members: matches explicitly `public` or no access modifier (implicitly public).
|
|
6
8
|
* - Standalone functions / arrow functions: always match (module-level, no visibility concept).
|
|
7
9
|
*/
|
|
8
10
|
export function arePublic() {
|
|
@@ -12,7 +14,7 @@ export function arePublic() {
|
|
|
12
14
|
};
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
|
-
* Matches class
|
|
17
|
+
* Matches class members with `protected` visibility.
|
|
16
18
|
*
|
|
17
19
|
* Standalone functions and arrow functions never match (they have no visibility modifier).
|
|
18
20
|
*/
|
|
@@ -23,7 +25,7 @@ export function areProtected() {
|
|
|
23
25
|
};
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
|
-
* Matches class
|
|
28
|
+
* Matches class members with `private` visibility.
|
|
27
29
|
*
|
|
28
30
|
* Standalone functions and arrow functions never match (they have no visibility modifier).
|
|
29
31
|
*/
|
|
@@ -33,6 +35,57 @@ export function arePrivate() {
|
|
|
33
35
|
test: (fn) => fn.getScope() === 'private',
|
|
34
36
|
};
|
|
35
37
|
}
|
|
38
|
+
// --- Kind predicates (bug 0315) ---
|
|
39
|
+
/** Every kind, checked by the compiler against `FunctionKind` so the two cannot drift apart. */
|
|
40
|
+
const KINDS = {
|
|
41
|
+
function: true,
|
|
42
|
+
method: true,
|
|
43
|
+
constructor: true,
|
|
44
|
+
getter: true,
|
|
45
|
+
setter: true,
|
|
46
|
+
property: true,
|
|
47
|
+
};
|
|
48
|
+
const KNOWN_KINDS = new Set(Object.keys(KINDS));
|
|
49
|
+
/**
|
|
50
|
+
* The kinds a kind predicate names. Naming none is refused, and so is a string that is not a kind: the
|
|
51
|
+
* `FunctionKind` type stops a typo only where the rule file is type-checked, and without this a rule
|
|
52
|
+
* file loaded unchecked would narrow the rule to the kinds it spelled right, and say nothing.
|
|
53
|
+
*/
|
|
54
|
+
function namedKinds(predicate, kinds) {
|
|
55
|
+
if (kinds.length === 0) {
|
|
56
|
+
throw new ArchConfigError(predicate, 'name at least one kind, e.g. constructor, getter or setter');
|
|
57
|
+
}
|
|
58
|
+
for (const kind of kinds) {
|
|
59
|
+
if (!KNOWN_KINDS.has(kind)) {
|
|
60
|
+
throw new ArchConfigError(predicate, `'${kind}' is not a function kind; the kinds are ${[...KNOWN_KINDS].join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return new Set(kinds);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Matches functions of any of the given kinds: `'function'`, `'method'`, `'constructor'`,
|
|
67
|
+
* `'getter'`, `'setter'` or `'property'` (see {@link FunctionKind}).
|
|
68
|
+
*/
|
|
69
|
+
export function areOfKind(...kinds) {
|
|
70
|
+
const named = namedKinds('areOfKind', kinds);
|
|
71
|
+
return {
|
|
72
|
+
description: `are of kind ${kinds.join(', ')}`,
|
|
73
|
+
test: (fn) => named.has(functionKindOf(fn)),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Matches functions of none of the given kinds. Since bug 0315 `functions()` collects a class's
|
|
78
|
+
* constructor and accessors beside its methods; a rule that requires something they cannot give —
|
|
79
|
+
* `beAsync()`, `contain(call(...))` — keeps to the functions that can with
|
|
80
|
+
* `areNotOfKind('constructor', 'getter', 'setter')`.
|
|
81
|
+
*/
|
|
82
|
+
export function areNotOfKind(...kinds) {
|
|
83
|
+
const named = namedKinds('areNotOfKind', kinds);
|
|
84
|
+
return {
|
|
85
|
+
description: `are not of kind ${kinds.join(', ')}`,
|
|
86
|
+
test: (fn) => !named.has(functionKindOf(fn)),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
36
89
|
// --- Async predicates ---
|
|
37
90
|
/**
|
|
38
91
|
* Matches async functions (declared with the `async` keyword).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/predicates/function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/predicates/function.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAwC,MAAM,4BAA4B,CAAA;AAGjG,4CAA4C;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ;KACzC,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,WAAW;KAC5C,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,SAAS;KAC1C,CAAA;AACH,CAAC;AAED,qCAAqC;AAErC,gGAAgG;AAChG,MAAM,KAAK,GAAG;IACZ,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;CACsB,CAAA;AAEtC,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AAEpE;;;;GAIG;AACH,SAAS,UAAU,CAAC,SAAiB,EAAE,KAA8B;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CACvB,SAAS,EACT,4DAA4D,CAC7D,CAAA;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,eAAe,CACvB,SAAS,EACT,IAAI,IAAI,2CAA2C,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,KAAqB;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAC5C,OAAO;QACL,WAAW,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC9C,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;KAC5C,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,GAAG,KAAqB;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IAC/C,OAAO;QACL,WAAW,EAAE,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClD,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;KAC7C,CAAA;AACH,CAAC;AAED,2BAA2B;AAE3B;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO;QACL,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE;KAC3B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE;KAC5B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,OAAO;QACL,WAAW,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QAC/D,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC;KAC9C,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,CAAS;IACrD,OAAO;QACL,WAAW,EAAE,kBAAkB,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QACzE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC;KAC5C,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,CAAS;IAClD,OAAO;QACL,WAAW,EAAE,mBAAmB,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QAC1E,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC;KAC5C,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO;QACL,WAAW,EAAE,2BAA2B,IAAI,GAAG;QAC/C,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC;KACnE,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACzE,OAAO;QACL,WAAW,EAAE,6BAA6B,MAAM,CAAC,KAAK,CAAC,EAAE;QACzD,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC;KACvD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,WAAW,EAAE,uBAAuB;QACpC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;KAClE,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,WAAW,EAAE,8CAA8C;QAC3D,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;KACnF,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,OAAoB;IACrE,OAAO;QACL,WAAW,EAAE,2BAA2B,MAAM,CAAC,KAAK,CAAC,qBAAqB;QAC1E,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;YACX,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,EAAE,CAAA;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YAC3B,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAA;YACxB,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACjC,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,OAAO;QACL,WAAW,EAAE,kCAAkC,MAAM,CAAC,OAAO,CAAC,EAAE;QAChE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KACxE,CAAA;AACH,CAAC"}
|
|
@@ -38,7 +38,8 @@ export declare function haveProperty(name: string): Predicate<TypeDeclaration>;
|
|
|
38
38
|
*/
|
|
39
39
|
export declare function havePropertyOfType(name: string, matcher: TypeMatcher): Predicate<TypeDeclaration>;
|
|
40
40
|
/**
|
|
41
|
-
* Matches interfaces that extend the given type name
|
|
41
|
+
* Matches interfaces that directly extend the given type name — as written, or through an
|
|
42
|
+
* aliased import or a namespace member.
|
|
42
43
|
* For type aliases, checks if the type text references the name.
|
|
43
44
|
*
|
|
44
45
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAG9D;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,oBAAoB,CAAA;AAEzE;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,eAAe,CAAC,CAK1D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,SAAS,CAAC,eAAe,CAAC,CAK3D;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAQrE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC,CASjG;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAkBnE"}
|
package/dist/predicates/type.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Node } from 'ts-morph';
|
|
2
|
+
import { clauseResolvesTo } from '../helpers/heritage.js';
|
|
2
3
|
/**
|
|
3
4
|
* Matches only InterfaceDeclaration elements.
|
|
4
5
|
*
|
|
@@ -59,7 +60,8 @@ export function havePropertyOfType(name, matcher) {
|
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
|
-
* Matches interfaces that extend the given type name
|
|
63
|
+
* Matches interfaces that directly extend the given type name — as written, or through an
|
|
64
|
+
* aliased import or a namespace member.
|
|
63
65
|
* For type aliases, checks if the type text references the name.
|
|
64
66
|
*
|
|
65
67
|
* @example
|
|
@@ -72,7 +74,9 @@ export function extendType(name) {
|
|
|
72
74
|
if (Node.isInterfaceDeclaration(element)) {
|
|
73
75
|
const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
74
76
|
const nameRegex = new RegExp(`^${escaped}(\\b|$|<)`);
|
|
75
|
-
return element
|
|
77
|
+
return element
|
|
78
|
+
.getExtends()
|
|
79
|
+
.some((ext) => nameRegex.test(ext.getText()) || clauseResolvesTo(ext, name));
|
|
76
80
|
}
|
|
77
81
|
// For type aliases, check if the type directly references the named type
|
|
78
82
|
// Use word boundary matching to avoid false positives (e.g., "BaseConfig" inside "{ bar: BaseConfig }")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwD,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/predicates/type.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,13 +79,13 @@ const EMITTERS = /(^|\.)(finishPreset|reportViolations|throwIfViolations)$/;
|
|
|
79
79
|
* agent an actionable fix.
|
|
80
80
|
*
|
|
81
81
|
* Uses function-variant rules so standalone functions, arrow functions, and
|
|
82
|
-
* class
|
|
82
|
+
* class members are all covered.
|
|
83
83
|
*/
|
|
84
84
|
// Presets collect object-literal functions unconditionally. `functions()`
|
|
85
|
-
// keeps
|
|
86
|
-
//
|
|
87
|
-
// promises "standalone functions, arrow functions, and class
|
|
88
|
-
// covered". A handler map — the shape agents generate most — was none of the
|
|
85
|
+
// keeps these anonymous values opt-in because every inline callback would flood
|
|
86
|
+
// a rule the USER wrote; a preset's subject set is the preset's own, and this one
|
|
87
|
+
// already promises "standalone functions, arrow functions, and class members are
|
|
88
|
+
// all covered". A handler map — the shape agents generate most — was none of the
|
|
89
89
|
// three, so `{ POST: () => {} }` slipped every guardrail (bug 0013).
|
|
90
90
|
const COLLECT_ALL = { includeObjectLiteralFunctions: true };
|
|
91
91
|
export function agentGuardrails(p, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-guardrails.js","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAI3C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,OAAO,GACR,MAAM,aAAa,CAAA;AAsDpB;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;AAE5E;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;CACxB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,QAAQ,GAAG,0DAA0D,CAAA;AAE3E;;;;;;;;;;;;;GAaG;AACH,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"agent-guardrails.js","sourceRoot":"","sources":["../../src/presets/agent-guardrails.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,11 +33,22 @@ export declare function requireJsDocOnPublicMethods(): Condition<ClassDeclaratio
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function noPublicFields(): Condition<ClassDeclaration>;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* No member code of a class may contain magic numbers: method, constructor and accessor bodies,
|
|
37
|
+
* parameter defaults, property initializers and static blocks (bug 0306). Decorators, computed member
|
|
38
|
+
* names and `extends` are not read: a number in `@Max(150)` or `@Column({ precision: 12 })` is named by the
|
|
39
|
+
* decorator that takes it, and reading them would report every validation and ORM field.
|
|
37
40
|
*
|
|
38
41
|
* Numbers 0, 1, -1, 2, 10, 100 are allowed by default.
|
|
39
42
|
* Configure with options.allowed to customize.
|
|
40
43
|
*
|
|
44
|
+
* A number that is the whole value of one of the class's own properties or its members' parameter
|
|
45
|
+
* defaults, a default inside a destructured parameter included, is named by it, and is not reported
|
|
46
|
+
* — read through a sign, parentheses, `as`, `<T>`,
|
|
47
|
+
* `satisfies` and `!`, so `static readonly LIMIT = 5000 as const` is named too.
|
|
48
|
+
*
|
|
49
|
+
* A finding names the member the number sits in — `Class.method`, `Class.constructor`,
|
|
50
|
+
* `Class.static` for a static block — so a number in a method keeps the message it always had.
|
|
51
|
+
*
|
|
41
52
|
* @example
|
|
42
53
|
* import { noMagicNumbers } from '@nielspeter/eess-ts/rules/code-quality'
|
|
43
54
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-quality.d.ts","sourceRoot":"","sources":["../../src/rules/code-quality.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"code-quality.d.ts","sourceRoot":"","sources":["../../src/rules/code-quality.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAMnE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAuBzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAoC5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAiC5F"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
2
|
import { createViolation } from '../core/violation.js';
|
|
3
|
+
import { searchClassBody } from '../helpers/body-traversal.js';
|
|
3
4
|
/**
|
|
4
5
|
* All public methods must have JSDoc comments.
|
|
5
6
|
*
|
|
@@ -82,11 +83,22 @@ export function noPublicFields() {
|
|
|
82
83
|
};
|
|
83
84
|
}
|
|
84
85
|
/**
|
|
85
|
-
*
|
|
86
|
+
* No member code of a class may contain magic numbers: method, constructor and accessor bodies,
|
|
87
|
+
* parameter defaults, property initializers and static blocks (bug 0306). Decorators, computed member
|
|
88
|
+
* names and `extends` are not read: a number in `@Max(150)` or `@Column({ precision: 12 })` is named by the
|
|
89
|
+
* decorator that takes it, and reading them would report every validation and ORM field.
|
|
86
90
|
*
|
|
87
91
|
* Numbers 0, 1, -1, 2, 10, 100 are allowed by default.
|
|
88
92
|
* Configure with options.allowed to customize.
|
|
89
93
|
*
|
|
94
|
+
* A number that is the whole value of one of the class's own properties or its members' parameter
|
|
95
|
+
* defaults, a default inside a destructured parameter included, is named by it, and is not reported
|
|
96
|
+
* — read through a sign, parentheses, `as`, `<T>`,
|
|
97
|
+
* `satisfies` and `!`, so `static readonly LIMIT = 5000 as const` is named too.
|
|
98
|
+
*
|
|
99
|
+
* A finding names the member the number sits in — `Class.method`, `Class.constructor`,
|
|
100
|
+
* `Class.static` for a static block — so a number in a method keeps the message it always had.
|
|
101
|
+
*
|
|
90
102
|
* @example
|
|
91
103
|
* import { noMagicNumbers } from '@nielspeter/eess-ts/rules/code-quality'
|
|
92
104
|
*
|
|
@@ -100,26 +112,108 @@ export function noPublicFields() {
|
|
|
100
112
|
*/
|
|
101
113
|
export function noMagicNumbers(options) {
|
|
102
114
|
const allowedSet = new Set(options?.allowed ?? [0, 1, -1, 2, 10, 100]);
|
|
115
|
+
const magicNumberIn = (cls) => ({
|
|
116
|
+
description: 'magic number',
|
|
117
|
+
syntaxKinds: [SyntaxKind.NumericLiteral],
|
|
118
|
+
matches: (node) => Node.isNumericLiteral(node) &&
|
|
119
|
+
!allowedSet.has(node.getLiteralValue()) &&
|
|
120
|
+
!isNamedValue(node, cls),
|
|
121
|
+
});
|
|
103
122
|
return {
|
|
104
|
-
description: 'have no magic numbers in
|
|
123
|
+
description: 'have no magic numbers in member code',
|
|
105
124
|
evaluate(elements, context) {
|
|
106
125
|
const violations = [];
|
|
107
126
|
for (const cls of elements) {
|
|
108
|
-
for (const
|
|
109
|
-
|
|
110
|
-
if (!
|
|
127
|
+
for (const literal of searchClassBody(cls, magicNumberIn(cls), 'member-code')
|
|
128
|
+
.matchingNodes) {
|
|
129
|
+
if (!Node.isNumericLiteral(literal))
|
|
111
130
|
continue;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (!allowedSet.has(value)) {
|
|
116
|
-
violations.push(createViolation(lit, `${cls.getName() ?? '<anonymous>'}.${method.getName()} contains magic number ${String(value)} — extract to a named constant`, context));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
131
|
+
// The value, not the text: `5_000` is 5000, in the message and against the allowed list.
|
|
132
|
+
const value = literal.getLiteralValue();
|
|
133
|
+
violations.push(createViolation(literal, `${memberLabel(cls, literal)} contains magic number ${String(value)} — extract to a named constant`, context));
|
|
119
134
|
}
|
|
120
135
|
}
|
|
121
136
|
return violations;
|
|
122
137
|
},
|
|
123
138
|
};
|
|
124
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* A number that is the whole value of one of the class's own declarations — a property's initializer,
|
|
142
|
+
* a member's parameter default, or a binding element's default in a member's destructured parameter
|
|
143
|
+
* (bug 0309) — is named by that declaration: `private timeout = 5000`, `retry(attempts = 3)`,
|
|
144
|
+
* `retry({ attempts = 3 } = {})`, `static readonly LIMIT = -5000 as const`. It is not reported. A
|
|
145
|
+
* number inside a larger initializer or default still is, and so is one in a function or class nested
|
|
146
|
+
* inside a member: the method walk before bug 0306 reported those, and they are not the class's names.
|
|
147
|
+
*/
|
|
148
|
+
function isNamedValue(literal, cls) {
|
|
149
|
+
let value = literal;
|
|
150
|
+
let parent = value.getParent();
|
|
151
|
+
while (parent !== undefined && leavesValueUnchanged(parent)) {
|
|
152
|
+
value = parent;
|
|
153
|
+
parent = value.getParent();
|
|
154
|
+
}
|
|
155
|
+
if (Node.isPropertyDeclaration(parent)) {
|
|
156
|
+
return parent.getInitializer() === value && parent.getParent() === cls;
|
|
157
|
+
}
|
|
158
|
+
if (Node.isParameterDeclaration(parent)) {
|
|
159
|
+
return parent.getInitializer() === value && isOwnParameter(parent, cls);
|
|
160
|
+
}
|
|
161
|
+
if (Node.isBindingElement(parent)) {
|
|
162
|
+
return parent.getInitializer() === value && isOwnParameter(patternOwner(parent), cls);
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
/** Whether a node is a parameter of one of the class's own members, not of a function nested in one. */
|
|
167
|
+
function isOwnParameter(node, cls) {
|
|
168
|
+
return Node.isParameterDeclaration(node) && node.getParent()?.getParent() === cls;
|
|
169
|
+
}
|
|
170
|
+
/** What a binding element destructures, through any nested patterns: a parameter, or a variable. */
|
|
171
|
+
function patternOwner(element) {
|
|
172
|
+
let node = element.getParent();
|
|
173
|
+
while (Node.isObjectBindingPattern(node) ||
|
|
174
|
+
Node.isArrayBindingPattern(node) ||
|
|
175
|
+
Node.isBindingElement(node)) {
|
|
176
|
+
node = node.getParent();
|
|
177
|
+
}
|
|
178
|
+
return node;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* A wrapper that leaves the value inside it unchanged: a `-` or `+` sign, parentheses, `as`, `<T>`,
|
|
182
|
+
* `satisfies` or `!`. The metrics rules read a function-valued property through the same wrappers.
|
|
183
|
+
*/
|
|
184
|
+
function leavesValueUnchanged(node) {
|
|
185
|
+
if (Node.isPrefixUnaryExpression(node)) {
|
|
186
|
+
const operator = node.getOperatorToken();
|
|
187
|
+
return operator === SyntaxKind.MinusToken || operator === SyntaxKind.PlusToken;
|
|
188
|
+
}
|
|
189
|
+
return (Node.isParenthesizedExpression(node) ||
|
|
190
|
+
Node.isAsExpression(node) ||
|
|
191
|
+
Node.isTypeAssertion(node) ||
|
|
192
|
+
Node.isSatisfiesExpression(node) ||
|
|
193
|
+
Node.isNonNullExpression(node));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* `Class.member` for the member of `cls` a node sits in: `Class.constructor` in a constructor,
|
|
197
|
+
* `Class.static` in a static block, and the class alone for a node outside every member.
|
|
198
|
+
*/
|
|
199
|
+
function memberLabel(cls, node) {
|
|
200
|
+
const className = cls.getName() ?? '<anonymous>';
|
|
201
|
+
let member = node;
|
|
202
|
+
let parent = member.getParent();
|
|
203
|
+
while (parent !== undefined && parent !== cls) {
|
|
204
|
+
member = parent;
|
|
205
|
+
parent = member.getParent();
|
|
206
|
+
}
|
|
207
|
+
if (Node.isConstructorDeclaration(member))
|
|
208
|
+
return `${className}.constructor`;
|
|
209
|
+
if (Node.isClassStaticBlockDeclaration(member))
|
|
210
|
+
return `${className}.static`;
|
|
211
|
+
if (Node.isMethodDeclaration(member) ||
|
|
212
|
+
Node.isPropertyDeclaration(member) ||
|
|
213
|
+
Node.isGetAccessorDeclaration(member) ||
|
|
214
|
+
Node.isSetAccessorDeclaration(member)) {
|
|
215
|
+
return `${className}.${member.getName()}`;
|
|
216
|
+
}
|
|
217
|
+
return className;
|
|
218
|
+
}
|
|
125
219
|
//# sourceMappingURL=code-quality.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-quality.js","sourceRoot":"","sources":["../../src/rules/code-quality.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAI3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"code-quality.js","sourceRoot":"","sources":["../../src/rules/code-quality.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAI3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,CAAC,QAA4B,EAAE,OAAyB;YAC9D,MAAM,UAAU,GAAoB,EAAE,CAAA;YACtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;oBAC/B,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAA;oBAClE,IAAI,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAChD,UAAU,CAAC,IAAI,CACb,eAAe,CACb,MAAM,EACN,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,EAAE,6BAA6B,EAClF,OAAO,CACR,CACF,CAAA;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,WAAW,EAAE,+BAA+B;QAC5C,QAAQ,CAAC,QAA4B,EAAE,OAAyB;YAC9D,MAAM,UAAU,GAAoB,EAAE,CAAA;YACtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;oBACvC,wEAAwE;oBACxE,yEAAyE;oBACzE,wEAAwE;oBACxE,wEAAwE;oBACxE,wEAAwE;oBACxE,uDAAuD;oBACvD,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBAAE,SAAQ;oBAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;oBAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ;wBAAE,SAAQ;oBAC/D,oEAAoE;oBACpE,6DAA6D;oBAC7D,sEAAsE;oBACtE,mEAAmE;oBACnE,qEAAqE;oBACrE,4DAA4D;oBAC5D,IAAI,IAAI,CAAC,UAAU,EAAE;wBAAE,SAAQ;oBAE/B,UAAU,CAAC,IAAI,CACb,eAAe,CACb,IAAI,EACJ,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,kDAAkD,EACrG,OAAO,CACR,CACF,CAAA;gBACH,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgC;IAC7D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;IACtE,MAAM,aAAa,GAAG,CAAC,GAAqB,EAAqB,EAAE,CAAC,CAAC;QACnE,WAAW,EAAE,cAAc;QAC3B,WAAW,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QACxC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC3B,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;KAC3B,CAAC,CAAA;IAEF,OAAO;QACL,WAAW,EAAE,sCAAsC;QACnD,QAAQ,CAAC,QAA4B,EAAE,OAAyB;YAC9D,MAAM,UAAU,GAAoB,EAAE,CAAA;YACtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;qBAC1E,aAAa,EAAE,CAAC;oBACjB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;wBAAE,SAAQ;oBAC7C,yFAAyF;oBACzF,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAA;oBACvC,UAAU,CAAC,IAAI,CACb,eAAe,CACb,OAAO,EACP,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,gCAAgC,EACnG,OAAO,CACR,CACF,CAAA;gBACH,CAAC;YACH,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,OAAa,EAAE,GAAqB;IACxD,IAAI,KAAK,GAAS,OAAO,CAAA;IACzB,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;IAC9B,OAAO,MAAM,KAAK,SAAS,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,KAAK,GAAG,MAAM,CAAA;QACd,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;IAC5B,CAAC;IACD,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,cAAc,EAAE,KAAK,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG,CAAA;IACxE,CAAC;IACD,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,cAAc,EAAE,KAAK,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,cAAc,EAAE,KAAK,KAAK,IAAI,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;IACvF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,wGAAwG;AACxG,SAAS,cAAc,CAAC,IAAsB,EAAE,GAAqB;IACnE,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,GAAG,CAAA;AACnF,CAAC;AAED,oGAAoG;AACpG,SAAS,YAAY,CAAC,OAAa;IACjC,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAA;IAC9B,OACE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAC3B,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,IAAU;IACtC,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACxC,OAAO,QAAQ,KAAK,UAAU,CAAC,UAAU,IAAI,QAAQ,KAAK,UAAU,CAAC,SAAS,CAAA;IAChF,CAAC;IACD,OAAO,CACL,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAC/B,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAqB,EAAE,IAAU;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,aAAa,CAAA;IAChD,IAAI,MAAM,GAAS,IAAI,CAAA;IACvB,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;IAC/B,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAA;QACf,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,SAAS,cAAc,CAAA;IAC5E,IAAI,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,SAAS,SAAS,CAAA;IAC5E,IACE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EACrC,CAAC;QACD,OAAO,GAAG,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAA;IAC3C,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
package/dist/rules/errors.d.ts
CHANGED
|
@@ -18,8 +18,10 @@ export declare function noTypeErrors(): Condition<ClassDeclaration>;
|
|
|
18
18
|
export declare function functionNoGenericErrors(): Condition<ArchFunction>;
|
|
19
19
|
export declare function functionNoTypeErrors(): Condition<ArchFunction>;
|
|
20
20
|
/**
|
|
21
|
-
* Catch blocks
|
|
22
|
-
*
|
|
21
|
+
* Catch blocks anywhere a class runs code must reference the caught error variable: member
|
|
22
|
+
* bodies, parameter defaults, property initializers (an arrow-function event handler included),
|
|
23
|
+
* static blocks, decorators, computed names and `extends` (bug 0306). It forbids something, so
|
|
24
|
+
* it reads all of it, as `notContain()` on the class builder does.
|
|
23
25
|
*
|
|
24
26
|
* Detects catch blocks that silently discard errors — no logging,
|
|
25
27
|
* no rethrowing, no passing to another function. A common source of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/rules/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/rules/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAO9D;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAE7D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAE1D;AAID,wBAAgB,uBAAuB,IAAI,SAAS,CAAC,YAAY,CAAC,CAEjE;AAED,wBAAgB,oBAAoB,IAAI,SAAS,CAAC,YAAY,CAAC,CAE9D;AAWD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAe3D;AAED,wBAAgB,qBAAqB,IAAI,SAAS,CAAC,YAAY,CAAC,CAe/D;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAAC,UAAU,CAAC,CAa3D"}
|
package/dist/rules/errors.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Node } from 'ts-morph';
|
|
1
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
2
|
import { createViolation } from '../core/violation.js';
|
|
3
3
|
import { newExpr } from '../helpers/matchers.js';
|
|
4
|
+
import { searchClassBody } from '../helpers/body-traversal.js';
|
|
4
5
|
import { classNotContain } from '../conditions/body-analysis.js';
|
|
5
6
|
import { functionNotContain } from '../conditions/body-analysis-function.js';
|
|
6
|
-
import { findSilentCatches } from '../conditions/catch-analysis.js';
|
|
7
|
+
import { findSilentCatches, silentCatchMessage } from '../conditions/catch-analysis.js';
|
|
7
8
|
/**
|
|
8
9
|
* No throwing generic Error — use typed domain errors instead.
|
|
9
10
|
*
|
|
@@ -30,9 +31,17 @@ export function functionNoTypeErrors() {
|
|
|
30
31
|
return functionNotContain(newExpr('TypeError'));
|
|
31
32
|
}
|
|
32
33
|
// ─── Silent catch detection ──────────────────────────────────────
|
|
34
|
+
/** Every catch clause; `noSilentCatch` decides which of them are silent. */
|
|
35
|
+
const catchClause = {
|
|
36
|
+
description: 'catch clause',
|
|
37
|
+
syntaxKinds: [SyntaxKind.CatchClause],
|
|
38
|
+
matches: (node) => Node.isCatchClause(node),
|
|
39
|
+
};
|
|
33
40
|
/**
|
|
34
|
-
* Catch blocks
|
|
35
|
-
*
|
|
41
|
+
* Catch blocks anywhere a class runs code must reference the caught error variable: member
|
|
42
|
+
* bodies, parameter defaults, property initializers (an arrow-function event handler included),
|
|
43
|
+
* static blocks, decorators, computed names and `extends` (bug 0306). It forbids something, so
|
|
44
|
+
* it reads all of it, as `notContain()` on the class builder does.
|
|
36
45
|
*
|
|
37
46
|
* Detects catch blocks that silently discard errors — no logging,
|
|
38
47
|
* no rethrowing, no passing to another function. A common source of
|
|
@@ -44,19 +53,12 @@ export function noSilentCatch() {
|
|
|
44
53
|
evaluate(elements, context) {
|
|
45
54
|
const violations = [];
|
|
46
55
|
for (const cls of elements) {
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
...cls.getConstructors(),
|
|
50
|
-
...cls.getGetAccessors(),
|
|
51
|
-
...cls.getSetAccessors(),
|
|
52
|
-
];
|
|
53
|
-
for (const member of members) {
|
|
54
|
-
const body = member.getBody();
|
|
55
|
-
if (!body)
|
|
56
|
+
for (const node of searchClassBody(cls, catchClause, 'all-code').matchingNodes) {
|
|
57
|
+
if (!Node.isCatchClause(node))
|
|
56
58
|
continue;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
const message = silentCatchMessage(node);
|
|
60
|
+
if (message !== undefined)
|
|
61
|
+
violations.push(createViolation(node, message, context));
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
return violations;
|
package/dist/rules/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/rules/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/rules/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/hygiene.d.ts
CHANGED
|
@@ -42,7 +42,9 @@ export declare function noUnusedExports(): Condition<SourceFile>;
|
|
|
42
42
|
export declare function noStubComments(pattern?: RegExp): Condition<ArchFunction>;
|
|
43
43
|
/**
|
|
44
44
|
* Functions must not have empty bodies.
|
|
45
|
-
* An empty function compiles and passes type checks but does nothing.
|
|
45
|
+
* An empty function compiles and passes type checks but does nothing. An empty constructor whose every
|
|
46
|
+
* parameter is a parameter property, or a private or protected one that takes nothing, does something,
|
|
47
|
+
* and is not reported (bug 0315).
|
|
46
48
|
*
|
|
47
49
|
* @example
|
|
48
50
|
* functions(p)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hygiene.d.ts","sourceRoot":"","sources":["../../src/rules/hygiene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAQ9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,UAAU,CAAC,CAErD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAAC,UAAU,CAAC,CAEvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAsB,GAAG,SAAS,CAAC,YAAY,CAAC,CAEvF;AAED
|
|
1
|
+
{"version":3,"file":"hygiene.d.ts","sourceRoot":"","sources":["../../src/rules/hygiene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAQ9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,UAAU,CAAC,CAErD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAAC,UAAU,CAAC,CAEvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAsB,GAAG,SAAS,CAAC,YAAY,CAAC,CAEvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAAC,YAAY,CAAC,CAEvD"}
|
package/dist/rules/hygiene.js
CHANGED
|
@@ -48,7 +48,9 @@ export function noStubComments(pattern = STUB_PATTERNS) {
|
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* Functions must not have empty bodies.
|
|
51
|
-
* An empty function compiles and passes type checks but does nothing.
|
|
51
|
+
* An empty function compiles and passes type checks but does nothing. An empty constructor whose every
|
|
52
|
+
* parameter is a parameter property, or a private or protected one that takes nothing, does something,
|
|
53
|
+
* and is not reported (bug 0315).
|
|
52
54
|
*
|
|
53
55
|
* @example
|
|
54
56
|
* functions(p)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hygiene.js","sourceRoot":"","sources":["../../src/rules/hygiene.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,yCAAyC,CAAA;AAEhD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAA;AACrB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,mBAAmB,EAAE,CAAA;AAC9B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,aAAa;IAC5D,OAAO,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"hygiene.js","sourceRoot":"","sources":["../../src/rules/hygiene.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,yCAAyC,CAAA;AAEhD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAA;AACrB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,mBAAmB,EAAE,CAAA;AAC9B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,aAAa;IAC5D,OAAO,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,wBAAwB,EAAE,CAAA;AACnC,CAAC"}
|
package/dist/rules/metrics.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ClassDeclaration } from 'ts-morph';
|
|
2
2
|
import type { Condition } from '@nielspeter/eess';
|
|
3
3
|
/**
|
|
4
|
-
* No
|
|
5
|
-
* cyclomatic complexity.
|
|
4
|
+
* No callable member of the class — a method, constructor or accessor, or a property whose
|
|
5
|
+
* value is a function — may exceed the given cyclomatic complexity (bug 0306).
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* ```ts
|
|
@@ -25,7 +25,8 @@ export declare function maxCyclomaticComplexity(threshold: number): Condition<Cl
|
|
|
25
25
|
*/
|
|
26
26
|
export declare function maxClassLines(threshold: number): Condition<ClassDeclaration>;
|
|
27
27
|
/**
|
|
28
|
-
* No method
|
|
28
|
+
* No callable member of the class — a method, constructor or accessor, or a property whose
|
|
29
|
+
* value is a function — may exceed the given number of lines (bug 0306).
|
|
29
30
|
*
|
|
30
31
|
* @example
|
|
31
32
|
* ```ts
|
|
@@ -49,7 +50,8 @@ export declare function maxMethodLines(threshold: number): Condition<ClassDeclar
|
|
|
49
50
|
*/
|
|
50
51
|
export declare function maxMethods(threshold: number): Condition<ClassDeclaration>;
|
|
51
52
|
/**
|
|
52
|
-
* No
|
|
53
|
+
* No callable member of the class — a method, constructor or accessor, or a property whose
|
|
54
|
+
* value is a function — may have more than the given number of parameters (bug 0306).
|
|
53
55
|
*
|
|
54
56
|
* @example
|
|
55
57
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/rules/metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAkHnE;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAQtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CA2B5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAU7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAwBzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAQ5E;AAGD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,uBAAuB,CAAA"}
|