@velarscript/web 0.30.0 → 0.30.1

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 CHANGED
@@ -1,5 +1,9 @@
1
1
  # @velarscript/web
2
2
 
3
+ **VelarScript 0.30.1 · Web surface `web@0.14`.** The counter is what a project
4
+ declares in `velar.json`'s `surfaces` and what a mismatch is refused by; the
5
+ release number every toolchain package steps to says only what you installed.
6
+
3
7
  The official Web framework for VelarScript. This package is the versioned
4
8
  authority for the `velar/look`, `velar/app`, `velar/config`, `velar/web`, `velar/forms`,
5
9
  `velar/http`, `velar/storage`, `velar/browser`, `velar/files`,
@@ -20,15 +24,19 @@ checked symbols and members.
20
24
  Applications keep the language-level imports:
21
25
 
22
26
  ```velar
23
-
24
27
  import {Head, Link, Router, route} from "velar/web"
25
28
  import {http} from "velar/http"
26
- import {rgb, spacing} from "velar/look"
29
+ import {hsl, rgb, spacing} from "velar/look"
27
30
 
28
31
  const accent = rgb(45, 79, 190)
32
+ const accentTint = hsl(224, 62%, 95%)
29
33
  const pagePadding = spacing(24px, 16px)
30
34
  ```
31
35
 
36
+ `hsl`'s saturation and lightness are a `Percentage`, the spelling CSS uses for
37
+ those two slots; a bare number is refused with the percentage it meant, and
38
+ `velar fix` writes it where the argument is a literal. The hue stays a number.
39
+
32
40
  One-off base properties use the same checked table through JSX directives, and
33
41
  remain ordered after any composed Look:
34
42
 
@@ -6,7 +6,7 @@
6
6
  * once here rather than twice in the middle of the Web analyzer.
7
7
  */
8
8
  import { type Diagnostic } from "@velarscript/compiler";
9
- import { type Expression, type ValueType } from "@velarscript/compiler/extension";
9
+ import { type Expression, type Span, type ValueType } from "@velarscript/compiler/extension";
10
10
  export declare function isLookNumericType(type: ValueType): boolean;
11
11
  /**
12
12
  * The type two visual operands add up to: the same kind on both sides keeps it,
@@ -28,6 +28,19 @@ export declare function lookAdditiveType(left: ValueType, right: ValueType, same
28
28
  export declare function foldedLengthPercentage(expression: Extract<Expression, {
29
29
  kind: "CallExpression";
30
30
  }>, builderOf: (name: string) => string | undefined, inferSlot: (argument: Expression) => ValueType, join: (left: ValueType, right: ValueType) => ValueType | null): ValueType | null;
31
+ /**
32
+ * Where the bare number a builder slot refused is actually written, and the
33
+ * binding it came through when that is not the argument itself.
34
+ *
35
+ * D114 F9-web (WB-I7): `hsl(210, sat, 45%)` under `const sat = 70` folds to a
36
+ * number, and the report was drawn under `sat` while its remedy said `70%` — so
37
+ * an author editing at the caret replaced the binding's use with a literal. The
38
+ * number is written in the binding's initializer, so that is where the caret
39
+ * goes, and the sentence names the binding so the line it lands on is explained.
40
+ * A constant imported from another module has no site here and keeps the
41
+ * argument's own span, which is the only position this compile can point at.
42
+ */
43
+ export type LookStaticSites = ReadonlyMap<string, Span>;
31
44
  /**
32
45
  * D114 P6 item 2 (LK-I3): a bare number written where a builder slot takes a
33
46
  * `Percentage`.
@@ -37,32 +50,56 @@ export declare function foldedLengthPercentage(expression: Extract<Expression, {
37
50
  * instead of adding a second report of one mistake. The message names the
38
51
  * percentage the author meant, and `velar fix` writes it where the argument is
39
52
  * a literal; an identifier that folded to a number is a binding whose
40
- * declaration is the place to change, so it earns the sentence and no rewrite.
53
+ * declaration is the place to change, so it earns the sentence there and no
54
+ * rewrite — retyping the binding is not a mechanical edit, because every other
55
+ * use of it is part of the answer.
41
56
  *
42
57
  * Returns whether the refusal was found and taught.
43
58
  */
44
- export declare function teachLookPercentageSlot(diagnostics: Diagnostic[], slot: string, argument: Expression, literal: number): boolean;
59
+ export declare function teachLookPercentageSlot(diagnostics: Diagnostic[], slot: string, argument: Expression, literal: number, sites: LookStaticSites): boolean;
45
60
  /**
46
- * D114 F7-web neighbour: a bare number written in a `min`, `max` or `clamp`
47
- * slot, which is the same mistake LK-I3 found on `hsl` and had left drawing two
48
- * reports core's `Cannot assign number to Length | Percentage |
49
- * LengthPercentage` and this analyzer's unit advice, side by side, about one
50
- * number.
61
+ * D114 F7-web-b: a bare number written in a builder slot that will not take
62
+ * one the mistake LK-I3 found on `hsl`, which on the length builders had been
63
+ * left drawing two reports about one number: core's `Cannot assign number to
64
+ * Length` and this analyzer's unit advice, side by side.
65
+ *
66
+ * Which slots those are is the builder's own published type, handed in by the
67
+ * caller, so there is no second table of builder positions kept in step by
68
+ * hand. Three shapes, three lessons:
69
+ *
70
+ * - a slot whose type is exactly `Length` — `blur`'s radius, `border`'s
71
+ * width, the offsets and spread of `shadow` and `dropShadow` — has one
72
+ * natural unit, so the sentence names it and `velar fix` writes `4px`;
73
+ * - a slot that takes a length *or* a percentage — `min`, `max` and `clamp`,
74
+ * the three builders that exist to mix them — names both spellings and
75
+ * offers no rewrite, because `100px` and `100%` are different pictures and
76
+ * the one the author meant is not the compiler's to guess;
77
+ * - a slot whose union admits `number` as well — `spacing`, `tracks`,
78
+ * `minmax` — draws no refusal from core at all, so the unit advice is the
79
+ * whole diagnosis, and zero passes because that union really does take it.
80
+ *
81
+ * D114 F9-web (WB-I2): all three sentences are one sentence, built from the
82
+ * slot's own published type, because the advice used to be written twice. The
83
+ * unit advice said "(only 0 is unitless)" for every builder that composes
84
+ * lengths — true of the third shape, whose union takes a bare `0`, and a
85
+ * falsehood on `blur` and `shadow`, where `blur(0)` is refused. A slot cannot
86
+ * now be told what it takes by anything but its type: `slotAccepts` reads it,
87
+ * and the "or 0" clause exists exactly where a bare number is accepted.
51
88
  *
52
- * These three builders exist to mix `%` with `px`, so every slot of theirs
53
- * takes a length or a percentage and core has already refused the number. That
54
- * refusal is where the lesson goes it names the slot, what the slot takes,
55
- * and both spellings of the remedy — and there is no second report. There is
56
- * also no `velar fix` edit: `100px` and `100%` are different pictures, and the
57
- * one the author meant is not the compiler's to guess.
89
+ * Zero is refused in the first two: `blur(0)` and `min(0, 600px)` are not CSS,
90
+ * so the slot says what to write. A slot that admits no length at all — a
91
+ * colour, a border style, `inset`is not this rule's business and earns
92
+ * nothing here.
58
93
  *
59
- * Every other length builder takes a number as far as the type system is
60
- * concerned (`spacing`, `tracks`, `minmax` and their kin publish unions that
61
- * include `number`), so there the unit advice is the only report there is, and
62
- * zero is the one unitless length CSS accepts.
94
+ * D114 WB-X1: `declared` is the builder's whole published type rather than one
95
+ * slot of it, because a rest parameter's type is the type of every position it
96
+ * collects and reading `parameters[position]` stopped at the last named one.
97
+ * `tracks(4, 8px)` was refused and `tracks(8px, 4)` drew nothing at all — the
98
+ * second argument of a builder whose signature declares one parameter had no
99
+ * published type to read, so the lesson never ran there.
63
100
  *
64
101
  * Returns whether the argument was refused here, which is the caller's record
65
102
  * that this call failed its own argument check.
66
103
  */
67
- export declare function teachLookLengthSlot(diagnostics: Diagnostic[], builder: string, position: number, argument: Expression, literal: number): boolean;
104
+ export declare function teachLookLengthSlot(diagnostics: Diagnostic[], builder: string, position: number, declared: ValueType, argument: Expression, literal: number, sites: LookStaticSites): boolean;
68
105
  //# sourceMappingURL=look-values.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"look-values.d.ts","sourceRoot":"","sources":["../../src/analysis/look-values.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAMlF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAO3G;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,EAC3D,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAC/C,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,KAAK,SAAS,EAC9C,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,GAAG,IAAI,GAC5D,SAAS,GAAG,IAAI,CAclB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,UAAU,EAAE,EACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAQT;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAiBT"}
1
+ {"version":3,"file":"look-values.d.ts","sourceRoot":"","sources":["../../src/analysis/look-values.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAM7F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAO3G;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,EAC3D,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAC/C,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,KAAK,SAAS,EAC9C,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,GAAG,IAAI,GAC5D,SAAS,GAAG,IAAI,CAclB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAkBxD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,UAAU,EAAE,EACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,GACrB,OAAO,CAUT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,GACrB,OAAO,CAiCT"}
@@ -59,6 +59,16 @@ export function foldedLengthPercentage(expression, builderOf, inferSlot, join) {
59
59
  }
60
60
  return folded;
61
61
  }
62
+ function lookSlotOrigin(argument, sites) {
63
+ if (argument.kind !== "IdentifierExpression")
64
+ return { span: argument.span, binding: null };
65
+ const site = sites.get(argument.name);
66
+ return site === undefined ? { span: argument.span, binding: null } : { span: site, binding: argument.name };
67
+ }
68
+ /** "4 is a number", or "'n' holds 4, a number" where the argument folded through a binding. */
69
+ function heldNumber(origin, written, refused) {
70
+ return origin.binding === null ? `${written} is ${refused}` : `'${origin.binding}' holds ${written}, ${refused}`;
71
+ }
62
72
  /**
63
73
  * D114 P6 item 2 (LK-I3): a bare number written where a builder slot takes a
64
74
  * `Percentage`.
@@ -68,61 +78,158 @@ export function foldedLengthPercentage(expression, builderOf, inferSlot, join) {
68
78
  * instead of adding a second report of one mistake. The message names the
69
79
  * percentage the author meant, and `velar fix` writes it where the argument is
70
80
  * a literal; an identifier that folded to a number is a binding whose
71
- * declaration is the place to change, so it earns the sentence and no rewrite.
81
+ * declaration is the place to change, so it earns the sentence there and no
82
+ * rewrite — retyping the binding is not a mechanical edit, because every other
83
+ * use of it is part of the answer.
72
84
  *
73
85
  * Returns whether the refusal was found and taught.
74
86
  */
75
- export function teachLookPercentageSlot(diagnostics, slot, argument, literal) {
87
+ export function teachLookPercentageSlot(diagnostics, slot, argument, literal, sites) {
76
88
  const written = `${Number(literal.toPrecision(12))}%`;
89
+ const origin = lookSlotOrigin(argument, sites);
77
90
  const rewritable = argument.kind === "LiteralExpression" && typeof argument.value === "number";
78
91
  return teachSlotRefusal(diagnostics, argument, "Percentage", (item) => ({
79
92
  ...item,
80
- message: `${slot} is a percentage, and ${literal} is a number; write ${written}`,
93
+ span: origin.span,
94
+ message: `${slot} is a percentage, and ${heldNumber(origin, String(literal), "a number")}; write ${written}`,
81
95
  ...(rewritable ? { fix: mechanicalFix(argument.span, written, `Write ${written}`) } : {}),
82
96
  }));
83
97
  }
84
98
  /**
85
- * D114 F7-web neighbour: a bare number written in a `min`, `max` or `clamp`
86
- * slot, which is the same mistake LK-I3 found on `hsl` and had left drawing two
87
- * reports core's `Cannot assign number to Length | Percentage |
88
- * LengthPercentage` and this analyzer's unit advice, side by side, about one
89
- * number.
99
+ * D114 F7-web-b: a bare number written in a builder slot that will not take
100
+ * one the mistake LK-I3 found on `hsl`, which on the length builders had been
101
+ * left drawing two reports about one number: core's `Cannot assign number to
102
+ * Length` and this analyzer's unit advice, side by side.
103
+ *
104
+ * Which slots those are is the builder's own published type, handed in by the
105
+ * caller, so there is no second table of builder positions kept in step by
106
+ * hand. Three shapes, three lessons:
107
+ *
108
+ * - a slot whose type is exactly `Length` — `blur`'s radius, `border`'s
109
+ * width, the offsets and spread of `shadow` and `dropShadow` — has one
110
+ * natural unit, so the sentence names it and `velar fix` writes `4px`;
111
+ * - a slot that takes a length *or* a percentage — `min`, `max` and `clamp`,
112
+ * the three builders that exist to mix them — names both spellings and
113
+ * offers no rewrite, because `100px` and `100%` are different pictures and
114
+ * the one the author meant is not the compiler's to guess;
115
+ * - a slot whose union admits `number` as well — `spacing`, `tracks`,
116
+ * `minmax` — draws no refusal from core at all, so the unit advice is the
117
+ * whole diagnosis, and zero passes because that union really does take it.
90
118
  *
91
- * These three builders exist to mix `%` with `px`, so every slot of theirs
92
- * takes a length or a percentage and core has already refused the number. That
93
- * refusal is where the lesson goes it names the slot, what the slot takes,
94
- * and both spellings of the remedy and there is no second report. There is
95
- * also no `velar fix` edit: `100px` and `100%` are different pictures, and the
96
- * one the author meant is not the compiler's to guess.
119
+ * D114 F9-web (WB-I2): all three sentences are one sentence, built from the
120
+ * slot's own published type, because the advice used to be written twice. The
121
+ * unit advice said "(only 0 is unitless)" for every builder that composes
122
+ * lengths true of the third shape, whose union takes a bare `0`, and a
123
+ * falsehood on `blur` and `shadow`, where `blur(0)` is refused. A slot cannot
124
+ * now be told what it takes by anything but its type: `slotAccepts` reads it,
125
+ * and the "or 0" clause exists exactly where a bare number is accepted.
97
126
  *
98
- * Every other length builder takes a number as far as the type system is
99
- * concerned (`spacing`, `tracks`, `minmax` and their kin publish unions that
100
- * include `number`), so there the unit advice is the only report there is, and
101
- * zero is the one unitless length CSS accepts.
127
+ * Zero is refused in the first two: `blur(0)` and `min(0, 600px)` are not CSS,
128
+ * so the slot says what to write. A slot that admits no length at all — a
129
+ * colour, a border style, `inset` is not this rule's business and earns
130
+ * nothing here.
131
+ *
132
+ * D114 WB-X1: `declared` is the builder's whole published type rather than one
133
+ * slot of it, because a rest parameter's type is the type of every position it
134
+ * collects and reading `parameters[position]` stopped at the last named one.
135
+ * `tracks(4, 8px)` was refused and `tracks(8px, 4)` drew nothing at all — the
136
+ * second argument of a builder whose signature declares one parameter had no
137
+ * published type to read, so the lesson never ran there.
102
138
  *
103
139
  * Returns whether the argument was refused here, which is the caller's record
104
140
  * that this call failed its own argument check.
105
141
  */
106
- export function teachLookLengthSlot(diagnostics, builder, position, argument, literal) {
107
- const signature = LOOK_BUILDER_SIGNATURES.get(builder);
108
- const slot = signature?.result === "length-percentage" && position >= 0 ? signature.parameters[position] : undefined;
142
+ export function teachLookLengthSlot(diagnostics, builder, position, declared, argument, literal, sites) {
143
+ const slot = lookSlotNoun(builder, position);
144
+ const accepts = slotAccepts(lookSlotType(declared, position));
145
+ if (slot === undefined || accepts === null)
146
+ return false;
109
147
  const written = `${Number(literal.toPrecision(12))}`;
110
- if (slot !== undefined && teachSlotRefusal(diagnostics, argument, "LengthPercentage", (item) => ({
148
+ const origin = lookSlotOrigin(argument, sites);
149
+ const spellings = accepts === "a Length" ? `${written}px`
150
+ : accepts === "a Percentage" ? `${written}%` : `${written}px or ${written}%`;
151
+ // `tracks` is the one length builder whose name ends in an s, and "tracks's"
152
+ // is not how the possessive is written.
153
+ const lesson = `${builder}${builder.endsWith("s") ? "'" : "'s"} ${slot} is ${accepts},`
154
+ + ` and ${heldNumber(origin, written, accepts.endsWith("or 0") ? "none of those" : "a number")}; write ${spellings}`;
155
+ if (accepts === "a Length" && teachSlotRefusal(diagnostics, argument, "Length", (item) => ({
111
156
  ...item,
112
- message: `${builder}'s ${slot} argument is a Length or a Percentage, and ${written} is a number;`
113
- + ` write ${written}px or ${written}%`,
157
+ span: origin.span,
158
+ message: lesson,
159
+ ...(argument.kind === "LiteralExpression" && typeof argument.value === "number"
160
+ ? { fix: mechanicalFix(argument.span, `${written}px`, `Write ${written}px`) }
161
+ : {}),
114
162
  })))
115
163
  return true;
116
- if (literal === 0)
164
+ // The refused type is the slot's own, so a slot that takes only a percentage
165
+ // finds its refusal too rather than falling through and reporting twice.
166
+ if (accepts !== "a Length" && teachSlotRefusal(diagnostics, argument, accepts === "a Percentage" ? "Percentage" : "LengthPercentage", (item) => ({
167
+ ...item,
168
+ span: origin.span,
169
+ message: lesson,
170
+ })))
171
+ return true;
172
+ // A slot whose union takes a bare number takes `0`, and CSS writes that one
173
+ // length without a unit; every other number in it is the dead declaration
174
+ // this report exists for.
175
+ if (literal === 0 && accepts.endsWith("or 0"))
117
176
  return false;
118
- diagnostics.push({
119
- code: "VEL5042",
120
- message: `${builder} composes CSS lengths, so ${literal} requires a unit;`
121
- + ` write a unit value such as ${literal}px or ${literal}rem (only 0 is unitless)`,
122
- span: argument.span,
123
- });
177
+ diagnostics.push({ code: "VEL5042", message: lesson, span: origin.span });
124
178
  return true;
125
179
  }
180
+ /**
181
+ * The published type of the slot an argument lands in: the declared parameter
182
+ * at that position, or — past the last of those — the rest parameter's type,
183
+ * which is the type of every position it collects.
184
+ */
185
+ function lookSlotType(declared, position) {
186
+ if (position < 0 || declared.kind !== "function")
187
+ return undefined;
188
+ return declared.parameters[position] ?? declared.rest;
189
+ }
190
+ /**
191
+ * How the lesson refers to the slot an argument lands in, or undefined where
192
+ * the builder has no slot there at all.
193
+ *
194
+ * D114 WB-X1: a rest parameter collects every position from its own onward, and
195
+ * the signature has a name for only the first of them — so `tracks(8px, 4)`
196
+ * used to read past the end of the name table and teach nothing, while
197
+ * `tracks(4, 8px)` was refused. The collected positions are named by their
198
+ * number rather than by the rest parameter's name, because "tracks' first
199
+ * argument" pointing at the second argument would be a sentence that is not
200
+ * true. The named positions keep the wording F9-web gave them exactly.
201
+ */
202
+ function lookSlotNoun(builder, position) {
203
+ if (position < 0)
204
+ return undefined;
205
+ const signature = LOOK_BUILDER_SIGNATURES.get(builder);
206
+ if (signature === undefined)
207
+ return undefined;
208
+ const named = signature.parameters[position];
209
+ if (named !== undefined)
210
+ return `${named} argument`;
211
+ return signature.rest === true ? `argument ${position + 1}` : undefined;
212
+ }
213
+ /**
214
+ * What a slot's published type accepts, in the words the lesson names it with,
215
+ * or null where the slot carries no length at all. The "or 0" tail is the one
216
+ * fact a reader has to be able to trust in both directions, so it is read from
217
+ * the type rather than written into a sentence by hand.
218
+ */
219
+ function slotAccepts(type) {
220
+ if (type === undefined)
221
+ return null;
222
+ if (type.kind === "named") {
223
+ if (!lengthPercentageNames.has(type.name))
224
+ return null;
225
+ return type.name === "Length" ? "a Length" : type.name === "Percentage" ? "a Percentage" : "a Length or a Percentage";
226
+ }
227
+ if (type.kind !== "union")
228
+ return null;
229
+ if (!type.members.some((member) => member.kind === "named" && lengthPercentageNames.has(member.name)))
230
+ return null;
231
+ return type.members.some((member) => member.kind === "number") ? "a Length, a Percentage, or 0" : "a Length or a Percentage";
232
+ }
126
233
  /**
127
234
  * The search both slot lessons make: core's assignability refusal for exactly
128
235
  * this argument, rewritten in place. Diagnostics are collected in source order,
@@ -1 +1 @@
1
- {"version":3,"file":"look-values.js","sourceRoot":"","sources":["../../src/analysis/look-values.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"look-values.js","sourceRoot":"","sources":["../../src/analysis/look-values.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export declare class VelarWebAnalyzer extends Analyzer {
22
22
  private readonly unsafeCssImports;
23
23
  private readonly probedOperandTypes;
24
24
  private readonly importedLookStaticValues;
25
- private lookStaticValues;
25
+ private lookStatic;
26
26
  private readonly lookEntryScopes;
27
27
  private readonly derivedReactiveNames;
28
28
  private readonly checkedBuilderCalls;
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
package/dist/analyzer.js CHANGED
@@ -3,7 +3,7 @@ import { Analyzer, anyType, boolType, describeType, expressionContainsDirectAwai
3
3
  import { BROWSER_TEST_MODULE, BROWSER_TEST_SOURCE_SUFFIX, browserTestImportGuidance } from "./browser-test.js";
4
4
  import { cssTokens } from "./css-tokens.js";
5
5
  import { LOOK_ABSENT_MEDIA_SUBJECTS, LOOK_ARITHMETIC_HINT, LOOK_ANIMATION_DIRECTIONS, LOOK_ANIMATION_EASINGS, LOOK_ANIMATION_FILLS, LOOK_BORDER_STYLE_NAMES, LOOK_BUILDER_NUMERIC_RANGES, LOOK_BUILDER_SIGNATURES, LOOK_BUILDERS, LOOK_EXCLUDED_PROPERTIES, LOOK_HOOKS, LOOK_CSS_WIDE_KEYWORDS, LOOK_COLOR_KEYWORDS, LOOK_LARGE_KEYWORD_SETS, LOOK_LENGTH_BUILDERS, LOOK_MEDIA_LENGTH_UNITS, LOOK_MEDIA_SUBJECTS, LOOK_NUMERIC_TYPE_NAMES, LOOK_NON_ANIMATABLE_PROPERTIES, LOOK_PARTIAL_KEYWORD_PROPERTIES, LOOK_PROPERTIES, LOOK_PROPERTY_KEYWORDS, LOOK_PROPERTY_VALUE_KINDS, LOOK_SHARED_METRIC_KEYWORDS, LOOK_TARGETS, LOOK_TOKEN_NAME_RULE, LOOK_TOKEN_NO_FALLBACK_GUIDANCE, LOOK_UNIT_TYPES, LOOK_UNITLESS_PROPERTIES, isLookTokenName, isLookVarReference, lookOwnKeywords, lookShorthandOverlap, lookShorthandParts, lookTokenReference, lookVarReferenceName, nearestLookName, } from "./look.js";
6
- import { collectLookStaticValues, evaluateLookStaticExpression, isLookStaticValue, lookStaticCss } from "./look-static.js";
6
+ import { collectLookStaticScope, evaluateLookStaticExpression, isLookStaticValue, lookStaticCss } from "./look-static.js";
7
7
  import { keyframeCssValue } from "./keyframes.js";
8
8
  import { componentCallRefusal, componentRefHandleRefusal, componentSectionCountDiagnostics, watchedResourceSurfaceRefusal } from "./analysis/component-guidance.js";
9
9
  import { foldedLengthPercentage, isLookNumericType, lookAdditiveType, teachLookLengthSlot, teachLookPercentageSlot } from "./analysis/look-values.js";
@@ -1715,7 +1715,7 @@ export class VelarWebAnalyzer extends Analyzer {
1715
1715
  unsafeCssImports = new Set();
1716
1716
  probedOperandTypes = new Map();
1717
1717
  importedLookStaticValues;
1718
- lookStaticValues = new Map();
1718
+ lookStatic = { values: new Map(), sites: new Map() };
1719
1719
  lookEntryScopes = new Map();
1720
1720
  derivedReactiveNames = new Set();
1721
1721
  checkedBuilderCalls = new Set();
@@ -1784,7 +1784,7 @@ export class VelarWebAnalyzer extends Analyzer {
1784
1784
  this.importedComputedNames = new Set(webImports.filter(([, value]) => isWebComputedExport(value)).map(([name]) => name));
1785
1785
  }
1786
1786
  analyze(program) {
1787
- this.lookStaticValues = collectLookStaticValues(program, this.importedLookStaticValues);
1787
+ this.lookStatic = collectLookStaticScope(program, this.importedLookStaticValues);
1788
1788
  this.lookBuilderNames = collectLookBuilderNames(program);
1789
1789
  this.publicConfigNames = collectPublicConfigNames(program);
1790
1790
  this.lookImport = collectLookImportSite(program);
@@ -3242,8 +3242,8 @@ export class VelarWebAnalyzer extends Analyzer {
3242
3242
  if (inheritedTerms * Math.max(thenTerms, elseTerms) > LOOK_CONDITION_TERM_LIMIT) {
3243
3243
  this.diagnostics.push(diagnostic("VEL5045", `A Look condition may expand to at most ${LOOK_CONDITION_TERM_LIMIT} selector/runtime terms; split this visual decision into ordinary values`, entry.condition.span));
3244
3244
  }
3245
- const thenKey = lookConditionKey(entry.condition, false, this.lookStaticValues);
3246
- const elseKey = lookConditionKey(entry.condition, true, this.lookStaticValues);
3245
+ const thenKey = lookConditionKey(entry.condition, false, this.lookStatic.values);
3246
+ const elseKey = lookConditionKey(entry.condition, true, this.lookStatic.values);
3247
3247
  this.analyzeLookEntries(entry.thenEntries, insideTarget, true, Math.min(LOOK_CONDITION_TERM_LIMIT, inheritedTerms * thenTerms), `${scopeKey}&${thenKey}`);
3248
3248
  this.analyzeLookEntries(entry.elseEntries, insideTarget, true, Math.min(LOOK_CONDITION_TERM_LIMIT, inheritedTerms * elseTerms), `${scopeKey}&${elseKey}`);
3249
3249
  continue;
@@ -3343,9 +3343,8 @@ export class VelarWebAnalyzer extends Analyzer {
3343
3343
  * module compiles; dynamic arguments keep the runtime guard.
3344
3344
  */
3345
3345
  checkLookBuilderCall(expression) {
3346
- const builder = expression.callee.kind === "IdentifierExpression"
3347
- ? this.lookBuilderNames.get(expression.callee.name)
3348
- : undefined;
3346
+ const callee = expression.callee.kind === "IdentifierExpression" ? expression.callee.name : "";
3347
+ const builder = this.lookBuilderNames.get(callee);
3349
3348
  if (!builder)
3350
3349
  return;
3351
3350
  const key = spanIdentity(expression.span);
@@ -3369,6 +3368,10 @@ export class VelarWebAnalyzer extends Analyzer {
3369
3368
  // table: `rgba(0, 0, 0, alpha=2)` compiled clean while `rgba(0, 0, 0, 2)`
3370
3369
  // was refused.
3371
3370
  const parameters = LOOK_BUILDER_SIGNATURES.get(builder)?.parameters;
3371
+ // LOK-D3: which slots take a length is the builder's own published type,
3372
+ // read from the binding this call resolved through — the declaration core's
3373
+ // assignability check refused against — and not a second table of positions.
3374
+ const declared = this.expandAliases(this.lookup(callee)?.type ?? { kind: "unknown" });
3372
3375
  const before = this.diagnostics.length;
3373
3376
  let taught = false;
3374
3377
  for (const [index, argument] of expression.arguments.entries()) {
@@ -3380,7 +3383,7 @@ export class VelarWebAnalyzer extends Analyzer {
3380
3383
  // folded value rather than the literal node is what makes the promise
3381
3384
  // "a computed argument keeps the same check" true where the run time the
3382
3385
  // charter names does not exist.
3383
- const folded = evaluateLookStaticExpression(argument, this.lookStaticValues);
3386
+ const folded = evaluateLookStaticExpression(argument, this.lookStatic.values);
3384
3387
  const literal = folded?.kind === "number" ? folded.value : null;
3385
3388
  // D114 P6 item 2 (LK-I3): a slot whose domain carries a unit states its
3386
3389
  // bound in that unit and reads the value out of the unit's own number, so
@@ -3393,7 +3396,7 @@ export class VelarWebAnalyzer extends Analyzer {
3393
3396
  const unit = rangeUnit ?? "";
3394
3397
  this.diagnostics.push(diagnostic("VEL5042", `${range[0]} must be from ${range[1]}${unit} through ${range[2]}${unit}; ${builder} received ${ranged}${unit}`, argument.span));
3395
3398
  }
3396
- if (rangeUnit === "%" && literal !== null && teachLookPercentageSlot(this.diagnostics, range[0], argument, literal))
3399
+ if (rangeUnit === "%" && literal !== null && teachLookPercentageSlot(this.diagnostics, range[0], argument, literal, this.lookStatic.sites))
3397
3400
  taught = true;
3398
3401
  const nonNegativeBlur = (builder === "blur" && position === 0) || (builder === "dropShadow" && position === 2);
3399
3402
  if (nonNegativeBlur && folded?.kind === "unit" && folded.value < 0) {
@@ -3401,12 +3404,10 @@ export class VelarWebAnalyzer extends Analyzer {
3401
3404
  }
3402
3405
  // LOK-D3, builder half: a unitless number in a length position is dead
3403
3406
  // CSS exactly as it is on a property — except in a slot whose own type
3404
- // takes only a length or a percentage, where core's refusal is already
3405
- // the report and gains the remedy rather than a neighbour.
3407
+ // refuses the number outright, where core's refusal is already the report
3408
+ // and gains the remedy rather than a neighbour.
3406
3409
  if (LOOK_LENGTH_BUILDERS.has(builder) && literal !== null
3407
- && !(builder === "border" && position !== 0) && !(builder === "shadow" && position === 5)
3408
- && !(builder === "dropShadow" && position === 3)
3409
- && teachLookLengthSlot(this.diagnostics, builder, position, argument, literal))
3410
+ && teachLookLengthSlot(this.diagnostics, builder, position, declared, argument, literal, this.lookStatic.sites))
3410
3411
  taught = true;
3411
3412
  if (builder === "border" && position === 2 && argument.kind === "LiteralExpression" && typeof argument.value === "string"
3412
3413
  && !LOOK_BORDER_STYLE_NAMES.has(argument.value)) {
@@ -3580,7 +3581,7 @@ export class VelarWebAnalyzer extends Analyzer {
3580
3581
  // is wrong with it, and "does not resolve to static CSS" is only the consequence —
3581
3582
  // a sentence that sends its author looking for a rule against named arguments in
3582
3583
  // a stop, which there is not (`spread=2px` in range compiles).
3583
- if (keyframeCssValue(entry.value, this.lookStaticValues) === null && !this.refusedBuilderCallWithin(entry.value.span)) {
3584
+ if (keyframeCssValue(entry.value, this.lookStatic.values) === null && !this.refusedBuilderCallWithin(entry.value.span)) {
3584
3585
  this.diagnostics.push(diagnostic("VEL5060", "A keyframe value must resolve to static CSS from literals, unit values, arithmetic, velar/look builders, or const bindings — local or imported — that hold any of those, and the text it resolves to must read as one declaration value: no ';', '{', '}', or '@' outside a string, with parentheses, strings, and comments all closed", entry.value.span));
3585
3586
  }
3586
3587
  if (mentionsLookUnitType(expected) && lookLiteralZero(entry.value))
@@ -3929,7 +3930,7 @@ export class VelarWebAnalyzer extends Analyzer {
3929
3930
  foldedLookKeyword(value) {
3930
3931
  if (value.kind !== "IdentifierExpression" && value.kind !== "MemberExpression")
3931
3932
  return null;
3932
- const folded = evaluateLookStaticExpression(value, this.lookStaticValues);
3933
+ const folded = evaluateLookStaticExpression(value, this.lookStatic.values);
3933
3934
  if (folded?.kind !== "css" || !/^[A-Za-z][A-Za-z0-9-]*$/u.test(folded.value))
3934
3935
  return null;
3935
3936
  return [folded.value];
@@ -4007,7 +4008,7 @@ export class VelarWebAnalyzer extends Analyzer {
4007
4008
  return boolType;
4008
4009
  }
4009
4010
  checkViewportThreshold(value) {
4010
- const threshold = evaluateLookStaticExpression(value, this.lookStaticValues);
4011
+ const threshold = evaluateLookStaticExpression(value, this.lookStatic.values);
4011
4012
  if (threshold?.kind !== "unit") {
4012
4013
  this.diagnostics.push(diagnostic("VEL5052", "A viewport breakpoint must resolve at compile time to a px, rem, or em value; use a const unit token or an imported const unit token", value.span));
4013
4014
  }