entrygraph 0.1.43__tar.gz → 0.1.44__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.
Files changed (201) hide show
  1. {entrygraph-0.1.43 → entrygraph-0.1.44}/PKG-INFO +1 -1
  2. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/_version.py +2 -2
  3. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/golang.py +15 -1
  4. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/ruby.py +13 -0
  5. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_entrypoints_go.py +19 -0
  6. entrygraph-0.1.44/tests/test_entrypoints_ruby.py +63 -0
  7. {entrygraph-0.1.43 → entrygraph-0.1.44}/.github/workflows/ci.yml +0 -0
  8. {entrygraph-0.1.43 → entrygraph-0.1.44}/.github/workflows/release.yml +0 -0
  9. {entrygraph-0.1.43 → entrygraph-0.1.44}/.gitignore +0 -0
  10. {entrygraph-0.1.43 → entrygraph-0.1.44}/LICENSE +0 -0
  11. {entrygraph-0.1.43 → entrygraph-0.1.44}/README.md +0 -0
  12. {entrygraph-0.1.43 → entrygraph-0.1.44}/RELEASING.md +0 -0
  13. {entrygraph-0.1.43 → entrygraph-0.1.44}/pyproject.toml +0 -0
  14. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/__init__.py +0 -0
  15. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/__main__.py +0 -0
  16. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/api.py +0 -0
  17. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/cli/__init__.py +0 -0
  18. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/cli/main.py +0 -0
  19. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/cli/render.py +0 -0
  20. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/csharp.toml +0 -0
  21. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/go.toml +0 -0
  22. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/java.toml +0 -0
  23. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/javascript.toml +0 -0
  24. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/lib_javascript.toml +0 -0
  25. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/lib_python.toml +0 -0
  26. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/php.toml +0 -0
  27. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/python.toml +0 -0
  28. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/ruby.toml +0 -0
  29. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/data/sinks/rust.toml +0 -0
  30. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/db/__init__.py +0 -0
  31. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/db/engine.py +0 -0
  32. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/db/meta.py +0 -0
  33. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/db/models.py +0 -0
  34. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/db/queries.py +0 -0
  35. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/__init__.py +0 -0
  36. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/__init__.py +0 -0
  37. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/base.py +0 -0
  38. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/configs.py +0 -0
  39. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/csharp.py +0 -0
  40. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/java.py +0 -0
  41. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/javascript.py +0 -0
  42. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/php.py +0 -0
  43. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/python.py +0 -0
  44. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/entrypoints/rust.py +0 -0
  45. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/frameworks.py +0 -0
  46. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/manifests.py +0 -0
  47. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/detect/taint.py +0 -0
  48. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/errors.py +0 -0
  49. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/__init__.py +0 -0
  50. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/base.py +0 -0
  51. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/csharp.py +0 -0
  52. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/golang.py +0 -0
  53. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/ir.py +0 -0
  54. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/java.py +0 -0
  55. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/javascript.py +0 -0
  56. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/php.py +0 -0
  57. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/python.py +0 -0
  58. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/registry.py +0 -0
  59. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/ruby.py +0 -0
  60. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/extract/rust.py +0 -0
  61. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/fs/__init__.py +0 -0
  62. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/fs/hashing.py +0 -0
  63. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/fs/lang.py +0 -0
  64. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/fs/walker.py +0 -0
  65. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/graph/__init__.py +0 -0
  66. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/graph/adjacency.py +0 -0
  67. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/graph/cte.py +0 -0
  68. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/graph/scoring.py +0 -0
  69. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/kinds.py +0 -0
  70. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/parsing/__init__.py +0 -0
  71. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/parsing/parsers.py +0 -0
  72. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/parsing/queries.py +0 -0
  73. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/pipeline/__init__.py +0 -0
  74. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/pipeline/scanner.py +0 -0
  75. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/pipeline/worker.py +0 -0
  76. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/pipeline/writer.py +0 -0
  77. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/py.typed +0 -0
  78. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/csharp/calls.scm +0 -0
  79. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/csharp/definitions.scm +0 -0
  80. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/csharp/imports.scm +0 -0
  81. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/go/calls.scm +0 -0
  82. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/go/definitions.scm +0 -0
  83. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/go/imports.scm +0 -0
  84. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/java/calls.scm +0 -0
  85. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/java/definitions.scm +0 -0
  86. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/java/imports.scm +0 -0
  87. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/javascript/calls.scm +0 -0
  88. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/javascript/definitions.scm +0 -0
  89. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/javascript/imports.scm +0 -0
  90. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/php/calls.scm +0 -0
  91. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/php/definitions.scm +0 -0
  92. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/php/imports.scm +0 -0
  93. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/python/calls.scm +0 -0
  94. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/python/definitions.scm +0 -0
  95. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/python/imports.scm +0 -0
  96. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/ruby/calls.scm +0 -0
  97. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/ruby/definitions.scm +0 -0
  98. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/ruby/imports.scm +0 -0
  99. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/rust/calls.scm +0 -0
  100. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/rust/definitions.scm +0 -0
  101. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/queries/rust/imports.scm +0 -0
  102. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/resolve/__init__.py +0 -0
  103. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/resolve/externals.py +0 -0
  104. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/resolve/hierarchy.py +0 -0
  105. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/resolve/resolver.py +0 -0
  106. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/resolve/symbol_table.py +0 -0
  107. {entrygraph-0.1.43 → entrygraph-0.1.44}/src/entrygraph/results.py +0 -0
  108. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/conftest.py +0 -0
  109. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/csharp/aspnet_app/Controllers/ReportsController.cs +0 -0
  110. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/csharp/aspnet_app/Program.cs +0 -0
  111. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs +0 -0
  112. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/csharp/aspnet_app/app.csproj +0 -0
  113. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/csharp/minimalapi_app/Program.cs +0 -0
  114. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/csharp/minimalapi_app/app.csproj +0 -0
  115. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/go/gin_app/go.mod +0 -0
  116. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/go/gin_app/main.go +0 -0
  117. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/go/gin_app/service.go +0 -0
  118. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/go/nethttp_app/go.mod +0 -0
  119. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/go/nethttp_app/main.go +0 -0
  120. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/java/methodref_app/pom.xml +0 -0
  121. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/java/methodref_app/src/main/java/com/example/App.java +0 -0
  122. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/java/spring_app/pom.xml +0 -0
  123. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/java/spring_app/src/main/java/com/example/Application.java +0 -0
  124. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportRunner.java +0 -0
  125. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportService.java +0 -0
  126. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/java/spring_app/src/main/java/com/example/UserController.java +0 -0
  127. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/javascript/commonjs_app/server.js +0 -0
  128. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/javascript/express_app/package.json +0 -0
  129. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/javascript/express_app/src/routes.js +0 -0
  130. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/javascript/express_app/src/services.js +0 -0
  131. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/php/laravel_app/app/Http/Controllers/ReportController.php +0 -0
  132. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/php/laravel_app/artisan +0 -0
  133. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/php/laravel_app/composer.json +0 -0
  134. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/php/laravel_app/routes/web.php +0 -0
  135. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/chained_sinks/app.py +0 -0
  136. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/flask_app/app/__init__.py +0 -0
  137. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/flask_app/app/db.py +0 -0
  138. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/flask_app/app/routes.py +0 -0
  139. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/flask_app/app/services.py +0 -0
  140. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/flask_app/cli.py +0 -0
  141. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/flask_app/requirements.txt +0 -0
  142. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/fuzzy_sink/app.py +0 -0
  143. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/heal_fidelity/caller.py +0 -0
  144. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/heal_fidelity/worker.py +0 -0
  145. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/may_continue/app.py +0 -0
  146. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/sanitizer/app.py +0 -0
  147. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/python/taint_source/handler.py +0 -0
  148. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/ruby/sinatra_app/Gemfile +0 -0
  149. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/ruby/sinatra_app/app.rb +0 -0
  150. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/ruby/sinatra_app/services/runner.rb +0 -0
  151. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/rust/axum_app/Cargo.toml +0 -0
  152. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/rust/axum_app/src/handlers.rs +0 -0
  153. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/rust/axum_app/src/main.rs +0 -0
  154. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/rust/axum_callback_app/Cargo.toml +0 -0
  155. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/rust/axum_callback_app/src/main.rs +0 -0
  156. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/rust/scoped_sink_app/Cargo.toml +0 -0
  157. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/fixtures/rust/scoped_sink_app/src/main.rs +0 -0
  158. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_api.py +0 -0
  159. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_cli.py +0 -0
  160. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_commonjs.py +0 -0
  161. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_csharp_callbacks.py +0 -0
  162. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_cte_bounds.py +0 -0
  163. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_engine_pragmas.py +0 -0
  164. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_entrypoint_expansion.py +0 -0
  165. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_entrypoints.py +0 -0
  166. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_entrypoints_javascript.py +0 -0
  167. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_csharp.py +0 -0
  168. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_go.py +0 -0
  169. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_java.py +0 -0
  170. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_javascript.py +0 -0
  171. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_php.py +0 -0
  172. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_python.py +0 -0
  173. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_ruby.py +0 -0
  174. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_extract_rust.py +0 -0
  175. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_frameworks.py +0 -0
  176. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_fuzzy_sink.py +0 -0
  177. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_go_callbacks.py +0 -0
  178. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_hardening.py +0 -0
  179. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_heal_fidelity.py +0 -0
  180. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_incremental.py +0 -0
  181. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_indexer.py +0 -0
  182. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_java_callbacks.py +0 -0
  183. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_lang.py +0 -0
  184. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_manifests.py +0 -0
  185. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_may_continue.py +0 -0
  186. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_models.py +0 -0
  187. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_pool.py +0 -0
  188. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_reachability.py +0 -0
  189. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_registry_cache.py +0 -0
  190. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_render.py +0 -0
  191. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_resolver.py +0 -0
  192. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_rust_callbacks.py +0 -0
  193. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_rust_scoped_sinks.py +0 -0
  194. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_sanitizer_languages.py +0 -0
  195. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_scoring.py +0 -0
  196. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_sink_catalog.py +0 -0
  197. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_taint.py +0 -0
  198. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_taint_sanitizers.py +0 -0
  199. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_taint_sources.py +0 -0
  200. {entrygraph-0.1.43 → entrygraph-0.1.44}/tests/test_walker.py +0 -0
  201. {entrygraph-0.1.43 → entrygraph-0.1.44}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: entrygraph
3
- Version: 0.1.43
3
+ Version: 0.1.44
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.43'
22
- __version_tuple__ = version_tuple = (0, 1, 43)
21
+ __version__ = version = '0.1.44'
22
+ __version_tuple__ = version_tuple = (0, 1, 44)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -22,6 +22,12 @@ _GIN_METHODS = (
22
22
  _NETHTTP_REGISTER = frozenset({"HandleFunc", "Handle"})
23
23
 
24
24
 
25
+ def _is_go_test(path: str) -> bool:
26
+ """Go test files (`*_test.go`) register routes only to exercise handlers; those
27
+ are test-harness calls, not the production route surface (#33)."""
28
+ return path.endswith("_test.go")
29
+
30
+
25
31
  def _go_main(x: FileExtraction) -> list[EntrypointHint]:
26
32
  hints = []
27
33
  for symbol in x.symbols:
@@ -43,6 +49,8 @@ def _go_main(x: FileExtraction) -> list[EntrypointHint]:
43
49
 
44
50
 
45
51
  def _nethttp_routes(x: FileExtraction) -> list[EntrypointHint]:
52
+ if _is_go_test(x.path):
53
+ return []
46
54
  hints = []
47
55
  for ref in x.references:
48
56
  if (
@@ -101,6 +109,8 @@ def _group_prefixes(x: FileExtraction) -> dict[str, str]:
101
109
 
102
110
 
103
111
  def _gin_routes(x: FileExtraction) -> list[EntrypointHint]:
112
+ if _is_go_test(x.path):
113
+ return []
104
114
  prefixes = _group_prefixes(x)
105
115
  hints = []
106
116
  for ref in x.references:
@@ -172,6 +182,8 @@ def _chi_routes(x: FileExtraction) -> list[EntrypointHint]:
172
182
  falls inside a Route call's span gets that prefix (nested Routes stack). Mount
173
183
  (`r.Mount("/api", subRouter())`) points at a router built in another function,
174
184
  which is out of static reach, so its prefix isn't composed."""
185
+ if _is_go_test(x.path):
186
+ return []
175
187
  scopes: list[tuple[int, int, str]] = []
176
188
  for ref in x.references:
177
189
  if (
@@ -229,6 +241,8 @@ def _gorilla_routes(x: FileExtraction) -> list[EntrypointHint]:
229
241
  per line. Previously only bare HandleFunc was matched — the `.Path().Methods()`
230
242
  form and any `.Methods()` verb were dropped (loki: ~0% of gorilla routes).
231
243
  """
244
+ if _is_go_test(x.path):
245
+ return []
232
246
  routes: dict[int, str] = {}
233
247
  methods: dict[int, list[str]] = {}
234
248
  handlers: dict[int, str | None] = {}
@@ -297,7 +311,7 @@ def _grpc_services(x: FileExtraction) -> list[EntrypointHint]:
297
311
  `route` — the Entrypoint row has no name column, and it keeps distinct services
298
312
  from collapsing in dedup (they all share `handler_qualified_name=None`).
299
313
  """
300
- if x.path.endswith("_test.go"):
314
+ if _is_go_test(x.path):
301
315
  return [] # test harnesses spin up real services; not production surface (#33)
302
316
  hints = []
303
317
  seen: set[str] = set()
@@ -21,6 +21,15 @@ _SINATRA_VERBS = frozenset({"get", "post", "put", "delete", "patch"})
21
21
  _RAILS_VERBS = frozenset({"get", "post", "put", "patch", "delete", "resources", "resource", "root"})
22
22
 
23
23
 
24
+ def _is_ruby_test(path: str) -> bool:
25
+ """RSpec / Test::Unit files. Rack::Test reuses the bare `get '/x'` verb DSL
26
+ inside specs, indistinguishable from a Sinatra/Grape route declaration, so those
27
+ files must not contribute to the route surface (#33)."""
28
+ return (
29
+ path.endswith(("_spec.rb", "_test.rb")) or "/spec/" in f"/{path}" or "/test/" in f"/{path}"
30
+ )
31
+
32
+
24
33
  def _is_rails_routes_file(path: str) -> bool:
25
34
  """The main `config/routes.rb` plus split route files loaded via `draw(:x)`
26
35
  (`config/routes/api.rb`, `config/routes/admin.rb`, ...). Missing the split
@@ -29,6 +38,8 @@ def _is_rails_routes_file(path: str) -> bool:
29
38
 
30
39
 
31
40
  def _sinatra_routes(x: FileExtraction) -> list[EntrypointHint]:
41
+ if _is_ruby_test(x.path):
42
+ return []
32
43
  hints = []
33
44
  for ref in x.references:
34
45
  if (
@@ -106,6 +117,8 @@ def _rake_tasks(x: FileExtraction) -> list[EntrypointHint]:
106
117
 
107
118
  def _grape_routes(x: FileExtraction) -> list[EntrypointHint]:
108
119
  """Grape API classes: class-body `get '/x'` / `post '/y'` declarations."""
120
+ if _is_ruby_test(x.path):
121
+ return []
109
122
  hints = []
110
123
  for ref in x.references:
111
124
  if (
@@ -206,3 +206,22 @@ def test_fiber_group_prefix_end_to_end():
206
206
  x = GoExtractor().extract(parse("go", src), ctx)
207
207
  got = {(h.http_methods[0], h.route) for h in _fiber_rule().match(x)}
208
208
  assert got == {("GET", "/api"), ("POST", "/api/auth/login")}
209
+
210
+
211
+ def test_go_route_rules_skip_test_files():
212
+ # *_test.go registers routes only to exercise handlers (chi corpus: 152/204
213
+ # routes came from _test.go). All Go HTTP-route rules must skip them (#33).
214
+ refs = [_call("Get", "r", '("/users", h)')]
215
+ assert _chi_rule().match(_go_ext(refs, path="middleware/compress_test.go")) == []
216
+ assert _gin_rule().match(_go_ext(refs, path="api/routes_test.go")) == []
217
+ assert _fiber_rule().match(_go_ext(refs, path="api/routes_test.go")) == []
218
+ # sanity: the same refs in a non-test file still produce a route
219
+ assert _chi_rule().match(_go_ext(refs, path="middleware/compress.go"))
220
+
221
+
222
+ def test_go_nethttp_and_grpc_skip_test_files():
223
+ nethttp = {r.id: r for r in rules_for("go", {"net/http"})}["go.nethttp.route"]
224
+ refs = [_call("HandleFunc", "http", '("/x", h)')]
225
+ assert nethttp.match(_go_ext(refs, path="server_test.go")) == []
226
+ grpc = [_call("RegisterPusherServer", "pb", "(s, impl)")]
227
+ assert _grpc_rule().match(_go_ext(grpc, path="server_test.go")) == []
@@ -0,0 +1,63 @@
1
+ """Ruby 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.ir import FileExtraction, RawReference, Span
8
+
9
+
10
+ def _ruby_ext(references, path):
11
+ return FileExtraction(
12
+ path=path,
13
+ language="ruby",
14
+ module_path=path.replace("/", ".").removesuffix(".rb"),
15
+ parse_ok=True,
16
+ error_count=0,
17
+ symbols=[],
18
+ references=list(references),
19
+ )
20
+
21
+
22
+ def _verb(verb, route):
23
+ return RawReference(
24
+ kind="call",
25
+ callee_text=verb,
26
+ callee_name=verb,
27
+ receiver_text=None,
28
+ span=Span(1, 0, 1, 40),
29
+ caller_qualified_name=None,
30
+ arg_preview=f"('{route}')",
31
+ )
32
+
33
+
34
+ def _sinatra_rule():
35
+ return {r.id: r for r in rules_for("ruby", {"sinatra"})}["ruby.sinatra.route"]
36
+
37
+
38
+ def _grape_rule():
39
+ return {r.id: r for r in rules_for("ruby", {"grape"})}["ruby.grape.route"]
40
+
41
+
42
+ def test_sinatra_route_in_app_file_detected():
43
+ hints = _sinatra_rule().match(_ruby_ext([_verb("get", "/health")], "app.rb"))
44
+ assert [h.route for h in hints] == ["/health"]
45
+
46
+
47
+ def test_sinatra_ignores_rack_test_calls_in_spec_and_test_files():
48
+ # Rack::Test uses the same bare `get '/x'` DSL inside specs; those files are not
49
+ # the route surface (sinatra corpus: 256/274 routes came from test/spec) (#33).
50
+ for path in (
51
+ "test/routing_test.rb",
52
+ "spec/app_spec.rb",
53
+ "rack-protection/spec/lib/rack/protection/ip_spoofing_spec.rb",
54
+ "some/nested/test/helper_test.rb",
55
+ ):
56
+ assert _sinatra_rule().match(_ruby_ext([_verb("get", "/")], path)) == []
57
+
58
+
59
+ def test_grape_ignores_test_files():
60
+ assert _grape_rule().match(_ruby_ext([_verb("post", "/x")], "spec/api_spec.rb")) == []
61
+ assert [h.route for h in _grape_rule().match(_ruby_ext([_verb("post", "/x")], "api.rb"))] == [
62
+ "/x"
63
+ ]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes