Rule 3.6
On this page

Rule 3.6

Chapter 3, Textual structure and names Test

A type name an author writes must be lowercase when WGSL declares it and capitalized when TypeShade declares it, so the case of a name says where its meaning comes from.

The rule text and the parts under it are the compiler's own English, as the design document writes them.

Rationale

f32, vec3, mat4x4, array, atomic, texture_2d, sampler, storage and uniform are WGSL’s own words, and an author who reads them in the WGSL specification finds the same word here; Vec64Any, MatColumn, LaneKeys, TextureElem, TexelCoord2 and VecFor3 are names TypeScript needed and WGSL does not have, and the capital says so. TypeScript’s own convention, lowercase for a primitive and capitalized for an interface, points the other way for array, and it loses for a reason the ambient library already shows: SHADE_DTS is compiled as the whole library (lib: [] in src/language-service/host.ts, noLib: true in src/compiler/ts/diagnostic.ts), so it declares the minimal globals TypeScript demands itself, and interface Array<T> is already one of them, carrying length and an index signature so that a list literal has a type at all. The capitalized Array<T> is therefore the checker’s array, the one the standard library would have supplied, and the lowercase array<T, N> is the author’s, the one WGSL spells with a size. Raising the author’s name to Array would collide with that, and would have to raise vec3 and f32 with it, which is the whole WGSL vocabulary this surface exists to spell. What a TypeScript author expects of an array is bought with behaviour instead: the aggregate operations get member forms on that same interface Array<T>, which array<T, N> picks from by name (Pick<Array<T>, ArrayOps>, #177), and a read-only view is ReadView<T> mapping the surface’s own index signature to a readonly one rather than a borrowed ReadonlyArray.

Derives from

WGSL Types, whose type names are lowercase; src/language-service/ambient.ts’s own interface Array<T> and the lib: [] compiler options beside it.

How it is verified

Checked by a test. A test, a gate script or a CI workflow names this rule, and the traceability check fails when a file listed below stops naming it.

Where the rule says the compiler enforces it:

surface-names.test.ts, whose WGSL source check passes only for a name the fixture carries under WGSL’s spelling, so a capitalized WGSL name would be reported as unsourced and a lowercase TypeShade name needs a §9.3 row that review reads.

The files that verify it at commit 26de7be8, each at the first line that names the rule:

Explained in

The sections of the surface document that explain this rule, at commit 26de7be8:

See also

Source

The rule at commit 26de7be8:

Edit this page Report a problem