Skip to content

Speed up import ~9x by using one shared Lark parser#11

Open
agentydragon wants to merge 1 commit into
willynilly:mainfrom
agentydragon:adgn/one-parser
Open

Speed up import ~9x by using one shared Lark parser#11
agentydragon wants to merge 1 commit into
willynilly:mainfrom
agentydragon:adgn/one-parser

Conversation

@agentydragon

@agentydragon agentydragon commented Dec 29, 2025

Copy link
Copy Markdown

Previously, make_syntax_validator() created a new Lark parser for each rule, which was expensive (~660ms total import time). This change:

  • Defines ALL_START_RULES containing all grammar rules needed by validators
  • Creates a single shared syntax_parser with all start rules upfront
  • Refactors make_syntax_validator() to use functools.partial with is_valid_syntax() instead of creating new parsers

Import time reduced from ~660ms to ~72ms (9x speedup).

Also fixed a forgotten comma that previously caused implicit string literal concatenation:

    "irelative_part"
    "ihier_part",

Previously, make_syntax_validator() created a new Lark parser for each
rule, which was expensive (~660ms total import time). This change:

- Defines ALL_START_RULES containing all grammar rules needed by validators
- Creates a single shared syntax_parser with all start rules upfront
- Refactors make_syntax_validator() to use functools.partial with
  is_valid_syntax() instead of creating new parsers

Import time reduced from ~660ms to ~72ms (9x speedup).

Testing protocol:
- Created timing script that clears module cache and measures import time
- Ran 5 iterations for each version to account for variance
- Used git stash to preserve dirty state while testing HEAD
- Results: HEAD averaged ~662ms, this change averages ~72ms
- All existing tests pass (2/2)
Copilot AI review requested due to automatic review settings December 29, 2025 13:37

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR optimizes import time by ~9x (from ~660ms to ~72ms) by creating a single shared Lark parser instead of instantiating a new parser for each validation rule.

Key Changes:

  • Introduced ALL_START_RULES containing all 38 grammar rules needed by validators
  • Modified syntax_parser to be instantiated once with all start rules upfront
  • Refactored make_syntax_validator() to use functools.partial with the shared parser instead of creating individual parsers

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@agentydragon agentydragon changed the title Optimize import time ~9x by using one shared Lark parser Speed up import ~9x by using one shared Lark parser Dec 29, 2025
@agentydragon

Copy link
Copy Markdown
Author

@willynilly hi! do you think we could merge this? or would you like me to do any changes / testing?

@paugier

paugier commented Apr 22, 2026

Copy link
Copy Markdown

Shouldn't these changes be merged? Are there any maintainers active here?

@jkowalleck

jkowalleck commented Apr 23, 2026

Copy link
Copy Markdown
Collaborator

Shouldn't these changes be merged? Are there any maintainers active here?

see #15

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.

5 participants