Skip to content

Python: Output JSON from tsg-python - #22527

Open
tausbn wants to merge 2 commits into
mainfrom
tausbn/python-output-json-from-tsg-python
Open

Python: Output JSON from tsg-python#22527
tausbn wants to merge 2 commits into
mainfrom
tausbn/python-output-json-from-tsg-python

Conversation

@tausbn

@tausbn tausbn commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Changes the current text-based dump of the tsg-python graph to the native JSON output that tree-sitter-graph provides. This saves us the hassle of parsing the output ourselves, including the recently added bug fix that allowed us to interpret Rust-style string escapes in Python.

As an added bonus, relying on the json module instead of our own parser roughly cuts the AST reconstruction time in half compared to previously, an extraction speedup in the neighbourhood of 3-4% (when tested on an extraction of python/cpython using only the tsg-python parser).

Changes the current text-based dump of the tsg-python graph to the
native JSON output that tree-sitter-graph provides. This saves us the
hassle of parsing the output ourselves, including the recently added bug
fix that allowed us to interpret Rust-style string escapes in Python.

As an added bonus, relying on the json module instead of our own parser
roughly cuts the AST reconstruction time in half compared to previously,
an extraction speedup in the neighbourhood of 3-4% (when tested on an
extraction of `python/cpython` using only the tsg-python parser).
@tausbn tausbn added the no-change-note-required This PR does not need a change note label Sep 8, 2026
@github-actions github-actions Bot added the Python label Sep 8, 2026
@tausbn

tausbn commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

@tausbn
tausbn marked this pull request as ready for review September 9, 2026 15:02
Copilot AI balanced review requested due to automatic review settings September 9, 2026 15:02
@tausbn
tausbn requested review from a team as code owners September 9, 2026 15:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The updated parser test fails independently because unittest.mock is not explicitly imported.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review tier: Balanced
Findings: 1 Medium severity

New issues introduced by this change (1)
Severity Finding
Medium severity python/​extractor/​tests/​test_tsg_parser.py — Importing unittest alone does not load its mock submodule, so the new test raises…
What changed in this PR

Switches tsg-python graph interchange from custom text parsing to native JSON serialization.

Changes:

  • Serializes TSG graphs with serde_json.
  • Decodes typed graph values in Python.
  • Updates dependencies, tests, and extractor version.
File Description
MODULE.bazel Registers the JSON dependency.
misc/​bazel/​3rdparty/​py_deps/​BUILD.bazel Adds dependency aliases.
misc/​bazel/​3rdparty/​py_deps/​defs.bzl Configures the vendored crate.
python/​extractor/​semmle/​python/​parser/​tsg_parser.py Replaces text parsing with JSON decoding.
python/​extractor/​semmle/​util.py Bumps the extractor version.
python/​extractor/​tests/​test_tsg_parser.py Tests JSON graph decoding.
python/​extractor/​tsg-python/​Cargo.lock Locks the direct JSON dependency.
python/​extractor/​tsg-python/​Cargo.toml Declares serde_json.
python/​extractor/​tsg-python/​src/​main.rs Emits the graph as JSON.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread python/extractor/tests/test_tsg_parser.py
Co-authored-by: tausbn <1104778+tausbn@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-change-note-required This PR does not need a change note Python

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants