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.
Files changed (46) hide show
  1. package/dist/src/practices/analyze-legend-practices.d.ts.map +1 -1
  2. package/dist/src/practices/analyze-legend-practices.js +2 -3
  3. package/dist/src/practices/analyze-legend-practices.js.map +1 -1
  4. package/dist/src/rules/primitive-projection/condition-projection.d.ts +10 -0
  5. package/dist/src/rules/primitive-projection/condition-projection.d.ts.map +1 -0
  6. package/dist/src/rules/primitive-projection/condition-projection.js +347 -0
  7. package/dist/src/rules/primitive-projection/condition-projection.js.map +1 -0
  8. package/dist/src/rules/primitive-projection/condition-reads.d.ts +27 -0
  9. package/dist/src/rules/primitive-projection/condition-reads.d.ts.map +1 -0
  10. package/dist/src/rules/primitive-projection/condition-reads.js +238 -0
  11. package/dist/src/rules/primitive-projection/condition-reads.js.map +1 -0
  12. package/dist/src/rules/primitive-projection/condition-sites.d.ts +21 -0
  13. package/dist/src/rules/primitive-projection/condition-sites.d.ts.map +1 -0
  14. package/dist/src/rules/primitive-projection/condition-sites.js +122 -0
  15. package/dist/src/rules/primitive-projection/condition-sites.js.map +1 -0
  16. package/dist/src/rules/primitive-projection/primitive-projection.d.ts +2 -0
  17. package/dist/src/rules/primitive-projection/primitive-projection.d.ts.map +1 -1
  18. package/dist/src/rules/primitive-projection/primitive-projection.js +26 -7
  19. package/dist/src/rules/primitive-projection/primitive-projection.js.map +1 -1
  20. package/dist/src/rules/primitive-projection/projection-domain.d.ts +3 -2
  21. package/dist/src/rules/primitive-projection/projection-domain.d.ts.map +1 -1
  22. package/dist/src/rules/primitive-projection/projection-domain.js +21 -17
  23. package/dist/src/rules/primitive-projection/projection-domain.js.map +1 -1
  24. package/dist/src/rules/primitive-projection/projection-sites.d.ts +2 -0
  25. package/dist/src/rules/primitive-projection/projection-sites.d.ts.map +1 -1
  26. package/dist/src/rules/primitive-projection/projection-sites.js +7 -1
  27. package/dist/src/rules/primitive-projection/projection-sites.js.map +1 -1
  28. package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts +5 -3
  29. package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts.map +1 -1
  30. package/dist/src/rules/primitive-projection/projection-subscriptions.js +27 -6
  31. package/dist/src/rules/primitive-projection/projection-subscriptions.js.map +1 -1
  32. package/dist/src/rules/primitive-projection/truthiness-projection.js +1 -1
  33. package/dist/src/rules/primitive-projection/truthiness-projection.js.map +1 -1
  34. package/dist/src/rules/primitive-projection/truthiness-sites.d.ts +5 -0
  35. package/dist/src/rules/primitive-projection/truthiness-sites.d.ts.map +1 -1
  36. package/dist/src/rules/primitive-projection/truthiness-sites.js +3 -3
  37. package/dist/src/rules/primitive-projection/truthiness-sites.js.map +1 -1
  38. package/dist/src/rules/primitive-projection/value-domains.d.ts +24 -4
  39. package/dist/src/rules/primitive-projection/value-domains.d.ts.map +1 -1
  40. package/dist/src/rules/primitive-projection/value-domains.js +75 -12
  41. package/dist/src/rules/primitive-projection/value-domains.js.map +1 -1
  42. package/dist/src/rules/state-proofs/builtin-read-calls.d.ts +3 -0
  43. package/dist/src/rules/state-proofs/builtin-read-calls.d.ts.map +1 -1
  44. package/dist/src/rules/state-proofs/builtin-read-calls.js +11 -4
  45. package/dist/src/rules/state-proofs/builtin-read-calls.js.map +1 -1
  46. 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":"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"}
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":"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"}
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"}