entrygraph 0.1.36__tar.gz → 0.1.37__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.36 → entrygraph-0.1.37}/PKG-INFO +1 -1
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/_version.py +2 -2
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/golang.py +43 -20
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_entrypoint_expansion.py +32 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/.github/workflows/ci.yml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/.github/workflows/release.yml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/.gitignore +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/LICENSE +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/README.md +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/RELEASING.md +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/pyproject.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/__main__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/api.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/cli/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/cli/main.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/cli/render.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/csharp.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/go.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/java.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/javascript.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/lib_javascript.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/lib_python.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/php.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/python.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/ruby.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/data/sinks/rust.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/db/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/db/engine.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/db/meta.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/db/models.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/db/queries.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/base.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/configs.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/csharp.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/java.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/javascript.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/php.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/python.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/ruby.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/entrypoints/rust.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/frameworks.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/manifests.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/detect/taint.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/errors.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/base.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/csharp.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/golang.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/ir.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/java.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/javascript.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/php.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/python.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/registry.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/ruby.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/extract/rust.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/fs/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/fs/hashing.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/fs/lang.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/fs/walker.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/graph/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/graph/adjacency.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/graph/cte.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/graph/scoring.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/kinds.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/parsing/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/parsing/parsers.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/parsing/queries.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/pipeline/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/pipeline/scanner.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/pipeline/worker.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/pipeline/writer.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/py.typed +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/csharp/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/csharp/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/csharp/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/go/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/go/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/go/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/java/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/java/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/java/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/javascript/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/javascript/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/javascript/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/php/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/php/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/php/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/python/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/python/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/python/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/ruby/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/ruby/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/ruby/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/rust/calls.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/rust/definitions.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/queries/rust/imports.scm +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/resolve/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/resolve/externals.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/resolve/hierarchy.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/resolve/resolver.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/resolve/symbol_table.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/src/entrygraph/results.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/conftest.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/csharp/aspnet_app/Controllers/ReportsController.cs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/csharp/aspnet_app/Program.cs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/csharp/aspnet_app/app.csproj +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/csharp/minimalapi_app/Program.cs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/csharp/minimalapi_app/app.csproj +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/go/gin_app/go.mod +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/go/gin_app/main.go +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/go/gin_app/service.go +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/go/nethttp_app/go.mod +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/go/nethttp_app/main.go +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/java/methodref_app/pom.xml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/java/methodref_app/src/main/java/com/example/App.java +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/java/spring_app/pom.xml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/java/spring_app/src/main/java/com/example/Application.java +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportRunner.java +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportService.java +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/java/spring_app/src/main/java/com/example/UserController.java +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/javascript/commonjs_app/server.js +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/javascript/express_app/package.json +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/javascript/express_app/src/routes.js +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/javascript/express_app/src/services.js +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/php/laravel_app/app/Http/Controllers/ReportController.php +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/php/laravel_app/artisan +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/php/laravel_app/composer.json +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/php/laravel_app/routes/web.php +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/chained_sinks/app.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/flask_app/app/__init__.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/flask_app/app/db.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/flask_app/app/routes.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/flask_app/app/services.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/flask_app/cli.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/flask_app/requirements.txt +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/fuzzy_sink/app.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/heal_fidelity/caller.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/heal_fidelity/worker.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/may_continue/app.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/sanitizer/app.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/python/taint_source/handler.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/ruby/sinatra_app/Gemfile +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/ruby/sinatra_app/app.rb +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/ruby/sinatra_app/services/runner.rb +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/rust/axum_app/Cargo.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/rust/axum_app/src/handlers.rs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/rust/axum_app/src/main.rs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/rust/axum_callback_app/Cargo.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/rust/axum_callback_app/src/main.rs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/rust/scoped_sink_app/Cargo.toml +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/fixtures/rust/scoped_sink_app/src/main.rs +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_api.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_cli.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_commonjs.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_csharp_callbacks.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_cte_bounds.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_engine_pragmas.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_entrypoints.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_csharp.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_go.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_java.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_javascript.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_php.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_python.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_ruby.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_extract_rust.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_frameworks.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_fuzzy_sink.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_go_callbacks.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_hardening.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_heal_fidelity.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_incremental.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_indexer.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_java_callbacks.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_lang.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_manifests.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_may_continue.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_models.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_pool.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_reachability.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_registry_cache.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_render.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_resolver.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_rust_callbacks.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_rust_scoped_sinks.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_sanitizer_languages.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_scoring.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_sink_catalog.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_taint.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_taint_sanitizers.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_taint_sources.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/tests/test_walker.py +0 -0
- {entrygraph-0.1.36 → entrygraph-0.1.37}/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.37
|
|
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.37'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 37)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -3,6 +3,8 @@ registration, gin router routes, and cobra CLI commands."""
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
import re
|
|
7
|
+
|
|
6
8
|
from entrygraph.detect.entrypoints.base import (
|
|
7
9
|
EntrypointRule,
|
|
8
10
|
first_string_arg,
|
|
@@ -114,30 +116,51 @@ def _gin_style(framework: str):
|
|
|
114
116
|
return matcher
|
|
115
117
|
|
|
116
118
|
|
|
119
|
+
_QUOTED = re.compile(r'"([^"]+)"')
|
|
120
|
+
|
|
121
|
+
|
|
117
122
|
def _gorilla_routes(x: FileExtraction) -> list[EntrypointHint]:
|
|
118
|
-
"""gorilla/mux
|
|
119
|
-
|
|
123
|
+
"""gorilla/mux, including the chained builder forms.
|
|
124
|
+
|
|
125
|
+
A registration is a method chain on one statement:
|
|
126
|
+
r.HandleFunc("/x", h).Methods("GET")
|
|
127
|
+
r.Path("/x").Methods("GET", "POST").HandlerFunc(h)
|
|
128
|
+
so the route (Path/HandleFunc), verb(s) (Methods) and handler are aggregated
|
|
129
|
+
per line. Previously only bare HandleFunc was matched — the `.Path().Methods()`
|
|
130
|
+
form and any `.Methods()` verb were dropped (loki: ~0% of gorilla routes).
|
|
131
|
+
"""
|
|
132
|
+
routes: dict[int, str] = {}
|
|
133
|
+
methods: dict[int, list[str]] = {}
|
|
134
|
+
handlers: dict[int, str | None] = {}
|
|
120
135
|
for ref in x.references:
|
|
121
|
-
if
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
136
|
+
if ref.kind != "call" or not ref.arg_preview:
|
|
137
|
+
continue
|
|
138
|
+
line = ref.span.start_line
|
|
139
|
+
# a route is opened by HandleFunc("/x", h) or Path("/x") on the router;
|
|
140
|
+
# exclude net/http's own http.HandleFunc.
|
|
141
|
+
defines_route = (
|
|
142
|
+
ref.callee_name in ("HandleFunc", "Handle") and ref.receiver_text not in (None, "http")
|
|
143
|
+
) or (ref.callee_name == "Path" and ref.receiver_text is not None)
|
|
144
|
+
if defines_route:
|
|
127
145
|
route = first_string_arg("(" + ref.arg_preview.lstrip("("))
|
|
128
146
|
if route is not None and route.startswith("/"):
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
147
|
+
routes.setdefault(line, route)
|
|
148
|
+
handlers.setdefault(line, ref.caller_qualified_name)
|
|
149
|
+
elif ref.callee_name == "Methods":
|
|
150
|
+
verbs = [v.upper() for v in _QUOTED.findall(ref.arg_preview)]
|
|
151
|
+
if verbs:
|
|
152
|
+
methods.setdefault(line, []).extend(verbs)
|
|
153
|
+
return [
|
|
154
|
+
EntrypointHint(
|
|
155
|
+
rule_id="go.gorilla-mux.route",
|
|
156
|
+
kind=EntrypointKind.HTTP_ROUTE,
|
|
157
|
+
handler_qualified_name=handlers.get(line),
|
|
158
|
+
route=route,
|
|
159
|
+
http_methods=methods.get(line, ["*"]),
|
|
160
|
+
framework="gorilla-mux",
|
|
161
|
+
)
|
|
162
|
+
for line, route in routes.items()
|
|
163
|
+
]
|
|
141
164
|
|
|
142
165
|
|
|
143
166
|
def _cobra_commands(x: FileExtraction) -> list[EntrypointHint]:
|
|
@@ -488,3 +488,35 @@ def test_laravel_apiresource_rule_emits_rest_routes():
|
|
|
488
488
|
got = {(h.http_methods[0], h.route) for h in rule.match(x)}
|
|
489
489
|
assert ("GET", "/articles") in got and ("DELETE", "/articles/{article}") in got
|
|
490
490
|
assert ("GET", "/articles/create") not in got # apiResource omits forms
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
def _go_call_ref(callee, receiver, arg, line=1):
|
|
494
|
+
return RawReference(
|
|
495
|
+
kind="call",
|
|
496
|
+
callee_text=f"{receiver}.{callee}",
|
|
497
|
+
callee_name=callee,
|
|
498
|
+
receiver_text=receiver,
|
|
499
|
+
span=Span(line, 0, line, 40),
|
|
500
|
+
caller_qualified_name="app.setup",
|
|
501
|
+
arg_preview=arg,
|
|
502
|
+
)
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
def test_gorilla_chained_routes_and_methods():
|
|
506
|
+
# gorilla registrations are method chains on one statement; the route (Path/
|
|
507
|
+
# HandleFunc) and verb(s) (Methods) must be aggregated per line (#37).
|
|
508
|
+
from entrygraph.detect.entrypoints import rules_for
|
|
509
|
+
|
|
510
|
+
refs = [
|
|
511
|
+
# r.HandleFunc("/users", h).Methods("GET") (line 1)
|
|
512
|
+
_go_call_ref("HandleFunc", "r", '("/users", listUsers)', line=1),
|
|
513
|
+
_go_call_ref("Methods", 'r.HandleFunc("/users", listUsers)', '("GET")', line=1),
|
|
514
|
+
# r.Path("/reports").Methods("POST", "PUT").Handler(h) (line 2)
|
|
515
|
+
_go_call_ref("Path", "r", '("/reports")', line=2),
|
|
516
|
+
_go_call_ref("Methods", 'r.Path("/reports")', '("POST", "PUT")', line=2),
|
|
517
|
+
_go_call_ref("Handler", 'r.Path("/reports").Methods("POST", "PUT")', "(h)", line=2),
|
|
518
|
+
]
|
|
519
|
+
rule = {r.id: r for r in rules_for("go", {"gorilla-mux"})}["go.gorilla-mux.route"]
|
|
520
|
+
got = {(tuple(h.http_methods), h.route) for h in rule.match(_go_ext(refs))}
|
|
521
|
+
assert (("GET",), "/users") in got # HandleFunc route + chained method
|
|
522
|
+
assert (("POST", "PUT"), "/reports") in got # Path().Methods().Handler() form
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.36 → entrygraph-0.1.37}/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.36 → entrygraph-0.1.37}/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
|