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.
Files changed (198) hide show
  1. {code2llm-0.5.146/code2llm.egg-info → code2llm-0.5.147}/PKG-INFO +11 -9
  2. {code2llm-0.5.146 → code2llm-0.5.147}/README.md +10 -8
  3. code2llm-0.5.147/VERSION +1 -0
  4. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/__init__.py +1 -1
  5. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/smells.py +11 -7
  6. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/computation.py +32 -13
  7. code2llm-0.5.147/code2llm/exporters/evolution/exclusion.py +17 -0
  8. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/flow_constants.py +5 -7
  9. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/helpers.py +1 -0
  10. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/__init__.py +1 -1
  11. {code2llm-0.5.146 → code2llm-0.5.147/code2llm.egg-info}/PKG-INFO +11 -9
  12. {code2llm-0.5.146 → code2llm-0.5.147}/pyproject.toml +1 -1
  13. code2llm-0.5.146/VERSION +0 -1
  14. code2llm-0.5.146/code2llm/exporters/evolution/exclusion.py +0 -17
  15. {code2llm-0.5.146 → code2llm-0.5.147}/LICENSE +0 -0
  16. {code2llm-0.5.146 → code2llm-0.5.147}/MANIFEST.in +0 -0
  17. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/__main__.py +0 -0
  18. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/__init__.py +0 -0
  19. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/call_graph.py +0 -0
  20. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/cfg.py +0 -0
  21. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/coupling.py +0 -0
  22. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/data_analysis.py +0 -0
  23. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/dfg.py +0 -0
  24. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/pipeline_classifier.py +0 -0
  25. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/pipeline_detector.py +0 -0
  26. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/pipeline_resolver.py +0 -0
  27. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/side_effects.py +0 -0
  28. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/type_inference.py +0 -0
  29. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/utils/__init__.py +0 -0
  30. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/analysis/utils/ast_helpers.py +0 -0
  31. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/api.py +0 -0
  32. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli.py +0 -0
  33. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_analysis.py +0 -0
  34. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_commands.py +0 -0
  35. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/__init__.py +0 -0
  36. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/code2logic.py +0 -0
  37. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/formats.py +0 -0
  38. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator.py +0 -0
  39. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator_chunked.py +0 -0
  40. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator_constants.py +0 -0
  41. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/orchestrator_handlers.py +0 -0
  42. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_exports/prompt.py +0 -0
  43. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/cli_parser.py +0 -0
  44. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/__init__.py +0 -0
  45. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/analyzer.py +0 -0
  46. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/ast_registry.py +0 -0
  47. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/config.py +0 -0
  48. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/export_pipeline.py +0 -0
  49. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/file_analyzer.py +0 -0
  50. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/file_cache.py +0 -0
  51. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/file_filter.py +0 -0
  52. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/gitignore.py +0 -0
  53. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/incremental.py +0 -0
  54. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/__init__.py +0 -0
  55. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/base.py +0 -0
  56. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/cpp.py +0 -0
  57. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/csharp.py +0 -0
  58. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/generic.py +0 -0
  59. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/go_lang.py +0 -0
  60. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/java.py +0 -0
  61. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/php.py +0 -0
  62. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/ruby.py +0 -0
  63. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/rust.py +0 -0
  64. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/ts_extractors.py +0 -0
  65. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/ts_parser.py +0 -0
  66. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/lang/typescript.py +0 -0
  67. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/large_repo.py +0 -0
  68. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/models.py +0 -0
  69. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/persistent_cache.py +0 -0
  70. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/refactoring.py +0 -0
  71. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/repo_files.py +0 -0
  72. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/__init__.py +0 -0
  73. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/cache.py +0 -0
  74. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/incremental.py +0 -0
  75. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/prioritizer.py +0 -0
  76. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/scanner.py +0 -0
  77. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming/strategies.py +0 -0
  78. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/streaming_analyzer.py +0 -0
  79. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/core/toon_size_manager.py +0 -0
  80. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/__init__.py +0 -0
  81. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/article_view.py +0 -0
  82. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/base.py +0 -0
  83. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/context_exporter.py +0 -0
  84. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/context_view.py +0 -0
  85. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/dashboard_data.py +0 -0
  86. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/dashboard_renderer.py +0 -0
  87. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/__init__.py +0 -0
  88. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/constants.py +0 -0
  89. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/render.py +0 -0
  90. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution/yaml_export.py +0 -0
  91. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/evolution_exporter.py +0 -0
  92. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/flow_exporter.py +0 -0
  93. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/flow_renderer.py +0 -0
  94. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/html_dashboard.py +0 -0
  95. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator/__init__.py +0 -0
  96. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator/renderer.py +0 -0
  97. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator/scanner.py +0 -0
  98. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/index_generator.py +0 -0
  99. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/json_exporter.py +0 -0
  100. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/llm_exporter.py +0 -0
  101. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/__init__.py +0 -0
  102. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/alerts.py +0 -0
  103. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/details.py +0 -0
  104. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/header.py +0 -0
  105. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/module_list.py +0 -0
  106. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/utils.py +0 -0
  107. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map/yaml_export.py +0 -0
  108. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/map_exporter.py +0 -0
  109. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/__init__.py +0 -0
  110. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/calls.py +0 -0
  111. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/classic.py +0 -0
  112. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/compact.py +0 -0
  113. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/flow_compact.py +0 -0
  114. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/flow_detailed.py +0 -0
  115. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/flow_full.py +0 -0
  116. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid/utils.py +0 -0
  117. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid_exporter.py +0 -0
  118. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/mermaid_flow_helpers.py +0 -0
  119. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/__init__.py +0 -0
  120. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/constants.py +0 -0
  121. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/core.py +0 -0
  122. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/evolution.py +0 -0
  123. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/health.py +0 -0
  124. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/hotspots.py +0 -0
  125. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml/modules.py +0 -0
  126. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/project_yaml_exporter.py +0 -0
  127. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/__init__.py +0 -0
  128. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/content.py +0 -0
  129. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/files.py +0 -0
  130. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/insights.py +0 -0
  131. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme/sections.py +0 -0
  132. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/readme_exporter.py +0 -0
  133. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/report_generators.py +0 -0
  134. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/__init__.py +0 -0
  135. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics.py +0 -0
  136. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics_core.py +0 -0
  137. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics_duplicates.py +0 -0
  138. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/metrics_health.py +0 -0
  139. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/module_detail.py +0 -0
  140. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon/renderer.py +0 -0
  141. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon.py +0 -0
  142. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/toon_view.py +0 -0
  143. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/validate_project.py +0 -0
  144. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/exporters/yaml_exporter.py +0 -0
  145. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/__init__.py +0 -0
  146. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/_utils.py +0 -0
  147. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/__init__.py +0 -0
  148. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/analysis.py +0 -0
  149. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/cli.py +0 -0
  150. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/generator.py +0 -0
  151. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/nodes.py +0 -0
  152. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/parsing.py +0 -0
  153. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow/utils.py +0 -0
  154. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_flow.py +0 -0
  155. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/llm_task.py +0 -0
  156. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/__init__.py +0 -0
  157. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/fix.py +0 -0
  158. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/png.py +0 -0
  159. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid/validation.py +0 -0
  160. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/generators/mermaid.py +0 -0
  161. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/config.py +0 -0
  162. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/entity_resolution.py +0 -0
  163. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/intent_matching.py +0 -0
  164. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/normalization.py +0 -0
  165. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/nlp/pipeline.py +0 -0
  166. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/parsers/toon_parser.py +0 -0
  167. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/patterns/__init__.py +0 -0
  168. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/patterns/detector.py +0 -0
  169. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/refactor/__init__.py +0 -0
  170. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm/refactor/prompt_engine.py +0 -0
  171. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/SOURCES.txt +0 -0
  172. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/dependency_links.txt +0 -0
  173. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/entry_points.txt +0 -0
  174. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/requires.txt +0 -0
  175. {code2llm-0.5.146 → code2llm-0.5.147}/code2llm.egg-info/top_level.txt +0 -0
  176. {code2llm-0.5.146 → code2llm-0.5.147}/setup.cfg +0 -0
  177. {code2llm-0.5.146 → code2llm-0.5.147}/setup.py +0 -0
  178. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_advanced_analysis.py +0 -0
  179. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_analyzer.py +0 -0
  180. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_cache_invalidation_e2e.py +0 -0
  181. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_calls_toon_export.py +0 -0
  182. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_declarative_collection.py +0 -0
  183. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_deep_analysis.py +0 -0
  184. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_edge_cases.py +0 -0
  185. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_file_analyzer_tagging.py +0 -0
  186. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_flow_exporter.py +0 -0
  187. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_format_quality.py +0 -0
  188. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_multilanguage_e2e.py +0 -0
  189. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_nlp_pipeline.py +0 -0
  190. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_nonpython_cc_calls.py +0 -0
  191. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_orchestrator_cache_mtime.py +0 -0
  192. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_persistent_cache.py +0 -0
  193. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_pipeline_detector.py +0 -0
  194. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_project_toon_export.py +0 -0
  195. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_prompt_engine.py +0 -0
  196. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_prompt_txt.py +0 -0
  197. {code2llm-0.5.146 → code2llm-0.5.147}/tests/test_refactoring_engine.py +0 -0
  198. {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.146
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
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.146-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
71
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
69
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.147-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
70
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
72
71
 
73
- - 🤖 **LLM usage:** $7.5000 (198 commits)
74
- - 👤 **Human dev:** ~$7224 (72.2h @ $100/h, 30min dedup)
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**: 3625
410
- **Total Classes**: 250
411
- **Modules**: 492
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
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.146-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
5
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.147-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
6
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
8
7
 
9
- - 🤖 **LLM usage:** $7.5000 (198 commits)
10
- - 👤 **Human dev:** ~$7224 (72.2h @ $100/h, 30min dedup)
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**: 3625
346
- **Total Classes**: 250
347
- **Modules**: 492
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
 
@@ -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.146"
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([m for m in self.result.mutations if m.scope == func_name])
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.result.mutations:
82
- if mutation.scope == func_name:
83
- if '.' in mutation.variable:
84
- origin_mod = mutation.variable.split('.')[0]
85
- if origin_mod != mut_mod:
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
- """Scan Python files and return line counts."""
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
- for py in project_path.rglob("*.py"):
39
- fpath = str(py)
40
- if is_excluded(fpath):
41
- continue
42
- try:
43
- lc = len(py.read_text(encoding="utf-8", errors="ignore").splitlines())
44
- file_lines[fpath] = lc
45
- except Exception:
46
- pass
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
- path_lower = path.lower().replace('\\', '/')
27
- for pattern in EXCLUDE_PATTERNS:
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 ""
@@ -4,7 +4,7 @@ Provides query normalization, intent matching, and entity resolution
4
4
  with multilingual support and fuzzy matching.
5
5
  """
6
6
 
7
- __version__ = "0.5.146"
7
+ __version__ = "0.5.147"
8
8
 
9
9
  from .pipeline import NLPPipeline
10
10
  from .normalization import QueryNormalizer
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code2llm
3
- Version: 0.5.146
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
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.146-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
71
- ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
69
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.5.147-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
70
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$7.50-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-72.6h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
72
71
 
73
- - 🤖 **LLM usage:** $7.5000 (198 commits)
74
- - 👤 **Human dev:** ~$7224 (72.2h @ $100/h, 30min dedup)
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**: 3625
410
- **Total Classes**: 250
411
- **Modules**: 492
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.146"
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