Skip to content

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

Closed
cdietrich wants to merge 2 commits into
TypeFox:msujew/multi-language-supportfrom
cdietrich:feat/per-language-lexers
Closed

cdietrich wants to merge 2 commits into
TypeFox:msujew/multi-language-supportfrom
cdietrich:feat/per-language-lexers

Conversation

@cdietrich

@cdietrich cdietrich commented Jul 24, 2026

Copy link
Copy Markdown

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

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

msujew and others added 2 commits July 23, 2026 16:51
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
@msujew
msujew force-pushed the msujew/multi-language-support branch from 78988e1 to 9f6d652 Compare July 27, 2026 14:14
@msujew

msujew commented Aug 3, 2026

Copy link
Copy Markdown
Member

Thanks, this has been superseded by a change in #130, which implements this as well.

@msujew msujew closed this Aug 3, 2026
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.

2 participants