Skip to content

TypeSchema: Precompute base names for profile methods#132

Merged
ryukzak merged 5 commits intomainfrom
feature/precompute-profile-base-names
Apr 8, 2026
Merged

TypeSchema: Precompute base names for profile methods#132
ryukzak merged 5 commits intomainfrom
feature/precompute-profile-base-names

Conversation

@ryukzak
Copy link
Copy Markdown
Collaborator

@ryukzak ryukzak commented Apr 8, 2026

Summary

  • Add NameCandidates type (candidates: string[] + recommended: string) to ProfileExtension and FieldSlice
  • New module src/typeschema/core/name-candidates.ts:
    • Language-neutral candidate generation for extensions and slices
    • Multi-level collision resolution (base → qualified → discriminated)
    • assignRecommendedBaseNames() sets recommended after profile TypeSchema is built
  • Remove resolveProfileMethodBaseNames, resolveNameCollisions, and 6 dead name helpers from the TS generator
  • TS profile generators now consume nameCandidates.recommended directly

Before (each language must re-implement collision detection):

// In TypeScript generator (profile.ts)
const resolvedMethodNames = resolveProfileMethodBaseNames(extensions, sliceDefs);
generateExtensionMethods(w, tsIndex, flatProfile, resolvedMethodNames.extensions);
generateSliceSetters(w, sliceDefs, flatProfile, resolvedMethodNames.slices);

After (collision-free names precomputed on TypeSchema):

// In transformer.ts — once, for all languages
assignRecommendedBaseNames(profileSchema);

// In any language generator
const baseName = ext.nameCandidates.recommended;
const baseName = slice.nameCandidates.recommended;

ryukzak added 5 commits April 8, 2026 15:59
Move collision-free base name resolution from the TypeScript generator
into the TypeSchema layer so all language generators can reuse it.

- Add NameCandidates type (candidates[] + recommended) to types.ts
- Add nameCandidates field to ProfileExtension and FieldSlice
- New module: src/typeschema/core/name-candidates.ts
  - Language-neutral candidate generation for extensions and slices
  - Collision resolution via multi-level candidate priority
  - assignRecommendedBaseNames() sets recommended after profile is built
- Remove resolveProfileMethodBaseNames and related helpers from profile.ts
- Remove 6 dead name functions from typescript/name.ts
- Update TS generators to consume nameCandidates.recommended directly
…lution

Instead of skipping field accessors that collide with slice/extension names,
treat field names as reserved during collision resolution so slices/extensions
get bumped to qualified names. All field accessors are now always generated.
Field names like 'value IVL_TS' (CCDA) need camelCase normalization
before uppercasing to produce valid method names.
@ryukzak ryukzak merged commit 75e14b3 into main Apr 8, 2026
31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant