@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
|
@@ -89,8 +89,8 @@ export function haveNameMatching(pattern) {
|
|
|
89
89
|
* Reports one violation per function that has no matching parameter.
|
|
90
90
|
*
|
|
91
91
|
* **Scope note:** This operates on the function's own parameter list only.
|
|
92
|
-
*
|
|
93
|
-
*
|
|
92
|
+
* A set accessor is a function of its own, `Class.set x`, since bug 0315; the class-level
|
|
93
|
+
* counterpart scans the whole class at once.
|
|
94
94
|
*/
|
|
95
95
|
export function acceptParameterOfType(matcher) {
|
|
96
96
|
return functionCondition('accept parameter of matching type', (fn) => fn.getParameters().some((p) => matcher(p.getType())), (fn) => `${fn.getName() ?? '<anonymous>'} has no parameter with matching type`);
|
|
@@ -103,8 +103,8 @@ export function acceptParameterOfType(matcher) {
|
|
|
103
103
|
* with actionable messages including the parameter name and type.
|
|
104
104
|
*
|
|
105
105
|
* **Scope note:** This operates on the function's own parameter list only.
|
|
106
|
-
*
|
|
107
|
-
*
|
|
106
|
+
* A set accessor is a function of its own, `Class.set x`, since bug 0315; the class-level
|
|
107
|
+
* counterpart scans the whole class at once.
|
|
108
108
|
*/
|
|
109
109
|
export function notAcceptParameterOfType(matcher) {
|
|
110
110
|
return {
|
|
@@ -181,7 +181,7 @@ export function applyFilters(violations, ctx) {
|
|
|
181
181
|
// pattern that silences NOTHING (fail-closed — the finding still fires, CI is
|
|
182
182
|
// still red), while this warns about a pattern that silences MULTIPLE real
|
|
183
183
|
// findings and every future one on the same edges (fail-open — a green
|
|
184
|
-
// `check()`, one stderr line). ADR-
|
|
184
|
+
// `check()`, one stderr line). ADR-009 states the primary consumer does not
|
|
185
185
|
// read warnings. Kept advisory here, matching plan 0104's own review
|
|
186
186
|
// resolution — but the asymmetry is real and worth re-litigating if this
|
|
187
187
|
// loophole is measured firing in practice, not settled by the precedent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver-rule-builder.d.ts","sourceRoot":"","sources":["../../src/graphql/resolver-rule-builder.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,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAO9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"resolver-rule-builder.d.ts","sourceRoot":"","sources":["../../src/graphql/resolver-rule-builder.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,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAO9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAY9D;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAYvF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB,CAAC,YAAY,CAAC;IAiBrE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAlB3B;;;;;;;;;;;;;;OAcG;gBAEgB,WAAW,EAAE,UAAU,EAAE,EACzB,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,WAAW,YAAA;IAKxC,6EAA6E;IAC7E,UAAU,IAAI,WAAW,GAAG,SAAS;IAIrC;;;;;;;;OAQG;IACM,KAAK,IAAI,SAAS,QAAQ,EAAE;IAarC;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQrD;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAMzC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAM5C;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAQnE;;;;;;;OAOG;cACgB,gBAAgB,IAAI,MAAM;cAI1B,kBAAkB,IAAI,MAAM;cAI5B,iBAAiB,IAAI,MAAM;cAI3B,WAAW,IAAI,YAAY,EAAE;CAoBjD"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { stampGlobs } from '@nielspeter/eess/internal';
|
|
2
2
|
import { globAnyOf } from '@nielspeter/eess';
|
|
3
|
-
import { collectFunctions } from '../models/arch-function.js';
|
|
3
|
+
import { collectFunctions, functionKindOf } from '../models/arch-function.js';
|
|
4
4
|
import { functionContain, functionNotContain, functionUseInsteadOf, } from '../conditions/body-analysis-function.js';
|
|
5
5
|
import { GraphqlRuleBuilder } from './graphql-rule-builder.js';
|
|
6
|
+
/**
|
|
7
|
+
* The kinds of collected function `resolvers()` does not treat as a resolver. A getter written as a field
|
|
8
|
+
* resolver, `@Field() get fullName()`, is therefore not read.
|
|
9
|
+
*/
|
|
10
|
+
const NOT_RESOLVERS = new Set([
|
|
11
|
+
'constructor',
|
|
12
|
+
'getter',
|
|
13
|
+
'setter',
|
|
14
|
+
]);
|
|
6
15
|
/**
|
|
7
16
|
* Predicate: filter to resolver functions for fields returning types matching the pattern.
|
|
8
17
|
*
|
|
@@ -148,7 +157,12 @@ export class ResolverRuleBuilder extends GraphqlRuleBuilder {
|
|
|
148
157
|
// sit beside the resolvers and none of the resolvers themselves — measured
|
|
149
158
|
// on a real schema as 60 subjects, 0 of them resolvers. Every rule written
|
|
150
159
|
// against it then passes on the wrong subjects (ADR-008).
|
|
151
|
-
|
|
160
|
+
//
|
|
161
|
+
// A constructor or an accessor is not treated as a resolver, so a getter field resolver is not read.
|
|
162
|
+
// Since bug 0315 the collection returns a class's constructor and accessors beside its methods, and a
|
|
163
|
+
// class-based resolver's injected constructor would otherwise fail every `contain(...)` rule written
|
|
164
|
+
// against the resolvers.
|
|
165
|
+
return this.sourceFiles.flatMap((sf) => collectFunctions(sf, { includeObjectLiteralFunctions: true }).filter((fn) => !NOT_RESOLVERS.has(functionKindOf(fn))));
|
|
152
166
|
}
|
|
153
167
|
}
|
|
154
168
|
//# sourceMappingURL=resolver-rule-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver-rule-builder.js","sourceRoot":"","sources":["../../src/graphql/resolver-rule-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"resolver-rule-builder.js","sourceRoot":"","sources":["../../src/graphql/resolver-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,20 +46,74 @@ interface Match {
|
|
|
46
46
|
*/
|
|
47
47
|
export declare function reportedLine(node: Node, triviaPos: number | undefined): number;
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* How much of a class a body search reads (bug 0307).
|
|
50
50
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
51
|
+
* - `'member-code'` — the code the class's members run: method, constructor and accessor bodies,
|
|
52
|
+
* parameter defaults — each default and computed key inside a destructured parameter included
|
|
53
|
+
* (bug 0309) — property initializers and static blocks.
|
|
54
|
+
* - `'all-code'` — that, and the code the class runs outside its members when it is defined: every
|
|
55
|
+
* decorator expression (on the class, its members, accessors and parameters), computed member
|
|
56
|
+
* names and the `extends` expression.
|
|
57
|
+
*
|
|
58
|
+
* A search for what a class must NOT contain reads all of it: there, reading more fails closed. A
|
|
59
|
+
* search for what it MUST contain reads member code only: there, reading less fails closed, and a decorator, a
|
|
60
|
+
* computed name or the `extends` expression is wiring that must not satisfy a rule like
|
|
61
|
+
* `classMustCall` — a DI token passed to a decorator included. The line is drawn by position: a
|
|
62
|
+
* call in member code still satisfies it, a DI lookup in a field initializer included.
|
|
63
|
+
*
|
|
64
|
+
* A computed key inside a destructured parameter is member code, unlike a computed member name: the
|
|
65
|
+
* key runs at each call, as a default does, and the member name runs once, when the class is
|
|
66
|
+
* defined. So a call in the key satisfies a must-contain rule, and a call in the member name does not.
|
|
67
|
+
*
|
|
68
|
+
* A rule that forbids something may still read member code only, when the other positions hold
|
|
69
|
+
* nothing it should report: `noMagicNumbers` does, because a number in a decorator argument such as
|
|
70
|
+
* `@Max(150)` is named by the decorator that takes it (bug 0306).
|
|
71
|
+
*/
|
|
72
|
+
type ClassBodyReach = 'member-code' | 'all-code';
|
|
73
|
+
/**
|
|
74
|
+
* Search the code a class runs (bugs 0300, 0307), as far as `reach` says.
|
|
75
|
+
*
|
|
76
|
+
* In four passes, for baselines. A match's identity is numbered within its enclosing declaration
|
|
77
|
+
* (`match-identity.ts`), and a declaration is known by its name, so a getter and its setter, or a
|
|
78
|
+
* static and an instance member of one name, share one. What the walk read before bug 0300 comes
|
|
79
|
+
* first for every member, then what 0300 added, then what 0307 added, then what 0309 added, so a
|
|
80
|
+
* finding a baseline accepted keeps its ordinal and a new one is numbered after it however the
|
|
81
|
+
* members interleave:
|
|
82
|
+
*
|
|
83
|
+
* 1. every method, constructor and accessor body;
|
|
84
|
+
* 2. every parameter default, property initializer (which covers an arrow-function property) and
|
|
85
|
+
* static block;
|
|
86
|
+
* 3. for `'all-code'`: every parameter, member and property decorator, computed member name, class
|
|
87
|
+
* decorator and the `extends` expression;
|
|
88
|
+
* 4. under either reach, the code every destructured parameter runs at each call, at any depth
|
|
89
|
+
* (`bindingPatternMatches`).
|
|
90
|
+
*
|
|
91
|
+
* Overload signatures have no body, defaults or decorators, so walking every constructor is the
|
|
92
|
+
* same as walking the implementation. `implements` is type-only and docstrings are not code, so
|
|
93
|
+
* neither is read, and a `comment()` rule reads code, not documentation.
|
|
94
|
+
*/
|
|
95
|
+
export declare function searchClassBody(cls: ClassDeclaration, matcher: ExpressionMatcher, reach: ClassBodyReach): MatchResult;
|
|
96
|
+
/**
|
|
97
|
+
* Matches in what a call condition searches — an argument, or a callback's body — including the
|
|
98
|
+
* node itself unless it is a block (bug 0323).
|
|
99
|
+
*
|
|
100
|
+
* An argument can BE the match — `use(legacy(1))` — and so can a concise callback's body, which
|
|
101
|
+
* `getFunctionBody` returns as the expression itself: `use(() => legacy(1))`. With
|
|
102
|
+
* `findMatchesInNode` alone neither was tested, under `call()` as under `expression()`. A block is
|
|
103
|
+
* searched below its root, as `searchFunctionBody` searches a function's own: tested itself, a
|
|
104
|
+
* block would match a broad pattern against the whole body.
|
|
54
105
|
*/
|
|
55
|
-
export declare function
|
|
106
|
+
export declare function findMatchesInCode(node: Node, matcher: ExpressionMatcher): Match[];
|
|
56
107
|
/**
|
|
57
|
-
*
|
|
108
|
+
* `findMatchesInCode` over several roots, numbered so a baseline keeps its identities (bug 0323):
|
|
109
|
+
* every match below a root first, in order, then the roots that are matches themselves.
|
|
58
110
|
*
|
|
59
|
-
*
|
|
60
|
-
* and
|
|
111
|
+
* 0.5.1 never tested a root, so each root match is new. Numbered in place, one would take the
|
|
112
|
+
* ordinal of a match a baseline already accepted, and the new finding would be the one hidden —
|
|
113
|
+
* as `searchClassBody` numbers the code bug 0300 made it read after the code it read before. A
|
|
114
|
+
* trivia match was found on a root before too, so it keeps its place.
|
|
61
115
|
*/
|
|
62
|
-
export declare function
|
|
116
|
+
export declare function findMatchesInEach(roots: readonly Node[], matcher: ExpressionMatcher): Match[];
|
|
63
117
|
/**
|
|
64
118
|
* Search a function body for matches.
|
|
65
119
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-traversal.d.ts","sourceRoot":"","sources":["../../src/helpers/body-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,EACT,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"body-traversal.d.ts","sourceRoot":"","sources":["../../src/helpers/body-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,EACT,KAAK,gBAAgB,EAErB,KAAK,UAAU,EAGhB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,2CAA2C;IAC3C,KAAK,EAAE,OAAO,CAAA;IACd,qEAAqE;IACrE,aAAa,EAAE,IAAI,EAAE,CAAA;IACrB;;;;;;;OAOG;IACH,eAAe,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAA;CACxC;AAED,uEAAuE;AACvE,UAAU,KAAK;IACb,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG9E;AA4FD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,KAAK,cAAc,GAAG,aAAa,GAAG,UAAU,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,cAAc,GACpB,WAAW,CAsDb;AAiDD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAIjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE,CAQ7F;AAuBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAqD5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAQ5D;AAkCD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,WAAW,CA4Bb"}
|
|
@@ -45,6 +45,14 @@ export function reportedLine(node, triviaPos) {
|
|
|
45
45
|
* Parent nodes' getText() includes children's text, so regex-based
|
|
46
46
|
* matchers (expression()) match at multiple ancestor levels.
|
|
47
47
|
* Keep only the deepest (most specific) matching nodes.
|
|
48
|
+
*
|
|
49
|
+
* Several nodes can share one span — a statement without a semicolon and its
|
|
50
|
+
* expression, a shorthand property and its name, a call's only argument and
|
|
51
|
+
* the `SyntaxList` holding it. Each lies inside the others, so a filter that
|
|
52
|
+
* drops a match with another inside it dropped all of them and reported
|
|
53
|
+
* nothing (bug 0322). Of a tie, the last in walk order is kept: the walk is
|
|
54
|
+
* pre-order, so that is the deepest. `getAncestors()` cannot break the tie —
|
|
55
|
+
* it follows `getParent()`, which skips the `SyntaxList` the walk yields.
|
|
48
56
|
*/
|
|
49
57
|
function findMatchesBroad(node, matcher) {
|
|
50
58
|
const matches = [];
|
|
@@ -57,7 +65,14 @@ function findMatchesBroad(node, matcher) {
|
|
|
57
65
|
}
|
|
58
66
|
}
|
|
59
67
|
return matches
|
|
60
|
-
.filter((m) => !matches.some((other) =>
|
|
68
|
+
.filter((m, i) => !matches.some((other, j) => {
|
|
69
|
+
if (other === m)
|
|
70
|
+
return false;
|
|
71
|
+
if (other.getStart() < m.getStart() || other.getEnd() > m.getEnd())
|
|
72
|
+
return false;
|
|
73
|
+
const sameSpan = other.getStart() === m.getStart() && other.getEnd() === m.getEnd();
|
|
74
|
+
return !sameSpan || j > i;
|
|
75
|
+
}))
|
|
61
76
|
.map((n) => ({ node: n }));
|
|
62
77
|
}
|
|
63
78
|
/**
|
|
@@ -67,7 +82,7 @@ function findMatchesBroad(node, matcher) {
|
|
|
67
82
|
* (efficient — only walks nodes of that kind). Falls back to
|
|
68
83
|
* getDescendants() for matchers without syntaxKinds (expression()).
|
|
69
84
|
*/
|
|
70
|
-
|
|
85
|
+
function findMatchesInNode(node, matcher) {
|
|
71
86
|
// TRIVIA first, and at the dispatcher rather than inside the broad walk.
|
|
72
87
|
// A trivia matcher may also narrow by `syntaxKinds` for speed — plan 0047's
|
|
73
88
|
// `tsDirective()` wants exactly that — and with the branch one level down it
|
|
@@ -111,43 +126,169 @@ function triviaMatches(node, matcher) {
|
|
|
111
126
|
return out.sort((a, b) => (a.triviaPos ?? 0) - (b.triviaPos ?? 0));
|
|
112
127
|
}
|
|
113
128
|
/**
|
|
114
|
-
* Search
|
|
129
|
+
* Search the code a class runs (bugs 0300, 0307), as far as `reach` says.
|
|
130
|
+
*
|
|
131
|
+
* In four passes, for baselines. A match's identity is numbered within its enclosing declaration
|
|
132
|
+
* (`match-identity.ts`), and a declaration is known by its name, so a getter and its setter, or a
|
|
133
|
+
* static and an instance member of one name, share one. What the walk read before bug 0300 comes
|
|
134
|
+
* first for every member, then what 0300 added, then what 0307 added, then what 0309 added, so a
|
|
135
|
+
* finding a baseline accepted keeps its ordinal and a new one is numbered after it however the
|
|
136
|
+
* members interleave:
|
|
137
|
+
*
|
|
138
|
+
* 1. every method, constructor and accessor body;
|
|
139
|
+
* 2. every parameter default, property initializer (which covers an arrow-function property) and
|
|
140
|
+
* static block;
|
|
141
|
+
* 3. for `'all-code'`: every parameter, member and property decorator, computed member name, class
|
|
142
|
+
* decorator and the `extends` expression;
|
|
143
|
+
* 4. under either reach, the code every destructured parameter runs at each call, at any depth
|
|
144
|
+
* (`bindingPatternMatches`).
|
|
115
145
|
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
146
|
+
* Overload signatures have no body, defaults or decorators, so walking every constructor is the
|
|
147
|
+
* same as walking the implementation. `implements` is type-only and docstrings are not code, so
|
|
148
|
+
* neither is read, and a `comment()` rule reads code, not documentation.
|
|
118
149
|
*/
|
|
119
|
-
export function searchClassBody(cls, matcher) {
|
|
150
|
+
export function searchClassBody(cls, matcher, reach) {
|
|
120
151
|
const matchingNodes = [];
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
152
|
+
const searchBody = (node) => {
|
|
153
|
+
if (node !== undefined)
|
|
154
|
+
matchingNodes.push(...findMatchesInNode(node, matcher));
|
|
155
|
+
};
|
|
156
|
+
const searchExpression = (node) => {
|
|
157
|
+
if (node !== undefined)
|
|
158
|
+
matchingNodes.push(...findMatchesInExpression(node, matcher));
|
|
159
|
+
};
|
|
160
|
+
const searchDecorators = (decorators) => {
|
|
161
|
+
for (const decorator of decorators)
|
|
162
|
+
searchExpression(decorator.getExpression());
|
|
163
|
+
};
|
|
164
|
+
const searchComputedName = (name) => {
|
|
165
|
+
if (NodeUtils.isComputedPropertyName(name))
|
|
166
|
+
searchExpression(name.getExpression());
|
|
167
|
+
};
|
|
168
|
+
const runnable = [
|
|
169
|
+
...cls.getMethods(),
|
|
170
|
+
...cls.getConstructors(),
|
|
171
|
+
...cls.getGetAccessors(),
|
|
172
|
+
...cls.getSetAccessors(),
|
|
173
|
+
];
|
|
174
|
+
const properties = cls.getProperties();
|
|
175
|
+
for (const member of runnable)
|
|
176
|
+
searchBody(member.getBody());
|
|
177
|
+
for (const member of runnable) {
|
|
178
|
+
for (const parameter of member.getParameters())
|
|
179
|
+
searchExpression(parameter.getInitializer());
|
|
126
180
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
181
|
+
for (const property of properties)
|
|
182
|
+
searchExpression(property.getInitializer());
|
|
183
|
+
for (const block of cls.getStaticBlocks())
|
|
184
|
+
searchBody(block.getBody());
|
|
185
|
+
if (reach === 'all-code') {
|
|
186
|
+
for (const member of runnable) {
|
|
187
|
+
for (const parameter of member.getParameters())
|
|
188
|
+
searchDecorators(parameter.getDecorators());
|
|
189
|
+
if (!NodeUtils.isConstructorDeclaration(member)) {
|
|
190
|
+
searchDecorators(member.getDecorators());
|
|
191
|
+
searchComputedName(member.getNameNode());
|
|
192
|
+
}
|
|
134
193
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const body = accessor.getBody();
|
|
139
|
-
if (body) {
|
|
140
|
-
matchingNodes.push(...findMatchesInNode(body, matcher));
|
|
194
|
+
for (const property of properties) {
|
|
195
|
+
searchDecorators(property.getDecorators());
|
|
196
|
+
searchComputedName(property.getNameNode());
|
|
141
197
|
}
|
|
198
|
+
searchDecorators(cls.getDecorators());
|
|
199
|
+
searchExpression(cls.getExtends()?.getExpression());
|
|
142
200
|
}
|
|
143
|
-
for (const
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
matchingNodes.push(...findMatchesInNode(body, matcher));
|
|
201
|
+
for (const member of runnable) {
|
|
202
|
+
for (const parameter of member.getParameters()) {
|
|
203
|
+
matchingNodes.push(...bindingPatternMatches(parameter.getNameNode(), matcher));
|
|
147
204
|
}
|
|
148
205
|
}
|
|
149
206
|
return toResult(matchingNodes);
|
|
150
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Matches in the code a destructured parameter runs at each call (bug 0309): for each binding
|
|
210
|
+
* element, at any depth, its computed key, then its default, then the pattern it destructures into —
|
|
211
|
+
* the order they run. A name that is not a pattern runs nothing, and a hole in an array pattern is
|
|
212
|
+
* not an element.
|
|
213
|
+
*
|
|
214
|
+
* Apart from any one search, so the function search can read a function's parameters the same way
|
|
215
|
+
* (bug 0314).
|
|
216
|
+
*/
|
|
217
|
+
function bindingPatternMatches(name, matcher) {
|
|
218
|
+
if (!NodeUtils.isObjectBindingPattern(name) && !NodeUtils.isArrayBindingPattern(name))
|
|
219
|
+
return [];
|
|
220
|
+
const matches = [];
|
|
221
|
+
for (const element of name.getElements()) {
|
|
222
|
+
if (!NodeUtils.isBindingElement(element))
|
|
223
|
+
continue;
|
|
224
|
+
const key = element.getPropertyNameNode();
|
|
225
|
+
if (NodeUtils.isComputedPropertyName(key)) {
|
|
226
|
+
matches.push(...findMatchesInExpression(key.getExpression(), matcher));
|
|
227
|
+
}
|
|
228
|
+
const initializer = element.getInitializer();
|
|
229
|
+
if (initializer !== undefined)
|
|
230
|
+
matches.push(...findMatchesInExpression(initializer, matcher));
|
|
231
|
+
matches.push(...bindingPatternMatches(element.getNameNode(), matcher));
|
|
232
|
+
}
|
|
233
|
+
return matches;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Matches in an expression that is code in its own right — a property initializer or a
|
|
237
|
+
* parameter default — including the expression itself (bug 0300).
|
|
238
|
+
*
|
|
239
|
+
* `findMatchesInNode` tests a subtree's descendants, not its root. That never mattered for a
|
|
240
|
+
* body, a block: no shipped by-kind matcher names a block, and a broad matcher keeps the
|
|
241
|
+
* deepest match, which lies inside it. An initializer can BE the match — `field = eval('1')`
|
|
242
|
+
* — so its root has to be tested too. A trivia matcher already
|
|
243
|
+
* includes the root. A broad matcher keeps only the deepest match, so the root counts only
|
|
244
|
+
* when nothing inside it matched.
|
|
245
|
+
*/
|
|
246
|
+
function findMatchesInExpression(node, matcher) {
|
|
247
|
+
const inner = findMatchesInNode(node, matcher);
|
|
248
|
+
if (matcher.matchedTriviaPositions !== undefined)
|
|
249
|
+
return inner;
|
|
250
|
+
const kinds = matcher.syntaxKinds ?? [];
|
|
251
|
+
const broad = kinds.length === 0;
|
|
252
|
+
if (!broad && !kinds.includes(node.getKind()))
|
|
253
|
+
return inner;
|
|
254
|
+
if (!matcher.matches(node))
|
|
255
|
+
return inner;
|
|
256
|
+
if (broad && inner.length > 0)
|
|
257
|
+
return inner;
|
|
258
|
+
return [{ node }, ...inner];
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Matches in what a call condition searches — an argument, or a callback's body — including the
|
|
262
|
+
* node itself unless it is a block (bug 0323).
|
|
263
|
+
*
|
|
264
|
+
* An argument can BE the match — `use(legacy(1))` — and so can a concise callback's body, which
|
|
265
|
+
* `getFunctionBody` returns as the expression itself: `use(() => legacy(1))`. With
|
|
266
|
+
* `findMatchesInNode` alone neither was tested, under `call()` as under `expression()`. A block is
|
|
267
|
+
* searched below its root, as `searchFunctionBody` searches a function's own: tested itself, a
|
|
268
|
+
* block would match a broad pattern against the whole body.
|
|
269
|
+
*/
|
|
270
|
+
export function findMatchesInCode(node, matcher) {
|
|
271
|
+
return NodeUtils.isBlock(node)
|
|
272
|
+
? findMatchesInNode(node, matcher)
|
|
273
|
+
: findMatchesInExpression(node, matcher);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* `findMatchesInCode` over several roots, numbered so a baseline keeps its identities (bug 0323):
|
|
277
|
+
* every match below a root first, in order, then the roots that are matches themselves.
|
|
278
|
+
*
|
|
279
|
+
* 0.5.1 never tested a root, so each root match is new. Numbered in place, one would take the
|
|
280
|
+
* ordinal of a match a baseline already accepted, and the new finding would be the one hidden —
|
|
281
|
+
* as `searchClassBody` numbers the code bug 0300 made it read after the code it read before. A
|
|
282
|
+
* trivia match was found on a root before too, so it keeps its place.
|
|
283
|
+
*/
|
|
284
|
+
export function findMatchesInEach(roots, matcher) {
|
|
285
|
+
const found = roots.map((root) => ({ root, matches: findMatchesInCode(root, matcher) }));
|
|
286
|
+
const isNewRoot = (root, match) => match.node === root && match.triviaPos === undefined;
|
|
287
|
+
return [
|
|
288
|
+
...found.flatMap(({ root, matches }) => matches.filter((m) => !isNewRoot(root, m))),
|
|
289
|
+
...found.flatMap(({ root, matches }) => matches.filter((m) => isNewRoot(root, m))),
|
|
290
|
+
];
|
|
291
|
+
}
|
|
151
292
|
/**
|
|
152
293
|
* The node a function's own docstring is attached to.
|
|
153
294
|
*
|
|
@@ -215,7 +356,14 @@ export function searchFunctionBody(fn, matcher) {
|
|
|
215
356
|
// the comment above warns about — `expression(/…/)` against a Block matches
|
|
216
357
|
// the function's whole body text, turning every body-analysis rule into a
|
|
217
358
|
// whole-declaration one.
|
|
218
|
-
|
|
359
|
+
//
|
|
360
|
+
// Nor when a broad matcher already matched inside the body. The body is then an
|
|
361
|
+
// ancestor of that match, which the broad search exists to leave out, and adding
|
|
362
|
+
// it reported one match twice — `() => use(legacy(1))` under
|
|
363
|
+
// `expression(/legacy\(1\)/)` (bug 0322). A by-kind matcher never tests the root
|
|
364
|
+
// it searches, so for it the body is a different node and still counts.
|
|
365
|
+
const broadHit = (matcher.syntaxKinds ?? []).length === 0 && matchingNodes.length > 0;
|
|
366
|
+
if (!NodeUtils.isBlock(body) && !broadHit && matcher.matches(body)) {
|
|
219
367
|
matchingNodes.push({ node: body });
|
|
220
368
|
}
|
|
221
369
|
return toResult(matchingNodes);
|
|
@@ -266,7 +414,8 @@ function collectVariableStatementMatches(statement, matcher) {
|
|
|
266
414
|
if (NodeUtils.isArrowFunction(initializer) || NodeUtils.isFunctionExpression(initializer)) {
|
|
267
415
|
continue;
|
|
268
416
|
}
|
|
269
|
-
|
|
417
|
+
// The initializer can BE the match — `const x = legacy(1)` (bug 0323).
|
|
418
|
+
matches.push(...findMatchesInEach([initializer], matcher));
|
|
270
419
|
}
|
|
271
420
|
return matches;
|
|
272
421
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-traversal.js","sourceRoot":"","sources":["../../src/helpers/body-traversal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"body-traversal.js","sourceRoot":"","sources":["../../src/helpers/body-traversal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ClassDeclaration, Decorator, ExpressionWithTypeArguments } from 'ts-morph';
|
|
2
|
+
/**
|
|
3
|
+
* Heritage and decorator names, as written and as resolved (bug 0296).
|
|
4
|
+
*
|
|
5
|
+
* The predicates compared the clause as written, so a base written through an aliased
|
|
6
|
+
* import, a namespace member or a mixin call was missed. Each check here keeps the written
|
|
7
|
+
* comparison — a namespace-qualified name and a base the checker cannot resolve still match
|
|
8
|
+
* exactly as before — and adds the name the checker resolves the clause to. That only ever
|
|
9
|
+
* adds matches. Only the DIRECT clause is read: a grandchild is not a direct child, which is
|
|
10
|
+
* bug 0295's question, not this one.
|
|
11
|
+
*/
|
|
12
|
+
/** Whether a heritage clause (`implements X`, an interface's `extends X`) resolves to `name`. */
|
|
13
|
+
export declare function clauseResolvesTo(clause: ExpressionWithTypeArguments, name: string): boolean;
|
|
14
|
+
/** Whether `cls` names `className` as its direct base, as written or as resolved. */
|
|
15
|
+
export declare function extendsByName(cls: ClassDeclaration, className: string): boolean;
|
|
16
|
+
/** Whether `cls` names `interfaceName` in its own `implements` clause, as written or as resolved. */
|
|
17
|
+
export declare function implementsByName(cls: ClassDeclaration, interfaceName: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* The names a decorator answers to: as written, and — when it is an imported alias — the name
|
|
20
|
+
* of the declaration it stands for. Only an alias symbol is asked for its target: only an alias
|
|
21
|
+
* has one. (Measured: asking a same-file decorator's symbol for an aliased target did not throw
|
|
22
|
+
* here, but the guard does not rely on how the checker answers a question with no answer.)
|
|
23
|
+
*/
|
|
24
|
+
export declare function decoratorNames(decorator: Decorator): readonly string[];
|
|
25
|
+
//# sourceMappingURL=heritage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heritage.d.ts","sourceRoot":"","sources":["../../src/helpers/heritage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAExF;;;;;;;;;GASG;AAEH,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3F;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAM/E;AAED,qGAAqG;AACrG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAQtF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,MAAM,EAAE,CAKtE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heritage and decorator names, as written and as resolved (bug 0296).
|
|
3
|
+
*
|
|
4
|
+
* The predicates compared the clause as written, so a base written through an aliased
|
|
5
|
+
* import, a namespace member or a mixin call was missed. Each check here keeps the written
|
|
6
|
+
* comparison — a namespace-qualified name and a base the checker cannot resolve still match
|
|
7
|
+
* exactly as before — and adds the name the checker resolves the clause to. That only ever
|
|
8
|
+
* adds matches. Only the DIRECT clause is read: a grandchild is not a direct child, which is
|
|
9
|
+
* bug 0295's question, not this one.
|
|
10
|
+
*/
|
|
11
|
+
/** Whether a heritage clause (`implements X`, an interface's `extends X`) resolves to `name`. */
|
|
12
|
+
export function clauseResolvesTo(clause, name) {
|
|
13
|
+
return clause.getType().getSymbol()?.getName() === name;
|
|
14
|
+
}
|
|
15
|
+
/** Whether `cls` names `className` as its direct base, as written or as resolved. */
|
|
16
|
+
export function extendsByName(cls, className) {
|
|
17
|
+
const clause = cls.getExtends();
|
|
18
|
+
if (clause === undefined)
|
|
19
|
+
return false;
|
|
20
|
+
return (clause.getExpression().getText() === className || cls.getBaseClass()?.getName() === className);
|
|
21
|
+
}
|
|
22
|
+
/** Whether `cls` names `interfaceName` in its own `implements` clause, as written or as resolved. */
|
|
23
|
+
export function implementsByName(cls, interfaceName) {
|
|
24
|
+
return cls
|
|
25
|
+
.getImplements()
|
|
26
|
+
.some((clause) => clause.getExpression().getText() === interfaceName ||
|
|
27
|
+
clauseResolvesTo(clause, interfaceName));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The names a decorator answers to: as written, and — when it is an imported alias — the name
|
|
31
|
+
* of the declaration it stands for. Only an alias symbol is asked for its target: only an alias
|
|
32
|
+
* has one. (Measured: asking a same-file decorator's symbol for an aliased target did not throw
|
|
33
|
+
* here, but the guard does not rely on how the checker answers a question with no answer.)
|
|
34
|
+
*/
|
|
35
|
+
export function decoratorNames(decorator) {
|
|
36
|
+
const written = decorator.getName();
|
|
37
|
+
const symbol = decorator.getNameNode().getSymbol();
|
|
38
|
+
const target = symbol?.isAlias() === true ? symbol.getAliasedSymbol()?.getName() : undefined;
|
|
39
|
+
return target === undefined || target === written ? [written] : [written, target];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=heritage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heritage.js","sourceRoot":"","sources":["../../src/helpers/heritage.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,iGAAiG;AACjG,MAAM,UAAU,gBAAgB,CAAC,MAAmC,EAAE,IAAY;IAChF,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AACzD,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,aAAa,CAAC,GAAqB,EAAE,SAAiB;IACpE,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,CAAA;IAC/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACtC,OAAO,CACL,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,SAAS,CAC9F,CAAA;AACH,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,gBAAgB,CAAC,GAAqB,EAAE,aAAqB;IAC3E,OAAO,GAAG;SACP,aAAa,EAAE;SACf,IAAI,CACH,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,aAAa;QAClD,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAC1C,CAAA;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,SAAoB;IACjD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,CAAA;IACnC,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAA;IAClD,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC5F,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACnF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -34,9 +34,9 @@ export { shouldExtend, shouldImplement, shouldHaveMethodNamed, shouldNotHaveMeth
|
|
|
34
34
|
export { functions, FunctionRuleBuilder } from './builders/function-rule-builder.js';
|
|
35
35
|
export type { ArchFunction } from './models/arch-function.js';
|
|
36
36
|
export { collectFunctions, fromFunctionDeclaration, fromFunctionInitializerDeclaration, fromArrowVariableDeclaration, fromMethodDeclaration, } from './models/arch-function.js';
|
|
37
|
-
export type { FunctionCollectionOptions } from './models/arch-function.js';
|
|
37
|
+
export type { FunctionCollectionOptions, FunctionKind } from './models/arch-function.js';
|
|
38
38
|
export type { ObjectLiteralFunction } from './core/object-literal-functions.js';
|
|
39
|
-
export { arePublic, areProtected, arePrivate, areAsync, areNotAsync, haveParameterCount, haveParameterCountGreaterThan, haveParameterCountLessThan, haveParameterNamed, haveReturnType, haveRestParameter, haveOptionalParameter, haveParameterOfType, haveParameterNameMatching, } from './predicates/function.js';
|
|
39
|
+
export { arePublic, areProtected, arePrivate, areAsync, areNotAsync, areOfKind, areNotOfKind, haveParameterCount, haveParameterCountGreaterThan, haveParameterCountLessThan, haveParameterNamed, haveReturnType, haveRestParameter, haveOptionalParameter, haveParameterOfType, haveParameterNameMatching, } from './predicates/function.js';
|
|
40
40
|
export { notExist as functionNotExist, beExported as functionBeExported, beAsync as functionBeAsync, haveNameMatching as functionHaveNameMatching, acceptParameterOfType as functionAcceptParameterOfType, notAcceptParameterOfType as functionNotAcceptParameterOfType, haveReturnTypeMatching as functionHaveReturnTypeMatching, } from './conditions/function.js';
|
|
41
41
|
export { types, TypeRuleBuilder } from './builders/type-rule-builder.js';
|
|
42
42
|
export type { TypeDeclaration } from './predicates/type.js';
|
|
@@ -133,7 +133,7 @@ export type { GlobFault } from './core/glob-diagnosis.js';
|
|
|
133
133
|
export { pathUniverse } from './core/path-universe.js';
|
|
134
134
|
export type { PathUniverse } from '@nielspeter/eess';
|
|
135
135
|
export { validateOverrides } from './presets/shared.js';
|
|
136
|
-
export { STRICT_FAMILY_SIZE } from './tsconfig/strict-family.js';
|
|
136
|
+
export { STRICT_FAMILY_SIZE, isStrictFamily, resolveFlag } from './tsconfig/strict-family.js';
|
|
137
137
|
export type { StrictFamilyFlag } from './tsconfig/strict-family.js';
|
|
138
138
|
export type { PresetDelivery } from './presets/shared.js';
|
|
139
139
|
//# sourceMappingURL=index.d.ts.map
|