Skip to content

Add per-language lexers to eliminate cross-language keyword pollution#131

Draft
cdietrich wants to merge 1 commit into
TypeFox:msujew/multi-language-supportfrom
cdietrich:feat/per-language-lexers
Draft

Add per-language lexers to eliminate cross-language keyword pollution#131
cdietrich wants to merge 1 commit into
TypeFox:msujew/multi-language-supportfrom
cdietrich:feat/per-language-lexers

Conversation

@cdietrich

Copy link
Copy Markdown

When a grammar has multiple entry rules (multi-language mode), each entry rule now gets its own NewLexerFor() factory that includes only the keywords reachable from that entry point via BFS over rule calls.

A generated documentParser struct (language-aware) selects the right per-language lexer based on LanguageSelector.Select(uri) before tokenising, preventing keywords from one sub-language shadowing identifiers in another.

Changes:

  • internal/generator/reachability.go: KeywordsReachableFrom BFS traversal
  • internal/generator/lexer_generator.go: GenerateLexer emits NewLexerFor()
  • internal/generator/services_generator.go: GenerateServices emits language-aware DocumentParser and uses service.Override to replace the workspace default
  • cmd/build.go: pass entryRules to GenerateLexer and GenerateServices

Claude-Session: https://claude.ai/code/session_01R7GR5jLbxDCbKdhASefCMH

When a grammar has multiple entry rules (multi-language mode), each entry
rule now gets its own NewLexerFor<i>() factory that includes only the
keywords reachable from that entry point via BFS over rule calls.

A generated documentParser struct (language-aware) selects the right
per-language lexer based on LanguageSelector.Select(uri) before tokenising,
preventing keywords from one sub-language shadowing identifiers in another.

Changes:
- internal/generator/reachability.go: KeywordsReachableFrom BFS traversal
- internal/generator/lexer_generator.go: GenerateLexer emits NewLexerFor<i>()
- internal/generator/services_generator.go: GenerateServices emits language-aware
  DocumentParser and uses service.Override to replace the workspace default
- cmd/build.go: pass entryRules to GenerateLexer and GenerateServices

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R7GR5jLbxDCbKdhASefCMH
@cdietrich
cdietrich marked this pull request as draft July 24, 2026 07:56
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