legend-doctor 0.6.2 → 0.6.3
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/dist/src/practices/analyze-legend-practices.d.ts.map +1 -1
- package/dist/src/practices/analyze-legend-practices.js +2 -3
- package/dist/src/practices/analyze-legend-practices.js.map +1 -1
- package/dist/src/rules/primitive-projection/condition-projection.d.ts +10 -0
- package/dist/src/rules/primitive-projection/condition-projection.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/condition-projection.js +347 -0
- package/dist/src/rules/primitive-projection/condition-projection.js.map +1 -0
- package/dist/src/rules/primitive-projection/condition-reads.d.ts +27 -0
- package/dist/src/rules/primitive-projection/condition-reads.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/condition-reads.js +238 -0
- package/dist/src/rules/primitive-projection/condition-reads.js.map +1 -0
- package/dist/src/rules/primitive-projection/condition-sites.d.ts +21 -0
- package/dist/src/rules/primitive-projection/condition-sites.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/condition-sites.js +122 -0
- package/dist/src/rules/primitive-projection/condition-sites.js.map +1 -0
- package/dist/src/rules/primitive-projection/primitive-projection.d.ts +2 -0
- package/dist/src/rules/primitive-projection/primitive-projection.d.ts.map +1 -1
- package/dist/src/rules/primitive-projection/primitive-projection.js +26 -7
- package/dist/src/rules/primitive-projection/primitive-projection.js.map +1 -1
- package/dist/src/rules/primitive-projection/projection-domain.d.ts +3 -2
- package/dist/src/rules/primitive-projection/projection-domain.d.ts.map +1 -1
- package/dist/src/rules/primitive-projection/projection-domain.js +21 -17
- package/dist/src/rules/primitive-projection/projection-domain.js.map +1 -1
- package/dist/src/rules/primitive-projection/projection-sites.d.ts +2 -0
- package/dist/src/rules/primitive-projection/projection-sites.d.ts.map +1 -1
- package/dist/src/rules/primitive-projection/projection-sites.js +7 -1
- package/dist/src/rules/primitive-projection/projection-sites.js.map +1 -1
- package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts +5 -3
- package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts.map +1 -1
- package/dist/src/rules/primitive-projection/projection-subscriptions.js +27 -6
- package/dist/src/rules/primitive-projection/projection-subscriptions.js.map +1 -1
- package/dist/src/rules/primitive-projection/truthiness-projection.js +1 -1
- package/dist/src/rules/primitive-projection/truthiness-projection.js.map +1 -1
- package/dist/src/rules/primitive-projection/truthiness-sites.d.ts +5 -0
- package/dist/src/rules/primitive-projection/truthiness-sites.d.ts.map +1 -1
- package/dist/src/rules/primitive-projection/truthiness-sites.js +3 -3
- package/dist/src/rules/primitive-projection/truthiness-sites.js.map +1 -1
- package/dist/src/rules/primitive-projection/value-domains.d.ts +24 -4
- package/dist/src/rules/primitive-projection/value-domains.d.ts.map +1 -1
- package/dist/src/rules/primitive-projection/value-domains.js +75 -12
- package/dist/src/rules/primitive-projection/value-domains.js.map +1 -1
- package/dist/src/rules/state-proofs/builtin-read-calls.d.ts +3 -0
- package/dist/src/rules/state-proofs/builtin-read-calls.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/builtin-read-calls.js +11 -4
- package/dist/src/rules/state-proofs/builtin-read-calls.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-legend-practices.d.ts","sourceRoot":"","sources":["../../../src/practices/analyze-legend-practices.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAEnG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AAC1G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAWtE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"analyze-legend-practices.d.ts","sourceRoot":"","sources":["../../../src/practices/analyze-legend-practices.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { resolveObservableBindings } from "./observable-bindings.js";
|
|
|
14
14
|
import { resolveSubscriptionInventory } from "../rules/observable-reads/subscription-inventory.js";
|
|
15
15
|
import ts from "typescript";
|
|
16
16
|
import { withSoleBindingFacts } from "./sole-binding-facts.js";
|
|
17
|
+
import { withoutSupersededProjections } from "../rules/primitive-projection/primitive-projection.js";
|
|
17
18
|
const provesNoContextRead = () => false;
|
|
18
19
|
export function analyzeLegendPractices({ capabilities = NO_CAPABILITIES, fileName, importedObservableArrayPaths = new Set(), importedObservableFactories = new Set(), importedObservableKeys = new Map(), importedObservables = new Set(), sourceText, }) {
|
|
19
20
|
const sourceFile = ts.createSourceFile(fileName, sourceText, SOURCE_FILE_OPTIONS, true, fileName.endsWith(".tsx") || fileName.endsWith(".jsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
@@ -72,9 +73,7 @@ function analyzeParsedLegendPractices(parsedRequest) {
|
|
|
72
73
|
function runPracticeRules(rules, input) {
|
|
73
74
|
const { subscriptionInventory } = input.request;
|
|
74
75
|
const unresolved = [];
|
|
75
|
-
const findings = rules
|
|
76
|
-
.flatMap((rule) => rule.run({ ...input, inventory: subscriptionInventory ? unresolved : undefined }))
|
|
77
|
-
.toSorted(compareFindingLocation);
|
|
76
|
+
const findings = withoutSupersededProjections(rules.flatMap((rule) => rule.run({ ...input, inventory: subscriptionInventory ? unresolved : undefined }))).toSorted(compareFindingLocation);
|
|
78
77
|
subscriptionInventory?.push(...unresolved.map((entry) => resolveSubscriptionInventory(entry, findings)));
|
|
79
78
|
return findings;
|
|
80
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-legend-practices.js","sourceRoot":"","sources":["../../../src/practices/analyze-legend-practices.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAM7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gEAAgE,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,qDAAqD,CAAC;AACpG,OAAO,EAAE,4BAA4B,EAAE,MAAM,4DAA4D,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"analyze-legend-practices.js","sourceRoot":"","sources":["../../../src/practices/analyze-legend-practices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LegendPracticeFinding } from "../../core/types.js";
|
|
2
|
+
import type { ProjectionScan, RawSubscription } from "./projection-subscriptions.js";
|
|
3
|
+
/**
|
|
4
|
+
* A render subscribes to a whole observable value but reads it only through boolean conditions:
|
|
5
|
+
* member and count comparisons, read-only predicates, and `&&`/`||` joins of them. Selecting one
|
|
6
|
+
* boolean per distinct condition renders the owner only when one of them flips. Values the
|
|
7
|
+
* uniform comparison and truthiness projections cover are left to them.
|
|
8
|
+
*/
|
|
9
|
+
export declare function conditionProjectionFinding(raw: RawSubscription, scan: ProjectionScan): LegendPracticeFinding | null;
|
|
10
|
+
//# sourceMappingURL=condition-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-projection.d.ts","sourceRoot":"","sources":["../../../../src/rules/primitive-projection/condition-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAY,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAEV,cAAc,EACd,eAAe,EAEhB,MAAM,+BAA+B,CAAC;AAwGvC;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,cAAc,GACnB,qBAAqB,GAAG,IAAI,CAe9B"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
import { capitalized, isNameTaken, mergedProjection, rendersOnSameChange, selectorEdits, } from "./projection-subscriptions.js";
|
|
2
|
+
import { isNegation, truthinessSites } from "./truthiness-sites.js";
|
|
3
|
+
import { isNullishLiteral, projectionSites } from "./projection-sites.js";
|
|
4
|
+
import { rangeHasComment, replaceNode, replaceRange } from "../../core/text-edits.js";
|
|
5
|
+
import { conditionSites } from "./condition-sites.js";
|
|
6
|
+
import { lexicalBinding } from "../../core/lexical-bindings.js";
|
|
7
|
+
import { observableValueSource } from "./projection-domain.js";
|
|
8
|
+
import { ownerLevelReferences } from "../../core/scope-references.js";
|
|
9
|
+
import { sourceDomainValues } from "./value-domains.js";
|
|
10
|
+
import ts from "typescript";
|
|
11
|
+
import { untrackedRenderReads } from "../observable-reads/untracked-render-reads.js";
|
|
12
|
+
import { unwrapTransparentExpression } from "../../core/analysis-ast.js";
|
|
13
|
+
const OUTCOMES_PER_CONDITION = 2;
|
|
14
|
+
const OPERATIONS = new Map([
|
|
15
|
+
[ts.SyntaxKind.AmpersandAmpersandToken, (left, right) => left && right],
|
|
16
|
+
[ts.SyntaxKind.BarBarToken, (left, right) => left || right],
|
|
17
|
+
[ts.SyntaxKind.EqualsEqualsEqualsToken, (left, right) => left === right],
|
|
18
|
+
[ts.SyntaxKind.EqualsEqualsToken, looselyEqual],
|
|
19
|
+
[ts.SyntaxKind.ExclamationEqualsEqualsToken, (left, right) => left !== right],
|
|
20
|
+
[ts.SyntaxKind.ExclamationEqualsToken, (left, right) => !looselyEqual(left, right)],
|
|
21
|
+
]);
|
|
22
|
+
const KEYWORD_VALUES = new Map([
|
|
23
|
+
["false", false],
|
|
24
|
+
["null", null],
|
|
25
|
+
["true", true],
|
|
26
|
+
["undefined", undefined],
|
|
27
|
+
]);
|
|
28
|
+
const IDENTIFIER_WORD = /^[A-Za-z][A-Za-z0-9]*$/u;
|
|
29
|
+
const MIRRORED_OPERATORS = new Map([
|
|
30
|
+
[ts.SyntaxKind.GreaterThanEqualsToken, ts.SyntaxKind.LessThanEqualsToken],
|
|
31
|
+
[ts.SyntaxKind.GreaterThanToken, ts.SyntaxKind.LessThanToken],
|
|
32
|
+
[ts.SyntaxKind.LessThanEqualsToken, ts.SyntaxKind.GreaterThanEqualsToken],
|
|
33
|
+
[ts.SyntaxKind.LessThanToken, ts.SyntaxKind.GreaterThanToken],
|
|
34
|
+
]);
|
|
35
|
+
const COMPARISON_SUFFIXES = new Map([
|
|
36
|
+
[ts.SyntaxKind.EqualsEqualsEqualsToken, "Matches"],
|
|
37
|
+
[ts.SyntaxKind.EqualsEqualsToken, "Matches"],
|
|
38
|
+
[ts.SyntaxKind.ExclamationEqualsEqualsToken, "Differs"],
|
|
39
|
+
[ts.SyntaxKind.ExclamationEqualsToken, "Differs"],
|
|
40
|
+
[ts.SyntaxKind.GreaterThanEqualsToken, "Exceeds"],
|
|
41
|
+
[ts.SyntaxKind.GreaterThanToken, "Exceeds"],
|
|
42
|
+
[ts.SyntaxKind.LessThanEqualsToken, "Below"],
|
|
43
|
+
[ts.SyntaxKind.LessThanToken, "Below"],
|
|
44
|
+
]);
|
|
45
|
+
/** Count tests against `0` or `1`, keyed by operator and literal, that ask for presence or emptiness. */
|
|
46
|
+
const COUNT_TESTS = new Map([
|
|
47
|
+
[`${ts.SyntaxKind.GreaterThanToken}:0`, "present"],
|
|
48
|
+
[`${ts.SyntaxKind.ExclamationEqualsEqualsToken}:0`, "present"],
|
|
49
|
+
[`${ts.SyntaxKind.ExclamationEqualsToken}:0`, "present"],
|
|
50
|
+
[`${ts.SyntaxKind.GreaterThanEqualsToken}:1`, "present"],
|
|
51
|
+
[`${ts.SyntaxKind.EqualsEqualsEqualsToken}:0`, "empty"],
|
|
52
|
+
[`${ts.SyntaxKind.EqualsEqualsToken}:0`, "empty"],
|
|
53
|
+
[`${ts.SyntaxKind.LessThanEqualsToken}:0`, "empty"],
|
|
54
|
+
[`${ts.SyntaxKind.LessThanToken}:1`, "empty"],
|
|
55
|
+
]);
|
|
56
|
+
/**
|
|
57
|
+
* A render subscribes to a whole observable value but reads it only through boolean conditions:
|
|
58
|
+
* member and count comparisons, read-only predicates, and `&&`/`||` joins of them. Selecting one
|
|
59
|
+
* boolean per distinct condition renders the owner only when one of them flips. Values the
|
|
60
|
+
* uniform comparison and truthiness projections cover are left to them.
|
|
61
|
+
*/
|
|
62
|
+
export function conditionProjectionFinding(raw, scan) {
|
|
63
|
+
const { owner } = raw.owner;
|
|
64
|
+
const source = projectionSites(owner, raw.declaration.name, scan.imports) ||
|
|
65
|
+
truthinessSites(owner, raw.declaration.name)
|
|
66
|
+
? null
|
|
67
|
+
: observableValueSource(raw.observable, scan);
|
|
68
|
+
const domain = source ? sourceDomainValues(source) : null;
|
|
69
|
+
const groups = source ? groupedSites(conditionSites(raw, source) ?? []) : [];
|
|
70
|
+
const proof = domain && groups.length > 0 ? outcomeProof(domain, groups) : null;
|
|
71
|
+
if (!proof || rendersOnSameChange(raw, scan) || untrackedRenderReads(owner, scan).length > 0) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const conditions = namedConditions(raw, groups);
|
|
75
|
+
return conditions ? projectionFinding({ conditions, proof, raw }, scan) : null;
|
|
76
|
+
}
|
|
77
|
+
function groupedSites(sites) {
|
|
78
|
+
const groups = new Map();
|
|
79
|
+
for (const site of sites) {
|
|
80
|
+
const key = site.condition.getText();
|
|
81
|
+
const group = groups.get(key);
|
|
82
|
+
if (group) {
|
|
83
|
+
group.push(site);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
groups.set(key, [site]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return [...groups.values()];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Some change of the value leaves every condition's boolean unchanged: an object domain holds
|
|
93
|
+
* distinct values with equal members, an unbounded one outnumbers any finite set of outcomes, and
|
|
94
|
+
* a finite one either evaluates to fewer joint outcomes than values or, when a condition reads
|
|
95
|
+
* more than literals, holds more values than its conditions have outcome combinations.
|
|
96
|
+
*/
|
|
97
|
+
function outcomeProof(domain, groups) {
|
|
98
|
+
if (domain.objects) {
|
|
99
|
+
return { kind: "object" };
|
|
100
|
+
}
|
|
101
|
+
if (domain.primitives === null) {
|
|
102
|
+
return { kind: "unbounded" };
|
|
103
|
+
}
|
|
104
|
+
const values = [...domain.primitives].map((literal) => literalValue(literal));
|
|
105
|
+
const keys = values.map((value) => outcomeKey(value, groups));
|
|
106
|
+
const outcomes = keys.every((key) => key !== null)
|
|
107
|
+
? new Set(keys).size
|
|
108
|
+
: OUTCOMES_PER_CONDITION ** groups.length;
|
|
109
|
+
return outcomes < values.length ? { kind: "finite", outcomes, values: values.length } : null;
|
|
110
|
+
}
|
|
111
|
+
/** Each condition's boolean for one value, or null when a condition does not evaluate. */
|
|
112
|
+
function outcomeKey(value, groups) {
|
|
113
|
+
const booleans = groups.map(([site]) => evaluate(site.condition, value, site));
|
|
114
|
+
return booleans.every((evaluation) => evaluation !== null)
|
|
115
|
+
? booleans.map((evaluation) => (evaluation.value ? "1" : "0")).join("")
|
|
116
|
+
: null;
|
|
117
|
+
}
|
|
118
|
+
function evaluate(expression, value, site) {
|
|
119
|
+
const node = unwrapTransparentExpression(expression);
|
|
120
|
+
if (ts.isIdentifier(node) && site.references.includes(node)) {
|
|
121
|
+
return { value };
|
|
122
|
+
}
|
|
123
|
+
if (isNegation(node)) {
|
|
124
|
+
const operand = evaluate(node.operand, value, site);
|
|
125
|
+
return operand && { value: !operand.value };
|
|
126
|
+
}
|
|
127
|
+
return ts.isBinaryExpression(node) ? evaluateBinary(node, value, site) : literalOperand(node);
|
|
128
|
+
}
|
|
129
|
+
function evaluateBinary(binary, value, site) {
|
|
130
|
+
const operation = OPERATIONS.get(binary.operatorToken.kind);
|
|
131
|
+
const left = evaluate(binary.left, value, site);
|
|
132
|
+
const right = evaluate(binary.right, value, site);
|
|
133
|
+
return operation && left && right ? { value: operation(left.value, right.value) } : null;
|
|
134
|
+
}
|
|
135
|
+
function looselyEqual(left, right) {
|
|
136
|
+
return ((left ?? null) === null && (right ?? null) === null) || left === right;
|
|
137
|
+
}
|
|
138
|
+
function literalOperand(expression) {
|
|
139
|
+
if (ts.isStringLiteralLike(expression)) {
|
|
140
|
+
return { value: expression.text };
|
|
141
|
+
}
|
|
142
|
+
if (ts.isNumericLiteral(expression)) {
|
|
143
|
+
return { value: Number(expression.text) };
|
|
144
|
+
}
|
|
145
|
+
const keyword = expression.getText();
|
|
146
|
+
return KEYWORD_VALUES.has(keyword) &&
|
|
147
|
+
(!ts.isIdentifier(expression) || lexicalBinding(expression) === null)
|
|
148
|
+
? { value: KEYWORD_VALUES.get(keyword) }
|
|
149
|
+
: null;
|
|
150
|
+
}
|
|
151
|
+
/** The runtime value a `DomainValues` literal key names. */
|
|
152
|
+
function literalValue(literal) {
|
|
153
|
+
if (literal.startsWith("string:")) {
|
|
154
|
+
return literal.slice("string:".length);
|
|
155
|
+
}
|
|
156
|
+
if (!literal.startsWith("number:")) {
|
|
157
|
+
return KEYWORD_VALUES.get(literal);
|
|
158
|
+
}
|
|
159
|
+
const digits = literal.slice("number:".length).replaceAll("_", "");
|
|
160
|
+
return digits.endsWith("n") ? BigInt(digits.slice(0, -1)) : Number(digits);
|
|
161
|
+
}
|
|
162
|
+
/** Null when two conditions would share a name or a fresh name is already used in the file. */
|
|
163
|
+
function namedConditions(raw, groups) {
|
|
164
|
+
const conditions = groups.map((sites) => selectedCondition(raw, sites));
|
|
165
|
+
if (!conditions.every((condition) => condition !== null)) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
const sourceFile = raw.declaration.getSourceFile();
|
|
169
|
+
const names = new Set(conditions.map((condition) => condition.name));
|
|
170
|
+
const [first, ...rest] = conditions;
|
|
171
|
+
return first &&
|
|
172
|
+
names.size === conditions.length &&
|
|
173
|
+
conditions.every((condition) => condition.merged !== null || !isNameTaken(sourceFile, condition.name))
|
|
174
|
+
? [first, ...rest]
|
|
175
|
+
: null;
|
|
176
|
+
}
|
|
177
|
+
/** A sole condition that initializes a read owner `const` takes that binding; any other gets a fresh name. */
|
|
178
|
+
function selectedCondition(raw, sites) {
|
|
179
|
+
const [site, ...copies] = sites;
|
|
180
|
+
const merged = copies.length === 0 && !site.coerced ? mergedProjection(site.condition, raw) : null;
|
|
181
|
+
if (merged) {
|
|
182
|
+
return ownerLevelReferences(raw.owner.owner, merged.declaration.name).length > 0
|
|
183
|
+
? { merged, name: merged.declaration.name.text, sites }
|
|
184
|
+
: null;
|
|
185
|
+
}
|
|
186
|
+
return { merged, name: freshName(site, raw.declaration.name.text), sites };
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* `hasItems`/`isItemsEmpty` for a count tested against zero, `isStatusIdle` for a match with a
|
|
190
|
+
* word literal, `userRoleDiffers`, `countExceeds`, `selectedIncludes` for a predicate, `hasUser`
|
|
191
|
+
* for a truthiness test, and `userCondition` for a joined condition.
|
|
192
|
+
*/
|
|
193
|
+
function freshName(site, rawName) {
|
|
194
|
+
const node = unwrapTransparentExpression(site.condition);
|
|
195
|
+
const fallback = `${rawName}Condition`;
|
|
196
|
+
if (site.coerced) {
|
|
197
|
+
const chain = chainName(node, site);
|
|
198
|
+
return chain ? `has${capitalized(chain.path)}` : fallback;
|
|
199
|
+
}
|
|
200
|
+
if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {
|
|
201
|
+
const chain = chainName(node.expression.expression, site);
|
|
202
|
+
return chain ? `${chain.path}${capitalized(node.expression.name.text)}` : fallback;
|
|
203
|
+
}
|
|
204
|
+
return ts.isBinaryExpression(node) ? (comparisonName(node, site) ?? fallback) : fallback;
|
|
205
|
+
}
|
|
206
|
+
/** Names the comparison with its one raw-derived side on the left, mirroring relations. */
|
|
207
|
+
function comparisonName(comparison, site) {
|
|
208
|
+
const left = chainName(comparison.left, site);
|
|
209
|
+
const right = chainName(comparison.right, site);
|
|
210
|
+
const operator = comparison.operatorToken.kind;
|
|
211
|
+
if (left && !right) {
|
|
212
|
+
return orientedName(left, unwrapTransparentExpression(comparison.right), operator);
|
|
213
|
+
}
|
|
214
|
+
return right && !left
|
|
215
|
+
? orientedName(right, unwrapTransparentExpression(comparison.left), MIRRORED_OPERATORS.get(operator) ?? operator)
|
|
216
|
+
: null;
|
|
217
|
+
}
|
|
218
|
+
function orientedName({ counted, path }, operand, operator) {
|
|
219
|
+
const subject = capitalized(path);
|
|
220
|
+
const count = counted ? COUNT_TESTS.get(`${operator}:${operand.getText()}`) : undefined;
|
|
221
|
+
if (count) {
|
|
222
|
+
return count === "present" ? `has${subject}` : `is${subject}Empty`;
|
|
223
|
+
}
|
|
224
|
+
const suffix = COMPARISON_SUFFIXES.get(operator);
|
|
225
|
+
if (suffix && suffix !== "Exceeds" && suffix !== "Below" && isNullishLiteral(operand)) {
|
|
226
|
+
return suffix === "Differs" ? `has${subject}` : `missing${subject}`;
|
|
227
|
+
}
|
|
228
|
+
if (suffix === "Matches" &&
|
|
229
|
+
ts.isStringLiteralLike(operand) &&
|
|
230
|
+
IDENTIFIER_WORD.test(operand.text)) {
|
|
231
|
+
return `is${subject}${capitalized(operand.text)}`;
|
|
232
|
+
}
|
|
233
|
+
return suffix ? `${path}${suffix}` : null;
|
|
234
|
+
}
|
|
235
|
+
/** `user.role` as `userRole`; a trailing `length` or `size` marks the chain as counted. */
|
|
236
|
+
function chainName(expression, site) {
|
|
237
|
+
const node = unwrapTransparentExpression(expression);
|
|
238
|
+
if (ts.isIdentifier(node)) {
|
|
239
|
+
return site.references.includes(node) ? { counted: false, path: node.text } : null;
|
|
240
|
+
}
|
|
241
|
+
const receiver = ts.isPropertyAccessExpression(node) ? chainName(node.expression, site) : null;
|
|
242
|
+
if (!receiver || receiver.counted || !ts.isPropertyAccessExpression(node)) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
const member = node.name.text;
|
|
246
|
+
return member === "length" || member === "size"
|
|
247
|
+
? { counted: true, path: receiver.path }
|
|
248
|
+
: { counted: false, path: `${receiver.path}${capitalized(member)}` };
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* One read inlines `path$.get()` where the raw value was read; several bind it once in a block, so
|
|
252
|
+
* the condition's source is kept verbatim.
|
|
253
|
+
*/
|
|
254
|
+
function selectedSource(site, raw, scan) {
|
|
255
|
+
const { sourceFile } = scan;
|
|
256
|
+
const read = `${raw.observable.getText(sourceFile)}.get()`;
|
|
257
|
+
const [reference, ...others] = site.references;
|
|
258
|
+
const start = site.condition.getStart(sourceFile);
|
|
259
|
+
const text = site.condition.getText(sourceFile);
|
|
260
|
+
const condition = others.length === 0
|
|
261
|
+
? `${text.slice(0, reference.getStart(sourceFile) - start)}${read}${text.slice(reference.getEnd() - start)}`
|
|
262
|
+
: text;
|
|
263
|
+
const node = unwrapTransparentExpression(site.condition);
|
|
264
|
+
const coercible = ts.isIdentifier(node) ||
|
|
265
|
+
ts.isPropertyAccessExpression(node) ||
|
|
266
|
+
ts.isCallExpression(node) ||
|
|
267
|
+
ts.isParenthesizedExpression(site.condition)
|
|
268
|
+
? condition
|
|
269
|
+
: `(${condition})`;
|
|
270
|
+
const value = site.coerced ? `!!${coercible}` : condition;
|
|
271
|
+
return others.length === 0
|
|
272
|
+
? value
|
|
273
|
+
: `{ const ${raw.declaration.name.text} = ${read}; return ${value}; }`;
|
|
274
|
+
}
|
|
275
|
+
function selectorBinding(condition, raw, scan) {
|
|
276
|
+
return { name: condition.name, selected: selectedSource(condition.sites[0], raw, scan) };
|
|
277
|
+
}
|
|
278
|
+
/** Each copy becomes its binding, or the merged `const` is deleted; null when that drops a comment. */
|
|
279
|
+
function projectionEdits({ conditions, raw }, scan) {
|
|
280
|
+
const [first, ...rest] = conditions;
|
|
281
|
+
const bindings = [
|
|
282
|
+
selectorBinding(first, raw, scan),
|
|
283
|
+
...rest.map((condition) => selectorBinding(condition, raw, scan)),
|
|
284
|
+
];
|
|
285
|
+
const siteEdits = conditions.map(({ merged, name, sites }) => {
|
|
286
|
+
if (!merged) {
|
|
287
|
+
return sites.map((site) => replaceNode(scan, site.condition, name));
|
|
288
|
+
}
|
|
289
|
+
const removed = { end: merged.statement.getEnd(), pos: merged.statement.getFullStart() };
|
|
290
|
+
return rangeHasComment(scan.sourceFile, removed) ? null : [replaceRange(scan, removed, "")];
|
|
291
|
+
});
|
|
292
|
+
return siteEdits.every((edits) => edits !== null)
|
|
293
|
+
? [...selectorEdits(raw, bindings, scan), ...siteEdits.flat()]
|
|
294
|
+
: null;
|
|
295
|
+
}
|
|
296
|
+
function projectionFinding(projection, scan) {
|
|
297
|
+
const { raw } = projection;
|
|
298
|
+
const position = scan.sourceFile.getLineAndCharacterOfPosition(raw.declaration.getStart());
|
|
299
|
+
const edits = projectionEdits(projection, scan);
|
|
300
|
+
const several = projection.conditions.length > 1;
|
|
301
|
+
const finding = {
|
|
302
|
+
action: "select-primitive-projection",
|
|
303
|
+
confidence: "certain",
|
|
304
|
+
disposition: "change",
|
|
305
|
+
evidence: projectionEvidence(projection, scan),
|
|
306
|
+
location: { column: position.character + 1, file: scan.fileName, line: position.line + 1 },
|
|
307
|
+
message: `${projectionInstruction(projection, scan)} ${raw.owner.name} then renders only when ${several ? "one of those booleans" : "that boolean"} flips, not on every ${raw.observable.getText(scan.sourceFile)} change; the selector${several ? "s" : ""} still run${several ? "" : "s"} on each change.`,
|
|
308
|
+
practice: "reactivity",
|
|
309
|
+
};
|
|
310
|
+
return edits ? { ...finding, edits } : finding;
|
|
311
|
+
}
|
|
312
|
+
function projectionInstruction({ conditions, raw }, scan) {
|
|
313
|
+
const { sourceFile } = scan;
|
|
314
|
+
const callee = raw.call.expression.getText(sourceFile);
|
|
315
|
+
const selectors = conditions.map((condition) => {
|
|
316
|
+
const { name, selected } = selectorBinding(condition, raw, scan);
|
|
317
|
+
return `\`const ${name} = ${callee}(() => ${selected})\``;
|
|
318
|
+
});
|
|
319
|
+
const replacements = conditions.map(({ merged, name, sites }) => {
|
|
320
|
+
if (merged) {
|
|
321
|
+
return `delete \`const ${merged.declaration.getText(sourceFile)}\``;
|
|
322
|
+
}
|
|
323
|
+
const text = sites[0].condition.getText(sourceFile);
|
|
324
|
+
return `replace ${sites.length === 1 ? `\`${text}\`` : `the ${sites.length} \`${text}\` conditions`} with \`${name}\``;
|
|
325
|
+
});
|
|
326
|
+
return `Replace \`const ${raw.declaration.getText(sourceFile)}\` with ${selectors.join(" and ")} and ${replacements.join(" and ")}.`;
|
|
327
|
+
}
|
|
328
|
+
function projectionEvidence({ conditions, proof, raw }, scan) {
|
|
329
|
+
const name = raw.declaration.name.text;
|
|
330
|
+
const observable = raw.observable.getText(scan.sourceFile);
|
|
331
|
+
const count = conditions.length;
|
|
332
|
+
return [
|
|
333
|
+
`every read of \`${name}\` sits inside ${count === 1 ? "one boolean condition" : `${count} boolean conditions`} whose other operands are fixed for the render, so ${raw.owner.name}'s render depends on ${observable} only through ${count === 1 ? "that boolean" : "those booleans"}`,
|
|
334
|
+
"each condition reads only declared data members, `length` or `size`, and read-only built-in predicates with pure callbacks, so the selector computes the boolean the render computed and throws only where the render would",
|
|
335
|
+
outcomeEvidence(proof, observable),
|
|
336
|
+
`no other subscription, observer read, dependency-free effect, ref or peek() render read, or subscribing parent renders ${raw.owner.name} on the same ${observable} change`,
|
|
337
|
+
];
|
|
338
|
+
}
|
|
339
|
+
function outcomeEvidence(proof, observable) {
|
|
340
|
+
if (proof.kind === "finite") {
|
|
341
|
+
return `${observable}'s ${proof.values} values fall into ${proof.outcomes} joint outcomes of the conditions, so some changes leave every boolean unchanged`;
|
|
342
|
+
}
|
|
343
|
+
return proof.kind === "object"
|
|
344
|
+
? `${observable} holds objects, so a new value can leave every condition unchanged`
|
|
345
|
+
: `${observable} holds unboundedly many values, which finitely many booleans cannot tell apart`;
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=condition-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-projection.js","sourceRoot":"","sources":["../../../../src/rules/primitive-projection/condition-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RawSubscription } from "./projection-subscriptions.js";
|
|
2
|
+
import type { ValueSource } from "./value-domains.js";
|
|
3
|
+
import ts from "typescript";
|
|
4
|
+
/** The raw subscription a condition reads, its references, and where its values are declared. */
|
|
5
|
+
export interface ConditionScope {
|
|
6
|
+
readonly raw: RawSubscription;
|
|
7
|
+
readonly references: ReadonlySet<ts.Identifier>;
|
|
8
|
+
readonly source: ValueSource;
|
|
9
|
+
}
|
|
10
|
+
/** The value a derivation step reads: its declared source, or a proven primitive with none. */
|
|
11
|
+
interface DerivedValue {
|
|
12
|
+
readonly primitive: boolean;
|
|
13
|
+
readonly source: ValueSource | null;
|
|
14
|
+
}
|
|
15
|
+
export declare const RELATIONAL_OPERATORS: ReadonlySet<ts.SyntaxKind>;
|
|
16
|
+
/**
|
|
17
|
+
* The condition evaluates without side effects from the raw value, literals, and operands fixed
|
|
18
|
+
* for the render, and never throws where the render's own evaluation would not.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isPureCondition(expression: ts.Expression, condition: ts.Expression, scope: ConditionScope): boolean;
|
|
21
|
+
/** The value a raw-rooted chain of data members, counts, and predicate calls reads. */
|
|
22
|
+
export declare function derivedValue(expression: ts.Expression, condition: ts.Expression, scope: ConditionScope): DerivedValue | null;
|
|
23
|
+
export declare function isComparison(operator: ts.SyntaxKind): boolean;
|
|
24
|
+
/** Whether `node` is or contains one of `references`. */
|
|
25
|
+
export declare function containsReference(node: ts.Node, references: ReadonlySet<ts.Node>): boolean;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=condition-reads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-reads.d.ts","sourceRoot":"","sources":["../../../../src/rules/primitive-projection/condition-reads.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,iGAAiG;AACjG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,+FAA+F;AAC/F,UAAU,YAAY;IACpB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,EAAE,CAAC,UAAU,CAK1D,CAAC;AA4BH;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,SAAS,EAAE,EAAE,CAAC,UAAU,EACxB,KAAK,EAAE,cAAc,GACpB,OAAO,CAWT;AAwCD,uFAAuF;AACvF,wBAAgB,YAAY,CAC1B,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,SAAS,EAAE,EAAE,CAAC,UAAU,EACxB,KAAK,EAAE,cAAc,GACpB,YAAY,GAAG,IAAI,CASrB;AAoLD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CAE7D;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,OAAO,CAK1F"}
|