code2llm 0.5.146__tar.gz → 0.5.147__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.
- {code2llm-0.5.146/code2llm.egg-info → code2llm-0.5.147}/PKG-INFO +11 -9
- {code2llm-0.5.146 → code2llm-0.5.147}/README.md +10 -8
- code2llm-0.5.147/VERSION +1 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/__init__.py +1 -1
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/smells.py +11 -7
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/computation.py +32 -13
- code2llm-0.5.147/code2llm/exporters/evolution/exclusion.py +17 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/flow_constants.py +5 -7
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/helpers.py +1 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/__init__.py +1 -1
- {code2llm-0.5.146 → code2llm-0.5.147/code2llm.egg-info}/PKG-INFO +11 -9
- {code2llm-0.5.146 → code2llm-0.5.147}/pyproject.toml +1 -1
- code2llm-0.5.146/VERSION +0 -1
- code2llm-0.5.146/code2llm/exporters/evolution/exclusion.py +0 -17
- {code2llm-0.5.146 → code2llm-0.5.147}/LICENSE +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/MANIFEST.in +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/__main__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/call_graph.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/cfg.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/coupling.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/data_analysis.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/dfg.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/pipeline_classifier.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/pipeline_detector.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/pipeline_resolver.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/side_effects.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/type_inference.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/utils/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/utils/ast_helpers.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/api.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_analysis.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_commands.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/code2logic.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/formats.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator_chunked.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator_constants.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator_handlers.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/prompt.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_parser.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/analyzer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/ast_registry.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/config.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/export_pipeline.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/file_analyzer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/file_cache.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/file_filter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/gitignore.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/incremental.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/base.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/cpp.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/csharp.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/generic.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/go_lang.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/java.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/php.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/ruby.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/rust.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/ts_extractors.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/ts_parser.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/typescript.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/large_repo.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/models.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/persistent_cache.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/refactoring.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/repo_files.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/cache.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/incremental.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/prioritizer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/scanner.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/strategies.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming_analyzer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/toon_size_manager.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/article_view.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/base.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/context_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/context_view.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/dashboard_data.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/dashboard_renderer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/constants.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/render.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/yaml_export.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/flow_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/flow_renderer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/html_dashboard.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator/renderer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator/scanner.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/json_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/llm_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/alerts.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/details.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/header.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/module_list.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/utils.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/yaml_export.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/calls.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/classic.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/compact.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/flow_compact.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/flow_detailed.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/flow_full.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/utils.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid_flow_helpers.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/constants.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/core.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/evolution.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/health.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/hotspots.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/modules.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/content.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/files.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/insights.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/sections.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/report_generators.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics_core.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics_duplicates.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics_health.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/module_detail.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/renderer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon_view.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/validate_project.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/yaml_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/_utils.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/analysis.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/cli.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/generator.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/nodes.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/parsing.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/utils.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_task.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/fix.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/png.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/validation.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/config.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/entity_resolution.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/intent_matching.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/normalization.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/pipeline.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/parsers/toon_parser.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/patterns/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/patterns/detector.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/refactor/__init__.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/refactor/prompt_engine.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/SOURCES.txt +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/dependency_links.txt +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/entry_points.txt +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/requires.txt +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/top_level.txt +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/setup.cfg +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/setup.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_advanced_analysis.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_analyzer.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_cache_invalidation_e2e.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_calls_toon_export.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_declarative_collection.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_deep_analysis.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_edge_cases.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_file_analyzer_tagging.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_flow_exporter.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_format_quality.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_multilanguage_e2e.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_nlp_pipeline.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_nonpython_cc_calls.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_orchestrator_cache_mtime.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_persistent_cache.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_pipeline_detector.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_project_toon_export.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_prompt_engine.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_prompt_txt.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_refactoring_engine.py +0 -0
- {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_toon_v2.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code2llm
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.147
|
|
4
4
|
Summary: High-performance Python code flow analysis with optimized TOON format - CFG, DFG, call graphs, and intelligent code queries
|
|
5
5
|
Home-page: https://github.com/wronai/stts
|
|
6
6
|
Author: STTS Project
|
|
@@ -64,19 +64,21 @@ Dynamic: requires-python
|
|
|
64
64
|
|
|
65
65
|
# code2llm - Generated Analysis Files
|
|
66
66
|
|
|
67
|
-
|
|
68
67
|
## AI Cost Tracking
|
|
69
68
|
|
|
70
|
-
     
|
|
70
|
+
  
|
|
72
71
|
|
|
73
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
74
|
-
- 👤 **Human dev:** ~$
|
|
72
|
+
- 🤖 **LLM usage:** $7.5000 (199 commits)
|
|
73
|
+
- 👤 **Human dev:** ~$7258 (72.6h @ $100/h, 30min dedup)
|
|
75
74
|
|
|
76
75
|
Generated on 2026-05-06 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
77
76
|
|
|
78
77
|
---
|
|
79
78
|
|
|
79
|
+
|
|
80
|
+
<!-- generated in 0.00s -->
|
|
81
|
+
|
|
80
82
|
This directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase.
|
|
81
83
|
|
|
82
84
|
## 📁 Generated Files Overview
|
|
@@ -406,9 +408,9 @@ code2llm ./ -f yaml --separate-orphans
|
|
|
406
408
|
|
|
407
409
|
**Generated by**: `code2llm ./ -f all --readme`
|
|
408
410
|
**Analysis Date**: 2026-05-06
|
|
409
|
-
**Total Functions**:
|
|
410
|
-
**Total Classes**:
|
|
411
|
-
**Modules**:
|
|
411
|
+
**Total Functions**: 3800
|
|
412
|
+
**Total Classes**: 259
|
|
413
|
+
**Modules**: 497
|
|
412
414
|
|
|
413
415
|
For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm
|
|
414
416
|
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
# code2llm - Generated Analysis Files
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
## AI Cost Tracking
|
|
5
4
|
|
|
6
|
-
     
|
|
6
|
+
  
|
|
8
7
|
|
|
9
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
10
|
-
- 👤 **Human dev:** ~$
|
|
8
|
+
- 🤖 **LLM usage:** $7.5000 (199 commits)
|
|
9
|
+
- 👤 **Human dev:** ~$7258 (72.6h @ $100/h, 30min dedup)
|
|
11
10
|
|
|
12
11
|
Generated on 2026-05-06 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
13
12
|
|
|
14
13
|
---
|
|
15
14
|
|
|
15
|
+
|
|
16
|
+
<!-- generated in 0.00s -->
|
|
17
|
+
|
|
16
18
|
This directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase.
|
|
17
19
|
|
|
18
20
|
## 📁 Generated Files Overview
|
|
@@ -342,9 +344,9 @@ code2llm ./ -f yaml --separate-orphans
|
|
|
342
344
|
|
|
343
345
|
**Generated by**: `code2llm ./ -f all --readme`
|
|
344
346
|
**Analysis Date**: 2026-05-06
|
|
345
|
-
**Total Functions**:
|
|
346
|
-
**Total Classes**:
|
|
347
|
-
**Modules**:
|
|
347
|
+
**Total Functions**: 3800
|
|
348
|
+
**Total Classes**: 259
|
|
349
|
+
**Modules**: 497
|
|
348
350
|
|
|
349
351
|
For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm
|
|
350
352
|
|
code2llm-0.5.147/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.147
|
|
@@ -8,7 +8,7 @@ Includes NLP Processing Pipeline for query normalization, intent matching,
|
|
|
8
8
|
and entity resolution with multilingual support.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
-
__version__ = "0.5.
|
|
11
|
+
__version__ = "0.5.147"
|
|
12
12
|
__author__ = "STTS Project"
|
|
13
13
|
|
|
14
14
|
# Core analysis components (lightweight, always needed)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""Detection of code smells using analysis metrics."""
|
|
2
|
+
from collections import defaultdict
|
|
2
3
|
from typing import List, Dict, Any
|
|
3
4
|
from code2llm.core.models import AnalysisResult, CodeSmell
|
|
4
5
|
|
|
@@ -7,6 +8,10 @@ class SmellDetector:
|
|
|
7
8
|
|
|
8
9
|
def __init__(self, result: AnalysisResult):
|
|
9
10
|
self.result = result
|
|
11
|
+
# Pre-index mutations by scope — avoids O(n×m) full scans
|
|
12
|
+
self._mutations_by_scope: Dict[str, list] = defaultdict(list)
|
|
13
|
+
for m in result.mutations:
|
|
14
|
+
self._mutations_by_scope[m.scope].append(m)
|
|
10
15
|
|
|
11
16
|
def detect(self) -> List[CodeSmell]:
|
|
12
17
|
"""Record and return detected code smells."""
|
|
@@ -28,7 +33,7 @@ class SmellDetector:
|
|
|
28
33
|
for func_name, func_info in self.result.functions.items():
|
|
29
34
|
metrics = self.result.metrics.get(func_name, {})
|
|
30
35
|
fan_out = metrics.get('fan_out', 0)
|
|
31
|
-
mutation_count = len(
|
|
36
|
+
mutation_count = len(self._mutations_by_scope.get(func_name, []))
|
|
32
37
|
|
|
33
38
|
# Use cyclomatic complexity (now mapped to 'cc' in FunctionInfo.complexity)
|
|
34
39
|
complexity = func_info.complexity.get('cyclomatic_complexity', 1)
|
|
@@ -78,12 +83,11 @@ class SmellDetector:
|
|
|
78
83
|
mut_mod = func_name.split('.')[0]
|
|
79
84
|
foreign_mutations = []
|
|
80
85
|
|
|
81
|
-
for mutation in self.
|
|
82
|
-
if
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
foreign_mutations.append(mutation.variable)
|
|
86
|
+
for mutation in self._mutations_by_scope.get(func_name, []):
|
|
87
|
+
if '.' in mutation.variable:
|
|
88
|
+
origin_mod = mutation.variable.split('.')[0]
|
|
89
|
+
if origin_mod != mut_mod:
|
|
90
|
+
foreign_mutations.append(mutation.variable)
|
|
87
91
|
|
|
88
92
|
if len(set(foreign_mutations)) >= 3:
|
|
89
93
|
smells.append(CodeSmell(
|
|
@@ -29,21 +29,40 @@ def compute_func_data(result: AnalysisResult) -> List[Dict]:
|
|
|
29
29
|
return sorted(func_data, key=lambda x: x["impact"], reverse=True)
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
def scan_file_sizes(project_path: Optional[Path]) -> Dict[str, int]:
|
|
33
|
-
"""
|
|
32
|
+
def scan_file_sizes(project_path: Optional[Path], result: Optional[AnalysisResult] = None) -> Dict[str, int]:
|
|
33
|
+
"""Return per-file line counts, preferring already-analyzed module data."""
|
|
34
34
|
file_lines: Dict[str, int] = {}
|
|
35
|
+
|
|
36
|
+
# Fast path: derive from AnalysisResult modules (no I/O)
|
|
37
|
+
if result and result.modules:
|
|
38
|
+
for mi in result.modules.values():
|
|
39
|
+
if mi.file and not is_excluded(mi.file):
|
|
40
|
+
lc = mi.line_count if hasattr(mi, 'line_count') and mi.line_count else 0
|
|
41
|
+
if lc == 0:
|
|
42
|
+
lc = len(mi.functions) + len(mi.classes)
|
|
43
|
+
if lc > 0:
|
|
44
|
+
file_lines[mi.file] = lc
|
|
45
|
+
if file_lines:
|
|
46
|
+
return file_lines
|
|
47
|
+
|
|
48
|
+
# Slow fallback: single os.walk (only if result is unavailable)
|
|
35
49
|
if not project_path or not project_path.is_dir():
|
|
36
50
|
return file_lines
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
|
|
52
|
+
import os
|
|
53
|
+
exclude = {'.git', '__pycache__', 'node_modules', 'venv', '.venv',
|
|
54
|
+
'env', '.env', 'site-packages', 'dist', 'build', '.tox'}
|
|
55
|
+
for dirpath, dirnames, filenames in os.walk(str(project_path)):
|
|
56
|
+
dirnames[:] = [d for d in dirnames if d not in exclude]
|
|
57
|
+
for fn in filenames:
|
|
58
|
+
if not fn.endswith('.py'):
|
|
59
|
+
continue
|
|
60
|
+
fpath = os.path.join(dirpath, fn)
|
|
61
|
+
try:
|
|
62
|
+
with open(fpath, encoding='utf-8', errors='ignore') as f:
|
|
63
|
+
file_lines[fpath] = sum(1 for _ in f)
|
|
64
|
+
except Exception:
|
|
65
|
+
pass
|
|
47
66
|
return file_lines
|
|
48
67
|
|
|
49
68
|
|
|
@@ -109,7 +128,7 @@ def compute_god_modules(result: AnalysisResult) -> List[Dict]:
|
|
|
109
128
|
"""Identify god modules (≥500 lines) from project files."""
|
|
110
129
|
pp = Path(result.project_path) if result.project_path else None
|
|
111
130
|
|
|
112
|
-
file_lines = scan_file_sizes(pp)
|
|
131
|
+
file_lines = scan_file_sizes(pp, result)
|
|
113
132
|
file_stats = aggregate_file_stats(result, file_lines)
|
|
114
133
|
return filter_god_modules(file_stats, pp)
|
|
115
134
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Evolution exporter exclusion logic — path filtering."""
|
|
2
|
+
|
|
3
|
+
from functools import lru_cache
|
|
4
|
+
|
|
5
|
+
from .constants import EXCLUDE_PATTERNS
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@lru_cache(maxsize=4096)
|
|
9
|
+
def is_excluded(path: str) -> bool:
|
|
10
|
+
"""Check if path should be excluded (venv, site-packages, etc.)."""
|
|
11
|
+
if not path:
|
|
12
|
+
return False
|
|
13
|
+
parts = set(path.lower().replace('\\', '/').split('/'))
|
|
14
|
+
return bool(parts & EXCLUDE_PATTERNS)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = ['is_excluded']
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Zawiera progi, wzorce wykluczeń i rekomendacje dotyczące podziału typów hub.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
+
from functools import lru_cache
|
|
7
|
+
|
|
6
8
|
# Progi dla wykrywania problemów
|
|
7
9
|
CC_HIGH = 15
|
|
8
10
|
FAN_OUT_THRESHOLD = 10
|
|
@@ -19,17 +21,13 @@ EXCLUDE_PATTERNS = {
|
|
|
19
21
|
'virtualenv', '.virtualenv', 'envs', '.envs',
|
|
20
22
|
}
|
|
21
23
|
|
|
24
|
+
@lru_cache(maxsize=4096)
|
|
22
25
|
def is_excluded_path(path: str) -> bool:
|
|
23
26
|
"""Return True if *path* matches any standard exclusion pattern (venv, cache, etc.)."""
|
|
24
27
|
if not path:
|
|
25
28
|
return False
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if f'/{pattern}/' in path_lower or path_lower.startswith(f'{pattern}/'):
|
|
29
|
-
return True
|
|
30
|
-
if pattern in path_lower.split('/'):
|
|
31
|
-
return True
|
|
32
|
-
return False
|
|
29
|
+
parts = set(path.lower().replace('\\', '/').split('/'))
|
|
30
|
+
return bool(parts & EXCLUDE_PATTERNS)
|
|
33
31
|
|
|
34
32
|
|
|
35
33
|
# Rekomendacje podziału typów hub: typ -> sugerowane pod-interfejsy
|
|
@@ -10,6 +10,7 @@ from code2llm.core.models import AnalysisResult, FunctionInfo
|
|
|
10
10
|
from ..flow_constants import is_excluded_path as _is_excluded
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
@lru_cache(maxsize=4096)
|
|
13
14
|
def _rel_path(fpath: str, project_path: str) -> str:
|
|
14
15
|
if not project_path or not fpath:
|
|
15
16
|
return fpath or ""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code2llm
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.147
|
|
4
4
|
Summary: High-performance Python code flow analysis with optimized TOON format - CFG, DFG, call graphs, and intelligent code queries
|
|
5
5
|
Home-page: https://github.com/wronai/stts
|
|
6
6
|
Author: STTS Project
|
|
@@ -64,19 +64,21 @@ Dynamic: requires-python
|
|
|
64
64
|
|
|
65
65
|
# code2llm - Generated Analysis Files
|
|
66
66
|
|
|
67
|
-
|
|
68
67
|
## AI Cost Tracking
|
|
69
68
|
|
|
70
|
-
     
|
|
70
|
+
  
|
|
72
71
|
|
|
73
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
74
|
-
- 👤 **Human dev:** ~$
|
|
72
|
+
- 🤖 **LLM usage:** $7.5000 (199 commits)
|
|
73
|
+
- 👤 **Human dev:** ~$7258 (72.6h @ $100/h, 30min dedup)
|
|
75
74
|
|
|
76
75
|
Generated on 2026-05-06 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
77
76
|
|
|
78
77
|
---
|
|
79
78
|
|
|
79
|
+
|
|
80
|
+
<!-- generated in 0.00s -->
|
|
81
|
+
|
|
80
82
|
This directory contains the complete analysis of your project generated by `code2llm`. Each file serves a specific purpose for understanding, refactoring, and documenting your codebase.
|
|
81
83
|
|
|
82
84
|
## 📁 Generated Files Overview
|
|
@@ -406,9 +408,9 @@ code2llm ./ -f yaml --separate-orphans
|
|
|
406
408
|
|
|
407
409
|
**Generated by**: `code2llm ./ -f all --readme`
|
|
408
410
|
**Analysis Date**: 2026-05-06
|
|
409
|
-
**Total Functions**:
|
|
410
|
-
**Total Classes**:
|
|
411
|
-
**Modules**:
|
|
411
|
+
**Total Functions**: 3800
|
|
412
|
+
**Total Classes**: 259
|
|
413
|
+
**Modules**: 497
|
|
412
414
|
|
|
413
415
|
For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm
|
|
414
416
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code2llm"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.147"
|
|
8
8
|
description = "High-performance Python code flow analysis with optimized TOON format - CFG, DFG, call graphs, and intelligent code queries"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.8"
|
code2llm-0.5.146/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.5.146
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"""Evolution exporter exclusion logic — path filtering."""
|
|
2
|
-
|
|
3
|
-
from .constants import EXCLUDE_PATTERNS
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def is_excluded(path: str) -> bool:
|
|
7
|
-
"""Check if path should be excluded (venv, site-packages, etc.)."""
|
|
8
|
-
path_lower = path.lower().replace('\\', '/')
|
|
9
|
-
for pattern in EXCLUDE_PATTERNS:
|
|
10
|
-
if f'/{pattern}/' in path_lower or path_lower.startswith(f'{pattern}/'):
|
|
11
|
-
return True
|
|
12
|
-
if pattern in path_lower.split('/'):
|
|
13
|
-
return True
|
|
14
|
-
return False
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
__all__ = ['is_excluded']
|
|
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
|
|
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
|
|
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
|