fix(objc): add cross-file call resolution and unary message parsing#420
Open
leishuai wants to merge 124 commits intosafishamsi:v4from
Open
fix(objc): add cross-file call resolution and unary message parsing#420leishuai wants to merge 124 commits intosafishamsi:v4from
leishuai wants to merge 124 commits intosafishamsi:v4from
Conversation
* fix: git hooks fail when graphify is installed via pipx When installed via pipx, the graphify module is only available in pipx's isolated venv, not the system python3. The git hooks (post-commit, post-checkout) hardcoded `python3` which cannot import graphify in this case. Detect the correct Python interpreter from the graphify binary's shebang line, matching the approach already used in skill.md Step 1. Falls back to python3 for system installs. * fix: handle env-style shebangs and improve interpreter detection - Use POSIX `command -v` instead of non-standard `which` - Parse `#!/usr/bin/env python3` shebangs correctly (previous `tr -d ' '` would produce `/usr/bin/envpython3`) - Add import validation fallback to python3 if resolved interpreter cannot import graphify
… buffer * fix: suppress graspologic ANSI output that breaks PowerShell scrolling graspologic's leiden() emits ANSI escape sequences (progress bars, colored warnings) that corrupt PowerShell 5.1's scroll buffer on Windows, disabling vertical scrolling. Redirect stdout/stderr to StringIO during leiden() calls to prevent any escape codes from reaching the terminal. Add 2 tests verifying cluster() produces no stdout/stderr output. Fixes safishamsi#19 Co-Authored-By: Claude Opus 4.6 <[email protected]> * docs: add PowerShell troubleshooting section to Windows skill Document the PowerShell 5.1 scrolling issue and provide 4 workarounds: upgrade graphify, use Windows Terminal, reset terminal, or uninstall graspologic to use Louvain fallback. Fixes safishamsi#19 Co-Authored-By: Claude Opus 4.6 <[email protected]> --------- Co-authored-by: Claude Opus 4.6 <[email protected]>
- Register 'trae' and 'trae-cn' in _PLATFORM_CONFIG (skill-trae.md, ~/.trae/skills/ and ~/.trae-cn/skills/, claude_md=False) - Add CLI subcommands: graphify trae install/uninstall, graphify trae-cn install/uninstall (routes to _agents_install/uninstall) - Update help text with new platform entries - Create skill-trae.md (Agent-tool based extraction, AGENTS.md integration, no PreToolUse hook support per Trae limitations) - Update README.md and README.zh-CN.md with Trae platform docs Co-authored-by: lijinshuan <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…utput Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…ean README, save-result CLI
…extension drift, click detection, skill coverage, .graphify_python persistence Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
safishamsi#102 safishamsi#109) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…hamsi#126) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…safishamsi#71) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…e relations in innerHTML (#sec) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…msi#127) Tree-sitter resolves call targets directly from source — marking them INFERRED was incorrect. Cross-file class-level uses edges remain INFERRED. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…AST calls Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…dows git hooks (safishamsi#140) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…sh (safishamsi#137, safishamsi#148, safishamsi#149) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…shamsi#105) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…Go import node ID collision
…save_semantic_cache, fix safishamsi#454 sanitize_label crash on None source_file
…afishamsi#436 _is_sensitive false positives on directory names, fix safishamsi#433 update command writes absolute paths in artifacts Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…s in README Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- cache: skip directory source_file in save_cached to prevent IsADirectoryError (safishamsi#444) - report: skip structural-only communities with no real nodes (safishamsi#443) - hooks: allow @ in python path allowlist for Homebrew paths (safishamsi#474) - watch: keep source_file paths project-relative after rebuild (safishamsi#434) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…-community gaps; add graph-query CLI rules to install sections Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…, readme gitignore docs - wiki.py: add encoding="utf-8" to all write_text() calls (fixes Windows cp1252 crash safishamsi#496) - wiki.py: deduplicate filenames with _unique_slug() to prevent silent article overwrites (safishamsi#497) - hooks.py: skip post-commit/post-checkout during rebase/merge/cherry-pick (safishamsi#485) - detect.py: resolve root path at detect() entry so .graphifyignore patterns match consistently (safishamsi#495) - README.md: document manifest.json, cost.json gitignore and .graphifyignore platform file examples (safishamsi#369) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…, correct common-root inference - analyze.py: add seed=42 to betweenness_centrality() — eliminates non-deterministic GRAPH_REPORT.md diffs on graphs >1000 nodes (safishamsi#499) - extract.py: fix common-root inference to stop at first diverging segment not sum of all matches (safishamsi#502) - extract.py: resolve root to absolute path; post-process file node IDs to project-relative after extraction so graph.json edge endpoints are stable across machines (safishamsi#502) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
PR #298 extended cross-file call resolution ( raw_calls ) to Go, Rust, Zig, PowerShell, and Elixir. This PR applies the same pattern to Objective-C.
Changes
Cross-file call resolution — extract_objc now populates raw_calls for unmatched method calls, enabling the extract() post-pass to resolve them globally and emit INFERRED confidence edges.
Unary message parsing fix — The original walk_calls only checked selector and keyword_argument_list child types, missing unary messages like [self speak] where the method name is a plain identifier node. Added fallback logic.
Accurate source location — Changed call edge source_location from body_node.start_point (entire method body) to n.start_point (exact message expression).
All 433 tests pass.