fix(ru): clean up jsxref macro args#36167
Open
caugner wants to merge 27 commits into
Open
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.
The handler-trap pages live under `Global_Objects/Proxy/Proxy/<trap>`; the old `Proxy.handler` namespace was retired. Update the macro args to point at the canonical paths.
Contributor
The old `Operators/<Group>_Operators` slugs (Arithmetic, Bitwise, Comparison, Logical) and related obsolete leaves (`Destructuring_assignment`, `Legacy_generator_function`, `Logical_nullish_assignment`, `Nullish_coalescing_operator`, `Spread_operator`) redirect under the en-US slug graph but never reach the canonical pages cleanly. Rewrite the first arg to the current canonical sub-path.
The old slug redirects to `Operators#Assignment_operators`. Rewrite the macro to use the canonical `Operators` page; existing anchors on the call site are preserved (most calls already pointed at a specific assignment-operator section).
`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`.
Cover the bare and member forms of the legacy `Functions_and_function_scope` namespace (canonical: `Functions`).
Intl member classes (`Collator`, `DateTimeFormat`, `NumberFormat`, `PluralRules`, etc.) live under `Global_Objects/Intl/`; the top-level `Global_Objects/<Class>` slug is only a redirect. Rewrite the macro args (including member sub-paths) to the canonical Intl path so the `jsxref` index resolves directly.
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`,
`Operators/get`/`set`, `Global_Objects/<X>/toSource`,
`<X>.prototype.toSource[()]`, `Global_Objects/TypedArray/name`,
`TypedArray.name`, `Global_Objects/Array/flatten`,
`Global_Objects/Date/toGMTString`, `Global_Objects/String/trim{Left,Right}`,
`Global_Objects/uneval` (and bare `uneval[()]`), `Object.toSource[()]`,
`Atomics.wake[()]` → `Atomics.notify[()]`,
`Functions_and_function_scope/{Strict_mode,arguments/length}` → canonical,
`<Class>.Symbol.species` → `<Class>/Symbol.species`.
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 and bare `eval`.
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 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.
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.
Cover residual Russian-translated leaves that weren't reached by the en-US namespace-prefix sweep: - `бесконечность` (RU: "infinity") → `Infinity`. - `Атомарные` (RU: "atomic") → `Atomics`. - `Промисы`/`промис` (RU: "promises"/"promise") → `Promise`. - `операторы/Destructuring_assignment` (RU prefix + en-US leaf) → `Operators/Destructuring`. - `операторы/функции` (RU prefix + RU leaf) → `Operators/function`. - `функции/Default_parameters`/`rest_parameters` → `Functions/<canonical>`. - `Ведомости/функция` (RU "Statements/function") → `Statements/function`. Display preservation: when the macro had no explicit display arg, the original Russian term is inserted as the display so the rendered label keeps reflecting the translator's wording.
…n_scope/` and convert WebAssembly refs
`files/ru/webassembly/index.md` had `jsxref("Global_objects/…")`
(lowercase `o`) args that were missed by the earlier round-1
localized-namespace sweep. Normalize them to canonical
`Global_Objects/` and then convert the WebAssembly subset to plain
markdown links pointing at `/ru/docs/WebAssembly/Reference/JavaScript_interface/<X>`.
Also normalize `Functions_and_function_scope/arguments/caller` (legacy
slug) to `Functions/arguments/caller`.
Mechanical edits not covered by the bulk sweeps: - Strip stray spaces around `()` (`Array.prototype.push ()`, `Array.prototype.pop ()`, `ArrayBuffer.slice ()`); plus the matching display-string spaces in the same calls. - `Memory.prototype.grow()` → plain markdown link (WebAssembly). - `DOMException` → `domxref` (DOM type, not JS). - `Array.prototype[@@unscopables]` (bracket syntax not normalized by the at-symbol sweep) → `Array/Symbol.unscopables` with the original bracket form as display. - Mirror fr decision: `Functions/arguments/caller` → `Function.prototype.caller`.
Continued cleanup: - Strip stray spaces before `()` (`Math.floor ()`, `Math.round ()`, `Object.defineProperty ()`, `String.prototype.split ()`). - Strip literal `%2E` URL-encoding in arg1 (`Operators/new%2Etarget`, `Operators/import%2Emeta`) so the macro produces the dotted slug. - `Strict_mode/Transitioning_to_strict_mode` → `Strict_mode` (the sub-page was merged into the parent). - `Selection.toString()` → `domxref` (Selection is a DOM API).
Bare `arguments`/`arguments.callee`/`await`/`template_strings`/`promise` slugs were pre-namespace forms that the macro can't resolve under the deployed rari. Add them to `SIMPLE_RENAMES_REDIRECTS` so they rewrite to `Functions/arguments[/callee]`, `Operators/await`, `Template_literals`, and `Promise` respectively.
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`.
Round 3 of the case-fix sweep covering dotted forms with parens and/or `.prototype.` segments that the round-1/2 mappings missed: `object.defineProperty()`/`defineProperties()` → `Object.<X>()`, and `Date.prototype.valueof` → `Date.prototype.valueOf`.
… 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Clean up stale
jsxrefmacro arguments in Russian 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.26 commits, applied in order:
@@<name>toSymbol.<name>..prototypefrom class refs.Proxy.handler[.X](dot form) toProxy/Proxy[/X].Operators/Assignment_Operatorswith anchor.Functions/<leaf>localized slugs.Global_Objects/<IntlClass>[/X]toIntl/<IntlClass>[/X].Global_Objects/Proxy/handler[/X].Global_Objects/prefix when safe.("foo", "foo()")into("foo()").<IntlClass>refs. Display preservation.jsxrefrefs to markdown links.Global_objects/andFunctions_and_function_scope/..prototype.segment variants.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 Russian 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 (Number.toInteger(),Object.observe(),ParallelArray,Reflect.enumerate(),Statements/for_each...in,StopIteration,Array.observe()/unobserve(),Date.toLocaleFormat,Function.arity,IteratorResult,Object.{Parent,count,eval,getNotifier,unobserve,unwatch,watch},Proxy.Proxy.enumerate,SIMD,String.prototype.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.