You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pass: report names that collide once canonicalized #647
All three operations get canonical name get_user in one group.
All four members of Sep canonicalize to a_b.
-1 and 1 both canonicalize to 1.
The members of Ops get no canonical words and no hint at all.
Nothing is reported. Emitters resolve collisions by ID (docs/emitters/refine/naming.md), and that stays the mechanism; but the document author would want to know, and one check on neutral words gives the answer for every target at once.
Proposal
A pass that warns, per scope, on equal canonical names: operations within a group, parameters within an operation, properties within a model, groups within a service, members within an enum, and component types. The message names every party. Enum members that canonicalize to no words at all get their own diagnostic. Related: #255 (enum members have no key for resolution).
Another case for this check: a synthesized operation group can share its name with a declared tag. A document with tags: [{name: default}], one tagged and one untagged operation, gives g/tags/default named {source: default} and g/default named {hint: default}. The webhook group's webhooks hint collides with a declared webhooks tag in the same way. #801 keeps these names deliberately, since emitters resolve collisions by ID, so the compiler should report the collision, not rename it (#810, closed).
Two counts for the scopes this issue names, on the golden spec (the Cloudflare API schema, cloudflare/api-schemasopenapi.json at 911ad78) compiled at c387e25c:
101 enums (1.22%) have members whose names collide once canonicalized, along with 2 models with colliding properties, 12 colliding type names and 1 operation.
Activity
fuad-daoud commentedon Oct 10, 2026
Another case for this check: a synthesized operation group can share its name with a declared tag. A document with
tags: [{name: default}], one tagged and one untagged operation, givesg/tags/defaultnamed{source: default}andg/defaultnamed{hint: default}. The webhook group'swebhookshint collides with a declaredwebhookstag in the same way. #801 keeps these names deliberately, since emitters resolve collisions by ID, so the compiler should report the collision, not rename it (#810, closed).OmarAlJarrah commentedon Oct 19, 2026
Two counts for the scopes this issue names, on the golden spec (the Cloudflare API schema,
cloudflare/api-schemasopenapi.jsonat911ad78) compiled atc387e25c:>=,<,==, …), and 1,171 more across 154 compiled corpus specs. A diagnostic tells the author, but an emitter still has nothing to name them from. docs/emitter-design: give an enum member whose value has no letters or digits a naming rule #956 asks the emitter design for that rule.