You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix CodeQL call-graph edges dropped on (file, start_line) join miss (#25)
CodeQL endpoints were joined into Jedi's PyCallable signature space by an
exact (absolute_file_path, start_line) key. When CodeQL and Jedi disagree
on a definition's start line (commonly with decorated functions), the
caller lookup missed and the whole edge was silently discarded; callee
misses degraded to ghost nodes.
Replace the exact-only location index with a resolution ladder: exact
(file, start_line) -> candidates sharing (file, short_name) (single
candidate taken directly, else nearest start_line among those whose
parameter count matches the CodeQL positional arity) -> no match
(caller skipped / callee ghost, unchanged). The CodeQL query now emits
Function.getName() and positional arity for both endpoints, with the
callee bound to a Function via calleeVal.getScope().
Bump version to 0.1.15 and update CHANGELOG.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.1.15] - 2026-05-15
9
+
10
+
### Fixed
11
+
- **CodeQL call-graph edges silently dropped on `(file, start_line)` join miss** ([#25](https://github.com/codellm-devkit/codeanalyzer-python/issues/25)). CodeQL endpoints were matched back into Jedi's `PyCallable` signature space by an exact `(absolute_file_path, start_line)` key; when CodeQL and Jedi disagreed on a definition's start line (commonly with decorated functions), the caller lookup missed and the entire edge was discarded (callee misses degraded to ghost nodes). Replaced the exact-only index with a resolution ladder: exact `(file, start_line)` → candidates sharing `(file, short_name)` (single candidate taken directly, else nearest `start_line` among those whose parameter count matches the CodeQL positional arity) → no match (caller skipped / callee ghost, as before). The CodeQL query now emits `Function.getName()` and positional arity for both endpoints. Jedi's parameter count includes `*args`/`**kwargs`/keyword-only slots while CodeQL's arity is positional only, so the arity filter is exact for plain signatures and yields to the nearest-line tiebreak otherwise.
0 commit comments