entrygraph 0.1.22__tar.gz → 0.1.23__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {entrygraph-0.1.22 → entrygraph-0.1.23}/PKG-INFO +1 -1
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/_version.py +2 -2
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/rust.py +24 -1
- entrygraph-0.1.23/tests/fixtures/rust/axum_callback_app/Cargo.toml +7 -0
- entrygraph-0.1.23/tests/fixtures/rust/axum_callback_app/src/main.rs +10 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_rust.py +19 -0
- entrygraph-0.1.23/tests/test_rust_callbacks.py +41 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/.github/workflows/ci.yml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/.github/workflows/release.yml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/.gitignore +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/LICENSE +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/README.md +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/RELEASING.md +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/pyproject.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/__main__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/api.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/cli/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/cli/main.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/cli/render.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/csharp.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/go.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/java.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/javascript.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/lib_javascript.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/lib_python.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/php.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/python.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/ruby.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/data/sinks/rust.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/db/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/db/engine.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/db/meta.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/db/models.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/db/queries.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/base.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/configs.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/csharp.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/golang.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/java.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/javascript.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/php.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/python.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/ruby.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/entrypoints/rust.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/frameworks.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/manifests.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/detect/taint.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/errors.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/base.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/csharp.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/golang.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/ir.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/java.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/javascript.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/php.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/python.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/registry.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/extract/ruby.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/fs/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/fs/hashing.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/fs/lang.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/fs/walker.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/graph/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/graph/adjacency.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/graph/cte.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/graph/scoring.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/kinds.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/parsing/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/parsing/parsers.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/parsing/queries.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/pipeline/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/pipeline/scanner.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/pipeline/worker.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/pipeline/writer.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/py.typed +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/csharp/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/csharp/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/csharp/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/go/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/go/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/go/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/java/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/java/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/java/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/javascript/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/javascript/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/javascript/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/php/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/php/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/php/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/python/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/python/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/python/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/ruby/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/ruby/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/ruby/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/rust/calls.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/rust/definitions.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/queries/rust/imports.scm +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/resolve/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/resolve/externals.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/resolve/hierarchy.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/resolve/resolver.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/resolve/symbol_table.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/src/entrygraph/results.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/conftest.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/csharp/aspnet_app/Controllers/ReportsController.cs +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/csharp/aspnet_app/Program.cs +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/csharp/aspnet_app/app.csproj +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/csharp/minimalapi_app/Program.cs +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/csharp/minimalapi_app/app.csproj +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/go/gin_app/go.mod +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/go/gin_app/main.go +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/go/gin_app/service.go +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/go/nethttp_app/go.mod +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/go/nethttp_app/main.go +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/java/spring_app/pom.xml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/java/spring_app/src/main/java/com/example/Application.java +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportRunner.java +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportService.java +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/java/spring_app/src/main/java/com/example/UserController.java +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/javascript/commonjs_app/server.js +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/javascript/express_app/package.json +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/javascript/express_app/src/routes.js +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/javascript/express_app/src/services.js +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/php/laravel_app/app/Http/Controllers/ReportController.php +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/php/laravel_app/artisan +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/php/laravel_app/composer.json +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/php/laravel_app/routes/web.php +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/chained_sinks/app.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/flask_app/app/__init__.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/flask_app/app/db.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/flask_app/app/routes.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/flask_app/app/services.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/flask_app/cli.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/flask_app/requirements.txt +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/fuzzy_sink/app.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/heal_fidelity/caller.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/heal_fidelity/worker.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/may_continue/app.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/sanitizer/app.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/python/taint_source/handler.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/ruby/sinatra_app/Gemfile +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/ruby/sinatra_app/app.rb +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/ruby/sinatra_app/services/runner.rb +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/rust/axum_app/Cargo.toml +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/rust/axum_app/src/handlers.rs +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/rust/axum_app/src/main.rs +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_api.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_cli.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_commonjs.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_csharp_callbacks.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_cte_bounds.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_engine_pragmas.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_entrypoint_expansion.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_entrypoints.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_csharp.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_go.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_java.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_javascript.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_php.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_python.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_extract_ruby.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_frameworks.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_fuzzy_sink.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_go_callbacks.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_hardening.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_heal_fidelity.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_incremental.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_indexer.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_lang.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_manifests.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_may_continue.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_models.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_pool.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_reachability.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_registry_cache.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_render.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_resolver.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_scoring.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_sink_catalog.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_taint.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_taint_sanitizers.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_taint_sources.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/tests/test_walker.py +0 -0
- {entrygraph-0.1.22 → entrygraph-0.1.23}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: entrygraph
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.23
|
|
4
4
|
Summary: Language-agnostic code graph: query symbols, entrypoints, and source-to-sink call paths from a SQLite index
|
|
5
5
|
Project-URL: Repository, https://github.com/brettbergin/entrygraph
|
|
6
6
|
Author-email: Brett Bergin <brettberginbc@yahoo.com>
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
21
|
+
__version__ = version = '0.1.23'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 23)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -336,6 +336,7 @@ class RustExtractor:
|
|
|
336
336
|
callee_text = f"{receiver}.{callee_name}" if receiver else callee_name
|
|
337
337
|
else:
|
|
338
338
|
continue
|
|
339
|
+
caller = self._caller(node, ctx)
|
|
339
340
|
out.references.append(
|
|
340
341
|
RawReference(
|
|
341
342
|
kind="call",
|
|
@@ -343,11 +344,12 @@ class RustExtractor:
|
|
|
343
344
|
callee_name=callee_name,
|
|
344
345
|
receiver_text=receiver,
|
|
345
346
|
span=span_of(node),
|
|
346
|
-
caller_qualified_name=
|
|
347
|
+
caller_qualified_name=caller,
|
|
347
348
|
arg_count=len(args.named_children) if args is not None else 0,
|
|
348
349
|
arg_preview=truncate(node_text(args)) if args is not None else None,
|
|
349
350
|
)
|
|
350
351
|
)
|
|
352
|
+
self._emit_callbacks(args, caller, out)
|
|
351
353
|
|
|
352
354
|
for node in caps.get("macro", []):
|
|
353
355
|
path_node = node.child_by_field_name("macro")
|
|
@@ -379,6 +381,27 @@ class RustExtractor:
|
|
|
379
381
|
)
|
|
380
382
|
)
|
|
381
383
|
|
|
384
|
+
def _emit_callbacks(self, args: Node | None, caller: str | None, out: FileExtraction) -> None:
|
|
385
|
+
"""Bare-identifier arguments passed to a call — a function value invoked
|
|
386
|
+
later, e.g. ``axum::routing::post(handler)``. Resolution keeps only those
|
|
387
|
+
binding to a project function, so a plain data value is a no-op edge."""
|
|
388
|
+
if args is None:
|
|
389
|
+
return
|
|
390
|
+
for arg in args.named_children:
|
|
391
|
+
if arg.type != "identifier":
|
|
392
|
+
continue
|
|
393
|
+
name = node_text(arg)
|
|
394
|
+
out.references.append(
|
|
395
|
+
RawReference(
|
|
396
|
+
kind="callback",
|
|
397
|
+
callee_text=name,
|
|
398
|
+
callee_name=name,
|
|
399
|
+
receiver_text=None,
|
|
400
|
+
span=span_of(arg),
|
|
401
|
+
caller_qualified_name=caller,
|
|
402
|
+
)
|
|
403
|
+
)
|
|
404
|
+
|
|
382
405
|
# ---------------- attributes (decorators) ----------------
|
|
383
406
|
|
|
384
407
|
def _attribute_nodes(self, node: Node) -> list[Node]:
|
|
@@ -176,6 +176,25 @@ fn run(cmd: &str) {
|
|
|
176
176
|
assert cmd.caller_qualified_name == "handlers.run"
|
|
177
177
|
|
|
178
178
|
|
|
179
|
+
def test_function_value_argument_is_a_callback():
|
|
180
|
+
# post(handler) passes `handler` as a value; it must be a callback so the
|
|
181
|
+
# handler is reachable from the route registration.
|
|
182
|
+
x = extract(
|
|
183
|
+
"""
|
|
184
|
+
fn register(app: Router) {
|
|
185
|
+
app.route("/run", post(handler));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
async fn handler() {}
|
|
189
|
+
"""
|
|
190
|
+
)
|
|
191
|
+
callbacks = {r.callee_name: r for r in x.references if r.kind == "callback"}
|
|
192
|
+
assert "handler" in callbacks
|
|
193
|
+
assert callbacks["handler"].caller_qualified_name == "_root.register"
|
|
194
|
+
# string literal arg is not a callback
|
|
195
|
+
assert "/run" not in callbacks
|
|
196
|
+
|
|
197
|
+
|
|
179
198
|
def test_partial_tree_still_extracts():
|
|
180
199
|
x = extract("fn good() {}\n\nfn broken( {\n", path="src/lib.rs")
|
|
181
200
|
assert not x.parse_ok
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""End-to-end: Rust function-value callbacks connect handlers to their route
|
|
2
|
+
registration (Phase 4).
|
|
3
|
+
|
|
4
|
+
Regression: the Rust extractor emitted no callback references, so a handler passed
|
|
5
|
+
to `post(handler)` had no inbound edge and was unreachable in the call graph.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
import pytest
|
|
13
|
+
|
|
14
|
+
from entrygraph import CodeGraph
|
|
15
|
+
|
|
16
|
+
AXUM_APP = Path(__file__).parent / "fixtures" / "rust" / "axum_callback_app"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.fixture(scope="module")
|
|
20
|
+
def graph(tmp_path_factory) -> CodeGraph:
|
|
21
|
+
db = tmp_path_factory.mktemp("db") / "graph.db"
|
|
22
|
+
g = CodeGraph.index(AXUM_APP, db=db)
|
|
23
|
+
yield g
|
|
24
|
+
g.close()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def test_callback_edge_created(graph):
|
|
28
|
+
rows = graph.sql(
|
|
29
|
+
"SELECT src.qname AS src, e.dst_qname AS dst FROM edges e "
|
|
30
|
+
"JOIN symbols src ON e.src_symbol_id = src.id WHERE e.kind = 'callback'"
|
|
31
|
+
)
|
|
32
|
+
pairs = {(r["src"], r["dst"]) for r in rows}
|
|
33
|
+
assert ("_root.register", "_root.handler") in pairs
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_handler_reachable_only_with_callbacks(graph):
|
|
37
|
+
# the callback edge is what makes the handler reachable from the registration
|
|
38
|
+
# site (the Command sink itself isn't stamped here — a separate Rust
|
|
39
|
+
# scoped-call resolution gap — so reach to the handler symbol directly)
|
|
40
|
+
assert not graph.reachable(source="_root.register", sink="_root.handler")
|
|
41
|
+
assert graph.reachable(source="_root.register", sink="_root.handler", include_callbacks=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{entrygraph-0.1.22 → entrygraph-0.1.23}/tests/fixtures/javascript/express_app/src/services.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|