@velarscript/web 0.28.0 → 0.29.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/dist/analysis/watch-cycles.d.ts +143 -0
- package/dist/analysis/watch-cycles.d.ts.map +1 -0
- package/dist/analysis/watch-cycles.js +241 -0
- package/dist/analysis/watch-cycles.js.map +1 -0
- package/dist/analyzer.d.ts +45 -0
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +107 -181
- package/dist/analyzer.js.map +1 -1
- package/dist/emitter.js +25 -5
- package/dist/emitter.js.map +1 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +27 -16
- package/dist/host.js.map +1 -1
- package/dist/runtime-foundation.d.ts.map +1 -1
- package/dist/runtime-foundation.js +5 -5
- package/dist/runtime-foundation.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D114 W: the reactive places a watch is about — the subject it watches, the
|
|
3
|
+
* places a body statement writes, and the one-hop `action`/`async def` writers
|
|
4
|
+
* of this module. Everything here is a question about *paths and statements*;
|
|
5
|
+
* nothing needs a type, which is why it reads as free functions and why, under
|
|
6
|
+
* D115 §三's `web/analysis/`, it is its own module rather than 280 lines in the
|
|
7
|
+
* middle of the Web analyzer.
|
|
8
|
+
*
|
|
9
|
+
* What a path *means* — whether the type at a depth is a collection, which of
|
|
10
|
+
* its calls mutate — stays with the analyzer and arrives as `ReactiveSubjectWrite`.
|
|
11
|
+
*/
|
|
12
|
+
import { type Expression, type Program, type Statement, type ValueType } from "@velarscript/compiler/extension";
|
|
13
|
+
/**
|
|
14
|
+
* D114 W: one step a reactive path takes below its root — a named field, or an
|
|
15
|
+
* element under a key that names the same element on two evaluations. The steps
|
|
16
|
+
* are kept beside the rendered text because two questions are asked of a path:
|
|
17
|
+
* "is this the same place" answers on the text, and "is this place inside that
|
|
18
|
+
* one" has to walk, both to compare step by step and to descend the subject's
|
|
19
|
+
* type to the value the write lands on.
|
|
20
|
+
*/
|
|
21
|
+
export type ReactivePathStep = {
|
|
22
|
+
readonly kind: "field";
|
|
23
|
+
readonly name: string;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: "index";
|
|
26
|
+
readonly key: string;
|
|
27
|
+
};
|
|
28
|
+
export interface ReactivePath {
|
|
29
|
+
readonly root: string;
|
|
30
|
+
readonly steps: readonly ReactivePathStep[];
|
|
31
|
+
/** The place as one comparable key, e.g. `items[0].done`. */
|
|
32
|
+
readonly text: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* D114 W: a reactive place written as one comparable key, so "the write and the
|
|
36
|
+
* subject name the same place" is one string equality.
|
|
37
|
+
*
|
|
38
|
+
* It is deliberately narrower than `renderWatchSubject`, which reconstructs any
|
|
39
|
+
* expression for a message. A key has to *decide*, so only the parts that name
|
|
40
|
+
* the same place on two evaluations are allowed into one: names, fields, and an
|
|
41
|
+
* index that is either a literal or another such path. `items[next()]` renders
|
|
42
|
+
* perfectly well and answers a different element every call, so it has no key
|
|
43
|
+
* and the shapes below stay silent on it — which is the right answer for a
|
|
44
|
+
* refusal that has to be right every time.
|
|
45
|
+
*/
|
|
46
|
+
export declare function reactivePathOf(expression: Expression): ReactivePath | null;
|
|
47
|
+
/**
|
|
48
|
+
* D114 0.28.0 H-D1: the steps a written place takes *below* the watch subject,
|
|
49
|
+
* `[]` when the write is the subject itself, and null when it is neither. §15
|
|
50
|
+
* says a watch fires on a deep change of its subject, so a write of a part of
|
|
51
|
+
* the subject is the same ring as a write of the subject — and a sibling
|
|
52
|
+
* (`watch form.name:` writing `form.email`) or a different root is not.
|
|
53
|
+
*/
|
|
54
|
+
export declare function reactiveStepsBelow(subject: ReactivePath, written: ReactivePath): readonly ReactivePathStep[] | null;
|
|
55
|
+
/**
|
|
56
|
+
* D114 W: the calls that mutate the value at one place, or null where the place
|
|
57
|
+
* holds no collection. One reading of the compiler's own roster, asked of the
|
|
58
|
+
* subject and of any place below it alike, so a deep mutating call and a direct
|
|
59
|
+
* one can never disagree about which methods write.
|
|
60
|
+
*/
|
|
61
|
+
export declare function collectionMutators(place: ValueType): ReadonlySet<string> | null;
|
|
62
|
+
/** The root name a reactive path starts from, which is the binding it resolves through. */
|
|
63
|
+
export declare function reactivePathRoot(expression: Expression): string | null;
|
|
64
|
+
/**
|
|
65
|
+
* D114 W: whether a body statement introduces its own binding of `name`. From
|
|
66
|
+
* that statement on, the spelling names something else, and a write through it
|
|
67
|
+
* is not a write of the watched place. The scan stops there rather than
|
|
68
|
+
* guessing which of the two a later line meant.
|
|
69
|
+
*/
|
|
70
|
+
export declare function statementBindsName(statement: Statement, name: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* D114 W: the call a body statement makes when the statement is nothing but
|
|
73
|
+
* that call. `detach` is included because it is how a synchronous watch body
|
|
74
|
+
* starts asynchronous work — the tour and four charter fences spell the reload
|
|
75
|
+
* that way — so a refusal that only saw the bare call would miss the shape it
|
|
76
|
+
* exists for. Everything else (a call inside an `if`, an argument, an assigned
|
|
77
|
+
* result) is not a plain top-level call and is not offered here.
|
|
78
|
+
*/
|
|
79
|
+
export declare function topLevelCall(statement: Statement): Extract<Expression, {
|
|
80
|
+
readonly kind: "CallExpression";
|
|
81
|
+
}> | null;
|
|
82
|
+
/**
|
|
83
|
+
* D114 W: the reactive place one plain body statement writes, and how. An
|
|
84
|
+
* assignment or a compound assignment names its target and no method; a call
|
|
85
|
+
* names its receiver and the method called on it, and the caller decides
|
|
86
|
+
* whether that method mutates — the roster depends on the kind of value at the
|
|
87
|
+
* receiver, which only the caller holds a type for.
|
|
88
|
+
*/
|
|
89
|
+
export interface ReactiveWriteCandidate {
|
|
90
|
+
readonly place: ReactivePath;
|
|
91
|
+
/** The method called on `place`, or null when the statement is an assignment. */
|
|
92
|
+
readonly method: string | null;
|
|
93
|
+
}
|
|
94
|
+
export declare function reactiveWriteCandidate(statement: Statement): ReactiveWriteCandidate | null;
|
|
95
|
+
/**
|
|
96
|
+
* D114 W: whether one plain body statement writes the watched place — the
|
|
97
|
+
* subject itself, or any place below it. An assignment or a compound
|
|
98
|
+
* assignment to it is one; so is a call of a mutating collection method on it,
|
|
99
|
+
* because a watch on a collection fires on its deep mutation and `mutators`
|
|
100
|
+
* answers the compiler's own roster of the calls that mutate whatever sits at
|
|
101
|
+
* that depth.
|
|
102
|
+
*
|
|
103
|
+
* D114 0.28.0 H-D1's other half: `watch form: rename()` where `rename` writes
|
|
104
|
+
* `form.name` is the same ring as `watch form: form.name = …`, which F1 already
|
|
105
|
+
* refuses. The subject and the writer question read one comparison —
|
|
106
|
+
* `reactiveStepsBelow` — so a deep write cannot be a cycle at one of them and
|
|
107
|
+
* not at the other.
|
|
108
|
+
*/
|
|
109
|
+
export declare function reactiveWriteOf(statement: Statement, subject: ReactivePath, writes: ReactiveSubjectWrite): ReactivePath | null;
|
|
110
|
+
/**
|
|
111
|
+
* Whether a write `steps` below the watched subject, made the given way, is a
|
|
112
|
+
* write of the subject. Only the analyzer can answer it — the roster of
|
|
113
|
+
* mutating calls depends on the type at that depth — so both the body scan and
|
|
114
|
+
* the one-hop writer scan are handed the same closure rather than each deciding
|
|
115
|
+
* what counts as a write.
|
|
116
|
+
*/
|
|
117
|
+
export type ReactiveSubjectWrite = (steps: readonly ReactivePathStep[], method: string | null) => boolean;
|
|
118
|
+
/**
|
|
119
|
+
* D114 W A2(b): whether an `action` or `async def` writes `path` at its own top
|
|
120
|
+
* level, unconditionally. One hop: what the callee itself calls is not
|
|
121
|
+
* followed. A parameter of the callee's own that is spelled like the path's
|
|
122
|
+
* root, or a binding it declares before the write, means the write is not of
|
|
123
|
+
* the watched place and the answer is no.
|
|
124
|
+
*/
|
|
125
|
+
export declare function writerWritesPath(writer: ReactiveWriterDeclaration, subject: ReactivePath, writes: ReactiveSubjectWrite): ReactivePath | null;
|
|
126
|
+
/**
|
|
127
|
+
* D114 W A2(b): the `action` and `async def` declarations of one module, by
|
|
128
|
+
* name. A name declared twice — or once as an ordinary `def` — answers `null`,
|
|
129
|
+
* because the refusal must know exactly which body a call reaches and two
|
|
130
|
+
* candidates mean it does not.
|
|
131
|
+
*
|
|
132
|
+
* The walk is `collectModuleFunctions`'s: module body, component bodies, and
|
|
133
|
+
* the bodies of the functions themselves, so a nested declaration of a name
|
|
134
|
+
* makes that name ambiguous here rather than silently resolving to the outer
|
|
135
|
+
* one.
|
|
136
|
+
*/
|
|
137
|
+
export interface ReactiveWriterDeclaration {
|
|
138
|
+
readonly spelling: "action" | "async def";
|
|
139
|
+
readonly parameters: readonly string[];
|
|
140
|
+
readonly body: readonly Statement[];
|
|
141
|
+
}
|
|
142
|
+
export declare function collectReactiveWriters(program: Program): ReadonlyMap<string, ReactiveWriterDeclaration | null>;
|
|
143
|
+
//# sourceMappingURL=watch-cycles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-cycles.d.ts","sourceRoot":"","sources":["../../src/analysis/watch-cycles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,iCAAiC,CAAC;AAGzC;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CA+B1E;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,gBAAgB,EAAE,GAAG,IAAI,CASnH;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAI/E;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAUtE;AAkBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAW9E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,GAAG,IAAI,CAKlH;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,GAAG,sBAAsB,GAAG,IAAI,CAW1F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,GAAG,YAAY,GAAG,IAAI,CAM9H;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;AAE1G;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,yBAAyB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,oBAAoB,GAAG,YAAY,GAAG,IAAI,CAQ5I;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;CACrC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAAC,CA6B9G"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D114 W: the reactive places a watch is about — the subject it watches, the
|
|
3
|
+
* places a body statement writes, and the one-hop `action`/`async def` writers
|
|
4
|
+
* of this module. Everything here is a question about *paths and statements*;
|
|
5
|
+
* nothing needs a type, which is why it reads as free functions and why, under
|
|
6
|
+
* D115 §三's `web/analysis/`, it is its own module rather than 280 lines in the
|
|
7
|
+
* middle of the Web analyzer.
|
|
8
|
+
*
|
|
9
|
+
* What a path *means* — whether the type at a depth is a collection, which of
|
|
10
|
+
* its calls mutate — stays with the analyzer and arrives as `ReactiveSubjectWrite`.
|
|
11
|
+
*/
|
|
12
|
+
import { mutatingCollectionMethods, } from "@velarscript/compiler/extension";
|
|
13
|
+
import { isWebStatement } from "../ast.js";
|
|
14
|
+
/**
|
|
15
|
+
* D114 W: a reactive place written as one comparable key, so "the write and the
|
|
16
|
+
* subject name the same place" is one string equality.
|
|
17
|
+
*
|
|
18
|
+
* It is deliberately narrower than `renderWatchSubject`, which reconstructs any
|
|
19
|
+
* expression for a message. A key has to *decide*, so only the parts that name
|
|
20
|
+
* the same place on two evaluations are allowed into one: names, fields, and an
|
|
21
|
+
* index that is either a literal or another such path. `items[next()]` renders
|
|
22
|
+
* perfectly well and answers a different element every call, so it has no key
|
|
23
|
+
* and the shapes below stay silent on it — which is the right answer for a
|
|
24
|
+
* refusal that has to be right every time.
|
|
25
|
+
*/
|
|
26
|
+
export function reactivePathOf(expression) {
|
|
27
|
+
switch (expression.kind) {
|
|
28
|
+
case "IdentifierExpression":
|
|
29
|
+
return { root: expression.name, steps: [], text: expression.name };
|
|
30
|
+
case "MemberExpression": {
|
|
31
|
+
if (expression.optional)
|
|
32
|
+
return null;
|
|
33
|
+
const object = reactivePathOf(expression.object);
|
|
34
|
+
if (object === null)
|
|
35
|
+
return null;
|
|
36
|
+
return {
|
|
37
|
+
root: object.root,
|
|
38
|
+
steps: [...object.steps, { kind: "field", name: expression.property }],
|
|
39
|
+
text: `${object.text}.${expression.property}`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
case "IndexExpression": {
|
|
43
|
+
if (expression.optional)
|
|
44
|
+
return null;
|
|
45
|
+
const object = reactivePathOf(expression.object);
|
|
46
|
+
if (object === null)
|
|
47
|
+
return null;
|
|
48
|
+
const index = expression.index.kind === "LiteralExpression"
|
|
49
|
+
? (typeof expression.index.value === "string" ? JSON.stringify(expression.index.value) : expression.index.raw)
|
|
50
|
+
: reactiveWritePath(expression.index);
|
|
51
|
+
if (index === null)
|
|
52
|
+
return null;
|
|
53
|
+
return {
|
|
54
|
+
root: object.root,
|
|
55
|
+
steps: [...object.steps, { kind: "index", key: index }],
|
|
56
|
+
text: `${object.text}[${index}]`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
default:
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function reactiveWritePath(expression) {
|
|
64
|
+
return reactivePathOf(expression)?.text ?? null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* D114 0.28.0 H-D1: the steps a written place takes *below* the watch subject,
|
|
68
|
+
* `[]` when the write is the subject itself, and null when it is neither. §15
|
|
69
|
+
* says a watch fires on a deep change of its subject, so a write of a part of
|
|
70
|
+
* the subject is the same ring as a write of the subject — and a sibling
|
|
71
|
+
* (`watch form.name:` writing `form.email`) or a different root is not.
|
|
72
|
+
*/
|
|
73
|
+
export function reactiveStepsBelow(subject, written) {
|
|
74
|
+
if (written.root !== subject.root || written.steps.length < subject.steps.length)
|
|
75
|
+
return null;
|
|
76
|
+
for (const [index, step] of subject.steps.entries()) {
|
|
77
|
+
const other = written.steps[index];
|
|
78
|
+
if (step.kind !== other.kind)
|
|
79
|
+
return null;
|
|
80
|
+
if (step.kind === "field" ? step.name !== other.name
|
|
81
|
+
: step.key !== other.key)
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return written.steps.slice(subject.steps.length);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* D114 W: the calls that mutate the value at one place, or null where the place
|
|
88
|
+
* holds no collection. One reading of the compiler's own roster, asked of the
|
|
89
|
+
* subject and of any place below it alike, so a deep mutating call and a direct
|
|
90
|
+
* one can never disagree about which methods write.
|
|
91
|
+
*/
|
|
92
|
+
export function collectionMutators(place) {
|
|
93
|
+
return place.kind === "list" || place.kind === "map" || place.kind === "set" || place.kind === "record"
|
|
94
|
+
? mutatingCollectionMethods(place.kind)
|
|
95
|
+
: null;
|
|
96
|
+
}
|
|
97
|
+
/** The root name a reactive path starts from, which is the binding it resolves through. */
|
|
98
|
+
export function reactivePathRoot(expression) {
|
|
99
|
+
switch (expression.kind) {
|
|
100
|
+
case "IdentifierExpression":
|
|
101
|
+
return expression.name;
|
|
102
|
+
case "MemberExpression":
|
|
103
|
+
case "IndexExpression":
|
|
104
|
+
return reactivePathRoot(expression.object);
|
|
105
|
+
default:
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function bindingPatternBinds(pattern, name) {
|
|
110
|
+
switch (pattern.kind) {
|
|
111
|
+
case "NameBindingPattern":
|
|
112
|
+
return pattern.name === name;
|
|
113
|
+
case "ObjectBindingPattern":
|
|
114
|
+
return pattern.rest?.name === name || pattern.entries.some((entry) => bindingPatternBinds(entry.pattern, name));
|
|
115
|
+
case "ListBindingPattern":
|
|
116
|
+
return pattern.rest?.name === name
|
|
117
|
+
|| pattern.elements.some((element) => element !== null && bindingPatternBinds(element, name));
|
|
118
|
+
default:
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* D114 W: whether a body statement introduces its own binding of `name`. From
|
|
124
|
+
* that statement on, the spelling names something else, and a write through it
|
|
125
|
+
* is not a write of the watched place. The scan stops there rather than
|
|
126
|
+
* guessing which of the two a later line meant.
|
|
127
|
+
*/
|
|
128
|
+
export function statementBindsName(statement, name) {
|
|
129
|
+
switch (statement.kind) {
|
|
130
|
+
case "VariableDeclaration":
|
|
131
|
+
return bindingPatternBinds(statement.pattern, name);
|
|
132
|
+
case "UsingDeclaration":
|
|
133
|
+
case "FunctionDeclaration":
|
|
134
|
+
case "ClassDeclaration":
|
|
135
|
+
return statement.name === name;
|
|
136
|
+
default:
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* D114 W: the call a body statement makes when the statement is nothing but
|
|
142
|
+
* that call. `detach` is included because it is how a synchronous watch body
|
|
143
|
+
* starts asynchronous work — the tour and four charter fences spell the reload
|
|
144
|
+
* that way — so a refusal that only saw the bare call would miss the shape it
|
|
145
|
+
* exists for. Everything else (a call inside an `if`, an argument, an assigned
|
|
146
|
+
* result) is not a plain top-level call and is not offered here.
|
|
147
|
+
*/
|
|
148
|
+
export function topLevelCall(statement) {
|
|
149
|
+
const expression = statement.kind === "ExpressionStatement" ? statement.expression
|
|
150
|
+
: statement.kind === "DetachStatement" ? statement.expression
|
|
151
|
+
: null;
|
|
152
|
+
return expression !== null && expression.kind === "CallExpression" ? expression : null;
|
|
153
|
+
}
|
|
154
|
+
export function reactiveWriteCandidate(statement) {
|
|
155
|
+
if (statement.kind === "AssignmentStatement") {
|
|
156
|
+
const place = reactivePathOf(statement.target);
|
|
157
|
+
return place === null ? null : { place, method: null };
|
|
158
|
+
}
|
|
159
|
+
const call = statement.kind === "ExpressionStatement" && statement.expression.kind === "CallExpression"
|
|
160
|
+
? statement.expression
|
|
161
|
+
: null;
|
|
162
|
+
if (call === null || call.callee.kind !== "MemberExpression" || call.callee.optional)
|
|
163
|
+
return null;
|
|
164
|
+
const place = reactivePathOf(call.callee.object);
|
|
165
|
+
return place === null ? null : { place, method: call.callee.property };
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* D114 W: whether one plain body statement writes the watched place — the
|
|
169
|
+
* subject itself, or any place below it. An assignment or a compound
|
|
170
|
+
* assignment to it is one; so is a call of a mutating collection method on it,
|
|
171
|
+
* because a watch on a collection fires on its deep mutation and `mutators`
|
|
172
|
+
* answers the compiler's own roster of the calls that mutate whatever sits at
|
|
173
|
+
* that depth.
|
|
174
|
+
*
|
|
175
|
+
* D114 0.28.0 H-D1's other half: `watch form: rename()` where `rename` writes
|
|
176
|
+
* `form.name` is the same ring as `watch form: form.name = …`, which F1 already
|
|
177
|
+
* refuses. The subject and the writer question read one comparison —
|
|
178
|
+
* `reactiveStepsBelow` — so a deep write cannot be a cycle at one of them and
|
|
179
|
+
* not at the other.
|
|
180
|
+
*/
|
|
181
|
+
export function reactiveWriteOf(statement, subject, writes) {
|
|
182
|
+
const write = reactiveWriteCandidate(statement);
|
|
183
|
+
if (write === null)
|
|
184
|
+
return null;
|
|
185
|
+
const steps = reactiveStepsBelow(subject, write.place);
|
|
186
|
+
if (steps === null)
|
|
187
|
+
return null;
|
|
188
|
+
return writes(steps, write.method) ? write.place : null;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* D114 W A2(b): whether an `action` or `async def` writes `path` at its own top
|
|
192
|
+
* level, unconditionally. One hop: what the callee itself calls is not
|
|
193
|
+
* followed. A parameter of the callee's own that is spelled like the path's
|
|
194
|
+
* root, or a binding it declares before the write, means the write is not of
|
|
195
|
+
* the watched place and the answer is no.
|
|
196
|
+
*/
|
|
197
|
+
export function writerWritesPath(writer, subject, writes) {
|
|
198
|
+
if (writer.parameters.includes(subject.root))
|
|
199
|
+
return null;
|
|
200
|
+
for (const statement of writer.body) {
|
|
201
|
+
if (statementBindsName(statement, subject.root))
|
|
202
|
+
return null;
|
|
203
|
+
const written = reactiveWriteOf(statement, subject, writes);
|
|
204
|
+
if (written !== null)
|
|
205
|
+
return written;
|
|
206
|
+
}
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
export function collectReactiveWriters(program) {
|
|
210
|
+
const writers = new Map();
|
|
211
|
+
const claim = (name, declaration) => {
|
|
212
|
+
writers.set(name, writers.has(name) ? null : declaration);
|
|
213
|
+
};
|
|
214
|
+
const record = (statements) => {
|
|
215
|
+
for (const statement of statements) {
|
|
216
|
+
if (statement.kind === "FunctionDeclaration") {
|
|
217
|
+
claim(statement.name, statement.asynchronous
|
|
218
|
+
? { spelling: "async def", parameters: statement.parameters.map((parameter) => parameter.name), body: statement.body }
|
|
219
|
+
: null);
|
|
220
|
+
record(statement.body);
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (!isWebStatement(statement))
|
|
224
|
+
continue;
|
|
225
|
+
if (statement.kind === "ExtensionStatement:web:action") {
|
|
226
|
+
claim(statement.name, {
|
|
227
|
+
spelling: "action",
|
|
228
|
+
parameters: statement.parameters.map((parameter) => parameter.name),
|
|
229
|
+
body: statement.body,
|
|
230
|
+
});
|
|
231
|
+
record(statement.body);
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (statement.kind === "ExtensionStatement:web:component")
|
|
235
|
+
record(statement.body);
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
record(program.body);
|
|
239
|
+
return writers;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=watch-cycles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-cycles.js","sourceRoot":"","sources":["../../src/analysis/watch-cycles.ts"],"names":[],"mappings":"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"}
|
package/dist/analyzer.d.ts
CHANGED
|
@@ -98,6 +98,13 @@ export declare class VelarWebAnalyzer extends Analyzer {
|
|
|
98
98
|
* `builtinTypeNameDeclarationMessage` in packages/compiler/src/analyzer.ts,
|
|
99
99
|
* reported as VEL3007. The rosters differ; the wording is meant to read
|
|
100
100
|
* alike, so a change to either sentence belongs in both.
|
|
101
|
+
*
|
|
102
|
+
* `Duration` is on both rosters — Core owns it as a primitive and
|
|
103
|
+
* `velar/look` republishes it — so a Web module used to report it twice. This
|
|
104
|
+
* refusal is the more specific of the two, because it names the surface the
|
|
105
|
+
* author is writing against, so it marks the name refused and Core's stays
|
|
106
|
+
* unsaid. The mark is Core's own hook, which is what lets this pass take
|
|
107
|
+
* precedence without either side learning the other's roster.
|
|
101
108
|
*/
|
|
102
109
|
private rejectWebOwnedTypeNames;
|
|
103
110
|
/**
|
|
@@ -249,6 +256,44 @@ export declare class VelarWebAnalyzer extends Analyzer {
|
|
|
249
256
|
* fixed, exactly as two errors on one line are.
|
|
250
257
|
*/
|
|
251
258
|
private rejectWatchCycle;
|
|
259
|
+
/**
|
|
260
|
+
* D114 0.28.0 H-D1: the VEL5077 message one plain body statement earns, or
|
|
261
|
+
* null when it earns none.
|
|
262
|
+
*
|
|
263
|
+
* §15 says a watch fires on a *deep* change of its subject, so `watch form:
|
|
264
|
+
* form.name = …` and `watch items: items[0].done = …` are the same ring
|
|
265
|
+
* `items.append(…)` already is — decided at the top of the body, with no
|
|
266
|
+
* condition to end it — and were silent until the runtime's 100-round cap
|
|
267
|
+
* stopped them. The rule is therefore stated on the path rather than on the
|
|
268
|
+
* spelling: a write whose place is the subject, or any place below it, in an
|
|
269
|
+
* assignment, a compound assignment, or a mutating call.
|
|
270
|
+
*
|
|
271
|
+
* Every existing exclusion stands, because each is answered somewhere else: a
|
|
272
|
+
* conditional or nested write is not a plain body statement, a rebinding
|
|
273
|
+
* stops the scan in `rejectWatchCycle`, and a sibling path (`watch form.name:`
|
|
274
|
+
* writing `form.email`) or a different root fails the step comparison here.
|
|
275
|
+
*/
|
|
276
|
+
private watchSelfWrite;
|
|
277
|
+
/**
|
|
278
|
+
* D114 0.28.0 H-D1: the type of the place `steps` below the watched subject,
|
|
279
|
+
* or null when the walk cannot reach one.
|
|
280
|
+
*
|
|
281
|
+
* Only the steps the reactive graph publishes as part of the subject are
|
|
282
|
+
* walked — a record field and a collection element — because those are the
|
|
283
|
+
* writes a watch on the containing value is woken by. A step that leaves them
|
|
284
|
+
* (a class instance, a capability handle, a field the record does not declare)
|
|
285
|
+
* is not provably part of the subject, and a refusal that must be right every
|
|
286
|
+
* time answers no there rather than guessing.
|
|
287
|
+
*/
|
|
288
|
+
/**
|
|
289
|
+
* Whether a write `steps` below the watched subject, made the given way, is a
|
|
290
|
+
* write of the subject — the one definition both the body scan (VEL5077) and
|
|
291
|
+
* the one-hop writer scan (VEL5079) read. An assignment to a place the walk
|
|
292
|
+
* can reach is a write; a call is one only when the type at that depth is a
|
|
293
|
+
* collection and the call is on its own mutating roster.
|
|
294
|
+
*/
|
|
295
|
+
private watchSubjectWrite;
|
|
296
|
+
private reactivePlaceType;
|
|
252
297
|
/**
|
|
253
298
|
* D89 A4: records `list = list.map(item => {…})`, React's immutable update,
|
|
254
299
|
* where the callback builds a new record rather than changing a field.
|
package/dist/analyzer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwD,KAAK,UAAU,EAA2C,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClK,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
|