@nielspeter/eess-ts 0.6.0 → 0.8.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 +0 -7
- package/dist/builders/class-rule-builder.d.ts.map +1 -1
- package/dist/builders/class-rule-builder.js +27 -1
- package/dist/builders/class-rule-builder.js.map +1 -1
- package/dist/builders/cross-layer-builder.d.ts.map +1 -1
- package/dist/builders/cross-layer-builder.js +6 -8
- package/dist/builders/cross-layer-builder.js.map +1 -1
- package/dist/builders/slice-rule-builder.d.ts.map +1 -1
- package/dist/builders/slice-rule-builder.js +7 -1
- package/dist/builders/slice-rule-builder.js.map +1 -1
- package/dist/conditions/body-analysis-module.d.ts.map +1 -1
- package/dist/conditions/body-analysis-module.js +37 -4
- package/dist/conditions/body-analysis-module.js.map +1 -1
- package/dist/conditions/call.d.ts +4 -3
- package/dist/conditions/call.d.ts.map +1 -1
- package/dist/conditions/call.js +40 -17
- package/dist/conditions/call.js.map +1 -1
- package/dist/conditions/function.d.ts.map +1 -1
- package/dist/conditions/function.js +22 -8
- package/dist/conditions/function.js.map +1 -1
- package/dist/conditions/reverse-dependency.d.ts.map +1 -1
- package/dist/conditions/reverse-dependency.js +16 -14
- package/dist/conditions/reverse-dependency.js.map +1 -1
- package/dist/conditions/structural.d.ts.map +1 -1
- package/dist/conditions/structural.js +28 -11
- package/dist/conditions/structural.js.map +1 -1
- package/dist/core/disk-set.d.ts.map +1 -1
- package/dist/core/disk-set.js +37 -2
- package/dist/core/disk-set.js.map +1 -1
- package/dist/core/object-literal-functions.d.ts +4 -1
- package/dist/core/object-literal-functions.d.ts.map +1 -1
- package/dist/core/object-literal-functions.js +27 -5
- package/dist/core/object-literal-functions.js.map +1 -1
- package/dist/core/project-relative.d.ts +108 -0
- package/dist/core/project-relative.d.ts.map +1 -1
- package/dist/core/project-relative.js +179 -2
- package/dist/core/project-relative.js.map +1 -1
- package/dist/core/through-wrappers.d.ts +24 -0
- package/dist/core/through-wrappers.d.ts.map +1 -0
- package/dist/core/through-wrappers.js +36 -0
- package/dist/core/through-wrappers.js.map +1 -0
- package/dist/core/vacuity-diagnosis.d.ts.map +1 -1
- package/dist/core/vacuity-diagnosis.js +11 -3
- package/dist/core/vacuity-diagnosis.js.map +1 -1
- package/dist/helpers/body-traversal.d.ts +14 -14
- package/dist/helpers/body-traversal.d.ts.map +1 -1
- package/dist/helpers/body-traversal.js +111 -35
- package/dist/helpers/body-traversal.js.map +1 -1
- package/dist/helpers/callback-extractor.d.ts +6 -1
- package/dist/helpers/callback-extractor.d.ts.map +1 -1
- package/dist/helpers/callback-extractor.js +45 -10
- package/dist/helpers/callback-extractor.js.map +1 -1
- package/dist/helpers/global-binding.d.ts +11 -0
- package/dist/helpers/global-binding.d.ts.map +1 -0
- package/dist/helpers/global-binding.js +232 -0
- package/dist/helpers/global-binding.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/models/arch-function.d.ts +2 -2
- package/dist/models/arch-function.d.ts.map +1 -1
- package/dist/models/arch-function.js +138 -41
- package/dist/models/arch-function.js.map +1 -1
- package/dist/models/slice.d.ts.map +1 -1
- package/dist/models/slice.js +20 -16
- package/dist/models/slice.js.map +1 -1
- package/dist/predicates/identity.d.ts +2 -1
- package/dist/predicates/identity.d.ts.map +1 -1
- package/dist/predicates/identity.js +37 -38
- package/dist/predicates/identity.js.map +1 -1
- package/dist/presets/agent-guardrails.d.ts.map +1 -1
- package/dist/presets/agent-guardrails.js +65 -14
- package/dist/presets/agent-guardrails.js.map +1 -1
- package/dist/presets/boundaries.js +58 -16
- package/dist/presets/boundaries.js.map +1 -1
- package/dist/presets/recommended.d.ts +29 -6
- package/dist/presets/recommended.d.ts.map +1 -1
- package/dist/presets/recommended.js +30 -11
- package/dist/presets/recommended.js.map +1 -1
- package/dist/rules/errors.d.ts +17 -0
- package/dist/rules/errors.d.ts.map +1 -1
- package/dist/rules/errors.js +48 -8
- package/dist/rules/errors.js.map +1 -1
- package/dist/rules/security.d.ts +6 -0
- package/dist/rules/security.d.ts.map +1 -1
- package/dist/rules/security.js +59 -5
- package/dist/rules/security.js.map +1 -1
- package/dist/smells/duplicate-bodies.d.ts +1 -1
- package/dist/smells/duplicate-bodies.d.ts.map +1 -1
- package/dist/smells/duplicate-bodies.js +12 -11
- package/dist/smells/duplicate-bodies.js.map +1 -1
- package/dist/smells/sibling-files.d.ts.map +1 -1
- package/dist/smells/sibling-files.js +16 -7
- package/dist/smells/sibling-files.js.map +1 -1
- package/dist/smells/smell-builder.d.ts.map +1 -1
- package/dist/smells/smell-builder.js +15 -1
- package/dist/smells/smell-builder.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -172,7 +172,7 @@ layeredArchitecture(p, {
|
|
|
172
172
|
|
|
173
173
|
**Floor presets** (universal safety, scoped by glob):
|
|
174
174
|
|
|
175
|
-
- `recommended(p)` — a thin, universal safety floor (no `eval`, no Function constructor, no silent catches, no empty bodies) that fires ~never on healthy code.
|
|
175
|
+
- `recommended(p)` — a thin, universal safety floor (no `eval`, no Function constructor, no silent catches, no empty bodies) that fires ~never on healthy code. The first three read the whole FILE, so they see a call wherever it is written — at top level, in a class's static block or field initializer, in a callback — not only inside a function body (bug 0333); `no-empty-bodies` reads functions, since that is what an empty body is a fact about. A finding names the declaration that contains it, or the file when nothing does, and carries a per-file identity so two files never share a baseline entry.
|
|
176
176
|
- `agentGuardrails(p, { src })` — the mistakes AI coding agents make most: generic errors, stub comments, empty bodies, copy-paste, and banned inline calls. Each rule carries `imperative` metadata for `explain --format agent`.
|
|
177
177
|
|
|
178
178
|
Every preset **runs its rules and throws** on any error-severity violation by
|
|
@@ -3,13 +3,6 @@ import { RuleBuilder } from '../core/rule-builder.js';
|
|
|
3
3
|
import type { ArchProject } from '../core/project.js';
|
|
4
4
|
import type { ExpressionMatcher } from '../helpers/matchers.js';
|
|
5
5
|
import type { TypeMatcher } from '../helpers/type-matchers.js';
|
|
6
|
-
/**
|
|
7
|
-
* Rule builder for ClassDeclaration elements.
|
|
8
|
-
*
|
|
9
|
-
* Created by the `classes(p)` entry point. Provides class-specific
|
|
10
|
-
* predicates and conditions alongside the identity predicates and
|
|
11
|
-
* structural conditions from the foundation plans.
|
|
12
|
-
*/
|
|
13
6
|
export declare class ClassRuleBuilder extends RuleBuilder<ClassDeclaration> {
|
|
14
7
|
constructor(project: ArchProject);
|
|
15
8
|
protected getElements(): ClassDeclaration[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"class-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Node, SyntaxKind } from 'ts-morph';
|
|
2
|
+
import { descendantsOfKind } from '../core/descendant-cache.js';
|
|
1
3
|
import { RuleBuilder } from '../core/rule-builder.js';
|
|
2
4
|
import { classContain, classNotContain, classUseInsteadOf, classNotHaveEmptyBody, } from '../conditions/body-analysis.js';
|
|
3
5
|
// Identity predicates (plan 0003)
|
|
@@ -20,6 +22,12 @@ const cache = createElementCache();
|
|
|
20
22
|
* predicates and conditions alongside the identity predicates and
|
|
21
23
|
* structural conditions from the foundation plans.
|
|
22
24
|
*/
|
|
25
|
+
/** Whether a class lies inside another class, where that class's body search already reads it. */
|
|
26
|
+
function isInsideAClass(cls) {
|
|
27
|
+
return cls
|
|
28
|
+
.getAncestors()
|
|
29
|
+
.some((ancestor) => Node.isClassDeclaration(ancestor) || Node.isClassExpression(ancestor));
|
|
30
|
+
}
|
|
23
31
|
export class ClassRuleBuilder extends RuleBuilder {
|
|
24
32
|
constructor(project) {
|
|
25
33
|
super(project);
|
|
@@ -28,7 +36,25 @@ export class ClassRuleBuilder extends RuleBuilder {
|
|
|
28
36
|
return cache.get(this.project, SOLE_POPULATION, () => {
|
|
29
37
|
const classes = [];
|
|
30
38
|
for (const sourceFile of this.project.getSourceFiles()) {
|
|
31
|
-
|
|
39
|
+
// Every class declaration in the file, not only the top-level ones (bug 0321):
|
|
40
|
+
// `export namespace N { export class Inner {} }` is an ordinary class that
|
|
41
|
+
// `sourceFile.getClasses()` does not answer for, so no class rule reached it — and a class
|
|
42
|
+
// declared inside a function was invisible the same way.
|
|
43
|
+
//
|
|
44
|
+
// A class EXPRESSION is still not selected: this builder's element type is
|
|
45
|
+
// `ClassDeclaration` from its predicates to `searchClassBody`, and widening it is a
|
|
46
|
+
// separate change with its own question — what an anonymous class is called when an
|
|
47
|
+
// identity predicate asks. Its MEMBERS are read by the function rules since bug 0321.
|
|
48
|
+
// Through the shared walk cache, as every other walk in this package is: this is now a
|
|
49
|
+
// whole-AST walk per file where it used to be a top-level statement scan.
|
|
50
|
+
for (const cls of descendantsOfKind(sourceFile, SyntaxKind.ClassDeclaration)) {
|
|
51
|
+
// A class INSIDE another class is not its own subject: the enclosing class's body search
|
|
52
|
+
// already reads everything in it, so collecting both reported one `eval` twice — three
|
|
53
|
+
// times at two levels of nesting. Measured by the enforcement review of bug 0321, which
|
|
54
|
+
// is the same hazard the function collection guards against with `isInsideAFunction`.
|
|
55
|
+
if (Node.isClassDeclaration(cls) && !isInsideAClass(cls))
|
|
56
|
+
classes.push(cls);
|
|
57
|
+
}
|
|
32
58
|
}
|
|
33
59
|
return classes;
|
|
34
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-rule-builder.js","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"class-rule-builder.js","sourceRoot":"","sources":["../../src/builders/class-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-layer-builder.d.ts","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cross-layer-builder.d.ts","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,2BAA2B,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAgD7D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,UAAU,CAA+C;gBAEpC,OAAO,EAAE,WAAW;IAEjD;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAM1C;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAI;IAMZ;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,OAAO,GAAG,uBAAuB;CAkBhF;AAED;;;GAGG;AAQH,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,WAAW,YAAA;IAGxC;;OAEG;IACH,WAAW,IAAI,oBAAoB;CAGpC;AAED;;GAEG;AAQH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAFR,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,WAAW,YAAA;IAGxC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,gBAAgB;CAGnD;AAED;;GAEG;AAQH,qBAAa,gBAAiB,SAAQ,eAAe;IAQjD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAV3B;;;;;OAKG;gBAEgB,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,SAAS,EAAE,EAClB,SAAS,EAAE,aAAa,EACxB,OAAO,CAAC,EAAE,WAAW,YAAA;IAKxC,6EAA6E;IAC7E,UAAU,IAAI,WAAW,GAAG,SAAS;IAIrC;;;;;;;OAOG;IACM,KAAK,IAAI,SAAS,QAAQ,EAAE;IAcrC;;;;;;;;;;;;;;;;;;;OAmBG;cACgB,sBAAsB,IAAI,OAAO;IASpD;;;OAGG;IAEH;;;;;;;OAOG;cACgB,gBAAgB,IAAI,MAAM;IAI7C;;;;;OAKG;IACH,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,iBAAiB,IAAI,aAAa;CAqB7C;AAED;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAE5D"}
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
import picomatch from 'picomatch';
|
|
2
1
|
import { collectResult } from '@nielspeter/eess';
|
|
3
2
|
import { ownsEmptyDiscovery } from '@nielspeter/eess/internal';
|
|
4
3
|
import { stampGlobs } from '@nielspeter/eess/internal';
|
|
5
4
|
import { globAnyOf } from '@nielspeter/eess';
|
|
6
5
|
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
7
6
|
import { shallowClone } from '@nielspeter/eess/internal';
|
|
8
|
-
import { isProjectRelative,
|
|
7
|
+
import { isProjectRelative, matchesPath, pathGlobMatcher } from '../core/project-relative.js';
|
|
9
8
|
/**
|
|
10
9
|
* Resolve a layer by matching its glob against the project's source files.
|
|
11
10
|
*/
|
|
12
11
|
function resolveLayer(project, name, pattern) {
|
|
13
|
-
const
|
|
14
|
-
const relative = isProjectRelative(pattern);
|
|
12
|
+
const matcher = pathGlobMatcher(pattern);
|
|
15
13
|
const files = [];
|
|
16
14
|
for (const sf of project.getSourceFiles()) {
|
|
17
|
-
const filePath = sf.getFilePath();
|
|
18
15
|
// Bug 0036: the glob is matched against an ABSOLUTE path, so a
|
|
19
16
|
// project-relative one could never resolve a layer. Same rule as every
|
|
20
|
-
// other path glob — relative means from the project root
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
// other path glob — relative means from the project root, and since bug
|
|
18
|
+
// 0339 a `'**\/'`-led glob reads that view too, so a layer resolves from a
|
|
19
|
+
// project path holding a dot-segment.
|
|
20
|
+
if (matchesPath(matcher, sf, sf.getFilePath(), project.tsConfigPath)) {
|
|
23
21
|
files.push(sf);
|
|
24
22
|
}
|
|
25
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-layer-builder.js","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cross-layer-builder.js","sourceRoot":"","sources":["../../src/builders/cross-layer-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/slice-rule-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"slice-rule-builder.d.ts","sourceRoot":"","sources":["../../src/builders/slice-rule-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGhD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,OAAO,KAAK,EAAS,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAOhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAQ9D;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IACE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC9E,CAAA;AAEL;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;IAKvC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,WAAW,CAAyB;gBAEf,OAAO,EAAE,WAAW;IAIjD;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO5B;;;;;;;;;;OAUG;IACH,YAAY,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAQ/C,6EAA6E;IAC7E,UAAU,IAAI,WAAW;IAIzB;;;;;;;;;;;;;;OAcG;IACM,KAAK,IAAI,SAAS,QAAQ,EAAE;IAkDrC;;;;;;OAMG;cACgB,IAAI,IAAI,IAAI;IAO/B;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH;;;;;;;OAOG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAM7C;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IACjE,iBAAiB,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAqB5C;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAC/D,WAAW,CAAC,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAiB1C;;;;;;;OAOG;IACM,gBAAgB,IAAI,OAAO;IAIpC;;;;;;OAMG;IACM,eAAe,IAAI,MAAM;IAQlC;;;;OAIG;IACM,YAAY,IAAI,eAAe;IAaxC;;;;;;;;;;;;;;;;;;;OAmBG;cACgB,sBAAsB,IAAI,OAAO;IAIpD;;;;;;;;OAQG;IACH,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,iBAAiB,IAAI,aAAa;IAmD5C,OAAO,CAAC,oBAAoB;IAM5B,uEAAuE;IACvE,OAAO,CAAC,uBAAuB;CAOhC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,WAAW,GAAG,gBAAgB,CAEvD"}
|
|
@@ -2,10 +2,10 @@ import { emptyDiscoveryMessage, metaViolation } from './slice-discovery-message.
|
|
|
2
2
|
import { stampGlobs } from '@nielspeter/eess/internal';
|
|
3
3
|
import { globAnyOf, collectResult } from '@nielspeter/eess';
|
|
4
4
|
import { TerminalBuilder } from '../core/terminal-builder.js';
|
|
5
|
+
import { isProjectRelative } from '../core/project-relative.js';
|
|
5
6
|
import { resolveByMatching, resolveByDefinition, matchingGlobPrefix, matchingGlobPattern, } from '../models/slice.js';
|
|
6
7
|
import { splitGlobArgs } from '../core/import-options.js';
|
|
7
8
|
import { beFreeOfCycles as beFreeOfCyclesCondition, respectLayerOrder as respectLayerOrderCondition, notDependOn as notDependOnCondition, } from '../conditions/slice.js';
|
|
8
|
-
import { isProjectRelative } from '../core/project-relative.js';
|
|
9
9
|
/**
|
|
10
10
|
* Rule builder for slice-level architecture rules.
|
|
11
11
|
*
|
|
@@ -113,6 +113,12 @@ export class SliceRuleBuilder extends TerminalBuilder {
|
|
|
113
113
|
// `doctor` reds a rule that discovers slices correctly: measured, a
|
|
114
114
|
// relative `assignedFrom` glob gave 0 violations and a `dead-glob`
|
|
115
115
|
// diagnosis in the same run.
|
|
116
|
+
//
|
|
117
|
+
// Still `isProjectRelative` and not the wider `readsRootRelativePath`
|
|
118
|
+
// that `resolveByDefinition` matches with (bug 0339): a `'**\/'`-led glob
|
|
119
|
+
// is anchored, so the check is a no-op for it either way, and widening
|
|
120
|
+
// this would make the `unanchored` fault — and the whole anchor-advice
|
|
121
|
+
// group below — unreachable.
|
|
116
122
|
globAnyOf([entry.glob], 'file-path', isProjectRelative(entry.glob) ? 'normalized' : 'absolute'), 'discovery', (g) => `assignedFrom({ ${entry.name}: "${g.glob}" })`));
|
|
117
123
|
}
|
|
118
124
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice-rule-builder.js","sourceRoot":"","sources":["../../src/builders/slice-rule-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAOnF,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"slice-rule-builder.js","sourceRoot":"","sources":["../../src/builders/slice-rule-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-analysis-module.d.ts","sourceRoot":"","sources":["../../src/conditions/body-analysis-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"body-analysis-module.d.ts","sourceRoot":"","sources":["../../src/conditions/body-analysis-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,UAAU,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAInE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,8BAA8B,CAAA;AAgBrC;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,CAAC,UAAU,CAAC,CAqBvB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,CAAC,UAAU,CAAC,CA4CvB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,CAAC,UAAU,CAAC,CA8CvB"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import { identifyMatches } from './match-identity.js';
|
|
2
|
+
import { enclosingScopeName } from '../core/violation.js';
|
|
2
3
|
import { searchModuleBody, reportedLine, } from '../helpers/body-traversal.js';
|
|
3
4
|
// ─── Module body conditions ────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* What a per-match module finding is ABOUT: the declaration containing the match, and the file only
|
|
7
|
+
* when nothing does (bug 0333).
|
|
8
|
+
*
|
|
9
|
+
* One definition, because two module conditions report per-match findings and the expression was
|
|
10
|
+
* written twice — which also left the sabotage matrix unable to name either site unambiguously, in
|
|
11
|
+
* the commit that claimed to correct that matrix.
|
|
12
|
+
*/
|
|
13
|
+
function subjectOf(node, sf) {
|
|
14
|
+
return enclosingScopeName(node) ?? sf.getBaseName();
|
|
15
|
+
}
|
|
4
16
|
/**
|
|
5
17
|
* Module must contain at least one node matching the matcher.
|
|
6
18
|
*
|
|
@@ -45,12 +57,28 @@ export function moduleNotContain(matcher, options) {
|
|
|
45
57
|
const result = searchModuleBody(sf, matcher, options);
|
|
46
58
|
const identities = identifyMatches('module-body', sf.getFilePath(), result.matchingNodes, matcher.description);
|
|
47
59
|
result.matchingNodes.forEach((node, index) => {
|
|
60
|
+
const subjectName = subjectOf(node, sf);
|
|
48
61
|
violations.push({
|
|
49
62
|
rule: context.rule,
|
|
50
|
-
|
|
63
|
+
// The declaration that CONTAINS the match, and the file only when none does (bug 0333).
|
|
64
|
+
// A module rule reads the whole file, so `element` was the file for every finding — and
|
|
65
|
+
// `element` is what `.excluding()` keys on and what a reader looks at first. With the
|
|
66
|
+
// `recommended` floor reading module subjects, that would have turned every finding it
|
|
67
|
+
// already made from `runEval` into `dangerous.ts`.
|
|
68
|
+
//
|
|
69
|
+
// This does not change any existing baseline entry, because `identifyMatches` — which
|
|
70
|
+
// is untouched — builds the identity. It is NOT independent of the name, though: the
|
|
71
|
+
// key carries the match's own scope, so renaming the enclosing declaration moves the
|
|
72
|
+
// entry. An earlier version of this comment said renames were safe; the method review
|
|
73
|
+
// of PR #149 measured otherwise.
|
|
74
|
+
element: subjectName,
|
|
51
75
|
file: sf.getFilePath(),
|
|
52
76
|
line: reportedLine(node, result.triviaPositions[index]),
|
|
53
|
-
|
|
77
|
+
// The MESSAGE carries the same name as `element`, because the `github` emitter prints
|
|
78
|
+
// the message and drops `element` — naming the declaration only in `element` made the
|
|
79
|
+
// CI annotation LESS specific than before this rule changed subject, which the customer
|
|
80
|
+
// review measured (`runEval contains …` became `legacy.ts contains …`).
|
|
81
|
+
message: `${subjectName} contains ${matcher.description} at line ${String(reportedLine(node, result.triviaPositions[index]))}`,
|
|
54
82
|
identity: identities[index],
|
|
55
83
|
because: context.because,
|
|
56
84
|
});
|
|
@@ -76,12 +104,17 @@ export function moduleUseInsteadOf(bad, good, options) {
|
|
|
76
104
|
const goodResult = searchModuleBody(sf, good, options);
|
|
77
105
|
const identities = identifyMatches('module-body', sf.getFilePath(), badResult.matchingNodes, bad.description);
|
|
78
106
|
badResult.matchingNodes.forEach((node, index) => {
|
|
107
|
+
// Named like `moduleNotContain`'s matches (bug 0333): this is a finding ABOUT a match, so
|
|
108
|
+
// it names what contains the match. The two absence findings in this file — `moduleContain`
|
|
109
|
+
// above and the `goodResult` one below — are about the FILE not containing something, and
|
|
110
|
+
// name the file, which is the subject there.
|
|
111
|
+
const subjectName = subjectOf(node, sf);
|
|
79
112
|
violations.push({
|
|
80
113
|
rule: context.rule,
|
|
81
|
-
element:
|
|
114
|
+
element: subjectName,
|
|
82
115
|
file: sf.getFilePath(),
|
|
83
116
|
line: reportedLine(node, badResult.triviaPositions[index]),
|
|
84
|
-
message: `${
|
|
117
|
+
message: `${subjectName} contains ${bad.description} at line ${String(reportedLine(node, badResult.triviaPositions[index]))} — use ${good.description} instead`,
|
|
85
118
|
identity: identities[index],
|
|
86
119
|
because: context.because,
|
|
87
120
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-analysis-module.js","sourceRoot":"","sources":["../../src/conditions/body-analysis-module.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"body-analysis-module.js","sourceRoot":"","sources":["../../src/conditions/body-analysis-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,14 +8,15 @@ export declare function notExist(): Condition<ArchCall>;
|
|
|
8
8
|
/**
|
|
9
9
|
* Assert that at least one callback argument contains a match.
|
|
10
10
|
*
|
|
11
|
-
* Searches
|
|
12
|
-
*
|
|
11
|
+
* Searches every callback the call passes — see {@link callbackBodies} — for a node matching the
|
|
12
|
+
* given ExpressionMatcher.
|
|
13
13
|
*/
|
|
14
14
|
export declare function haveCallbackContaining(matcher: ExpressionMatcher): Condition<ArchCall>;
|
|
15
15
|
/**
|
|
16
16
|
* Assert that NO callback argument contains a match.
|
|
17
17
|
*
|
|
18
|
-
* Produces one violation per matching node found in any callback
|
|
18
|
+
* Produces one violation per matching node found in any callback — see {@link callbackBodies} for
|
|
19
|
+
* which arguments hold one.
|
|
19
20
|
*/
|
|
20
21
|
export declare function notHaveCallbackContaining(matcher: ExpressionMatcher): Condition<ArchCall>;
|
|
21
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/conditions/call.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/conditions/call.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAiDtD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,CAiB9C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAoBtF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAkCzF;AA6DD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAyChF;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAwCnF;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CA4BtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,CA+BzF"}
|
package/dist/conditions/call.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ArchConfigError } from '@nielspeter/eess';
|
|
2
2
|
import { Node } from 'ts-morph';
|
|
3
|
-
import {
|
|
3
|
+
import { findMatchesInCode, findMatchesInEach, reportedLine } from '../helpers/body-traversal.js';
|
|
4
|
+
import { extractCallbacks } from '../helpers/callback-extractor.js';
|
|
4
5
|
import { identifyMatches } from './match-identity.js';
|
|
5
6
|
import { marksAssertsCardinality } from '@nielspeter/eess/internal';
|
|
6
7
|
/**
|
|
@@ -57,8 +58,8 @@ export function notExist() {
|
|
|
57
58
|
/**
|
|
58
59
|
* Assert that at least one callback argument contains a match.
|
|
59
60
|
*
|
|
60
|
-
* Searches
|
|
61
|
-
*
|
|
61
|
+
* Searches every callback the call passes — see {@link callbackBodies} — for a node matching the
|
|
62
|
+
* given ExpressionMatcher.
|
|
62
63
|
*/
|
|
63
64
|
export function haveCallbackContaining(matcher) {
|
|
64
65
|
return {
|
|
@@ -78,7 +79,8 @@ export function haveCallbackContaining(matcher) {
|
|
|
78
79
|
/**
|
|
79
80
|
* Assert that NO callback argument contains a match.
|
|
80
81
|
*
|
|
81
|
-
* Produces one violation per matching node found in any callback
|
|
82
|
+
* Produces one violation per matching node found in any callback — see {@link callbackBodies} for
|
|
83
|
+
* which arguments hold one.
|
|
82
84
|
*/
|
|
83
85
|
export function notHaveCallbackContaining(matcher) {
|
|
84
86
|
return {
|
|
@@ -90,15 +92,10 @@ export function notHaveCallbackContaining(matcher) {
|
|
|
90
92
|
// produces multiple violations against the same call, and the
|
|
91
93
|
// literal-shape walk inside getName({...}) is identical for each.
|
|
92
94
|
const callName = callNameForMessage(archCall, context);
|
|
93
|
-
const args = archCall.getArguments();
|
|
94
95
|
// Flatten across arguments before assigning identities: a per-argument
|
|
95
96
|
// counter would restart at 1 for each callback, so two callbacks with a
|
|
96
97
|
// match in the same enclosing declaration would collide.
|
|
97
|
-
const
|
|
98
|
-
const body = getFunctionBody(arg);
|
|
99
|
-
return body ? [body] : [];
|
|
100
|
-
});
|
|
101
|
-
const matches = findMatchesInEach(bodies, matcher);
|
|
98
|
+
const matches = findMatchesInEach(callbackBodies(archCall), matcher);
|
|
102
99
|
const identities = identifyMatches('call-callback', archCall.getSourceFile().getFilePath(), matches.map((m) => m.node), `${identityNameOf(archCall, context)} :: ${matcher.description}`);
|
|
103
100
|
matches.forEach((match, index) => {
|
|
104
101
|
violations.push({
|
|
@@ -111,17 +108,43 @@ export function notHaveCallbackContaining(matcher) {
|
|
|
111
108
|
},
|
|
112
109
|
};
|
|
113
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* The bodies the callback conditions search: every callback the call passes, as `extractCallbacks`
|
|
113
|
+
* reads them — the definition `within()` already used (bug 0324).
|
|
114
|
+
*
|
|
115
|
+
* Before this fix these conditions had their own, narrower one: an argument that IS an arrow
|
|
116
|
+
* function or a function expression. A handler in an options object — `use({ handler: () => … })`,
|
|
117
|
+
* the shape the builder's own example is written for — and one behind parentheses were searched by
|
|
118
|
+
* nothing, so `notHaveCallbackContaining` passed over them while `notHaveArgumentContaining`
|
|
119
|
+
* reported them. Two places deciding what a callback is, is the bug; there is now one.
|
|
120
|
+
*
|
|
121
|
+
* **The callbacks read before this fix come first.** A match's identity is numbered within its
|
|
122
|
+
* enclosing declaration, so a newly reachable callback on an earlier argument would otherwise take
|
|
123
|
+
* the ordinal a baseline accepted on a later one — the same ordering `findMatchesInEach` keeps for
|
|
124
|
+
* the roots bug 0323 made it test, and `searchClassBody` for the code bugs 0300, 0307 and 0309
|
|
125
|
+
* made it read.
|
|
126
|
+
*/
|
|
127
|
+
function callbackBodies(archCall) {
|
|
128
|
+
const args = archCall.getArguments();
|
|
129
|
+
const callbacks = extractCallbacks(archCall.getNode());
|
|
130
|
+
// A callback that IS the argument is what these conditions searched before bug 0324, when they read an
|
|
131
|
+
// argument's body themselves.
|
|
132
|
+
const wasRead = (fn) => args.some((arg) => arg === fn);
|
|
133
|
+
const ordered = [
|
|
134
|
+
...callbacks.filter((cb) => wasRead(cb.fn.getNode())),
|
|
135
|
+
...callbacks.filter((cb) => !wasRead(cb.fn.getNode())),
|
|
136
|
+
];
|
|
137
|
+
return ordered.flatMap((cb) => {
|
|
138
|
+
const body = cb.fn.getBody();
|
|
139
|
+
return body ? [body] : [];
|
|
140
|
+
});
|
|
141
|
+
}
|
|
114
142
|
/**
|
|
115
143
|
* Search all callback arguments of a call for a matcher hit.
|
|
116
144
|
*/
|
|
117
145
|
function searchCallbacksFor(archCall, matcher) {
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
const body = getFunctionBody(arg);
|
|
121
|
-
if (!body)
|
|
122
|
-
continue;
|
|
123
|
-
const matches = findMatchesInCode(body, matcher);
|
|
124
|
-
if (matches.length > 0)
|
|
146
|
+
for (const body of callbackBodies(archCall)) {
|
|
147
|
+
if (findMatchesInCode(body, matcher).length > 0)
|
|
125
148
|
return true;
|
|
126
149
|
}
|
|
127
150
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/conditions/call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAK/B,OAAO,
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/conditions/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/conditions/function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/conditions/function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,kBAAkB,CAAA;AAInE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAsC9D;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CAAC,YAAY,CAAC,CAkBlD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAAC,YAAY,CAAC,CAMpD;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,SAAS,CAAC,YAAY,CAAC,CAMjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CASzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,CAMnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,CAyBtF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,CAOpF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAiBlE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAwBpE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import picomatch from 'picomatch';
|
|
2
1
|
import { globNode } from '@nielspeter/eess';
|
|
3
2
|
import { marksAssertsCardinality } from '@nielspeter/eess/internal';
|
|
3
|
+
import { isProjectRelative, matchesPath, pathGlobMatcher } from '../core/project-relative.js';
|
|
4
4
|
/**
|
|
5
5
|
* Helper to create a per-element condition for ArchFunction.
|
|
6
6
|
*/
|
|
@@ -154,8 +154,17 @@ export function haveReturnTypeMatching(matcher) {
|
|
|
154
154
|
* cannot be used — this is the ArchFunction-specific equivalent.
|
|
155
155
|
*/
|
|
156
156
|
export function resideInFile(glob) {
|
|
157
|
-
const
|
|
158
|
-
return functionCondition(`reside in file matching '${glob}'`, (fn) =>
|
|
157
|
+
const matcher = pathGlobMatcher(glob);
|
|
158
|
+
return functionCondition(`reside in file matching '${glob}'`, (fn) => matchesPath(matcher, fn.getSourceFile(), fn.getSourceFile().getFilePath()), (fn) => `${fn.getName() ?? '<anonymous>'} resides in '${fn.getSourceFile().getFilePath()}' which does not match '${glob}'`,
|
|
159
|
+
// Reads the path named from the project root as well as absolutely, since
|
|
160
|
+
// bug 0339 — so an unanchored glob is correct here (hence the base), and no
|
|
161
|
+
// glob is decided by the project's own location on disk. See
|
|
162
|
+
// `core/project-relative.ts` · `readsRootRelativePath`.
|
|
163
|
+
globNode({
|
|
164
|
+
glob,
|
|
165
|
+
kind: 'file-path',
|
|
166
|
+
base: isProjectRelative(glob) ? 'normalized' : 'absolute',
|
|
167
|
+
}));
|
|
159
168
|
}
|
|
160
169
|
/**
|
|
161
170
|
* Functions must reside in a folder matching the glob.
|
|
@@ -163,19 +172,24 @@ export function resideInFile(glob) {
|
|
|
163
172
|
* cannot be used — this is the ArchFunction-specific equivalent.
|
|
164
173
|
*/
|
|
165
174
|
export function resideInFolder(glob) {
|
|
166
|
-
const
|
|
175
|
+
const matcher = pathGlobMatcher(glob);
|
|
167
176
|
return functionCondition(`reside in folder matching '${glob}'`, (fn) => {
|
|
168
177
|
const filePath = fn.getSourceFile().getFilePath();
|
|
169
178
|
const folder = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
170
|
-
return
|
|
179
|
+
return matchesPath(matcher, fn.getSourceFile(), folder);
|
|
171
180
|
}, (fn) => {
|
|
172
181
|
const filePath = fn.getSourceFile().getFilePath();
|
|
173
182
|
const folder = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
174
183
|
return `${fn.getName() ?? '<anonymous>'} resides in folder '${folder}' which does not match '${glob}'`;
|
|
175
184
|
},
|
|
176
185
|
// `parent-dir`, not `file-path` — the glob is matched against the immediate
|
|
177
|
-
// parent directory, so it is the twin of `identity.ts
|
|
178
|
-
// kind. A `file-path` kind here would be checked against
|
|
179
|
-
|
|
186
|
+
// parent directory, so it is the twin of `identity.ts`'s `resideInFolder`
|
|
187
|
+
// and needs the same kind. A `file-path` kind here would be checked against
|
|
188
|
+
// the wrong universe. The base is `resideInFile`'s, for the reason above.
|
|
189
|
+
globNode({
|
|
190
|
+
glob,
|
|
191
|
+
kind: 'parent-dir',
|
|
192
|
+
base: isProjectRelative(glob) ? 'normalized' : 'absolute',
|
|
193
|
+
}));
|
|
180
194
|
}
|
|
181
195
|
//# sourceMappingURL=function.js.map
|