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.
- {codeboarding-0.13.6/codeboarding.egg-info → codeboarding-0.13.8}/PKG-INFO +1 -1
- {codeboarding-0.13.6 → codeboarding-0.13.8/codeboarding.egg-info}/PKG-INFO +1 -1
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/SOURCES.txt +1 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/constants.py +12 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/pyproject.toml +1 -1
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/analysis_cache.py +2 -3
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/csharp_adapter.py +56 -12
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/language_results.py +18 -1
- codeboarding-0.13.8/tests/test_persisted_analysis_artifacts.py +29 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/utils.py +1 -3
- {codeboarding-0.13.6 → codeboarding-0.13.8}/LICENSE +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/PYPI.md +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/README.md +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/abstraction_agent.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/agent.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/agent_responses.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/change_status.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/cluster_ids.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/cluster_methods_mixin.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/constants.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/content_hash.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/dependency_discovery.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/details_agent.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/file_index_models.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/incremental_agent.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/incremental_results.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/llm_config.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/llm_errors.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/meta_agent.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/model_capabilities.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/planner_agent.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/abstract_prompt_factory.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/claude_prompts.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/deepseek_prompts.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/gemini_flash_prompts.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/glm_prompts.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/gpt_prompts.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/kimi_prompts.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/prompts/prompt_factory.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/relation_edges.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/repair.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/retry.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/scope_ids.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/base.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/component_bridge_edges.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/get_external_deps.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/get_method_invocations.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/list_git_changes.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_cfg.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_docs.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_file.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_file_structure.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_packages.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_source.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/read_structure.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/tools/toolkit.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/agents/validation.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/cache.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/details_cache.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/caching/meta_cache.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/dependency_links.txt +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/entry_points.txt +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/requires.txt +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding.egg-info/top_level.txt +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/bootstrap.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/full_analysis.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/incremental_analysis.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/partial_analysis.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/view_instructions.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/analysis.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/orchestration.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/rendering.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/sources/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/sources/local.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_workflows/sources/remote.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/core/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/core/plugin_loader.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/core/protocols.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/core/registry.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/analysis_json.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/cluster_delta.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/cluster_snapshot.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/diagram_generator.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/exceptions.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/file_coverage.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/file_index.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/io_utils.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/run_context.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/run_mode.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/scope_plan.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/diagram_analysis/tree_shape.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/github_action.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/circular_deps.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/cohesion.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/coupling.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/function_size.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/god_class.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/inheritance.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/instability.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/checks/unused_code_diagnostics.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/config.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/models.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/health/runner.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/install.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/logging_config.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/main.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/callbacks.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/context.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/mixin.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/paths.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/stats.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/monitoring/writers.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/html.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/html_template.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/markdown.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/mdx.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/output_generators/sphinx.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/change_detector.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/errors.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/fingerprint_diff.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/git_ops.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/ignore.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/repo_utils/path_utils.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/setup.cfg +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/analysis_result.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/cluster_helpers.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/cluster_relations.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/constants.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/csharp_config_scanner.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/dotnet_sdk.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/go_adapter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/java_adapter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/php_adapter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/python_adapter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/rust_adapter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/typescript_adapter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/call_graph_builder.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/edge_build_context.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/edge_builder.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/hierarchy_builder.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/language_adapter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/lsp_client.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/lsp_constants.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/lsp_recycler.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/models.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/process_memory.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/progress.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/protocols.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/result_converter.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/source_inspector.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/symbol_table.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/utils.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/graph.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/incremental_orchestrator.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/internal_references.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/java_config_scanner.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/java_utils.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/leiden_utils.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/lsp_client/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/lsp_client/diagnostics.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/method_cluster_paths.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/node.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/programming_language.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/reference_resolver.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/scanner.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/typescript_config_scanner.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/device_id.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/events.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/schemas.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/telemetry/service.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_cli_parser.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_github_action.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_install.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_logging_config.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_main.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_pyproject_packages.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_registry_coverage.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_telemetry_events.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_telemetry_service.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_tool_registry.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_user_config.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_view_instructions.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_vscode_constants.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_windows_compatibility.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tests/test_windows_encoding.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/__init__.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/installers.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/manifest.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/paths.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/tool_registry/registry.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/user_config.py +0 -0
- {codeboarding-0.13.6 → codeboarding-0.13.8}/vscode_constants.py +0 -0
|
@@ -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"
|
|
@@ -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.
|
{codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/csharp_adapter.py
RENAMED
|
@@ -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
|
-
"""
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeboarding-0.13.6 → codeboarding-0.13.8}/codeboarding_cli/commands/incremental_analysis.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/python_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
{codeboarding-0.13.6 → codeboarding-0.13.8}/static_analyzer/engine/adapters/typescript_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|