fix(ja): clean up jsxref macro args#36165
Conversation
The `@@iterator` / `@@species` / etc. notation is the old MDN convention for well-known symbol properties. Canonical pages now live under `Symbol.<name>` (e.g. `Symbol.iterator`). Update the macro args to match and insert a `/` so the normalization step (`.` -> `/`) doesn't split the `Symbol.` qualifier.
`{{jsxref("Object.prototype")}}` and similar refs were producing
broken links because no `Object/prototype` page exists; the class
page (`Object`, `Array`, etc.) documents `.prototype` directly.
Rewrite to link to the class page.
Preview URLs (235 pages)
Flaws (190)Note! 152 documents with no flaws that don't need to be listed. 🎉 Found an unexpected or unresolvable flaw? Please report it here. URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL:
URL: [ TRUNCATED! (comment last updated: 2026-05-22 16:31:27) |
The old `Operators/<Group>_Operators` slugs and related obsolete leaves redirect under the en-US slug graph but never reach the canonical pages cleanly. Rewrite the first arg to the current canonical sub-path.
`Operators/Array_comprehensions`, `Operators/Generator_comprehensions`, `Operators/Expression_closures`, and `Statements/Legacy_generator_function` were removed from JavaScript. Rewrite the macro args to point at `Deprecated_and_obsolete_features`.
The Proxy constructor page was renamed; the handler-trap namespace now lives under `Global_Objects/Proxy/Proxy/<trap>`.
Rewrite arg1 for slugs that en-US redirects resolve cleanly so the
macro doesn't hop: bare `null`/`eval[()]`, `Global_Objects/null`,
`Statements/default`, `instructions/const`, `Operators/get`/`set`,
`Global_Objects/<X>/toSource`, `<X>.prototype.toSource[()]`,
`String.prototype.contains[()]`, `Global_Objects/TypedArray/name`,
`TypedArray.name`, `Global_Objects/Array/flatten`,
`Global_Objects/Date/toGMTString`, `Global_Objects/String/trim{Left,Right}`,
`Global_Objects/uneval`, bare `Reserved_Words`/`rest_parameters`.
Strip the `Global_Objects/` prefix when safe — display arg2 is dropped only when it's the last positional arg and equals the post-strip default. Skips dotted-leaf suffixes (e.g. `Symbol.match`) and bare `eval`, which the currently-published rari can't resolve without the explicit prefix.
The macro strips `()` for URL resolution but keeps it in the default display, so arg2 is redundant when it only adds parens to arg1. Only drops arg2 when it's the last positional arg.
`{{jsxref("NumberFormat")}}` and friends resolve via redirect because
the canonical page lives under `Global_Objects/Intl/<Class>`. Rewrite
the bare and dotted forms (`Collator.compare`, `NumberFormat/format`)
to the canonical `Intl/<Class>` path. When no explicit display arg is
set, insert the original arg as the display text so the rendered
label keeps reflecting what the author originally wrote (e.g.
"NumberFormat" remains visible even though the link now goes to
`Intl/NumberFormat`).
WebAssembly was moved out of `Web/JavaScript/Reference/Global_Objects/` and now lives at `/WebAssembly/Reference/JavaScript_interface/`. The `jsxref` macro is scoped to JS Reference, so `WebAssembly.<X>` refs all surface as `templ-redirected-link`. Convert them to plain markdown links pointing at the canonical WebAssembly path. Display preservation: keep an explicit display arg when set; otherwise use the dotted `WebAssembly.<X>` form (with parens preserved when arg1 had them) so the rendered label is unchanged.
Round 2 of the redirect-targets sweep. Additional
`SIMPLE_RENAMES_REDIRECTS` entries:
- bare `uneval`/`uneval()` (not just `Global_Objects/uneval`) →
`Deprecated_and_obsolete_features`.
- `Object.toSource[()]` (static/prototype dotted form) →
`Object.prototype.toString[()]`.
- `Intl/Locale/{calendars,hourCycles,numberingSystems}` (and
`Global_Objects/`-prefixed form) → `get{Calendars,HourCycles,NumberingSystems}`
(property → getter-method rename in the spec).
- `<Class>.Symbol.species` dotted form → `<Class>/Symbol.species`
so the macro's `.`→`/` normalization doesn't split the trailing
`.species` segment.
Lowercase JS class names (`string`/`boolean`/`number`/`object`/ `promise`/`array`/`symbol`) → canonical capitalized form; `Operators/Conditional_Operator`/`Comma_Operator`/`Function`/ `Operator_Precedence`/`Property_Accessors` → lowercase suffix; method-name typos (`Date/valueof` → `valueOf`, `Map/foreach` → `forEach`, `object/defineProperty`/`defineProperties` → `Object/`); lowercase namespace slugs (`statements/`/`operators/`/`functions/`/ `classes`) → canonical capitalized; `Classes/Constructor` → lowercase `constructor`; `Regexp/` → `RegExp/`; `Intl/DatetimeFormat` → `DateTimeFormat`; `Statements/empty` → `Empty`; `Global_objects/` → `Global_Objects/`; `template_literals` → `Template_literals`; `Errors/Strict_Non_Simple_Params` casing. Also resolve the bare `function` ambiguous arg (matches both `Operators/function` and `Statements/function`) by picking the expression form — all observed call sites are callback parameters in WebAPI pages. Display preservation keeps the original (mis-cased) form rendered so the link text is unchanged.
Round 2 of the case-fix sweep covering the dotted variants the round-1 mapping missed: `Date.valueof` → `Date.valueOf`, `Map.foreach` → `Map.forEach`, `Regexp.<member>` → `RegExp.<member>` (for `global`/`ignoreCase`/`multiline`/`sticky`), `object.defineProperty`/ `defineProperties` → `Object.`, and `Operators/conditional_operator` (uppercase Operators, lowercase Conditional) → `Operators/Conditional_operator`.
Catches the small set of args that became part of the universal `SIMPLE_RENAMES_REDIRECTS` map during later locales: - bare `this` → `Operators/this` - `Functions/Strict_mode` → `Strict_mode` (root-level page) - `Errors/Not_a_codepoint` → `Errors/Not_a_valid_code_point`
… case
Over-zealous display preservation inserted by the case-fix sweep:
`{{jsxref("Object", "object")}}` was meant to keep "object" rendered,
but for JS type references the canonical (capitalized) class name
should also be the rendered text. Drop the redundant arg2 when it
matches arg1 case-insensitively — covers `Object`/`String`/`Number`/
`Array`/`Boolean`/`Promise`/`Symbol`/`undefined` and any other
mis-cased pair caught by the index-aware rari.
Only drops arg2 when it's the last positional arg (same safety policy
as `merge-parens-display`).
…sh) in `jsxref` The dotted form implies `Proxy.Proxy.X` is a valid JS member access, but `Proxy.Proxy.<trap>` is not a real namespace — `Proxy/Proxy/<trap>` is just MDN's URL convention for the constructor + handler-trap sub-pages. Switch to the slash form everywhere so the rendered default display doesn't suggest a namespaced `Proxy.Proxy.X` access pattern. Display args are preserved as-is where set.
…ator shorthands Use the bare-keyword shortform for the 5 operator keywords `null`, `this`, `delete`, `new`, `instanceof` per the convention introduced in mdn/content#44221. The shortform resolves cleanly on current rari thanks to the `Reference/<kw>` -> `Reference/Operators/<kw>` redirects that PR added, and resolves natively under the index-aware rari from mdn/rari#715. Only collapses the redundant-display pattern (`("Operators/X", "X")`); longforms with custom display text (`"delete x"`, `"deleted"`, `"x instanceof y"`) are preserved.
Mirrors the en-US redirects added in mdn/content#44221 for the 5 operator-keyword shorthands (`null`, `this`, `delete`, `new`, `instanceof`). Without these per-locale redirects, the bare-keyword `{{jsxref("null")}}` shortform produces a 404 under the deployed rari; with them, it falls back via redirect to the canonical `Reference/Operators/<kw>` page. The index-aware rari from mdn/rari#715 resolves the shortform directly without needing the redirect.
jsxref macro args
caugner
left a comment
There was a problem hiding this comment.
Reviewed all changes, LGTM.
Description
Clean up stale
jsxrefmacro arguments in Japanese content so they resolve against the en-US JS Reference index. Changes are scoped to the first argument ofjsxref()invocations; display text is preserved everywhere it was already explicit, and inserted as the original arg when missing so the rendered label keeps reflecting what the author originally wrote.18 commits, applied in order:
@@<name>toSymbol.<name>..prototypefrom class refs.Global_Objects/Proxy/handler[/X].Global_Objects/prefix when safe.("foo", "foo()")into("foo()").<IntlClass>refs. Display preservation.jsxrefrefs to markdown links.this→Operators/this.Proxy.Proxy[.X](dotted) →Proxy/Proxy[/X](slash).("Operators/<kw>", "<kw>")→("<kw>")for the 5 operator-keyword shortforms (null,this,delete,new,instanceof), per the convention introduced in mdn/content#44221.Reference/<kw>→Reference/Operators/<kw>redirects that back the shorthand calls under the deployed rari.Motivation
These arguments produced broken or redirected links (
templ-broken-link/templ-redirected-link/templ-ill-cased-arg) in the upcoming Rari-based build. The new index-basedjsxrefresolver is being introduced in mdn/rari#715; this PR ensures the Japanese content resolves cleanly against both the deployed rari and the index-aware version.Additional details
main).rari@jsxref-with-index— only intentional-broken residuals remain (TypedArray.prototype.move(),Object.prototype.watch()/unwatch,Proxy.Proxy.enumerate,Date.prototype.toLocaleFormat(),Function.prototype.isGenerator(),IteratorResult,Number.toInteger(),String.quote,WeakSet.prototype.clear()).rari@main(deployed), the operator-shorthand calls producetempl-redirected-linkwarnings because the rendered href bounces through the new per-locale redirects to the canonicalOperators/<kw>URL. These warnings disappear once fix(jsxref): build Web/JavaScript index to resolve names rari#715 ships — same temporary state Use jsxref shortform for null, this, delete, new, instanceof content#44221 introduced for en-US.Related issues and pull requests
Related to mdn/rari#715 and mdn/content#44221.