entrygraph 0.1.45__tar.gz → 0.1.46__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.45 → entrygraph-0.1.46}/PKG-INFO +1 -1
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/_version.py +2 -2
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/rust.py +32 -2
- entrygraph-0.1.46/tests/test_entrypoints_rust.py +53 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/.github/workflows/ci.yml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/.github/workflows/release.yml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/.gitignore +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/LICENSE +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/README.md +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/RELEASING.md +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/pyproject.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/__main__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/api.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/cli/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/cli/main.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/cli/render.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/csharp.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/go.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/java.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/javascript.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/lib_javascript.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/lib_python.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/php.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/python.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/ruby.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/data/sinks/rust.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/db/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/db/engine.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/db/meta.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/db/models.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/db/queries.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/base.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/configs.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/csharp.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/golang.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/java.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/javascript.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/php.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/python.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/entrypoints/ruby.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/frameworks.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/manifests.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/detect/taint.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/errors.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/base.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/csharp.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/golang.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/ir.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/java.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/javascript.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/php.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/python.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/registry.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/ruby.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/extract/rust.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/fs/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/fs/hashing.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/fs/lang.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/fs/walker.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/graph/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/graph/adjacency.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/graph/cte.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/graph/scoring.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/kinds.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/parsing/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/parsing/parsers.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/parsing/queries.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/pipeline/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/pipeline/scanner.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/pipeline/worker.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/pipeline/writer.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/py.typed +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/csharp/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/csharp/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/csharp/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/go/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/go/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/go/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/java/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/java/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/java/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/javascript/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/javascript/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/javascript/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/php/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/php/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/php/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/python/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/python/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/python/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/ruby/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/ruby/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/ruby/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/rust/calls.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/rust/definitions.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/queries/rust/imports.scm +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/resolve/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/resolve/externals.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/resolve/hierarchy.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/resolve/resolver.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/resolve/symbol_table.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/src/entrygraph/results.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/conftest.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/csharp/aspnet_app/Controllers/ReportsController.cs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/csharp/aspnet_app/Program.cs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/csharp/aspnet_app/app.csproj +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/csharp/minimalapi_app/Program.cs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/csharp/minimalapi_app/app.csproj +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/go/gin_app/go.mod +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/go/gin_app/main.go +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/go/gin_app/service.go +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/go/nethttp_app/go.mod +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/go/nethttp_app/main.go +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/java/methodref_app/pom.xml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/java/methodref_app/src/main/java/com/example/App.java +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/java/spring_app/pom.xml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/java/spring_app/src/main/java/com/example/Application.java +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportRunner.java +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportService.java +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/java/spring_app/src/main/java/com/example/UserController.java +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/javascript/commonjs_app/server.js +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/javascript/express_app/package.json +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/javascript/express_app/src/routes.js +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/javascript/express_app/src/services.js +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/php/laravel_app/app/Http/Controllers/ReportController.php +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/php/laravel_app/artisan +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/php/laravel_app/composer.json +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/php/laravel_app/routes/web.php +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/chained_sinks/app.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/flask_app/app/__init__.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/flask_app/app/db.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/flask_app/app/routes.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/flask_app/app/services.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/flask_app/cli.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/flask_app/requirements.txt +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/fuzzy_sink/app.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/heal_fidelity/caller.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/heal_fidelity/worker.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/may_continue/app.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/sanitizer/app.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/python/taint_source/handler.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/ruby/sinatra_app/Gemfile +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/ruby/sinatra_app/app.rb +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/ruby/sinatra_app/services/runner.rb +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/rust/axum_app/Cargo.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/rust/axum_app/src/handlers.rs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/rust/axum_app/src/main.rs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/rust/axum_callback_app/Cargo.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/rust/axum_callback_app/src/main.rs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/rust/scoped_sink_app/Cargo.toml +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/fixtures/rust/scoped_sink_app/src/main.rs +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_api.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_cli.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_commonjs.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_csharp_callbacks.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_cte_bounds.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_engine_pragmas.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_entrypoint_expansion.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_entrypoints.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_entrypoints_go.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_entrypoints_javascript.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_entrypoints_php.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_entrypoints_ruby.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_csharp.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_go.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_java.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_javascript.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_php.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_python.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_ruby.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_extract_rust.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_frameworks.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_fuzzy_sink.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_go_callbacks.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_hardening.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_heal_fidelity.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_incremental.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_indexer.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_java_callbacks.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_lang.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_manifests.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_may_continue.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_models.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_pool.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_reachability.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_registry_cache.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_render.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_resolver.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_rust_callbacks.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_rust_scoped_sinks.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_sanitizer_languages.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_scoring.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_sink_catalog.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_taint.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_taint_sanitizers.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_taint_sources.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/tests/test_walker.py +0 -0
- {entrygraph-0.1.45 → entrygraph-0.1.46}/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.46
|
|
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.46'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 46)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -15,6 +15,7 @@ import re
|
|
|
15
15
|
|
|
16
16
|
from entrygraph.detect.entrypoints.base import (
|
|
17
17
|
EntrypointRule,
|
|
18
|
+
compose_route,
|
|
18
19
|
first_string_arg,
|
|
19
20
|
register,
|
|
20
21
|
)
|
|
@@ -58,10 +59,36 @@ def _rust_main(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
58
59
|
return hints
|
|
59
60
|
|
|
60
61
|
|
|
62
|
+
_AXUM_NEST_FN = re.compile(r",\s*([A-Za-z_]\w*)\s*\(") # 2nd arg of nest: funcName(
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _axum_nest_prefixes(x: FileExtraction) -> dict[str, str]:
|
|
66
|
+
"""Map a router-builder function to the prefix it's nested under:
|
|
67
|
+
`.nest("/admin", admin_routes())` -> {admin_routes: "/admin"} (#36).
|
|
68
|
+
|
|
69
|
+
axum's other nest form, `.nest("/x", router_var)`, mounts a router built inline
|
|
70
|
+
in the same function as everything else, so its routes can't be told apart by
|
|
71
|
+
caller — that variable form stays out of static reach.
|
|
72
|
+
"""
|
|
73
|
+
prefixes: dict[str, str] = {}
|
|
74
|
+
for ref in x.references:
|
|
75
|
+
if ref.kind != "call" or ref.callee_name != "nest" or not ref.arg_preview:
|
|
76
|
+
continue
|
|
77
|
+
prefix = first_string_arg("(" + ref.arg_preview.lstrip("("))
|
|
78
|
+
if prefix is None or not prefix.startswith("/"):
|
|
79
|
+
continue
|
|
80
|
+
m = _AXUM_NEST_FN.search(ref.arg_preview)
|
|
81
|
+
if m:
|
|
82
|
+
prefixes[m.group(1)] = prefix
|
|
83
|
+
return prefixes
|
|
84
|
+
|
|
85
|
+
|
|
61
86
|
def _axum_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
62
87
|
"""`Router::new().route("/x", post(handler))` — the handler is buried in the
|
|
63
88
|
second argument, so we regex it out of the preview but can't statically bind
|
|
64
|
-
it (the Express-rule fidelity tradeoff).
|
|
89
|
+
it (the Express-rule fidelity tradeoff). Routes declared inside a function that
|
|
90
|
+
is `.nest("/prefix", fn())`-mounted are composed with that prefix."""
|
|
91
|
+
nest_prefixes = _axum_nest_prefixes(x)
|
|
65
92
|
hints = []
|
|
66
93
|
for ref in x.references:
|
|
67
94
|
if ref.kind != "call" or ref.callee_name != "route" or not ref.arg_preview:
|
|
@@ -70,12 +97,15 @@ def _axum_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
|
70
97
|
if route is None or not route.startswith("/"):
|
|
71
98
|
continue
|
|
72
99
|
method, handler = _axum_method_and_handler(ref.arg_preview)
|
|
100
|
+
# the enclosing router-builder function, if it's mounted under a nest prefix
|
|
101
|
+
builder = (ref.caller_qualified_name or "").rsplit(".", 1)[-1]
|
|
102
|
+
full = compose_route(nest_prefixes.get(builder, ""), route)
|
|
73
103
|
hints.append(
|
|
74
104
|
EntrypointHint(
|
|
75
105
|
rule_id="rust.axum.route",
|
|
76
106
|
kind=EntrypointKind.HTTP_ROUTE,
|
|
77
107
|
handler_qualified_name=None,
|
|
78
|
-
route=
|
|
108
|
+
route=full,
|
|
79
109
|
http_methods=[method],
|
|
80
110
|
framework="axum",
|
|
81
111
|
metadata={"handler_text": handler, "registration": ref.arg_preview},
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Rust entrypoint-rule tests (kept per-language so PRs touching different
|
|
2
|
+
languages don't serially conflict on one shared test module)."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from entrygraph.detect.entrypoints import rules_for
|
|
7
|
+
from entrygraph.extract.base import FileContext
|
|
8
|
+
from entrygraph.extract.rust import RustExtractor
|
|
9
|
+
from entrygraph.parsing.parsers import parse
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _axum_rule():
|
|
13
|
+
return {r.id: r for r in rules_for("rust", {"axum"})}["rust.axum.route"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _extract(src: bytes, path="src/main.rs"):
|
|
17
|
+
ctx = FileContext(path=path, language="rust", module_path="main", source=src, is_package=False)
|
|
18
|
+
return RustExtractor().extract(parse("rust", src), ctx)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_axum_nest_prefix_composed_for_function_router():
|
|
22
|
+
# `.nest("/admin", admin_routes())` prefixes the routes declared inside the
|
|
23
|
+
# admin_routes builder function; top-level routes stay unprefixed (#36).
|
|
24
|
+
src = (
|
|
25
|
+
b"fn admin_routes() -> Router {\n"
|
|
26
|
+
b" Router::new()\n"
|
|
27
|
+
b' .route("/keys", delete(delete_all_keys))\n'
|
|
28
|
+
b' .route("/key/{key}", delete(remove_key))\n'
|
|
29
|
+
b"}\n"
|
|
30
|
+
b"async fn main() {\n"
|
|
31
|
+
b" let app = Router::new()\n"
|
|
32
|
+
b' .route("/keys", get(list_keys))\n'
|
|
33
|
+
b' .nest("/admin", admin_routes());\n'
|
|
34
|
+
b"}\n"
|
|
35
|
+
)
|
|
36
|
+
got = {(h.http_methods[0], h.route) for h in _axum_rule().match(_extract(src))}
|
|
37
|
+
assert got == {
|
|
38
|
+
("GET", "/keys"), # top-level, no prefix
|
|
39
|
+
("DELETE", "/admin/keys"), # composed with the nest prefix
|
|
40
|
+
("DELETE", "/admin/key/{key}"),
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_axum_routes_without_nest_are_unprefixed():
|
|
45
|
+
src = (
|
|
46
|
+
b"async fn main() {\n"
|
|
47
|
+
b" let app = Router::new()\n"
|
|
48
|
+
b' .route("/users", get(list_users))\n'
|
|
49
|
+
b' .route("/users/{id}", get(get_user));\n'
|
|
50
|
+
b"}\n"
|
|
51
|
+
)
|
|
52
|
+
got = {(h.http_methods[0], h.route) for h in _axum_rule().match(_extract(src))}
|
|
53
|
+
assert got == {("GET", "/users"), ("GET", "/users/{id}")}
|
|
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.45 → entrygraph-0.1.46}/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
|
|
File without changes
|
|
File without changes
|
{entrygraph-0.1.45 → entrygraph-0.1.46}/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
|
|
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
|