codeboarding 0.13.6__tar.gz → 0.13.8__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 (209) hide show
  1. {codeboarding-0.13.6/codeboarding.egg-info → codeboarding-0.13.8}/PKG-INFO +1 -1
  2. {codeboarding-0.13.6 → codeboarding-0.13.8/codeboarding.egg-info}/PKG-INFO +1 -1
  3. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/SOURCES.txt +1 -0
  4. {codeboarding-0.13.6 → codeboarding-0.13.8}/constants.py +12 -0
  5. {codeboarding-0.13.6 → codeboarding-0.13.8}/pyproject.toml +1 -1
  6. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/analysis_cache.py +2 -3
  7. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/csharp_adapter.py +56 -12
  8. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/language_results.py +18 -1
  9. codeboarding-0.13.8/tests/test_persisted_analysis_artifacts.py +29 -0
  10. {codeboarding-0.13.6 → codeboarding-0.13.8}/utils.py +1 -3
  11. {codeboarding-0.13.6 → codeboarding-0.13.8}/LICENSE +0 -0
  12. {codeboarding-0.13.6 → codeboarding-0.13.8}/PYPI.md +0 -0
  13. {codeboarding-0.13.6 → codeboarding-0.13.8}/README.md +0 -0
  14. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/__init__.py +0 -0
  15. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/abstraction_agent.py +0 -0
  16. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/agent.py +0 -0
  17. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/agent_responses.py +0 -0
  18. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/change_status.py +0 -0
  19. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/cluster_ids.py +0 -0
  20. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/cluster_methods_mixin.py +0 -0
  21. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/constants.py +0 -0
  22. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/content_hash.py +0 -0
  23. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/dependency_discovery.py +0 -0
  24. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/details_agent.py +0 -0
  25. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/file_index_models.py +0 -0
  26. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/incremental_agent.py +0 -0
  27. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/incremental_results.py +0 -0
  28. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/llm_config.py +0 -0
  29. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/llm_errors.py +0 -0
  30. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/meta_agent.py +0 -0
  31. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/model_capabilities.py +0 -0
  32. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/planner_agent.py +0 -0
  33. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/__init__.py +0 -0
  34. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/abstract_prompt_factory.py +0 -0
  35. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/claude_prompts.py +0 -0
  36. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/deepseek_prompts.py +0 -0
  37. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/gemini_flash_prompts.py +0 -0
  38. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/glm_prompts.py +0 -0
  39. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/gpt_prompts.py +0 -0
  40. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/kimi_prompts.py +0 -0
  41. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/prompt_factory.py +0 -0
  42. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/relation_edges.py +0 -0
  43. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/repair.py +0 -0
  44. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/retry.py +0 -0
  45. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/scope_ids.py +0 -0
  46. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/__init__.py +0 -0
  47. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/base.py +0 -0
  48. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/component_bridge_edges.py +0 -0
  49. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/get_external_deps.py +0 -0
  50. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/get_method_invocations.py +0 -0
  51. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/list_git_changes.py +0 -0
  52. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_cfg.py +0 -0
  53. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_docs.py +0 -0
  54. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_file.py +0 -0
  55. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_file_structure.py +0 -0
  56. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_packages.py +0 -0
  57. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_source.py +0 -0
  58. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_structure.py +0 -0
  59. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/toolkit.py +0 -0
  60. {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/validation.py +0 -0
  61. {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/__init__.py +0 -0
  62. {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/cache.py +0 -0
  63. {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/details_cache.py +0 -0
  64. {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/meta_cache.py +0 -0
  65. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/dependency_links.txt +0 -0
  66. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/entry_points.txt +0 -0
  67. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/requires.txt +0 -0
  68. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/top_level.txt +0 -0
  69. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/__init__.py +0 -0
  70. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/bootstrap.py +0 -0
  71. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/__init__.py +0 -0
  72. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/full_analysis.py +0 -0
  73. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/incremental_analysis.py +0 -0
  74. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/partial_analysis.py +0 -0
  75. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/view_instructions.py +0 -0
  76. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/__init__.py +0 -0
  77. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/analysis.py +0 -0
  78. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/orchestration.py +0 -0
  79. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/rendering.py +0 -0
  80. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/sources/__init__.py +0 -0
  81. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/sources/local.py +0 -0
  82. {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/sources/remote.py +0 -0
  83. {codeboarding-0.13.6 → codeboarding-0.13.8}/core/__init__.py +0 -0
  84. {codeboarding-0.13.6 → codeboarding-0.13.8}/core/plugin_loader.py +0 -0
  85. {codeboarding-0.13.6 → codeboarding-0.13.8}/core/protocols.py +0 -0
  86. {codeboarding-0.13.6 → codeboarding-0.13.8}/core/registry.py +0 -0
  87. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/__init__.py +0 -0
  88. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/analysis_json.py +0 -0
  89. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/cluster_delta.py +0 -0
  90. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/cluster_snapshot.py +0 -0
  91. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/diagram_generator.py +0 -0
  92. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/exceptions.py +0 -0
  93. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/file_coverage.py +0 -0
  94. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/file_index.py +0 -0
  95. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/io_utils.py +0 -0
  96. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/run_context.py +0 -0
  97. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/run_mode.py +0 -0
  98. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/scope_plan.py +0 -0
  99. {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/tree_shape.py +0 -0
  100. {codeboarding-0.13.6 → codeboarding-0.13.8}/github_action.py +0 -0
  101. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/__init__.py +0 -0
  102. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/__init__.py +0 -0
  103. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/circular_deps.py +0 -0
  104. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/cohesion.py +0 -0
  105. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/coupling.py +0 -0
  106. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/function_size.py +0 -0
  107. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/god_class.py +0 -0
  108. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/inheritance.py +0 -0
  109. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/instability.py +0 -0
  110. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/unused_code_diagnostics.py +0 -0
  111. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/config.py +0 -0
  112. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/models.py +0 -0
  113. {codeboarding-0.13.6 → codeboarding-0.13.8}/health/runner.py +0 -0
  114. {codeboarding-0.13.6 → codeboarding-0.13.8}/install.py +0 -0
  115. {codeboarding-0.13.6 → codeboarding-0.13.8}/logging_config.py +0 -0
  116. {codeboarding-0.13.6 → codeboarding-0.13.8}/main.py +0 -0
  117. {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/__init__.py +0 -0
  118. {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/callbacks.py +0 -0
  119. {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/context.py +0 -0
  120. {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/mixin.py +0 -0
  121. {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/paths.py +0 -0
  122. {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/stats.py +0 -0
  123. {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/writers.py +0 -0
  124. {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/__init__.py +0 -0
  125. {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/html.py +0 -0
  126. {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/html_template.py +0 -0
  127. {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/markdown.py +0 -0
  128. {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/mdx.py +0 -0
  129. {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/sphinx.py +0 -0
  130. {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/__init__.py +0 -0
  131. {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/change_detector.py +0 -0
  132. {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/errors.py +0 -0
  133. {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/fingerprint_diff.py +0 -0
  134. {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/git_ops.py +0 -0
  135. {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/ignore.py +0 -0
  136. {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/path_utils.py +0 -0
  137. {codeboarding-0.13.6 → codeboarding-0.13.8}/setup.cfg +0 -0
  138. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/__init__.py +0 -0
  139. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/analysis_result.py +0 -0
  140. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/cluster_helpers.py +0 -0
  141. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/cluster_relations.py +0 -0
  142. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/constants.py +0 -0
  143. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/csharp_config_scanner.py +0 -0
  144. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/dotnet_sdk.py +0 -0
  145. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/__init__.py +0 -0
  146. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/__init__.py +0 -0
  147. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/go_adapter.py +0 -0
  148. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/java_adapter.py +0 -0
  149. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/php_adapter.py +0 -0
  150. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/python_adapter.py +0 -0
  151. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/rust_adapter.py +0 -0
  152. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/typescript_adapter.py +0 -0
  153. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/call_graph_builder.py +0 -0
  154. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/edge_build_context.py +0 -0
  155. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/edge_builder.py +0 -0
  156. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/hierarchy_builder.py +0 -0
  157. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/language_adapter.py +0 -0
  158. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/lsp_client.py +0 -0
  159. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/lsp_constants.py +0 -0
  160. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/lsp_recycler.py +0 -0
  161. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/models.py +0 -0
  162. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/process_memory.py +0 -0
  163. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/progress.py +0 -0
  164. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/protocols.py +0 -0
  165. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/result_converter.py +0 -0
  166. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/source_inspector.py +0 -0
  167. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/symbol_table.py +0 -0
  168. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/utils.py +0 -0
  169. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/graph.py +0 -0
  170. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/incremental_orchestrator.py +0 -0
  171. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/internal_references.py +0 -0
  172. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/java_config_scanner.py +0 -0
  173. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/java_utils.py +0 -0
  174. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/leiden_utils.py +0 -0
  175. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/lsp_client/__init__.py +0 -0
  176. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/lsp_client/diagnostics.py +0 -0
  177. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/method_cluster_paths.py +0 -0
  178. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/node.py +0 -0
  179. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/programming_language.py +0 -0
  180. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/reference_resolver.py +0 -0
  181. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/scanner.py +0 -0
  182. {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/typescript_config_scanner.py +0 -0
  183. {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/__init__.py +0 -0
  184. {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/device_id.py +0 -0
  185. {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/events.py +0 -0
  186. {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/schemas.py +0 -0
  187. {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/service.py +0 -0
  188. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_cli_parser.py +0 -0
  189. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_github_action.py +0 -0
  190. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_install.py +0 -0
  191. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_logging_config.py +0 -0
  192. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_main.py +0 -0
  193. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_pyproject_packages.py +0 -0
  194. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_registry_coverage.py +0 -0
  195. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_telemetry_events.py +0 -0
  196. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_telemetry_service.py +0 -0
  197. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_tool_registry.py +0 -0
  198. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_user_config.py +0 -0
  199. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_view_instructions.py +0 -0
  200. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_vscode_constants.py +0 -0
  201. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_windows_compatibility.py +0 -0
  202. {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_windows_encoding.py +0 -0
  203. {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/__init__.py +0 -0
  204. {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/installers.py +0 -0
  205. {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/manifest.py +0 -0
  206. {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/paths.py +0 -0
  207. {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/registry.py +0 -0
  208. {codeboarding-0.13.6 → codeboarding-0.13.8}/user_config.py +0 -0
  209. {codeboarding-0.13.6 → codeboarding-0.13.8}/vscode_constants.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeboarding
3
- Version: 0.13.6
3
+ Version: 0.13.8
4
4
  Summary: Interactive Diagrams for Code
5
5
  Author: CodeBoarding Team
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeboarding
3
- Version: 0.13.6
3
+ Version: 0.13.8
4
4
  Summary: Interactive Diagrams for Code
5
5
  Author: CodeBoarding Team
6
6
  License-Expression: MIT
@@ -189,6 +189,7 @@ tests/test_github_action.py
189
189
  tests/test_install.py
190
190
  tests/test_logging_config.py
191
191
  tests/test_main.py
192
+ tests/test_persisted_analysis_artifacts.py
192
193
  tests/test_pyproject_packages.py
193
194
  tests/test_registry_coverage.py
194
195
  tests/test_telemetry_events.py
@@ -1,6 +1,18 @@
1
1
  """Application-level constants for CodeBoarding."""
2
2
 
3
3
  CODEBOARDING_DIR_NAME = ".codeboarding"
4
+ ANALYSIS_FILENAME = "analysis.json"
5
+ FINGERPRINT_FILENAME = "fingerprint.json"
6
+ STATIC_ANALYSIS_PKL = "static_analysis.pkl"
7
+ STATIC_ANALYSIS_SHA = "static_analysis.sha"
8
+ CODEBOARDING_VERSION_FILENAME = "codeboarding_version.json"
9
+ PERSISTED_ANALYSIS_ARTIFACT_FILENAMES = (
10
+ ANALYSIS_FILENAME,
11
+ FINGERPRINT_FILENAME,
12
+ STATIC_ANALYSIS_PKL,
13
+ STATIC_ANALYSIS_SHA,
14
+ CODEBOARDING_VERSION_FILENAME,
15
+ )
4
16
  # Ignore-file names read from a repo (``.gitignore`` at the repo root,
5
17
  # ``.codeboardingignore`` under ``CODEBOARDING_DIR_NAME``).
6
18
  GITIGNORE_FILENAME = ".gitignore"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codeboarding"
7
- version = "0.13.6"
7
+ version = "0.13.8"
8
8
  description = "Interactive Diagrams for Code"
9
9
  readme = "PYPI.md"
10
10
  license = "MIT"
@@ -29,11 +29,12 @@ from typing import TYPE_CHECKING, Any
29
29
 
30
30
  from filelock import FileLock
31
31
 
32
+ from constants import STATIC_ANALYSIS_PKL, STATIC_ANALYSIS_SHA
33
+ from repo_utils.path_utils import to_absolute_path, to_relative_path
32
34
  from static_analyzer.analysis_result import AnalysisData, InvalidatedAnalysis, InvalidatedEdge
33
35
  from static_analyzer.graph import CallGraph, Edge, EdgeKind
34
36
  from static_analyzer.lsp_client.diagnostics import FileDiagnosticsMap
35
37
  from static_analyzer.node import Node
36
- from repo_utils.path_utils import to_absolute_path, to_relative_path
37
38
 
38
39
  if TYPE_CHECKING:
39
40
  from static_analyzer.analysis_result import StaticAnalysisResults
@@ -44,8 +45,6 @@ logger = logging.getLogger(__name__)
44
45
  # Run-artifact filenames. Stored in ``<repo>/.codeboarding/`` (sibling of
45
46
  # ``analysis.json``), not under ``cache/`` — losing them costs a full LSP
46
47
  # re-index, so they're not safe to wipe with the rest of the cache.
47
- STATIC_ANALYSIS_PKL = "static_analysis.pkl"
48
- STATIC_ANALYSIS_SHA = "static_analysis.sha"
49
48
  STATIC_ANALYSIS_LOCK = "static_analysis.lock"
50
49
  # Legacy location ``StaticAnalysisCache`` wrote to before the run-artifact
51
50
  # split. Kept for one-time read fallback so CLI users transition smoothly.
@@ -36,7 +36,7 @@ _SINGLE_TARGET_FRAMEWORK_TARGETS = r"""<Project>
36
36
  <Import
37
37
  Project="$(CodeBoardingDirectoryBuildTargetsPath)"
38
38
  Condition="Exists('$(CodeBoardingDirectoryBuildTargetsPath)')" />
39
- <PropertyGroup Condition="'$(TargetFrameworks)' != ''">
39
+ <PropertyGroup Condition="'$(TargetFrameworks)' != '' and '$(CodeBoardingFoldMultiTargetFrameworks)' == 'true'">
40
40
  <CodeBoardingTargetFrameworks>$([System.Text.RegularExpressions.Regex]::Replace('$(TargetFrameworks)', '\s', ''))</CodeBoardingTargetFrameworks>
41
41
  <CodeBoardingTargetFrameworks>$([System.Text.RegularExpressions.Regex]::Replace('$(CodeBoardingTargetFrameworks)', ';+', ';'))</CodeBoardingTargetFrameworks>
42
42
  <CodeBoardingTargetFrameworks>;$([System.String]::Copy('$(CodeBoardingTargetFrameworks)').Trim(';'));</CodeBoardingTargetFrameworks>
@@ -47,24 +47,68 @@ _SINGLE_TARGET_FRAMEWORK_TARGETS = r"""<Project>
47
47
  </Project>
48
48
  """
49
49
 
50
+ _WORKSPACE_TARGET_FRAMEWORK_PROPS = r"""<Project TreatAsLocalProperty="TargetFramework">
51
+ <PropertyGroup>
52
+ <CodeBoardingWorkspaceTargetFramework>$(TargetFramework)</CodeBoardingWorkspaceTargetFramework>
53
+ <CodeBoardingDirectoryBuildPropsPath Condition="'$(CodeBoardingOriginalDirectoryBuildPropsPath)' == ''">$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildProjectDirectory)'))</CodeBoardingDirectoryBuildPropsPath>
54
+ </PropertyGroup>
55
+ <Import
56
+ Project="$(CodeBoardingOriginalDirectoryBuildPropsPath)"
57
+ Condition="Exists('$(CodeBoardingOriginalDirectoryBuildPropsPath)')" />
58
+ <Import
59
+ Project="$(CodeBoardingDirectoryBuildPropsPath)"
60
+ Condition="Exists('$(CodeBoardingDirectoryBuildPropsPath)')" />
61
+ </Project>
62
+ """
63
+
64
+
65
+ def _write_injected_import(name: str, content: str) -> Path:
66
+ """Materialize an MSBuild import CodeBoarding injects via environment variable."""
67
+ path = get_servers_dir() / name
68
+ path.parent.mkdir(parents=True, exist_ok=True)
69
+ if not path.exists() or path.read_text(encoding="utf-8") != content:
70
+ temporary_path = path.with_name(f"{path.name}.{os.getpid()}.tmp")
71
+ temporary_path.write_text(content, encoding="utf-8")
72
+ os.replace(temporary_path, path)
73
+ return path
74
+
50
75
 
51
76
  def _single_target_framework_env(project_root: Path) -> dict[str, str]:
52
- """Prevent csharp-ls's exponential multi-target framework fold."""
53
- project_count = sum(1 for pattern in ("*.csproj", "*.fsproj") for _ in project_root.rglob(pattern))
54
- if project_count <= _MULTI_TARGET_PROJECT_THRESHOLD:
55
- return {}
77
+ """Keep csharp-ls's workspace-wide TargetFramework from rewriting single-target projects.
78
+
79
+ Why: csharp-ls folds every project's frameworks into one global MSBuild
80
+ ``TargetFramework``. A global property outranks a project's own
81
+ ``<TargetFramework>``, so a solution whose projects do not all share one
82
+ framework has that property forced onto the odd ones out. Conditions keyed
83
+ on ``$(TargetFramework)`` then evaluate against a framework the project does
84
+ not target -- the idiomatic ``Condition="'$(TargetFramework)' !=
85
+ 'netstandard2.0'"`` guard around analyzer ``ProjectReference`` items inverts
86
+ and the analyzer projects reference themselves, which sends Roslyn's
87
+ solution load into unbounded growth. ``TreatAsLocalProperty`` demotes the
88
+ property so each project sees its declared framework again. Roslyn retains
89
+ its normal inner-build expansion for projects that genuinely multi-target.
90
+
91
+ Folding a multi-target project down to a single framework stays behind
92
+ ``_MULTI_TARGET_PROJECT_THRESHOLD``, because that fold discards frameworks a
93
+ small solution may want analyzed. Demoting the property has no such cost: it
94
+ only changes evaluation for a project whose declared framework the workspace
95
+ value contradicts, so it applies to every solution.
96
+ """
97
+ targets_path = _write_injected_import("csharp-ls-single-target.targets", _SINGLE_TARGET_FRAMEWORK_TARGETS)
98
+ props_path = _write_injected_import("csharp-ls-workspace-tfm.props", _WORKSPACE_TARGET_FRAMEWORK_PROPS)
99
+
100
+ env = {"DirectoryBuildTargetsPath": str(targets_path), "DirectoryBuildPropsPath": str(props_path)}
56
101
 
57
- targets_path = get_servers_dir() / "csharp-ls-single-target.targets"
58
- targets_path.parent.mkdir(parents=True, exist_ok=True)
59
- if not targets_path.exists() or targets_path.read_text(encoding="utf-8") != _SINGLE_TARGET_FRAMEWORK_TARGETS:
60
- temporary_path = targets_path.with_name(f"{targets_path.name}.{os.getpid()}.tmp")
61
- temporary_path.write_text(_SINGLE_TARGET_FRAMEWORK_TARGETS, encoding="utf-8")
62
- os.replace(temporary_path, targets_path)
102
+ project_count = sum(1 for pattern in ("*.csproj", "*.fsproj") for _ in project_root.rglob(pattern))
103
+ if project_count > _MULTI_TARGET_PROJECT_THRESHOLD:
104
+ env["CodeBoardingFoldMultiTargetFrameworks"] = "true"
63
105
 
64
- env = {"DirectoryBuildTargetsPath": str(targets_path)}
65
106
  original_targets_path = os.environ.get("DirectoryBuildTargetsPath")
66
107
  if original_targets_path:
67
108
  env["CodeBoardingOriginalDirectoryBuildTargetsPath"] = original_targets_path
109
+ original_props_path = os.environ.get("DirectoryBuildPropsPath")
110
+ if original_props_path:
111
+ env["CodeBoardingOriginalDirectoryBuildPropsPath"] = original_props_path
68
112
  return env
69
113
 
70
114
 
@@ -25,6 +25,11 @@ class ControlFlowGraph:
25
25
  if self.graph is None:
26
26
  self.graph = other
27
27
  return
28
+ if self.graph is other:
29
+ # Why: two engine configs can share a language (two tsconfig projects give
30
+ # two TypeScript engines) and warm-start hands both the same cached graph.
31
+ # Iterating a container while adding to it is unbounded, not just wasteful.
32
+ return
28
33
  for node in other.nodes.values():
29
34
  self.graph.add_node(node)
30
35
  for edge in other.edges:
@@ -55,6 +60,11 @@ class ControlFlowGraph:
55
60
  # Re-added via the API so alias-resolution and node-existence guards apply post-merge.
56
61
  for src, dst, kind in getattr(other, "reference_edges", ()):
57
62
  self.graph.add_reference_edge(src, dst, EdgeKind(kind))
63
+ # Nodes and call edges are keyed, reference edges are appended, so only they
64
+ # survive a repeat merge. Dedup after the loop rather than per-add: the stored
65
+ # tuple is post-alias-resolution, and a membership scan per edge is quadratic.
66
+ # getattr for the same reason as above: pre-reference-edge caches lack the field.
67
+ self.graph.reference_edges = list(dict.fromkeys(getattr(self.graph, "reference_edges", ())))
58
68
  self.graph.method_cluster_paths.merge(other.method_cluster_paths)
59
69
 
60
70
  def visit_paths(self, fn: Callable[[str], str]) -> None:
@@ -126,9 +136,16 @@ class SourceFiles:
126
136
  paths: list[str] | None = None
127
137
 
128
138
  def extend(self, files: list[str]) -> None:
139
+ # Why: called once per engine config, and two engines of one language are
140
+ # handed the same cached list on warm-start. Duplicates persist into the pkl,
141
+ # so an undeduped extend doubles the list on every subsequent run.
129
142
  if self.paths is None:
130
143
  self.paths = []
131
- self.paths.extend(files)
144
+ known = set(self.paths)
145
+ for path in files:
146
+ if path not in known:
147
+ known.add(path)
148
+ self.paths.append(path)
132
149
 
133
150
  def visit_paths(self, fn: Callable[[str], str]) -> None:
134
151
  if self.paths is None:
@@ -0,0 +1,29 @@
1
+ from constants import (
2
+ ANALYSIS_FILENAME,
3
+ CODEBOARDING_VERSION_FILENAME,
4
+ FINGERPRINT_FILENAME,
5
+ PERSISTED_ANALYSIS_ARTIFACT_FILENAMES,
6
+ STATIC_ANALYSIS_PKL,
7
+ STATIC_ANALYSIS_SHA,
8
+ )
9
+ from static_analyzer.analysis_cache import (
10
+ STATIC_ANALYSIS_PKL as COMPAT_STATIC_ANALYSIS_PKL,
11
+ STATIC_ANALYSIS_SHA as COMPAT_STATIC_ANALYSIS_SHA,
12
+ )
13
+ from utils import ANALYSIS_FILENAME as COMPAT_ANALYSIS_FILENAME
14
+ from utils import FINGERPRINT_FILENAME as COMPAT_FINGERPRINT_FILENAME
15
+
16
+
17
+ def test_persisted_analysis_artifact_manifest_and_compatibility_imports():
18
+ assert PERSISTED_ANALYSIS_ARTIFACT_FILENAMES == (
19
+ "analysis.json",
20
+ "fingerprint.json",
21
+ "static_analysis.pkl",
22
+ "static_analysis.sha",
23
+ "codeboarding_version.json",
24
+ )
25
+ assert CODEBOARDING_VERSION_FILENAME == "codeboarding_version.json"
26
+ assert COMPAT_ANALYSIS_FILENAME == ANALYSIS_FILENAME
27
+ assert COMPAT_FINGERPRINT_FILENAME == FINGERPRINT_FILENAME
28
+ assert COMPAT_STATIC_ANALYSIS_PKL == STATIC_ANALYSIS_PKL
29
+ assert COMPAT_STATIC_ANALYSIS_SHA == STATIC_ANALYSIS_SHA
@@ -7,14 +7,12 @@ import uuid
7
7
  from collections.abc import Iterable
8
8
  from pathlib import Path
9
9
 
10
- from constants import CODEBOARDING_DIR_NAME
10
+ from constants import ANALYSIS_FILENAME, CODEBOARDING_DIR_NAME, FINGERPRINT_FILENAME
11
11
  from repo_utils.path_utils import to_absolute_path, to_relative_path
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
15
15
  RUN_OUTPUT_DIR_NAME = "run-output"
16
- ANALYSIS_FILENAME = "analysis.json"
17
- FINGERPRINT_FILENAME = "fingerprint.json"
18
16
 
19
17
 
20
18
  class CFGGenerationError(Exception):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes