entrygraph 0.1.40__tar.gz → 0.1.41__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 (200) hide show
  1. {entrygraph-0.1.40 → entrygraph-0.1.41}/PKG-INFO +1 -1
  2. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/_version.py +2 -2
  3. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/golang.py +48 -0
  4. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/kinds.py +1 -0
  5. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_entrypoints_go.py +47 -0
  6. {entrygraph-0.1.40 → entrygraph-0.1.41}/.github/workflows/ci.yml +0 -0
  7. {entrygraph-0.1.40 → entrygraph-0.1.41}/.github/workflows/release.yml +0 -0
  8. {entrygraph-0.1.40 → entrygraph-0.1.41}/.gitignore +0 -0
  9. {entrygraph-0.1.40 → entrygraph-0.1.41}/LICENSE +0 -0
  10. {entrygraph-0.1.40 → entrygraph-0.1.41}/README.md +0 -0
  11. {entrygraph-0.1.40 → entrygraph-0.1.41}/RELEASING.md +0 -0
  12. {entrygraph-0.1.40 → entrygraph-0.1.41}/pyproject.toml +0 -0
  13. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/__init__.py +0 -0
  14. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/__main__.py +0 -0
  15. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/api.py +0 -0
  16. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/cli/__init__.py +0 -0
  17. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/cli/main.py +0 -0
  18. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/cli/render.py +0 -0
  19. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/csharp.toml +0 -0
  20. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/go.toml +0 -0
  21. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/java.toml +0 -0
  22. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/javascript.toml +0 -0
  23. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/lib_javascript.toml +0 -0
  24. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/lib_python.toml +0 -0
  25. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/php.toml +0 -0
  26. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/python.toml +0 -0
  27. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/ruby.toml +0 -0
  28. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/data/sinks/rust.toml +0 -0
  29. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/db/__init__.py +0 -0
  30. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/db/engine.py +0 -0
  31. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/db/meta.py +0 -0
  32. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/db/models.py +0 -0
  33. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/db/queries.py +0 -0
  34. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/__init__.py +0 -0
  35. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/__init__.py +0 -0
  36. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/base.py +0 -0
  37. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/configs.py +0 -0
  38. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/csharp.py +0 -0
  39. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/java.py +0 -0
  40. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/javascript.py +0 -0
  41. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/php.py +0 -0
  42. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/python.py +0 -0
  43. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/ruby.py +0 -0
  44. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/entrypoints/rust.py +0 -0
  45. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/frameworks.py +0 -0
  46. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/manifests.py +0 -0
  47. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/detect/taint.py +0 -0
  48. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/errors.py +0 -0
  49. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/__init__.py +0 -0
  50. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/base.py +0 -0
  51. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/csharp.py +0 -0
  52. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/golang.py +0 -0
  53. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/ir.py +0 -0
  54. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/java.py +0 -0
  55. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/javascript.py +0 -0
  56. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/php.py +0 -0
  57. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/python.py +0 -0
  58. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/registry.py +0 -0
  59. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/ruby.py +0 -0
  60. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/extract/rust.py +0 -0
  61. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/fs/__init__.py +0 -0
  62. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/fs/hashing.py +0 -0
  63. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/fs/lang.py +0 -0
  64. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/fs/walker.py +0 -0
  65. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/graph/__init__.py +0 -0
  66. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/graph/adjacency.py +0 -0
  67. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/graph/cte.py +0 -0
  68. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/graph/scoring.py +0 -0
  69. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/parsing/__init__.py +0 -0
  70. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/parsing/parsers.py +0 -0
  71. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/parsing/queries.py +0 -0
  72. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/pipeline/__init__.py +0 -0
  73. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/pipeline/scanner.py +0 -0
  74. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/pipeline/worker.py +0 -0
  75. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/pipeline/writer.py +0 -0
  76. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/py.typed +0 -0
  77. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/csharp/calls.scm +0 -0
  78. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/csharp/definitions.scm +0 -0
  79. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/csharp/imports.scm +0 -0
  80. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/go/calls.scm +0 -0
  81. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/go/definitions.scm +0 -0
  82. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/go/imports.scm +0 -0
  83. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/java/calls.scm +0 -0
  84. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/java/definitions.scm +0 -0
  85. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/java/imports.scm +0 -0
  86. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/javascript/calls.scm +0 -0
  87. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/javascript/definitions.scm +0 -0
  88. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/javascript/imports.scm +0 -0
  89. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/php/calls.scm +0 -0
  90. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/php/definitions.scm +0 -0
  91. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/php/imports.scm +0 -0
  92. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/python/calls.scm +0 -0
  93. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/python/definitions.scm +0 -0
  94. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/python/imports.scm +0 -0
  95. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/ruby/calls.scm +0 -0
  96. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/ruby/definitions.scm +0 -0
  97. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/ruby/imports.scm +0 -0
  98. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/rust/calls.scm +0 -0
  99. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/rust/definitions.scm +0 -0
  100. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/queries/rust/imports.scm +0 -0
  101. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/resolve/__init__.py +0 -0
  102. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/resolve/externals.py +0 -0
  103. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/resolve/hierarchy.py +0 -0
  104. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/resolve/resolver.py +0 -0
  105. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/resolve/symbol_table.py +0 -0
  106. {entrygraph-0.1.40 → entrygraph-0.1.41}/src/entrygraph/results.py +0 -0
  107. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/conftest.py +0 -0
  108. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/csharp/aspnet_app/Controllers/ReportsController.cs +0 -0
  109. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/csharp/aspnet_app/Program.cs +0 -0
  110. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/csharp/aspnet_app/Services/ReportService.cs +0 -0
  111. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/csharp/aspnet_app/app.csproj +0 -0
  112. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/csharp/minimalapi_app/Program.cs +0 -0
  113. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/csharp/minimalapi_app/app.csproj +0 -0
  114. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/go/gin_app/go.mod +0 -0
  115. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/go/gin_app/main.go +0 -0
  116. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/go/gin_app/service.go +0 -0
  117. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/go/nethttp_app/go.mod +0 -0
  118. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/go/nethttp_app/main.go +0 -0
  119. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/java/methodref_app/pom.xml +0 -0
  120. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/java/methodref_app/src/main/java/com/example/App.java +0 -0
  121. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/java/spring_app/pom.xml +0 -0
  122. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/java/spring_app/src/main/java/com/example/Application.java +0 -0
  123. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportRunner.java +0 -0
  124. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/java/spring_app/src/main/java/com/example/ReportService.java +0 -0
  125. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/java/spring_app/src/main/java/com/example/UserController.java +0 -0
  126. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/javascript/commonjs_app/server.js +0 -0
  127. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/javascript/express_app/package.json +0 -0
  128. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/javascript/express_app/src/routes.js +0 -0
  129. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/javascript/express_app/src/services.js +0 -0
  130. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/php/laravel_app/app/Http/Controllers/ReportController.php +0 -0
  131. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/php/laravel_app/artisan +0 -0
  132. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/php/laravel_app/composer.json +0 -0
  133. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/php/laravel_app/routes/web.php +0 -0
  134. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/chained_sinks/app.py +0 -0
  135. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/flask_app/app/__init__.py +0 -0
  136. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/flask_app/app/db.py +0 -0
  137. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/flask_app/app/routes.py +0 -0
  138. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/flask_app/app/services.py +0 -0
  139. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/flask_app/cli.py +0 -0
  140. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/flask_app/requirements.txt +0 -0
  141. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/fuzzy_sink/app.py +0 -0
  142. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/heal_fidelity/caller.py +0 -0
  143. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/heal_fidelity/worker.py +0 -0
  144. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/may_continue/app.py +0 -0
  145. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/sanitizer/app.py +0 -0
  146. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/python/taint_source/handler.py +0 -0
  147. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/ruby/sinatra_app/Gemfile +0 -0
  148. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/ruby/sinatra_app/app.rb +0 -0
  149. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/ruby/sinatra_app/services/runner.rb +0 -0
  150. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/rust/axum_app/Cargo.toml +0 -0
  151. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/rust/axum_app/src/handlers.rs +0 -0
  152. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/rust/axum_app/src/main.rs +0 -0
  153. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/rust/axum_callback_app/Cargo.toml +0 -0
  154. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/rust/axum_callback_app/src/main.rs +0 -0
  155. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/rust/scoped_sink_app/Cargo.toml +0 -0
  156. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/fixtures/rust/scoped_sink_app/src/main.rs +0 -0
  157. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_api.py +0 -0
  158. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_cli.py +0 -0
  159. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_commonjs.py +0 -0
  160. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_csharp_callbacks.py +0 -0
  161. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_cte_bounds.py +0 -0
  162. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_engine_pragmas.py +0 -0
  163. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_entrypoint_expansion.py +0 -0
  164. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_entrypoints.py +0 -0
  165. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_entrypoints_javascript.py +0 -0
  166. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_csharp.py +0 -0
  167. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_go.py +0 -0
  168. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_java.py +0 -0
  169. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_javascript.py +0 -0
  170. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_php.py +0 -0
  171. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_python.py +0 -0
  172. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_ruby.py +0 -0
  173. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_extract_rust.py +0 -0
  174. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_frameworks.py +0 -0
  175. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_fuzzy_sink.py +0 -0
  176. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_go_callbacks.py +0 -0
  177. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_hardening.py +0 -0
  178. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_heal_fidelity.py +0 -0
  179. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_incremental.py +0 -0
  180. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_indexer.py +0 -0
  181. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_java_callbacks.py +0 -0
  182. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_lang.py +0 -0
  183. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_manifests.py +0 -0
  184. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_may_continue.py +0 -0
  185. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_models.py +0 -0
  186. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_pool.py +0 -0
  187. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_reachability.py +0 -0
  188. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_registry_cache.py +0 -0
  189. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_render.py +0 -0
  190. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_resolver.py +0 -0
  191. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_rust_callbacks.py +0 -0
  192. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_rust_scoped_sinks.py +0 -0
  193. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_sanitizer_languages.py +0 -0
  194. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_scoring.py +0 -0
  195. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_sink_catalog.py +0 -0
  196. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_taint.py +0 -0
  197. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_taint_sanitizers.py +0 -0
  198. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_taint_sources.py +0 -0
  199. {entrygraph-0.1.40 → entrygraph-0.1.41}/tests/test_walker.py +0 -0
  200. {entrygraph-0.1.40 → entrygraph-0.1.41}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: entrygraph
3
- Version: 0.1.40
3
+ Version: 0.1.41
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.40'
22
- __version_tuple__ = version_tuple = (0, 1, 40)
21
+ __version__ = version = '0.1.41'
22
+ __version_tuple__ = version_tuple = (0, 1, 41)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -236,6 +236,51 @@ def _cobra_commands(x: FileExtraction) -> list[EntrypointHint]:
236
236
  return hints
237
237
 
238
238
 
239
+ # gRPC service registration: `pb.RegisterFooServer(grpcServer, impl)`. The `Server`
240
+ # suffix anchor keeps grpc-gateway's `RegisterFooHandler` / `...HandlerFromEndpoint`
241
+ # out. Definitions (`func RegisterFooServer(...)`) are not call references, so only
242
+ # real registration call sites match.
243
+ _GRPC_REGISTER = re.compile(r"^Register(?P<service>[A-Za-z0-9]+)Server$")
244
+
245
+
246
+ def _grpc_services(x: FileExtraction) -> list[EntrypointHint]:
247
+ """Mark each registered gRPC service as an RPC entrypoint (one per service).
248
+
249
+ This is a service-level marker: the implementation (arg 2) is almost always a
250
+ field/local var (`t.Ingester`, `frontendV1`) whose concrete type the IR can't
251
+ infer, so the entrypoint anchors on the registration file's module rather than
252
+ expanding to the impl's individual RPC methods. The service name rides in
253
+ `route` — the Entrypoint row has no name column, and it keeps distinct services
254
+ from collapsing in dedup (they all share `handler_qualified_name=None`).
255
+ """
256
+ if x.path.endswith("_test.go"):
257
+ return [] # test harnesses spin up real services; not production surface (#33)
258
+ hints = []
259
+ seen: set[str] = set()
260
+ for ref in x.references:
261
+ if ref.kind != "call":
262
+ continue
263
+ m = _GRPC_REGISTER.match(ref.callee_name)
264
+ if m is None:
265
+ continue
266
+ service = m.group("service")
267
+ if service in seen:
268
+ continue
269
+ seen.add(service)
270
+ hints.append(
271
+ EntrypointHint(
272
+ rule_id="go.grpc.service",
273
+ kind=EntrypointKind.RPC_HANDLER,
274
+ handler_qualified_name=None,
275
+ route=f"/{service}",
276
+ name=service,
277
+ framework="grpc-go",
278
+ span=ref.span,
279
+ )
280
+ )
281
+ return hints
282
+
283
+
239
284
  register(EntrypointRule("go.core.main", "go", None, EntrypointKind.MAIN, _go_main))
240
285
  register(
241
286
  EntrypointRule("go.nethttp.route", "go", "net/http", EntrypointKind.HTTP_ROUTE, _nethttp_routes)
@@ -253,3 +298,6 @@ register(
253
298
  register(
254
299
  EntrypointRule("go.cobra.command", "go", "cobra", EntrypointKind.CLI_COMMAND, _cobra_commands)
255
300
  )
301
+ register(
302
+ EntrypointRule("go.grpc.service", "go", "grpc-go", EntrypointKind.RPC_HANDLER, _grpc_services)
303
+ )
@@ -40,6 +40,7 @@ class EntrypointKind(enum.Enum):
40
40
  LAMBDA_HANDLER = "lambda_handler"
41
41
  EVENT_HANDLER = "event_handler"
42
42
  MIDDLEWARE = "middleware" # request/response interceptor (before_request, app.use, ...)
43
+ RPC_HANDLER = "rpc_handler" # gRPC / RPC service registration (RegisterXxxServer)
43
44
 
44
45
 
45
46
  class Confidence(enum.IntEnum):
@@ -71,3 +71,50 @@ def test_chi_mount_prefix_not_composed_across_functions():
71
71
  ]
72
72
  got = {(h.http_methods[0], h.route) for h in _chi_rule().match(_go_ext(refs))}
73
73
  assert got == {("GET", "/health")} # no phantom /api prefix
74
+
75
+
76
+ def _grpc_rule():
77
+ return {r.id: r for r in rules_for("go", {"grpc-go"})}["go.grpc.service"]
78
+
79
+
80
+ def test_grpc_service_registration_detected():
81
+ # pb.RegisterPusherServer(grpcServer, t.Ingester) -> one RPC entrypoint whose
82
+ # service name rides in `route` (no name column; keeps services distinct in
83
+ # dedup since they all share handler=None). Impl type is unresolvable, so the
84
+ # handler is left unbound (scanner anchors it on the module) (#37).
85
+ refs = [
86
+ _call("RegisterPusherServer", "logproto", "(t.Server.GRPC, t.Ingester)"),
87
+ _call("RegisterQuerierServer", "logproto", "(t.Server.GRPC, t.Ingester)", start=2),
88
+ ]
89
+ hints = _grpc_rule().match(_go_ext(refs, path="pkg/loki/modules.go"))
90
+ got = {(h.route, h.name, h.framework, h.handler_qualified_name) for h in hints}
91
+ assert got == {
92
+ ("/Pusher", "Pusher", "grpc-go", None),
93
+ ("/Querier", "Querier", "grpc-go", None),
94
+ }
95
+
96
+
97
+ def test_grpc_same_service_deduped_within_file():
98
+ refs = [
99
+ _call("RegisterPusherServer", "logproto", "(s, t.distributor)"),
100
+ _call("RegisterPusherServer", "logproto", "(s, t.Ingester)", start=2),
101
+ ]
102
+ hints = _grpc_rule().match(_go_ext(refs, path="pkg/loki/modules.go"))
103
+ assert [h.route for h in hints] == ["/Pusher"]
104
+
105
+
106
+ def test_grpc_gateway_and_non_server_calls_ignored():
107
+ # grpc-gateway registrars end in `Handler`/`HandlerFromEndpoint`, not `Server`,
108
+ # and must not be treated as service registrations.
109
+ refs = [
110
+ _call("RegisterPusherHandler", "gw", "(ctx, mux, conn)"),
111
+ _call("RegisterPusherHandlerFromEndpoint", "gw", "(ctx, mux, addr, opts)", start=2),
112
+ _call("Serve", "grpcServer", "(lis)", start=3),
113
+ ]
114
+ assert _grpc_rule().match(_go_ext(refs, path="pkg/loki/modules.go")) == []
115
+
116
+
117
+ def test_grpc_test_harness_registrations_excluded():
118
+ # A real service registered inside a *_test.go harness is not production surface.
119
+ refs = [_call("RegisterFrontendServer", "frontendv1pb", "(grpcServer, v1)")]
120
+ assert _grpc_rule().match(_go_ext(refs, path="pkg/frontend/frontend_test.go")) == []
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes