descry-codegraph 1.2.0__tar.gz → 1.2.1__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 (221) hide show
  1. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/AGENTS.md +1 -1
  2. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/CHANGELOG.md +12 -0
  3. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/PKG-INFO +1 -1
  4. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/__init__.py +1 -1
  5. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/resolver.py +12 -2
  6. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_generate.py +54 -0
  7. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/.github/assets/01-landing.png +0 -0
  8. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/.github/workflows/ci.yml +0 -0
  9. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/.github/workflows/release.yml +0 -0
  10. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/.gitignore +0 -0
  11. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/CONTRACT.md +0 -0
  12. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/LICENSE +0 -0
  13. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/README.md +0 -0
  14. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/SECURITY.md +0 -0
  15. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/THIRD-PARTY-NOTICES.md +0 -0
  16. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/claude-skill/README.md +0 -0
  17. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/claude-skill/descry/SKILL.md +0 -0
  18. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/claude-skill/descry/references/cli-reference.md +0 -0
  19. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/claude-skill/descry/references/mcp-tools.md +0 -0
  20. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/claude-skill/descry/references/recipes.md +0 -0
  21. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/docs/CERTAINTY.md +0 -0
  22. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/docs/TOOLS.md +0 -0
  23. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/docs/UPGRADING.md +0 -0
  24. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/justfile +0 -0
  25. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/pi-extension/README.md +0 -0
  26. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/pi-extension/descry-cli.py +0 -0
  27. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/pi-extension/descry-tools.ts +0 -0
  28. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/pyproject.toml +0 -0
  29. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_answers.py +0 -0
  30. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_comments.py +0 -0
  31. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_env.py +0 -0
  32. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_files.py +0 -0
  33. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_graph.py +0 -0
  34. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_parse_cache.py +0 -0
  35. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_parsing.py +0 -0
  36. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_reads.py +0 -0
  37. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_stdlib.py +0 -0
  38. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/_streams.py +0 -0
  39. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/clang_parser.py +0 -0
  40. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/cli.py +0 -0
  41. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/cross_lang.py +0 -0
  42. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/dart_parser.py +0 -0
  43. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/dotnet_parser.py +0 -0
  44. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/embeddings.py +0 -0
  45. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/generate.py +0 -0
  46. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/git_history.py +0 -0
  47. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/go_parser.py +0 -0
  48. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/handlers.py +0 -0
  49. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/java_parser.py +0 -0
  50. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/mcp_server.py +0 -0
  51. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/php_parser.py +0 -0
  52. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/proto_parser.py +0 -0
  53. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/python_parser.py +0 -0
  54. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/query.py +0 -0
  55. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/ruby_parser.py +0 -0
  56. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/rust_parser.py +0 -0
  57. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/__init__.py +0 -0
  58. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapter.py +0 -0
  59. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/__init__.py +0 -0
  60. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/_empty_environment.json +0 -0
  61. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/_java_compat.init.gradle +0 -0
  62. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/clang.py +0 -0
  63. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/dart.py +0 -0
  64. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/dotnet.py +0 -0
  65. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/go.py +0 -0
  66. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/java.py +0 -0
  67. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/php.py +0 -0
  68. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/python.py +0 -0
  69. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/ruby.py +0 -0
  70. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/rust.py +0 -0
  71. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/adapters/typescript.py +0 -0
  72. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/cache.py +0 -0
  73. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/parser.py +0 -0
  74. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/pb2.py +0 -0
  75. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/scip/support.py +0 -0
  76. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/c.json +0 -0
  77. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/cpp.json +0 -0
  78. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/dart.json +0 -0
  79. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/dotnet.json +0 -0
  80. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/go.json +0 -0
  81. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/java.json +0 -0
  82. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/node.json +0 -0
  83. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/php.json +0 -0
  84. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/python.json +0 -0
  85. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/ruby.json +0 -0
  86. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/rust.json +0 -0
  87. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/stdlib/typescript.json +0 -0
  88. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/ts_parser.py +0 -0
  89. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/web/__init__.py +0 -0
  90. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/web/server.py +0 -0
  91. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/web/web/index.html +0 -0
  92. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/src/descry/web/web/style.css +0 -0
  93. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/__init__.py +0 -0
  94. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/conftest.py +0 -0
  95. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/README.md +0 -0
  96. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/__init__.py +0 -0
  97. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/compare.py +0 -0
  98. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/corpus.py +0 -0
  99. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/metrics.py +0 -0
  100. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/registry.py +0 -0
  101. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/results/results-descry.json +0 -0
  102. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/results/results-ripgrep.json +0 -0
  103. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/results/search-after.json +0 -0
  104. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/results/search-before.json +0 -0
  105. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/search_eval.py +0 -0
  106. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/eval/search_questions.json +0 -0
  107. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/fixtures/small_graph.json +0 -0
  108. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/c/Makefile +0 -0
  109. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/c/expected.json +0 -0
  110. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/c/io.c +0 -0
  111. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/c/io.h +0 -0
  112. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/c/main.c +0 -0
  113. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/c/order.c +0 -0
  114. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/cpp/Makefile +0 -0
  115. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/cpp/expected.json +0 -0
  116. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/cpp/main.cpp +0 -0
  117. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/cpp/models.hpp +0 -0
  118. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/cpp/reader.hpp +0 -0
  119. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/csharp/Gt.csproj +0 -0
  120. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/csharp/Io.cs +0 -0
  121. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/csharp/Models.cs +0 -0
  122. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/csharp/Program.cs +0 -0
  123. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/csharp/expected.json +0 -0
  124. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/dart/bin/main.dart +0 -0
  125. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/dart/expected.json +0 -0
  126. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/dart/lib/io.dart +0 -0
  127. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/dart/lib/models.dart +0 -0
  128. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/dart/pubspec.yaml +0 -0
  129. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/go/expected.json +0 -0
  130. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/go/go.mod +0 -0
  131. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/go/io.go +0 -0
  132. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/go/main.go +0 -0
  133. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/go/models.go +0 -0
  134. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/java/expected.json +0 -0
  135. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/java/src/gt/Base.java +0 -0
  136. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/java/src/gt/Io.java +0 -0
  137. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/java/src/gt/Main.java +0 -0
  138. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/java/src/gt/Order.java +0 -0
  139. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/java/src/gt/Reader.java +0 -0
  140. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/java/src/gt/User.java +0 -0
  141. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/javascript/expected.json +0 -0
  142. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/javascript/package.json +0 -0
  143. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/javascript/src/io.js +0 -0
  144. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/javascript/src/main.js +0 -0
  145. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/javascript/src/models.js +0 -0
  146. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/php/composer.json +0 -0
  147. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/php/expected.json +0 -0
  148. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/php/src/Io.php +0 -0
  149. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/php/src/Models.php +0 -0
  150. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/php/src/main.php +0 -0
  151. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/python/app/__init__.py +0 -0
  152. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/python/app/io.py +0 -0
  153. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/python/app/main.py +0 -0
  154. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/python/app/models.py +0 -0
  155. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/python/expected.json +0 -0
  156. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/python/pyproject.toml +0 -0
  157. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/ruby/Gemfile +0 -0
  158. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/ruby/expected.json +0 -0
  159. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/ruby/lib/io.rb +0 -0
  160. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/ruby/lib/main.rb +0 -0
  161. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/ruby/lib/models.rb +0 -0
  162. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/rust/Cargo.toml +0 -0
  163. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/rust/expected.json +0 -0
  164. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/rust/src/io.rs +0 -0
  165. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/rust/src/main.rs +0 -0
  166. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/rust/src/models.rs +0 -0
  167. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/typescript/expected.json +0 -0
  168. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/typescript/package.json +0 -0
  169. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/typescript/src/io.ts +0 -0
  170. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/typescript/src/main.ts +0 -0
  171. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/ground_truth/typescript/src/models.ts +0 -0
  172. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_backtracking.py +0 -0
  173. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_clang_parser.py +0 -0
  174. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_cli.py +0 -0
  175. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_config.py +0 -0
  176. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_cross_lang.py +0 -0
  177. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_dart_parser.py +0 -0
  178. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_docs.py +0 -0
  179. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_dotnet_parser.py +0 -0
  180. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_embeddings.py +0 -0
  181. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_git_history.py +0 -0
  182. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_go_parser.py +0 -0
  183. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_ground_truth.py +0 -0
  184. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_handlers.py +0 -0
  185. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_hardening.py +0 -0
  186. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_interfaces.py +0 -0
  187. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_java_parser.py +0 -0
  188. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_mcp.py +0 -0
  189. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_non_regular_files.py +0 -0
  190. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_parse_cache.py +0 -0
  191. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_php_parser.py +0 -0
  192. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_query.py +0 -0
  193. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_resolve_cache.py +0 -0
  194. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_ruby_parser.py +0 -0
  195. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip.py +0 -0
  196. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_cache.py +0 -0
  197. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_clang.py +0 -0
  198. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_dart.py +0 -0
  199. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_dotnet.py +0 -0
  200. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_go.py +0 -0
  201. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_java.py +0 -0
  202. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_php.py +0 -0
  203. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_scip_ruby.py +0 -0
  204. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_stdlib.py +0 -0
  205. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_web_server.py +0 -0
  206. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tests/test_written_through.py +0 -0
  207. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/docs/gen_tools.py +0 -0
  208. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/README.md +0 -0
  209. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/common.py +0 -0
  210. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_c.py +0 -0
  211. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_cpp.py +0 -0
  212. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_dart.py +0 -0
  213. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_dotnet.py +0 -0
  214. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_go.py +0 -0
  215. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_java.py +0 -0
  216. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_node.py +0 -0
  217. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_php.py +0 -0
  218. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_python.py +0 -0
  219. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_ruby.py +0 -0
  220. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_rust.py +0 -0
  221. {descry_codegraph-1.2.0 → descry_codegraph-1.2.1}/tools/stdlib/gen_typescript.py +0 -0
@@ -23,7 +23,7 @@ just test tests/test_config.py::TestFromToml::test_from_toml_basic # one test
23
23
  just test -k "cross_lang and not slow" # by expression
24
24
  ```
25
25
 
26
- Python 3.11+ required (enforced by `pyproject.toml`). Pre-commit gate: `just lint && just fmt && just test` all pass (3380 tests pass; a handful more are skipped where the environment lacks their fixture — a drop is a regression signal).
26
+ Python 3.11+ required (enforced by `pyproject.toml`). Pre-commit gate: `just lint && just fmt && just test` all pass (3382 tests pass; a handful more are skipped where the environment lacks their fixture — a drop is a regression signal).
27
27
 
28
28
  Invoke the tool while developing:
29
29
 
@@ -4,6 +4,18 @@ All notable changes to Descry will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [semver](https://semver.org/) from 1.0.0.
6
6
 
7
+ ## [1.2.1] — 2026-11-13
8
+
9
+ ### Fixed
10
+
11
+ - Python: an index no longer ends with `RecursionError` on a class statement
12
+ in a method whose base is written through `self` or `cls`
13
+ (`class Extra(self.form_class)`). The base is read in the scope around the
14
+ class statement, as Python evaluates it.
15
+ - Python: an index no longer ends with `TypeError: unhashable type: 'list'`
16
+ where a method assigns an attribute that a base declares as a property
17
+ with a setter and then reads it.
18
+
7
19
  ## [1.2.0] — 2026-11-04
8
20
 
9
21
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: descry-codegraph
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Codebase knowledge graph: polyglot indexer, semantic search, call-graph analysis
5
5
  Project-URL: Homepage, https://github.com/06chaynes/descry
6
6
  Project-URL: Repository, https://github.com/06chaynes/descry
@@ -1,4 +1,4 @@
1
1
  """Descry — Codebase knowledge graph: polyglot indexer, semantic search, call-graph analysis."""
2
2
 
3
- __version__ = "1.2.0"
3
+ __version__ = "1.2.1"
4
4
  __all__ = ["__version__"]
@@ -5823,10 +5823,19 @@ class CallResolver:
5823
5823
  def _py_std_key(self, name, scope_id):
5824
5824
  """What the Python name ``name``, written in ``scope_id`` or as an
5825
5825
  origin path, is called in the standard library's data."""
5826
+ scope_id = name and self._py_written_in(name, scope_id)
5826
5827
  value = self._value(name, scope_id, set()) if name else None
5827
5828
  library = isinstance(value, tuple) and value[0] == "library"
5828
5829
  return value[1] if library else None
5829
5830
 
5831
+ def _py_written_in(self, name, scope_id):
5832
+ """Scope the Python name ``name``, written for ``scope_id``, is read
5833
+ in: a class statement's bases are evaluated around it, so `self` and
5834
+ `cls` there are those of the nearest scope that is no class."""
5835
+ if name.split(".")[0] not in ("self", "cls"):
5836
+ return scope_id
5837
+ return next(s for s in self._scopes(scope_id) if not self._is_class(s))
5838
+
5830
5839
  def _blanket(self, name):
5831
5840
  """The blanket impls that are for the outside type ``name``: those
5832
5841
  whose every bound it may meet. A trait the project declares it meets
@@ -6508,7 +6517,8 @@ class CallResolver:
6508
6517
  if mine in self._ancestors(hit.rpartition("::")[0])
6509
6518
  )
6510
6519
  self._candidates_now = sorted(derived) or None
6511
- if called or kind != "self":
6520
+ if called or kind != "self" or python:
6521
+ # A Python attribute is kept as the origins of its values.
6512
6522
  return None
6513
6523
  return self._part(value, f"{self._name(ref)}@{name}", ref)
6514
6524
 
@@ -6547,7 +6557,7 @@ class CallResolver:
6547
6557
  if lang == "python":
6548
6558
  # A base class is written as its origin path.
6549
6559
  if (scope_id, name) not in self.base_types:
6550
- value = self._value(name, scope_id, set())
6560
+ value = self._value(name, self._py_written_in(name, scope_id), set())
6551
6561
  found = None
6552
6562
  if value == _EXTERNAL or value and value[0] == "library":
6553
6563
  found = _EXTERNAL
@@ -3223,6 +3223,60 @@ class TestPythonCallResolution:
3223
3223
  )
3224
3224
  assert "REF:x.use" in _calls(builder, "FILE:m.py::matched")
3225
3225
 
3226
+ def test_self_in_a_base_is_the_method_s_self(self, tmp_path):
3227
+ """The bases of a class statement are evaluated around it: in a
3228
+ method, `self.form_class` is read on the method's class."""
3229
+ builder = _index(
3230
+ tmp_path,
3231
+ {
3232
+ "m.py": """
3233
+ class Form:
3234
+ def is_valid(self): ...
3235
+
3236
+ class Case:
3237
+ form_class = Form
3238
+
3239
+ def test(self):
3240
+ class Extra(self.form_class):
3241
+ pass
3242
+
3243
+ Extra().is_valid()
3244
+ """
3245
+ },
3246
+ )
3247
+ assert _bases(builder, "FILE:m.py::Case::test::Extra") == ["FILE:m.py::Form"]
3248
+ assert _calls(builder, "FILE:m.py::Case::test") == [
3249
+ "FILE:m.py::Case::test::Extra",
3250
+ "FILE:m.py::Form::is_valid",
3251
+ ]
3252
+
3253
+ def test_an_attribute_a_base_has_a_property_and_setter_for(self, tmp_path):
3254
+ """An attribute assigned where a base declares it as a property
3255
+ with a setter is of a value not told."""
3256
+ builder = _index(
3257
+ tmp_path,
3258
+ {
3259
+ "m.py": """
3260
+ class Base:
3261
+ @property
3262
+ def choices(self):
3263
+ return self._choices
3264
+
3265
+ @choices.setter
3266
+ def choices(self, value):
3267
+ self._choices = value
3268
+
3269
+ class Child(Base):
3270
+ def __init__(self):
3271
+ self.choices = []
3272
+ self.choices.extend([1])
3273
+ """
3274
+ },
3275
+ )
3276
+ assert _calls(builder, "FILE:m.py::Child::__init__") == [
3277
+ "REF:self.choices.extend"
3278
+ ]
3279
+
3226
3280
 
3227
3281
  class TestRustCallResolution:
3228
3282
  def test_a_method_two_traits_give_a_type_is_the_trait_in_scope_s(self, tmp_path):