Releases: codellm-devkit/codeanalyzer-python
Release list
v1.0.1
Install codeanalyzer-python v1.0.1
Shell script (installs the canpy CLI via uv / pipx / pip):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codellm-devkit/codeanalyzer-python/releases/latest/download/canpy-installer.sh | sh
PyPI:
pip install codeanalyzer-python==1.0.1
For the optional live Neo4j push (--emit neo4j --neo4j-uri ...):
pip install 'codeanalyzer-python[neo4j]==1.0.1'
Download
| File | Description |
|---|---|
| codeanalyzer_python-1.0.1-py3-none-any.whl | Python wheel |
| codeanalyzer_python-1.0.1.tar.gz | Source distribution |
| canpy-installer.sh | Shell installer (uv / pipx / pip) |
| schema.json | Neo4j schema contract |
What's Changed
🛠 Other Changes
Full Changelog: v1.0.0...v1.0.1
v1.0.0
Install codeanalyzer-python v1.0.0
Shell script (installs the canpy CLI via uv / pipx / pip):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codellm-devkit/codeanalyzer-python/releases/latest/download/canpy-installer.sh | sh
PyPI:
pip install codeanalyzer-python==1.0.0
For the optional live Neo4j push (--emit neo4j --neo4j-uri ...):
pip install 'codeanalyzer-python[neo4j]==1.0.0'
Download
| File | Description |
|---|---|
| codeanalyzer_python-1.0.0-py3-none-any.whl | Python wheel |
| codeanalyzer_python-1.0.0.tar.gz | Source distribution |
| canpy-installer.sh | Shell installer (uv / pipx / pip) |
| schema.json | Neo4j schema contract |
What's Changed
🛠 Other Changes
- v2 Stage 5: docs, versioning (1.0.0 / schema 2.0.0), hand-off by @rahlk in #88
- Level-3: native dataflow graphs (CFG/PDG/SDG/CPG) and backward slicing by @rahlk in #68
Full Changelog: v0.3.1...v1.0.0
v0.3.1
Install codeanalyzer-python v0.3.1
Shell script (installs the canpy CLI via uv / pipx / pip):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codellm-devkit/codeanalyzer-python/releases/latest/download/canpy-installer.sh | sh
PyPI:
pip install codeanalyzer-python==0.3.1
For the optional live Neo4j push (--emit neo4j --neo4j-uri ...):
pip install 'codeanalyzer-python[neo4j]==0.3.1'
Download
| File | Description |
|---|---|
| codeanalyzer_python-0.3.1-py3-none-any.whl | Python wheel |
| codeanalyzer_python-0.3.1.tar.gz | Source distribution |
| canpy-installer.sh | Shell installer (uv / pipx / pip) |
| schema.json | Neo4j schema contract |
What's Changed
🛠 Other Changes
- ci(release): auto-open a python-sdk incorporation issue on release by @rahlk in #53
- ci(release): announce releases in repo and org discussions by @rahlk in #55
- ci(release): reuse CLDK_AUTH_TOKEN for the python-sdk issue job by @rahlk in #56
- chore: track repo CLAUDE.md with release-announcement cleanup playbook by @rahlk in #59
- feat: add canpy --version flag by @rahlk in #63
- chore: remove tracked .python-version by @rahlk in #64
- refactor: consolidate neo4j schema into a single place by @georgesafta in #60
- fix: anchor callee inference at the attribute name, not the call-expression start by @rahlk in #89
- fix: deliver the stranded #90 relative-project_dir fix to main by @rahlk in #92
- fix: strip only the terminal .py suffix in path-derived fallback signatures by @rahlk in #96
- feat: v1 audit remediation — initializers, structured arguments, provenance, import resolution (schema 1.2.0) by @rahlk in #95
New Contributors
- @georgesafta made their first contribution in #60
Full Changelog: v0.3.0...v0.3.1
v0.3.0
Install codeanalyzer-python v0.3.0
Shell script (installs the canpy CLI via uv / pipx / pip):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codellm-devkit/codeanalyzer-python/releases/latest/download/canpy-installer.sh | sh
PyPI:
pip install codeanalyzer-python==0.3.0
For the optional live Neo4j push (--emit neo4j --neo4j-uri ...):
pip install 'codeanalyzer-python[neo4j]==0.3.0'
Download
| File | Description |
|---|---|
| codeanalyzer_python-0.3.0-py3-none-any.whl | Python wheel |
| codeanalyzer_python-0.3.0.tar.gz | Source distribution |
| canpy-installer.sh | Shell installer (uv / pipx / pip) |
| schema.json | Neo4j schema contract |
What's Changed
🛠 Other Changes
- PyCG sharding: Jedi planner + adaptive decomposition of runaways by @rahlk in #49
- Level 2: replace CodeQL with PyCG, add coupling-aware adaptive sharding by @rahlk in #50
- Merge pull request #49 from codellm-devkit/feat/jedi-shard-planner by @rahlk in #51
- fix(venv): use only the vendored uv, drop system-PATH fallback by @rahlk in #52
Full Changelog: v0.2.1...v0.3.0
v0.2.1
Install codeanalyzer-python v0.2.1
Shell script (installs the canpy CLI via uv / pipx / pip):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codellm-devkit/codeanalyzer-python/releases/latest/download/canpy-installer.sh | sh
PyPI:
pip install codeanalyzer-python==0.2.1
For the optional live Neo4j push (--emit neo4j --neo4j-uri ...):
pip install 'codeanalyzer-python[neo4j]==0.2.1'
Download
| File | Description |
|---|---|
| codeanalyzer_python-0.2.1-py3-none-any.whl | Python wheel |
| codeanalyzer_python-0.2.1.tar.gz | Source distribution |
| canpy-installer.sh | Shell installer (uv / pipx / pip) |
| schema.json | Neo4j schema contract |
What's Changed
🚀 Features
- Analysis venv (uv + Jedi wiring), external_symbols, app-scoped prune, --no-venv (#44 #45 #46 #47) by @rahlk in #48
Full Changelog: v0.2.0...v0.2.1
v0.2.0
Install codeanalyzer-python v0.2.0
Shell script (installs the canpy CLI via uv / pipx / pip):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codellm-devkit/codeanalyzer-python/releases/latest/download/canpy-installer.sh | sh
PyPI:
pip install codeanalyzer-python==0.2.0
For the optional live Neo4j push (--emit neo4j --neo4j-uri ...):
pip install 'codeanalyzer-python[neo4j]==0.2.0'
Download
| File | Description |
|---|---|
| codeanalyzer_python-0.2.0-py3-none-any.whl | Python wheel |
| codeanalyzer_python-0.2.0.tar.gz | Source distribution |
| canpy-installer.sh | Shell installer (uv / pipx / pip) |
| schema.json | Neo4j schema contract |
What's Changed
🚀 Features
- feature/neo4j: property-graph output with Py/PY_-namespaced schema; rename CLI to
canpyby @rahlk in #33
🛠 Other Changes
New contributors and full diff: https://github.com/codellm-devkit/codeanalyzer-python/releases/tag/v0.2.0
v0.1.14
Release Notes (from CHANGELOG.md)
Added
- Call graph in analysis output:
PyApplication.call_graph: List[PyCallEdge]. Every run now produces a call graph in addition to the symbol table. Edges carrysource,target(bothPyCallable.signature),weight, andprovenance(jedi/codeql/joern). call_graphmodule (codeanalyzer.semantic_analysis.call_graph) withto_digraph/from_digraphnetworkx adapters,jedi_call_graph_edges, andmerge_edges. Endpoints absent from the symbol table become ghost nodes so RPC / third-party / framework edges are preserved.- CodeQL Python query rewritten against the CodeQL Python library (was Java idioms before). Resolves direct calls and constructor calls via
ClassValue.lookup("__init__"), using the modernValue.getACall()predicate (CodeQL Python 7.x). augment_call_sites: when--codeqlis enabled, CodeQL backfillsPyCallsite.callee_signatureentries Jedi left unresolved.resolve_unresolved_constructors: heuristic fallback that walks the symbol table by class short-name and scope to fill in constructor sites neither Jedi nor CodeQL resolved (common for classes nested inside functions/methods). Synthesizes<class>.__init__signatures.iter_classes_in_symbol_table: full recursive walker over classes — including inner classes, classes nested in functions, and classes nested in class methods.
Changed
- BREAKING: Removed
--analysis-level/analysis_level. The call graph is built unconditionally; use--codeql/--no-codeqlto control CodeQL participation. Jedi-derived edges are always available. - Jedi constructor calls now resolve to
<class>.__init__(was: bare<class>). Whenscript.infer()returns a class, the qualified name is rewritten to point at the constructor — matching where methodPyCallables actually live in the symbol table.PyCallsite.is_constructor_callnow reflects Jedi's type inference (was:method_name == "__init__", only true for explicitobj.__init__()calls). _call_sitesscope correctness: replaced naiveast.walkwith_iter_calls_in_scope, which stops at nestedFunctionDef/AsyncFunctionDef/ClassDefbodies (those have their ownPyCallable.call_sites). Decorators, default arguments, return annotations, base classes and class keyword args are still walked since they execute in the enclosing scope. Previously, outer functions over-attributed every call from every nested definition.- CodeQL CLI binary is now downloaded into
<cache_dir>/codeql/bin/(per-project, respecting--cache-dir) and discovered before any CodeQL operation — including when the database cache is reused. The downloaded archive is removed after extraction. CodeQLQueryRunnernow accepts the resolved binary path instead of relying onPATH. The temporary.qlfile is written inside a per-project qlpack (<cache_dir>/codeql/qlpack/) whosecodeql/python-alldependency is resolved once viacodeql pack install, eliminating the lockfile / search-path gymnastics.
Fixed
zipfileextraction dropped Unix permissions on the CodeQL CLI launcher, causingPermissionErroron first query run. Entries are now extracted with their storedexternal_attrmode applied, plus a defensivechmod +xon the resolved binary.rglob("codeql")matched the bundledcodeql/codeql/directory before the launcher file, returning a directory instead of an executable. BothCodeQLLoaderand_ensure_codeql_binnow filter tois_file().CodeQLQueryRunnercrashed on subprocess errors with'NoneType' object has no attribute 'stderr'becausestderr=NonereturnsNonefromcommunicate(). Now capturesstderr=PIPEand decodes bytes safely.
Detailed Changes (auto-generated)
🚀 Features
- Release 0.1.14: call graph + CodeQL integration
- PR: #23
v0.1.13
Release Notes (from CHANGELOG.md)
Improved
- CLI Help Documentation: Comprehensive help text added for all command-line options
- Added descriptive help messages for all CLI parameters including
--output,--format,--analysis-level, etc. - Enhanced user experience with clear option descriptions in
--helpoutput - Improved CLI parameter organization using
Annotatedtype hints for better maintainability - Added case-insensitive support for
--formatoption - Updated verbosity option help to clearly indicate multiple usage (
-v,-vv,-vvv)
- Added descriptive help messages for all CLI parameters including
Technical Details
- Refactored CLI function signature to use consistent
Annotatedtype hint pattern - Added comprehensive help text for all 12 command-line options
- Improved code organization and type safety in CLI parameter definitions
Detailed Changes (auto-generated)
v0.1.12
Release Notes (from CHANGELOG.md)
Changed
- BREAKING CHANGE: Refactored
Codeanalyzerconstructor to useAnalysisOptionsdataclass in response to #12- Replaced multiple individual parameters with single
AnalysisOptionsobject for cleaner API - Improved type safety and configuration management through centralized options structure
- Enhanced maintainability and extensibility for future configuration additions
- Updated CLI integration to create and pass
AnalysisOptionsinstance - Maintained backward compatibility in terms of functionality while improving code architecture
- Replaced multiple individual parameters with single
Added
- New
AnalysisOptionsdataclass incodeanalyzer.optionsmodule in response to #12- Centralized configuration structure with all analysis parameters
- Type-safe configuration with proper defaults and validation
- Support for
OutputFormatenum integration - Clean separation between CLI and library configuration handling
Technical Details
- Added new
codeanalyzer.optionspackage withAnalysisOptionsdataclass - Updated
Codeanalyzer.__init__()to accept singleoptionsparameter instead of 9 individual parameters - Modified CLI handler in
__main__.pyto createAnalysisOptionsinstance from command line arguments - Improved code organization and maintainability for configuration management
- Enhanced API design following best practices for parameter object patterns
Detailed Changes (auto-generated)
v0.1.11
Release Notes (from CHANGELOG.md)
Fixed
- CRITICAL: Fixed NumPy build failure on Python 3.12+ (addresses #19)
- Updated NumPy dependency constraints to handle Python 3.12+ compatibility
- Split NumPy version constraints into three tiers:
numpy>=1.21.0,<1.24.0for Python < 3.11numpy>=1.24.0,<2.0.0for Python 3.11.xnumpy>=1.26.0,<2.0.0for Python 3.12+ (requires NumPy 1.26+ which supports Python 3.12)
- Resolves
ModuleNotFoundError: No module named 'distutils'errors on Python 3.12+ - Ensures compatibility with Python 3.12 which removed
distutilsfrom the standard library
- Fixed Pydantic v1/v2 compatibility issues in JSON serialization throughout codebase
- Added comprehensive Pydantic version detection and compatibility layer
- Introduced
model_dump_json()andmodel_validate_json()helper functions for cross-version compatibility - Fixed
PyApplication.parse_raw()deprecated method usage (replaced withmodel_validate_json()) - Updated CLI output methods to use compatible serialization functions
- Resolved forward reference updates only for Pydantic v1 (v2 handles these automatically)
Changed
- Enhanced Pydantic compatibility infrastructure in schema module
- Added runtime Pydantic version detection using
importlib.metadata - Created compatibility abstraction layer for JSON serialization/deserialization
- Improved forward reference resolution logic to work with both Pydantic v1 and v2
- Updated all JSON serialization calls to use new compatibility functions
- Better error handling for missing Pydantic dependency
- Added runtime Pydantic version detection using
Technical Details
- Added
packagingdependency for robust version comparison - Enhanced schema module with runtime version detection and compatibility helpers
- Updated core analysis caching system to use compatible Pydantic JSON methods
- Improved CLI output formatting with cross-version Pydantic support