lintro 0.13.0__tar.gz → 0.23.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. lintro-0.23.1/PKG-INFO +287 -0
  2. lintro-0.23.1/README.md +205 -0
  3. {lintro-0.13.0 → lintro-0.23.1}/assets/images/coverage-badge.svg +3 -3
  4. {lintro-0.13.0 → lintro-0.23.1}/docs/README.md +80 -33
  5. lintro-0.23.1/docs/SHELL-SCRIPT-STYLE-GUIDE.md +431 -0
  6. lintro-0.23.1/docs/architecture/ARCHITECTURE.md +570 -0
  7. lintro-0.23.1/docs/architecture/README.md +58 -0
  8. lintro-0.23.1/docs/architecture/ROADMAP.md +478 -0
  9. lintro-0.23.1/docs/architecture/VISION.md +271 -0
  10. {lintro-0.13.0 → lintro-0.23.1}/docs/configuration.md +432 -43
  11. {lintro-0.13.0 → lintro-0.23.1}/docs/contributing.md +122 -32
  12. {lintro-0.13.0 → lintro-0.23.1}/docs/docker.md +11 -4
  13. {lintro-0.13.0 → lintro-0.23.1}/docs/getting-started.md +98 -8
  14. {lintro-0.13.0 → lintro-0.23.1}/docs/github-integration.md +34 -20
  15. {lintro-0.13.0 → lintro-0.23.1}/docs/lintro-self-use.md +3 -1
  16. lintro-0.23.1/docs/plugins.md +220 -0
  17. {lintro-0.13.0 → lintro-0.23.1}/docs/security/assurance.md +9 -4
  18. {lintro-0.13.0 → lintro-0.23.1}/docs/security/requirements.md +4 -2
  19. {lintro-0.13.0 → lintro-0.23.1}/docs/style-guide.md +172 -72
  20. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/README.md +47 -4
  21. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/actionlint-analysis.md +2 -2
  22. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/bandit-analysis.md +6 -6
  23. lintro-0.23.1/docs/tool-analysis/biome-analysis.md +211 -0
  24. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/black-analysis.md +11 -12
  25. lintro-0.23.1/docs/tool-analysis/clippy-analysis.md +66 -0
  26. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/darglint-analysis.md +18 -11
  27. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/hadolint-analysis.md +24 -14
  28. lintro-0.23.1/docs/tool-analysis/markdownlint-analysis.md +79 -0
  29. lintro-0.23.1/docs/tool-analysis/mypy-analysis.md +82 -0
  30. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/prettier-analysis.md +26 -11
  31. lintro-0.23.1/docs/tool-analysis/pytest-analysis.md +564 -0
  32. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/ruff-analysis.md +34 -23
  33. {lintro-0.13.0 → lintro-0.23.1}/docs/tool-analysis/yamllint-analysis.md +12 -8
  34. lintro-0.23.1/docs/troubleshooting.md +168 -0
  35. {lintro-0.13.0 → lintro-0.23.1}/lintro/__init__.py +1 -1
  36. lintro-0.23.1/lintro/cli.py +201 -0
  37. lintro-0.23.1/lintro/cli_utils/command_chainer.py +223 -0
  38. lintro-0.23.1/lintro/cli_utils/commands/__init__.py +15 -0
  39. {lintro-0.13.0 → lintro-0.23.1}/lintro/cli_utils/commands/check.py +66 -27
  40. lintro-0.23.1/lintro/cli_utils/commands/config.py +393 -0
  41. {lintro-0.13.0 → lintro-0.23.1}/lintro/cli_utils/commands/format.py +54 -15
  42. lintro-0.23.1/lintro/cli_utils/commands/init.py +348 -0
  43. lintro-0.23.1/lintro/cli_utils/commands/list_tools.py +300 -0
  44. lintro-0.23.1/lintro/cli_utils/commands/test.py +306 -0
  45. lintro-0.23.1/lintro/cli_utils/commands/versions.py +105 -0
  46. lintro-0.23.1/lintro/config/__init__.py +51 -0
  47. lintro-0.23.1/lintro/config/config_loader.py +413 -0
  48. lintro-0.23.1/lintro/config/enforce_config.py +22 -0
  49. lintro-0.23.1/lintro/config/execution_config.py +38 -0
  50. lintro-0.23.1/lintro/config/lintro_config.py +120 -0
  51. lintro-0.23.1/lintro/config/tool_config.py +22 -0
  52. lintro-0.23.1/lintro/config/tool_config_generator.py +364 -0
  53. lintro-0.23.1/lintro/enums/action.py +57 -0
  54. lintro-0.23.1/lintro/enums/bandit_levels.py +82 -0
  55. lintro-0.23.1/lintro/enums/boolean_string.py +15 -0
  56. lintro-0.23.1/lintro/enums/config_format.py +41 -0
  57. lintro-0.23.1/lintro/enums/config_key.py +14 -0
  58. {lintro-0.13.0 → lintro-0.23.1}/lintro/enums/darglint_strictness.py +6 -1
  59. lintro-0.23.1/lintro/enums/env_bool.py +13 -0
  60. lintro-0.23.1/lintro/enums/git_command.py +16 -0
  61. lintro-0.23.1/lintro/enums/git_ref.py +14 -0
  62. {lintro-0.13.0 → lintro-0.23.1}/lintro/enums/group_by.py +4 -1
  63. {lintro-0.13.0 → lintro-0.23.1}/lintro/enums/hadolint_enums.py +11 -2
  64. lintro-0.23.1/lintro/enums/hyphenated_str_enum.py +49 -0
  65. {lintro-0.13.0 → lintro-0.23.1}/lintro/enums/output_format.py +4 -2
  66. lintro-0.23.1/lintro/enums/pytest_enums.py +130 -0
  67. lintro-0.23.1/lintro/enums/severity_level.py +44 -0
  68. {lintro-0.13.0 → lintro-0.23.1}/lintro/enums/tool_name.py +15 -3
  69. lintro-0.23.1/lintro/enums/tool_option_key.py +14 -0
  70. lintro-0.23.1/lintro/enums/tool_order.py +43 -0
  71. lintro-0.23.1/lintro/enums/tool_type.py +62 -0
  72. lintro-0.23.1/lintro/enums/tools_value.py +39 -0
  73. lintro-0.23.1/lintro/enums/uppercase_str_enum.py +45 -0
  74. {lintro-0.13.0 → lintro-0.23.1}/lintro/enums/yamllint_format.py +6 -1
  75. lintro-0.23.1/lintro/exceptions/errors.py +35 -0
  76. lintro-0.23.1/lintro/formatters/__init__.py +31 -0
  77. lintro-0.23.1/lintro/formatters/core/__init__.py +22 -0
  78. lintro-0.23.1/lintro/formatters/core/format_registry.py +178 -0
  79. lintro-0.23.1/lintro/formatters/formatter.py +273 -0
  80. {lintro-0.13.0 → lintro-0.23.1}/lintro/formatters/styles/csv.py +5 -1
  81. {lintro-0.13.0 → lintro-0.23.1}/lintro/formatters/styles/grid.py +5 -1
  82. {lintro-0.13.0 → lintro-0.23.1}/lintro/formatters/styles/html.py +5 -1
  83. {lintro-0.13.0 → lintro-0.23.1}/lintro/formatters/styles/json.py +7 -8
  84. {lintro-0.13.0 → lintro-0.23.1}/lintro/formatters/styles/markdown.py +5 -1
  85. {lintro-0.13.0 → lintro-0.23.1}/lintro/formatters/styles/plain.py +5 -1
  86. lintro-0.23.1/lintro/models/core/__init__.py +17 -0
  87. lintro-0.23.1/lintro/models/core/base_tool_options.py +18 -0
  88. lintro-0.23.1/lintro/models/core/black_options.py +22 -0
  89. lintro-0.23.1/lintro/models/core/prettier_options.py +38 -0
  90. lintro-0.23.1/lintro/models/core/pytest_options.py +50 -0
  91. lintro-0.23.1/lintro/models/core/ruff_options.py +38 -0
  92. lintro-0.23.1/lintro/models/core/tool_result.py +70 -0
  93. lintro-0.23.1/lintro/models/core/yamllint_options.py +18 -0
  94. lintro-0.23.1/lintro/parsers/__init__.py +102 -0
  95. lintro-0.23.1/lintro/parsers/actionlint/__init__.py +6 -0
  96. lintro-0.23.1/lintro/parsers/actionlint/actionlint_issue.py +24 -0
  97. lintro-0.23.1/lintro/parsers/bandit/__init__.py +6 -0
  98. lintro-0.23.1/lintro/parsers/bandit/bandit_issue.py +60 -0
  99. lintro-0.23.1/lintro/parsers/bandit/bandit_parser.py +106 -0
  100. lintro-0.23.1/lintro/parsers/base_issue.py +88 -0
  101. lintro-0.23.1/lintro/parsers/base_parser.py +295 -0
  102. lintro-0.23.1/lintro/parsers/biome/__init__.py +6 -0
  103. lintro-0.23.1/lintro/parsers/biome/biome_issue.py +24 -0
  104. lintro-0.23.1/lintro/parsers/biome/biome_parser.py +174 -0
  105. lintro-0.23.1/lintro/parsers/black/__init__.py +6 -0
  106. lintro-0.23.1/lintro/parsers/black/black_issue.py +30 -0
  107. lintro-0.23.1/lintro/parsers/black/black_parser.py +106 -0
  108. lintro-0.23.1/lintro/parsers/clippy/__init__.py +6 -0
  109. lintro-0.23.1/lintro/parsers/clippy/clippy_issue.py +30 -0
  110. lintro-0.23.1/lintro/parsers/clippy/clippy_parser.py +138 -0
  111. lintro-0.23.1/lintro/parsers/darglint/__init__.py +6 -0
  112. lintro-0.23.1/lintro/parsers/darglint/darglint_issue.py +16 -0
  113. {lintro-0.13.0 → lintro-0.23.1}/lintro/parsers/darglint/darglint_parser.py +24 -13
  114. lintro-0.23.1/lintro/parsers/hadolint/__init__.py +31 -0
  115. lintro-0.23.1/lintro/parsers/hadolint/hadolint_issue.py +25 -0
  116. {lintro-0.13.0 → lintro-0.23.1}/lintro/parsers/hadolint/hadolint_parser.py +1 -1
  117. lintro-0.23.1/lintro/parsers/markdownlint/__init__.py +6 -0
  118. lintro-0.23.1/lintro/parsers/markdownlint/markdownlint_issue.py +17 -0
  119. lintro-0.23.1/lintro/parsers/markdownlint/markdownlint_parser.py +119 -0
  120. lintro-0.23.1/lintro/parsers/mypy/__init__.py +6 -0
  121. lintro-0.23.1/lintro/parsers/mypy/mypy_issue.py +47 -0
  122. lintro-0.23.1/lintro/parsers/mypy/mypy_parser.py +134 -0
  123. lintro-0.23.1/lintro/parsers/prettier/__init__.py +6 -0
  124. {lintro-0.13.0 → lintro-0.23.1}/lintro/parsers/prettier/prettier_issue.py +6 -10
  125. lintro-0.23.1/lintro/parsers/prettier/prettier_parser.py +65 -0
  126. lintro-0.23.1/lintro/parsers/pytest/__init__.py +17 -0
  127. lintro-0.23.1/lintro/parsers/pytest/format_parsers.py +397 -0
  128. lintro-0.23.1/lintro/parsers/pytest/models.py +33 -0
  129. lintro-0.23.1/lintro/parsers/pytest/pytest_issue.py +31 -0
  130. lintro-0.23.1/lintro/parsers/pytest/pytest_parser.py +58 -0
  131. lintro-0.23.1/lintro/parsers/pytest/summary_extractor.py +84 -0
  132. lintro-0.23.1/lintro/parsers/ruff/__init__.py +15 -0
  133. lintro-0.23.1/lintro/parsers/ruff/ruff_format_issue.py +18 -0
  134. lintro-0.23.1/lintro/parsers/ruff/ruff_issue.py +26 -0
  135. lintro-0.23.1/lintro/parsers/ruff/ruff_parser.py +213 -0
  136. lintro-0.23.1/lintro/parsers/streaming.py +314 -0
  137. lintro-0.23.1/lintro/parsers/yamllint/__init__.py +6 -0
  138. lintro-0.23.1/lintro/parsers/yamllint/yamllint_issue.py +26 -0
  139. lintro-0.23.1/lintro/parsers/yamllint/yamllint_parser.py +93 -0
  140. lintro-0.23.1/lintro/plugins/__init__.py +57 -0
  141. lintro-0.23.1/lintro/plugins/base.py +484 -0
  142. lintro-0.23.1/lintro/plugins/discovery.py +190 -0
  143. lintro-0.23.1/lintro/plugins/execution_preparation.py +306 -0
  144. lintro-0.23.1/lintro/plugins/file_discovery.py +157 -0
  145. lintro-0.23.1/lintro/plugins/protocol.py +144 -0
  146. lintro-0.23.1/lintro/plugins/registry.py +245 -0
  147. lintro-0.23.1/lintro/plugins/subprocess_executor.py +267 -0
  148. lintro-0.23.1/lintro/tools/__init__.py +22 -0
  149. lintro-0.23.1/lintro/tools/core/command_builders.py +452 -0
  150. lintro-0.23.1/lintro/tools/core/config_injection.py +163 -0
  151. lintro-0.23.1/lintro/tools/core/line_length_checker.py +166 -0
  152. lintro-0.23.1/lintro/tools/core/option_spec.py +394 -0
  153. lintro-0.23.1/lintro/tools/core/option_validators.py +133 -0
  154. lintro-0.23.1/lintro/tools/core/runtime_discovery.py +295 -0
  155. lintro-0.23.1/lintro/tools/core/timeout_utils.py +126 -0
  156. lintro-0.23.1/lintro/tools/core/tool_manager.py +207 -0
  157. lintro-0.23.1/lintro/tools/core/version_checking.py +300 -0
  158. lintro-0.23.1/lintro/tools/core/version_parsing.py +313 -0
  159. lintro-0.23.1/lintro/tools/core/version_requirements.py +78 -0
  160. lintro-0.23.1/lintro/tools/definitions/__init__.py +31 -0
  161. lintro-0.23.1/lintro/tools/definitions/actionlint.py +222 -0
  162. lintro-0.23.1/lintro/tools/definitions/bandit.py +397 -0
  163. lintro-0.23.1/lintro/tools/definitions/biome.py +361 -0
  164. lintro-0.23.1/lintro/tools/definitions/black.py +396 -0
  165. lintro-0.23.1/lintro/tools/definitions/clippy.py +372 -0
  166. lintro-0.23.1/lintro/tools/definitions/darglint.py +435 -0
  167. lintro-0.23.1/lintro/tools/definitions/hadolint.py +319 -0
  168. lintro-0.23.1/lintro/tools/definitions/markdownlint.py +324 -0
  169. lintro-0.23.1/lintro/tools/definitions/mypy.py +372 -0
  170. lintro-0.23.1/lintro/tools/definitions/prettier.py +529 -0
  171. lintro-0.23.1/lintro/tools/definitions/pytest.py +365 -0
  172. lintro-0.23.1/lintro/tools/definitions/ruff.py +212 -0
  173. lintro-0.23.1/lintro/tools/definitions/yamllint.py +481 -0
  174. lintro-0.23.1/lintro/tools/implementations/__init__.py +28 -0
  175. lintro-0.23.1/lintro/tools/implementations/pytest/__init__.py +16 -0
  176. lintro-0.23.1/lintro/tools/implementations/pytest/collection.py +266 -0
  177. lintro-0.23.1/lintro/tools/implementations/pytest/coverage_processor.py +142 -0
  178. lintro-0.23.1/lintro/tools/implementations/pytest/formatters.py +314 -0
  179. lintro-0.23.1/lintro/tools/implementations/pytest/markers.py +188 -0
  180. lintro-0.23.1/lintro/tools/implementations/pytest/output.py +219 -0
  181. lintro-0.23.1/lintro/tools/implementations/pytest/output_parsers.py +149 -0
  182. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_command_builder.py +336 -0
  183. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_config.py +193 -0
  184. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_error_handler.py +128 -0
  185. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_executor.py +139 -0
  186. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_handlers.py +385 -0
  187. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_option_validators.py +215 -0
  188. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_output_processor.py +57 -0
  189. lintro-0.23.1/lintro/tools/implementations/pytest/pytest_result_processor.py +111 -0
  190. lintro-0.23.1/lintro/tools/implementations/pytest/test_analytics.py +150 -0
  191. lintro-0.23.1/lintro/tools/implementations/ruff/__init__.py +18 -0
  192. lintro-0.23.1/lintro/tools/implementations/ruff/check.py +213 -0
  193. lintro-0.23.1/lintro/tools/implementations/ruff/commands.py +174 -0
  194. lintro-0.23.1/lintro/tools/implementations/ruff/fix.py +349 -0
  195. {lintro-0.13.0 → lintro-0.23.1}/lintro/utils/ascii_normalize_cli.py +2 -2
  196. lintro-0.23.1/lintro/utils/async_tool_executor.py +247 -0
  197. lintro-0.23.1/lintro/utils/config.py +349 -0
  198. lintro-0.23.1/lintro/utils/config_constants.py +108 -0
  199. lintro-0.23.1/lintro/utils/config_priority.py +202 -0
  200. lintro-0.23.1/lintro/utils/config_reporting.py +102 -0
  201. lintro-0.23.1/lintro/utils/config_validation.py +113 -0
  202. lintro-0.23.1/lintro/utils/console/__init__.py +56 -0
  203. lintro-0.23.1/lintro/utils/console/constants.py +83 -0
  204. lintro-0.23.1/lintro/utils/console/logger.py +443 -0
  205. lintro-0.23.1/lintro/utils/display_helpers.py +136 -0
  206. lintro-0.23.1/lintro/utils/execution/__init__.py +33 -0
  207. lintro-0.23.1/lintro/utils/execution/exit_codes.py +84 -0
  208. lintro-0.23.1/lintro/utils/execution/parallel_executor.py +159 -0
  209. lintro-0.23.1/lintro/utils/execution/tool_configuration.py +186 -0
  210. lintro-0.23.1/lintro/utils/file_cache.py +235 -0
  211. lintro-0.23.1/lintro/utils/json_output.py +59 -0
  212. lintro-0.23.1/lintro/utils/logger_setup.py +57 -0
  213. lintro-0.23.1/lintro/utils/native_parsers.py +286 -0
  214. lintro-0.23.1/lintro/utils/output/__init__.py +36 -0
  215. lintro-0.23.1/lintro/utils/output/constants.py +8 -0
  216. lintro-0.23.1/lintro/utils/output/file_writer.py +268 -0
  217. lintro-0.23.1/lintro/utils/output/helpers.py +48 -0
  218. lintro-0.13.0/lintro/utils/output_manager.py → lintro-0.23.1/lintro/utils/output/manager.py +47 -62
  219. lintro-0.23.1/lintro/utils/output/parser_registration.py +199 -0
  220. lintro-0.23.1/lintro/utils/output/parser_registry.py +126 -0
  221. lintro-0.23.1/lintro/utils/path_filtering.py +205 -0
  222. lintro-0.23.1/lintro/utils/path_utils.py +174 -0
  223. lintro-0.23.1/lintro/utils/post_checks.py +212 -0
  224. lintro-0.23.1/lintro/utils/result_formatters.py +341 -0
  225. lintro-0.23.1/lintro/utils/streaming_output.py +262 -0
  226. lintro-0.23.1/lintro/utils/summary_tables.py +310 -0
  227. lintro-0.23.1/lintro/utils/tool_config_info.py +13 -0
  228. lintro-0.23.1/lintro/utils/tool_executor.py +415 -0
  229. lintro-0.23.1/lintro/utils/tool_options.py +91 -0
  230. lintro-0.23.1/lintro/utils/tool_utils.py +33 -0
  231. lintro-0.23.1/lintro/utils/unified_config.py +82 -0
  232. lintro-0.23.1/lintro/utils/unified_config_manager.py +173 -0
  233. lintro-0.23.1/lintro.egg-info/PKG-INFO +287 -0
  234. lintro-0.23.1/lintro.egg-info/SOURCES.txt +609 -0
  235. {lintro-0.13.0 → lintro-0.23.1}/lintro.egg-info/requires.txt +13 -7
  236. lintro-0.23.1/pyproject.toml +349 -0
  237. lintro-0.23.1/test_samples/tools/config/yaml/yaml_violations.yml +23 -0
  238. lintro-0.23.1/test_samples/tools/javascript/biome/biome_violations.js +16 -0
  239. lintro-0.23.1/test_samples/tools/javascript/prettier/prettier_violations.js +43 -0
  240. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/bandit}/bandit_violations.py +1 -2
  241. lintro-0.23.1/test_samples/tools/python/mypy/mypy_violations.py +3 -0
  242. lintro-0.23.1/test_samples/tools/python/pytest/pytest_clean.py +192 -0
  243. lintro-0.23.1/test_samples/tools/python/pytest/pytest_failures.py +132 -0
  244. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/ruff}/ruff_annotations_violations.py +2 -2
  245. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/ruff}/ruff_black_e501_wrappable.py +2 -3
  246. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/ruff}/ruff_bugbear_violations.py +3 -7
  247. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/ruff}/ruff_c4_comprehensions_violations.py +49 -51
  248. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/ruff}/ruff_clean.py +1 -0
  249. lintro-0.13.0/test_samples/ruff_violations.py → lintro-0.23.1/test_samples/tools/python/ruff/ruff_e501_f401_violations.py +13 -2
  250. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/ruff}/ruff_naming_violations.py +0 -2
  251. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/ruff}/ruff_sim_simplify_violations.py +107 -325
  252. {lintro-0.13.0 → lintro-0.23.1}/tests/cli/conftest.py +3 -3
  253. lintro-0.23.1/tests/cli/test_cli.py +136 -0
  254. lintro-0.23.1/tests/cli/test_config_command.py +256 -0
  255. lintro-0.23.1/tests/cli/test_init_command.py +114 -0
  256. lintro-0.23.1/tests/config/__init__.py +1 -0
  257. lintro-0.23.1/tests/config/test_config_loader.py +226 -0
  258. lintro-0.23.1/tests/config/test_init_command.py +173 -0
  259. lintro-0.23.1/tests/config/test_lintro_config.py +115 -0
  260. lintro-0.23.1/tests/config/test_tool_config_generator.py +115 -0
  261. lintro-0.23.1/tests/conftest.py +102 -0
  262. lintro-0.23.1/tests/constants.py +52 -0
  263. lintro-0.23.1/tests/formatters/test_formatters.py +109 -0
  264. lintro-0.23.1/tests/integration/conftest.py +114 -0
  265. {lintro-0.13.0 → lintro-0.23.1}/tests/integration/test_actionlint_integration.py +11 -8
  266. {lintro-0.13.0 → lintro-0.23.1}/tests/integration/test_bandit_integration.py +10 -6
  267. lintro-0.23.1/tests/integration/test_built_package.py +112 -0
  268. {lintro-0.13.0 → lintro-0.23.1}/tests/integration/test_darglint_integration.py +42 -32
  269. lintro-0.23.1/tests/integration/test_markdownlint_integration.py +159 -0
  270. lintro-0.23.1/tests/integration/test_mypy_integration.py +144 -0
  271. lintro-0.23.1/tests/integration/test_parallel_execution.py +225 -0
  272. lintro-0.23.1/tests/integration/tools/__init__.py +1 -0
  273. lintro-0.23.1/tests/integration/tools/test_bandit_integration.py +238 -0
  274. lintro-0.23.1/tests/integration/tools/test_black_integration.py +281 -0
  275. lintro-0.23.1/tests/integration/tools/test_mypy_integration.py +228 -0
  276. lintro-0.23.1/tests/integration/tools/test_prettier_integration.py +289 -0
  277. lintro-0.23.1/tests/integration/tools/test_ruff_integration.py +453 -0
  278. lintro-0.23.1/tests/scripts/conftest.py +43 -0
  279. {lintro-0.13.0 → lintro-0.23.1}/tests/scripts/test_ci_post_pr_comment.py +6 -2
  280. {lintro-0.13.0 → lintro-0.23.1}/tests/scripts/test_delete_previous_lintro_comments.py +22 -10
  281. {lintro-0.13.0 → lintro-0.23.1}/tests/scripts/test_extract_version.py +5 -4
  282. {lintro-0.13.0 → lintro-0.23.1}/tests/scripts/test_ghcr_prune_untagged.py +45 -26
  283. lintro-0.23.1/tests/scripts/test_github_comment_utilities.py +20 -0
  284. lintro-0.23.1/tests/scripts/test_github_comment_utilities_encode.py +195 -0
  285. lintro-0.23.1/tests/scripts/test_github_comment_utilities_extract.py +172 -0
  286. lintro-0.23.1/tests/scripts/test_github_comment_utilities_find.py +204 -0
  287. {lintro-0.13.0 → lintro-0.23.1}/tests/scripts/test_semantic_release_compute_next.py +16 -15
  288. lintro-0.23.1/tests/scripts/test_shell_scripts.py +30 -0
  289. lintro-0.23.1/tests/test_documentation.py +181 -0
  290. lintro-0.23.1/tests/unit/cli/__init__.py +0 -0
  291. lintro-0.23.1/tests/unit/cli/conftest.py +96 -0
  292. lintro-0.23.1/tests/unit/cli/test_check_command.py +383 -0
  293. lintro-0.23.1/tests/unit/cli/test_cli.py +291 -0
  294. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/cli}/test_cli_commands_more.py +14 -10
  295. lintro-0.23.1/tests/unit/cli/test_cli_lintro_group.py +280 -0
  296. lintro-0.23.1/tests/unit/cli/test_cli_programmatic.py +138 -0
  297. lintro-0.23.1/tests/unit/cli/test_format_command.py +490 -0
  298. lintro-0.23.1/tests/unit/cli_utils/__init__.py +1 -0
  299. lintro-0.23.1/tests/unit/cli_utils/command_chainer/__init__.py +1 -0
  300. lintro-0.23.1/tests/unit/cli_utils/command_chainer/conftest.py +57 -0
  301. lintro-0.23.1/tests/unit/cli_utils/command_chainer/test_execute.py +206 -0
  302. lintro-0.23.1/tests/unit/cli_utils/command_chainer/test_group_commands.py +73 -0
  303. lintro-0.23.1/tests/unit/cli_utils/command_chainer/test_init.py +62 -0
  304. lintro-0.23.1/tests/unit/cli_utils/command_chainer/test_integration.py +46 -0
  305. lintro-0.23.1/tests/unit/cli_utils/command_chainer/test_normalize_args.py +73 -0
  306. lintro-0.23.1/tests/unit/cli_utils/command_chainer/test_should_chain.py +63 -0
  307. lintro-0.23.1/tests/unit/cli_utils/commands/test_format.py +251 -0
  308. lintro-0.23.1/tests/unit/compatibility/conftest.py +7 -0
  309. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/compatibility}/test_compatibility_ruff_black.py +90 -33
  310. lintro-0.23.1/tests/unit/config/conftest.py +52 -0
  311. lintro-0.23.1/tests/unit/config/test_config_compatibility.py +71 -0
  312. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/config}/test_config_loader.py +25 -9
  313. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/config}/test_config_loader_more.py +14 -2
  314. lintro-0.23.1/tests/unit/config/test_config_loaders.py +382 -0
  315. lintro-0.23.1/tests/unit/config/test_config_tool_specific.py +238 -0
  316. lintro-0.23.1/tests/unit/config/test_enforce_config.py +63 -0
  317. lintro-0.23.1/tests/unit/config/test_execution_config.py +119 -0
  318. lintro-0.23.1/tests/unit/config/test_lintro_config.py +158 -0
  319. lintro-0.23.1/tests/unit/config/test_unified_config.py +114 -0
  320. lintro-0.23.1/tests/unit/conftest.py +144 -0
  321. lintro-0.23.1/tests/unit/core/conftest.py +9 -0
  322. lintro-0.23.1/tests/unit/core/test_version_requirements.py +303 -0
  323. lintro-0.23.1/tests/unit/enums/__init__.py +1 -0
  324. lintro-0.23.1/tests/unit/enums/test_bandit_levels.py +109 -0
  325. lintro-0.23.1/tests/unit/enums/test_base.py +87 -0
  326. lintro-0.23.1/tests/unit/enums/test_enum_normalizers.py +214 -0
  327. lintro-0.23.1/tests/unit/enums/test_output_format.py +63 -0
  328. lintro-0.23.1/tests/unit/enums/test_tool_name.py +69 -0
  329. lintro-0.23.1/tests/unit/exceptions/conftest.py +7 -0
  330. lintro-0.23.1/tests/unit/exceptions/test_exceptions.py +128 -0
  331. lintro-0.23.1/tests/unit/formatters/__init__.py +3 -0
  332. {lintro-0.13.0/tests → lintro-0.23.1/tests/unit}/formatters/conftest.py +6 -21
  333. lintro-0.23.1/tests/unit/formatters/styles/__init__.py +3 -0
  334. lintro-0.23.1/tests/unit/formatters/styles/conftest.py +89 -0
  335. lintro-0.23.1/tests/unit/formatters/styles/test_csv.py +100 -0
  336. lintro-0.23.1/tests/unit/formatters/styles/test_html.py +101 -0
  337. lintro-0.23.1/tests/unit/formatters/styles/test_json.py +127 -0
  338. lintro-0.23.1/tests/unit/formatters/styles/test_markdown.py +104 -0
  339. lintro-0.23.1/tests/unit/formatters/styles/test_plain.py +119 -0
  340. lintro-0.23.1/tests/unit/formatters/styles/test_style_common.py +47 -0
  341. lintro-0.23.1/tests/unit/formatters/styles/test_style_csv.py +63 -0
  342. lintro-0.23.1/tests/unit/formatters/styles/test_style_grid.py +64 -0
  343. lintro-0.23.1/tests/unit/formatters/styles/test_style_html.py +76 -0
  344. lintro-0.23.1/tests/unit/formatters/styles/test_style_json.py +140 -0
  345. lintro-0.23.1/tests/unit/formatters/styles/test_style_markdown.py +66 -0
  346. lintro-0.23.1/tests/unit/formatters/styles/test_style_plain.py +64 -0
  347. lintro-0.23.1/tests/unit/formatters/test_format_registry.py +190 -0
  348. lintro-0.23.1/tests/unit/logging/conftest.py +7 -0
  349. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/logging}/test_console_logger.py +14 -10
  350. lintro-0.23.1/tests/unit/logging/test_console_logger_more.py +138 -0
  351. lintro-0.23.1/tests/unit/output/conftest.py +7 -0
  352. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/output}/test_output_manager_reports.py +7 -3
  353. lintro-0.23.1/tests/unit/parsers/base_parser/__init__.py +1 -0
  354. lintro-0.23.1/tests/unit/parsers/base_parser/test_continuation_lines.py +67 -0
  355. lintro-0.23.1/tests/unit/parsers/base_parser/test_extract_fields.py +132 -0
  356. lintro-0.23.1/tests/unit/parsers/base_parser/test_safe_parse.py +82 -0
  357. lintro-0.23.1/tests/unit/parsers/base_parser/test_strip_ansi.py +41 -0
  358. lintro-0.23.1/tests/unit/parsers/base_parser/test_validate_fields.py +82 -0
  359. lintro-0.23.1/tests/unit/parsers/conftest.py +68 -0
  360. lintro-0.23.1/tests/unit/parsers/pytest/test_pytest_parser.py +394 -0
  361. lintro-0.23.1/tests/unit/parsers/streaming/__init__.py +1 -0
  362. lintro-0.23.1/tests/unit/parsers/streaming/conftest.py +71 -0
  363. lintro-0.23.1/tests/unit/parsers/streaming/test_collect.py +40 -0
  364. lintro-0.23.1/tests/unit/parsers/streaming/test_json_array.py +83 -0
  365. lintro-0.23.1/tests/unit/parsers/streaming/test_json_lines.py +140 -0
  366. lintro-0.23.1/tests/unit/parsers/streaming/test_parser_class.py +84 -0
  367. lintro-0.23.1/tests/unit/parsers/streaming/test_text_lines.py +86 -0
  368. lintro-0.13.0/tests/unit/test_bandit_parsing.py → lintro-0.23.1/tests/unit/parsers/test_bandit_parser.py +58 -16
  369. lintro-0.23.1/tests/unit/parsers/test_base_issue.py +165 -0
  370. lintro-0.23.1/tests/unit/parsers/test_base_parser.py +359 -0
  371. lintro-0.23.1/tests/unit/parsers/test_biome_parser.py +214 -0
  372. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/parsers}/test_black_parser.py +8 -6
  373. lintro-0.23.1/tests/unit/parsers/test_clippy_parser.py +115 -0
  374. lintro-0.23.1/tests/unit/parsers/test_darglint_parser.py +113 -0
  375. lintro-0.23.1/tests/unit/parsers/test_hadolint_parser.py +175 -0
  376. lintro-0.23.1/tests/unit/parsers/test_markdownlint_parser.py +139 -0
  377. lintro-0.23.1/tests/unit/parsers/test_mypy_parser.py +151 -0
  378. lintro-0.23.1/tests/unit/parsers/test_prettier_parser.py +96 -0
  379. lintro-0.23.1/tests/unit/parsers/test_ruff_parser_additional.py +127 -0
  380. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/parsers}/test_ruff_parser_more.py +2 -2
  381. lintro-0.23.1/tests/unit/parsers/test_yamllint_parser.py +106 -0
  382. lintro-0.23.1/tests/unit/plugins/base/__init__.py +1 -0
  383. lintro-0.23.1/tests/unit/plugins/base/conftest.py +44 -0
  384. lintro-0.23.1/tests/unit/plugins/base/test_execution.py +407 -0
  385. lintro-0.23.1/tests/unit/plugins/base/test_options.py +182 -0
  386. lintro-0.23.1/tests/unit/plugins/base/test_subprocess.py +245 -0
  387. lintro-0.23.1/tests/unit/plugins/conftest.py +151 -0
  388. lintro-0.23.1/tests/unit/plugins/test_base_plugin_config.py +336 -0
  389. lintro-0.23.1/tests/unit/plugins/test_discovery.py +229 -0
  390. lintro-0.23.1/tests/unit/plugins/test_registry.py +423 -0
  391. lintro-0.23.1/tests/unit/pytest/conftest.py +7 -0
  392. lintro-0.23.1/tests/unit/pytest/test_pytest_cli_commands.py +205 -0
  393. lintro-0.23.1/tests/unit/pytest/test_pytest_cli_options.py +148 -0
  394. lintro-0.23.1/tests/unit/pytest/test_pytest_handlers.py +550 -0
  395. lintro-0.23.1/tests/unit/pytest/test_pytest_programmatic_api.py +254 -0
  396. lintro-0.23.1/tests/unit/security/__init__.py +1 -0
  397. lintro-0.23.1/tests/unit/security/conftest.py +23 -0
  398. lintro-0.23.1/tests/unit/security/test_json_edge_cases.py +309 -0
  399. lintro-0.23.1/tests/unit/security/test_path_traversal.py +316 -0
  400. lintro-0.23.1/tests/unit/security/test_subprocess_injection.py +225 -0
  401. lintro-0.23.1/tests/unit/tools/assertions/__init__.py +3 -0
  402. lintro-0.23.1/tests/unit/tools/assertions/conftest.py +104 -0
  403. lintro-0.23.1/tests/unit/tools/base/conftest.py +7 -0
  404. lintro-0.23.1/tests/unit/tools/biome/__init__.py +1 -0
  405. lintro-0.23.1/tests/unit/tools/biome/conftest.py +17 -0
  406. lintro-0.23.1/tests/unit/tools/biome/test_check_method.py +68 -0
  407. lintro-0.23.1/tests/unit/tools/biome/test_default_options.py +44 -0
  408. lintro-0.23.1/tests/unit/tools/biome/test_fix_method.py +241 -0
  409. lintro-0.23.1/tests/unit/tools/biome/test_set_options.py +72 -0
  410. lintro-0.23.1/tests/unit/tools/biome/test_timeout_handling.py +104 -0
  411. lintro-0.23.1/tests/unit/tools/conftest.py +287 -0
  412. lintro-0.23.1/tests/unit/tools/core/__init__.py +1 -0
  413. lintro-0.23.1/tests/unit/tools/core/conftest.py +32 -0
  414. lintro-0.23.1/tests/unit/tools/core/test_command_builders.py +267 -0
  415. lintro-0.23.1/tests/unit/tools/core/test_line_length_checker.py +308 -0
  416. lintro-0.23.1/tests/unit/tools/core/test_option_spec.py +121 -0
  417. lintro-0.23.1/tests/unit/tools/core/test_option_validators.py +348 -0
  418. lintro-0.23.1/tests/unit/tools/core/test_runtime_discovery.py +228 -0
  419. lintro-0.23.1/tests/unit/tools/core/test_tool_options_spec.py +107 -0
  420. lintro-0.23.1/tests/unit/tools/core/test_version_checking.py +355 -0
  421. lintro-0.23.1/tests/unit/tools/darglint/__init__.py +1 -0
  422. lintro-0.23.1/tests/unit/tools/darglint/test_darglint_plugin.py +502 -0
  423. lintro-0.23.1/tests/unit/tools/executor/conftest.py +10 -0
  424. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/tools/executor}/test_tool_executor.py +116 -162
  425. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/tools/executor}/test_tool_executor_fmt_exclusion.py +5 -5
  426. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/tools/executor}/test_tool_executor_more.py +153 -81
  427. lintro-0.23.1/tests/unit/tools/executor/test_tool_executor_post_checks.py +215 -0
  428. lintro-0.23.1/tests/unit/tools/executor/test_tool_executor_pytest.py +317 -0
  429. lintro-0.23.1/tests/unit/tools/hadolint/__init__.py +1 -0
  430. lintro-0.23.1/tests/unit/tools/hadolint/conftest.py +17 -0
  431. lintro-0.23.1/tests/unit/tools/hadolint/test_execution.py +173 -0
  432. lintro-0.23.1/tests/unit/tools/hadolint/test_options.py +295 -0
  433. lintro-0.23.1/tests/unit/tools/manager/conftest.py +7 -0
  434. lintro-0.23.1/tests/unit/tools/manager/test_tool_manager.py +159 -0
  435. lintro-0.23.1/tests/unit/tools/mypy/test_mypy_plugin.py +197 -0
  436. lintro-0.23.1/tests/unit/tools/prettier/__init__.py +1 -0
  437. lintro-0.23.1/tests/unit/tools/prettier/conftest.py +17 -0
  438. lintro-0.23.1/tests/unit/tools/prettier/test_check_method.py +3 -0
  439. lintro-0.23.1/tests/unit/tools/prettier/test_config_discovery.py +81 -0
  440. lintro-0.23.1/tests/unit/tools/prettier/test_default_options.py +52 -0
  441. lintro-0.23.1/tests/unit/tools/prettier/test_fix_method.py +159 -0
  442. lintro-0.23.1/tests/unit/tools/prettier/test_output_parsing.py +50 -0
  443. lintro-0.23.1/tests/unit/tools/prettier/test_set_options.py +83 -0
  444. lintro-0.23.1/tests/unit/tools/prettier/test_timeout_handling.py +87 -0
  445. lintro-0.23.1/tests/unit/tools/pytest_tool/__init__.py +1 -0
  446. lintro-0.23.1/tests/unit/tools/pytest_tool/conftest.py +406 -0
  447. lintro-0.23.1/tests/unit/tools/pytest_tool/test_check_method.py +191 -0
  448. lintro-0.23.1/tests/unit/tools/pytest_tool/test_configuration.py +97 -0
  449. lintro-0.23.1/tests/unit/tools/pytest_tool/test_json_parsing.py +64 -0
  450. lintro-0.23.1/tests/unit/tools/pytest_tool/test_junit_parsing.py +57 -0
  451. lintro-0.23.1/tests/unit/tools/pytest_tool/test_output_parsing.py +107 -0
  452. lintro-0.23.1/tests/unit/tools/pytest_tool/test_output_processing.py +158 -0
  453. lintro-0.23.1/tests/unit/tools/pytest_tool/test_pytest_handlers.py +320 -0
  454. lintro-0.23.1/tests/unit/tools/pytest_tool/test_pytest_issue.py +39 -0
  455. lintro-0.23.1/tests/unit/tools/pytest_tool/test_pytest_output_processor.py +94 -0
  456. lintro-0.23.1/tests/unit/tools/pytest_tool/test_result_processor.py +126 -0
  457. lintro-0.23.1/tests/unit/tools/pytest_tool/test_set_options.py +135 -0
  458. lintro-0.23.1/tests/unit/tools/pytest_tool/test_text_parsing.py +42 -0
  459. lintro-0.23.1/tests/unit/tools/pytest_tool/test_validators.py +48 -0
  460. lintro-0.23.1/tests/unit/tools/ruff/__init__.py +1 -0
  461. lintro-0.23.1/tests/unit/tools/ruff/check/__init__.py +1 -0
  462. lintro-0.23.1/tests/unit/tools/ruff/check/conftest.py +4 -0
  463. lintro-0.23.1/tests/unit/tools/ruff/check/test_config_detection.py +85 -0
  464. lintro-0.23.1/tests/unit/tools/ruff/check/test_error_handling.py +135 -0
  465. lintro-0.23.1/tests/unit/tools/ruff/check/test_format_normalization.py +55 -0
  466. lintro-0.23.1/tests/unit/tools/ruff/check/test_json_parsing.py +136 -0
  467. lintro-0.23.1/tests/unit/tools/ruff/check/test_no_issues.py +108 -0
  468. lintro-0.23.1/tests/unit/tools/ruff/check/test_output_format.py +72 -0
  469. lintro-0.23.1/tests/unit/tools/ruff/check/test_path_filtering.py +213 -0
  470. lintro-0.23.1/tests/unit/tools/ruff/check/test_real_plugin.py +52 -0
  471. lintro-0.23.1/tests/unit/tools/ruff/check/test_timeout.py +51 -0
  472. lintro-0.23.1/tests/unit/tools/ruff/check/test_with_issues.py +166 -0
  473. lintro-0.23.1/tests/unit/tools/ruff/conftest.py +154 -0
  474. lintro-0.23.1/tests/unit/tools/ruff/fix/__init__.py +1 -0
  475. lintro-0.23.1/tests/unit/tools/ruff/fix/conftest.py +4 -0
  476. lintro-0.23.1/tests/unit/tools/ruff/fix/test_combined_issues.py +91 -0
  477. lintro-0.23.1/tests/unit/tools/ruff/fix/test_config.py +35 -0
  478. lintro-0.23.1/tests/unit/tools/ruff/fix/test_edge_cases.py +117 -0
  479. lintro-0.23.1/tests/unit/tools/ruff/fix/test_format_option.py +98 -0
  480. lintro-0.23.1/tests/unit/tools/ruff/fix/test_no_files.py +49 -0
  481. lintro-0.23.1/tests/unit/tools/ruff/fix/test_real_plugin.py +65 -0
  482. lintro-0.23.1/tests/unit/tools/ruff/fix/test_successful_fix.py +106 -0
  483. lintro-0.23.1/tests/unit/tools/ruff/fix/test_temporary_option.py +79 -0
  484. lintro-0.23.1/tests/unit/tools/ruff/fix/test_timeout.py +177 -0
  485. lintro-0.23.1/tests/unit/tools/ruff/fix/test_unsafe_fixes.py +76 -0
  486. lintro-0.23.1/tests/unit/tools/ruff/fix/test_version_check.py +29 -0
  487. lintro-0.23.1/tests/unit/tools/test_common_behaviors.py +504 -0
  488. lintro-0.23.1/tests/unit/tools/test_edge_cases.py +350 -0
  489. lintro-0.23.1/tests/unit/tools/test_helpers.py +327 -0
  490. lintro-0.23.1/tests/unit/tools/test_plugin_definitions.py +453 -0
  491. lintro-0.23.1/tests/unit/tools/test_tool_definitions.py +418 -0
  492. lintro-0.23.1/tests/unit/utils/__init__.py +1 -0
  493. lintro-0.23.1/tests/unit/utils/async_tool_executor/__init__.py +1 -0
  494. lintro-0.23.1/tests/unit/utils/async_tool_executor/conftest.py +121 -0
  495. lintro-0.23.1/tests/unit/utils/async_tool_executor/test_callbacks.py +100 -0
  496. lintro-0.23.1/tests/unit/utils/async_tool_executor/test_exceptions.py +51 -0
  497. lintro-0.23.1/tests/unit/utils/async_tool_executor/test_init.py +32 -0
  498. lintro-0.23.1/tests/unit/utils/async_tool_executor/test_parallel_batches.py +164 -0
  499. lintro-0.23.1/tests/unit/utils/async_tool_executor/test_run_tool_async.py +137 -0
  500. lintro-0.23.1/tests/unit/utils/async_tool_executor/test_run_tools_parallel.py +190 -0
  501. lintro-0.23.1/tests/unit/utils/async_tool_executor/test_shutdown.py +28 -0
  502. lintro-0.23.1/tests/unit/utils/config/__init__.py +1 -0
  503. lintro-0.23.1/tests/unit/utils/config/conftest.py +65 -0
  504. lintro-0.23.1/tests/unit/utils/config/test_manager_configuration.py +420 -0
  505. lintro-0.23.1/tests/unit/utils/config/test_manager_core.py +337 -0
  506. lintro-0.23.1/tests/unit/utils/conftest.py +128 -0
  507. lintro-0.23.1/tests/unit/utils/console/conftest.py +39 -0
  508. lintro-0.23.1/tests/unit/utils/console/summary/__init__.py +1 -0
  509. lintro-0.23.1/tests/unit/utils/console/summary/test_delegation.py +364 -0
  510. lintro-0.23.1/tests/unit/utils/console/summary/test_execution_summary.py +353 -0
  511. lintro-0.23.1/tests/unit/utils/console/test_logger_headers.py +123 -0
  512. lintro-0.23.1/tests/unit/utils/console/test_logger_initialization.py +36 -0
  513. lintro-0.23.1/tests/unit/utils/console/test_logger_levels.py +129 -0
  514. lintro-0.23.1/tests/unit/utils/console/test_logger_metadata.py +140 -0
  515. lintro-0.23.1/tests/unit/utils/console/test_logger_output_methods.py +149 -0
  516. lintro-0.23.1/tests/unit/utils/console/test_logger_results.py +111 -0
  517. lintro-0.23.1/tests/unit/utils/native_parsers/__init__.py +1 -0
  518. lintro-0.23.1/tests/unit/utils/native_parsers/conftest.py +36 -0
  519. lintro-0.23.1/tests/unit/utils/native_parsers/test_biome_config.py +78 -0
  520. lintro-0.23.1/tests/unit/utils/native_parsers/test_config_constants.py +45 -0
  521. lintro-0.23.1/tests/unit/utils/native_parsers/test_json_config.py +109 -0
  522. lintro-0.23.1/tests/unit/utils/native_parsers/test_jsonc_comments.py +189 -0
  523. lintro-0.23.1/tests/unit/utils/native_parsers/test_markdownlint_config.py +130 -0
  524. lintro-0.23.1/tests/unit/utils/native_parsers/test_prettier_config.py +94 -0
  525. lintro-0.23.1/tests/unit/utils/native_parsers/test_pyproject_tools.py +66 -0
  526. lintro-0.23.1/tests/unit/utils/native_parsers/test_yamllint_config.py +89 -0
  527. lintro-0.23.1/tests/unit/utils/output/__init__.py +3 -0
  528. lintro-0.23.1/tests/unit/utils/output/conftest.py +102 -0
  529. lintro-0.23.1/tests/unit/utils/output/test_file_writer_common.py +47 -0
  530. lintro-0.23.1/tests/unit/utils/output/test_file_writer_csv.py +83 -0
  531. lintro-0.23.1/tests/unit/utils/output/test_file_writer_format.py +265 -0
  532. lintro-0.23.1/tests/unit/utils/output/test_file_writer_html.py +118 -0
  533. lintro-0.23.1/tests/unit/utils/output/test_file_writer_json.py +92 -0
  534. lintro-0.23.1/tests/unit/utils/output/test_file_writer_markdown.py +115 -0
  535. lintro-0.23.1/tests/unit/utils/output/test_file_writer_plain.py +78 -0
  536. lintro-0.23.1/tests/unit/utils/output/test_helpers.py +135 -0
  537. lintro-0.23.1/tests/unit/utils/result_formatters/__init__.py +1 -0
  538. lintro-0.23.1/tests/unit/utils/result_formatters/conftest.py +32 -0
  539. lintro-0.23.1/tests/unit/utils/result_formatters/test_action_normalization.py +87 -0
  540. lintro-0.23.1/tests/unit/utils/result_formatters/test_fix_action.py +165 -0
  541. lintro-0.23.1/tests/unit/utils/result_formatters/test_fixable_hints.py +151 -0
  542. lintro-0.23.1/tests/unit/utils/result_formatters/test_generic_output.py +139 -0
  543. lintro-0.23.1/tests/unit/utils/result_formatters/test_output_display.py +96 -0
  544. lintro-0.23.1/tests/unit/utils/result_formatters/test_pytest_output.py +176 -0
  545. lintro-0.23.1/tests/unit/utils/result_formatters/test_ruff_formatting.py +114 -0
  546. lintro-0.23.1/tests/unit/utils/summary/__init__.py +1 -0
  547. lintro-0.23.1/tests/unit/utils/summary/test_display.py +403 -0
  548. lintro-0.23.1/tests/unit/utils/summary/test_safe_cast.py +119 -0
  549. lintro-0.23.1/tests/unit/utils/test_ascii_normalize_cli.py +202 -0
  550. lintro-0.23.1/tests/unit/utils/test_config_reporting.py +359 -0
  551. lintro-0.23.1/tests/unit/utils/test_console_output_writer.py +245 -0
  552. lintro-0.23.1/tests/unit/utils/test_display_helpers.py +354 -0
  553. lintro-0.23.1/tests/unit/utils/test_display_helpers_fallback.py +312 -0
  554. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/utils}/test_enums_and_normalizers.py +40 -0
  555. lintro-0.23.1/tests/unit/utils/test_file_cache.py +194 -0
  556. lintro-0.23.1/tests/unit/utils/test_logger_setup.py +152 -0
  557. lintro-0.23.1/tests/unit/utils/test_output_writers.py +393 -0
  558. lintro-0.23.1/tests/unit/utils/test_parser_registry.py +232 -0
  559. lintro-0.23.1/tests/unit/utils/test_path_filtering.py +297 -0
  560. lintro-0.23.1/tests/unit/utils/test_path_utils.py +232 -0
  561. lintro-0.23.1/tests/unit/utils/test_streaming_output.py +389 -0
  562. lintro-0.23.1/tests/unit/utils/test_timeout_utils.py +139 -0
  563. lintro-0.23.1/tests/unit/utils/test_tool_config_info.py +20 -0
  564. lintro-0.23.1/tests/unit/utils/test_tool_utils.py +44 -0
  565. lintro-0.23.1/tests/unit/utils/unified_config/__init__.py +1 -0
  566. lintro-0.23.1/tests/unit/utils/unified_config/conftest.py +47 -0
  567. lintro-0.23.1/tests/unit/utils/unified_config/test_config_summary.py +90 -0
  568. lintro-0.23.1/tests/unit/utils/unified_config/test_consistency.py +55 -0
  569. lintro-0.23.1/tests/unit/utils/unified_config/test_constants.py +77 -0
  570. lintro-0.23.1/tests/unit/utils/unified_config/test_dataclasses.py +47 -0
  571. lintro-0.23.1/tests/unit/utils/unified_config/test_enums.py +36 -0
  572. lintro-0.23.1/tests/unit/utils/unified_config/test_injectable.py +46 -0
  573. lintro-0.23.1/tests/unit/utils/unified_config/test_line_length.py +109 -0
  574. lintro-0.23.1/tests/unit/utils/unified_config/test_nested_value.py +65 -0
  575. lintro-0.23.1/tests/unit/utils/unified_config/test_ordered_tools.py +57 -0
  576. lintro-0.23.1/tests/unit/utils/unified_config/test_tool_priority.py +82 -0
  577. {lintro-0.13.0 → lintro-0.23.1}/tests/utils/test_output_manager.py +18 -12
  578. {lintro-0.13.0 → lintro-0.23.1}/tests/utils/test_path_utils.py +6 -1
  579. lintro-0.13.0/PKG-INFO +0 -385
  580. lintro-0.13.0/README.md +0 -311
  581. lintro-0.13.0/docs/coverage-setup.md +0 -42
  582. lintro-0.13.0/lintro/cli.py +0 -76
  583. lintro-0.13.0/lintro/cli_utils/commands/__init__.py +0 -7
  584. lintro-0.13.0/lintro/cli_utils/commands/list_tools.py +0 -114
  585. lintro-0.13.0/lintro/enums/action.py +0 -29
  586. lintro-0.13.0/lintro/enums/tool_type.py +0 -27
  587. lintro-0.13.0/lintro/exceptions/errors.py +0 -15
  588. lintro-0.13.0/lintro/formatters/__init__.py +0 -1
  589. lintro-0.13.0/lintro/formatters/core/__init__.py +0 -1
  590. lintro-0.13.0/lintro/formatters/core/output_style.py +0 -32
  591. lintro-0.13.0/lintro/formatters/core/table_descriptor.py +0 -32
  592. lintro-0.13.0/lintro/formatters/tools/__init__.py +0 -47
  593. lintro-0.13.0/lintro/formatters/tools/actionlint_formatter.py +0 -82
  594. lintro-0.13.0/lintro/formatters/tools/bandit_formatter.py +0 -100
  595. lintro-0.13.0/lintro/formatters/tools/black_formatter.py +0 -70
  596. lintro-0.13.0/lintro/formatters/tools/darglint_formatter.py +0 -89
  597. lintro-0.13.0/lintro/formatters/tools/hadolint_formatter.py +0 -97
  598. lintro-0.13.0/lintro/formatters/tools/prettier_formatter.py +0 -91
  599. lintro-0.13.0/lintro/formatters/tools/ruff_formatter.py +0 -137
  600. lintro-0.13.0/lintro/formatters/tools/yamllint_formatter.py +0 -100
  601. lintro-0.13.0/lintro/models/core/__init__.py +0 -1
  602. lintro-0.13.0/lintro/models/core/tool.py +0 -104
  603. lintro-0.13.0/lintro/models/core/tool_config.py +0 -27
  604. lintro-0.13.0/lintro/models/core/tool_result.py +0 -39
  605. lintro-0.13.0/lintro/parsers/__init__.py +0 -21
  606. lintro-0.13.0/lintro/parsers/actionlint/__init__.py +0 -1
  607. lintro-0.13.0/lintro/parsers/actionlint/actionlint_issue.py +0 -24
  608. lintro-0.13.0/lintro/parsers/black/black_issue.py +0 -22
  609. lintro-0.13.0/lintro/parsers/black/black_parser.py +0 -90
  610. lintro-0.13.0/lintro/parsers/darglint/__init__.py +0 -1
  611. lintro-0.13.0/lintro/parsers/darglint/darglint_issue.py +0 -20
  612. lintro-0.13.0/lintro/parsers/hadolint/__init__.py +0 -1
  613. lintro-0.13.0/lintro/parsers/hadolint/hadolint_issue.py +0 -24
  614. lintro-0.13.0/lintro/parsers/prettier/__init__.py +0 -1
  615. lintro-0.13.0/lintro/parsers/prettier/prettier_parser.py +0 -60
  616. lintro-0.13.0/lintro/parsers/ruff/__init__.py +0 -1
  617. lintro-0.13.0/lintro/parsers/ruff/ruff_issue.py +0 -43
  618. lintro-0.13.0/lintro/parsers/ruff/ruff_parser.py +0 -144
  619. lintro-0.13.0/lintro/parsers/yamllint/__init__.py +0 -1
  620. lintro-0.13.0/lintro/parsers/yamllint/yamllint_issue.py +0 -24
  621. lintro-0.13.0/lintro/parsers/yamllint/yamllint_parser.py +0 -68
  622. lintro-0.13.0/lintro/tools/__init__.py +0 -44
  623. lintro-0.13.0/lintro/tools/core/tool_base.py +0 -378
  624. lintro-0.13.0/lintro/tools/core/tool_manager.py +0 -167
  625. lintro-0.13.0/lintro/tools/implementations/__init__.py +0 -1
  626. lintro-0.13.0/lintro/tools/implementations/tool_actionlint.py +0 -151
  627. lintro-0.13.0/lintro/tools/implementations/tool_bandit.py +0 -436
  628. lintro-0.13.0/lintro/tools/implementations/tool_black.py +0 -261
  629. lintro-0.13.0/lintro/tools/implementations/tool_darglint.py +0 -247
  630. lintro-0.13.0/lintro/tools/implementations/tool_hadolint.py +0 -302
  631. lintro-0.13.0/lintro/tools/implementations/tool_prettier.py +0 -276
  632. lintro-0.13.0/lintro/tools/implementations/tool_ruff.py +0 -657
  633. lintro-0.13.0/lintro/tools/implementations/tool_yamllint.py +0 -240
  634. lintro-0.13.0/lintro/tools/tool_enum.py +0 -25
  635. lintro-0.13.0/lintro/utils/config.py +0 -55
  636. lintro-0.13.0/lintro/utils/console_logger.py +0 -847
  637. lintro-0.13.0/lintro/utils/path_utils.py +0 -41
  638. lintro-0.13.0/lintro/utils/tool_executor.py +0 -652
  639. lintro-0.13.0/lintro/utils/tool_utils.py +0 -452
  640. lintro-0.13.0/lintro.egg-info/PKG-INFO +0 -385
  641. lintro-0.13.0/lintro.egg-info/SOURCES.txt +0 -208
  642. lintro-0.13.0/pyproject.toml +0 -85
  643. lintro-0.13.0/test_samples/prettier_violations.js +0 -46
  644. lintro-0.13.0/test_samples/yaml_violations.yml +0 -42
  645. lintro-0.13.0/tests/cli/test_cli.py +0 -95
  646. lintro-0.13.0/tests/conftest.py +0 -110
  647. lintro-0.13.0/tests/formatters/test_formatters.py +0 -179
  648. lintro-0.13.0/tests/integration/conftest.py +0 -61
  649. lintro-0.13.0/tests/integration/test_hadolint_integration.py +0 -269
  650. lintro-0.13.0/tests/integration/test_prettier_integration.py +0 -209
  651. lintro-0.13.0/tests/integration/test_ruff_additional_coverage.py +0 -477
  652. lintro-0.13.0/tests/integration/test_ruff_annotations.py +0 -78
  653. lintro-0.13.0/tests/integration/test_ruff_black_policy.py +0 -84
  654. lintro-0.13.0/tests/integration/test_ruff_bugbear.py +0 -165
  655. lintro-0.13.0/tests/integration/test_ruff_integration.py +0 -567
  656. lintro-0.13.0/tests/integration/test_ruff_naming.py +0 -31
  657. lintro-0.13.0/tests/integration/test_yamllint_integration.py +0 -298
  658. lintro-0.13.0/tests/scripts/test_github_comment_utilities.py +0 -433
  659. lintro-0.13.0/tests/scripts/test_script_environment.py +0 -621
  660. lintro-0.13.0/tests/scripts/test_shell_scripts.py +0 -541
  661. lintro-0.13.0/tests/test_documentation.py +0 -371
  662. lintro-0.13.0/tests/unit/test_bandit_command_building.py +0 -51
  663. lintro-0.13.0/tests/unit/test_bandit_config_hydration.py +0 -47
  664. lintro-0.13.0/tests/unit/test_bandit_formatter_mapping.py +0 -41
  665. lintro-0.13.0/tests/unit/test_black_formatter.py +0 -43
  666. lintro-0.13.0/tests/unit/test_black_tool.py +0 -262
  667. lintro-0.13.0/tests/unit/test_black_tool_more.py +0 -48
  668. lintro-0.13.0/tests/unit/test_cli_programmatic.py +0 -90
  669. lintro-0.13.0/tests/unit/test_console_logger_more.py +0 -44
  670. lintro-0.13.0/tests/unit/test_exceptions.py +0 -24
  671. lintro-0.13.0/tests/unit/test_formatters_tables.py +0 -158
  672. lintro-0.13.0/tests/unit/test_ruff_parser_additional.py +0 -32
  673. lintro-0.13.0/tests/unit/test_subprocess_validator.py +0 -80
  674. lintro-0.13.0/tests/unit/test_tool_base_subprocess.py +0 -94
  675. lintro-0.13.0/tests/unit/test_tool_executor_post_checks.py +0 -256
  676. lintro-0.13.0/tests/unit/test_tool_manager.py +0 -64
  677. lintro-0.13.0/tests/unit/test_tool_utils.py +0 -88
  678. lintro-0.13.0/tests/unit/test_tool_utils_fallbacks.py +0 -36
  679. lintro-0.13.0/tests/unit/test_tool_utils_more.py +0 -94
  680. lintro-0.13.0/tests/utils/conftest.py +0 -42
  681. {lintro-0.13.0 → lintro-0.23.1}/LICENSE +0 -0
  682. {lintro-0.13.0 → lintro-0.23.1}/MANIFEST.in +0 -0
  683. {lintro-0.13.0 → lintro-0.23.1}/assets/images/lintro.png +0 -0
  684. {lintro-0.13.0 → lintro-0.23.1}/lintro/__main__.py +0 -0
  685. {lintro-0.13.0 → lintro-0.23.1}/lintro/ascii-art/fail.txt +0 -0
  686. {lintro-0.13.0 → lintro-0.23.1}/lintro/ascii-art/success.txt +0 -0
  687. {lintro-0.13.0 → lintro-0.23.1}/lintro/cli_utils/__init__.py +0 -0
  688. {lintro-0.13.0 → lintro-0.23.1}/lintro/enums/__init__.py +0 -0
  689. {lintro-0.13.0 → lintro-0.23.1}/lintro/exceptions/__init__.py +0 -0
  690. {lintro-0.13.0 → lintro-0.23.1}/lintro/formatters/styles/__init__.py +0 -0
  691. {lintro-0.13.0 → lintro-0.23.1}/lintro/models/__init__.py +0 -0
  692. {lintro-0.13.0 → lintro-0.23.1}/lintro/parsers/actionlint/actionlint_parser.py +0 -0
  693. {lintro-0.13.0 → lintro-0.23.1}/lintro/tools/core/__init__.py +0 -0
  694. {lintro-0.13.0 → lintro-0.23.1}/lintro/utils/__init__.py +0 -0
  695. {lintro-0.13.0 → lintro-0.23.1}/lintro/utils/formatting.py +0 -0
  696. {lintro-0.13.0 → lintro-0.23.1}/lintro.egg-info/dependency_links.txt +0 -0
  697. {lintro-0.13.0 → lintro-0.23.1}/lintro.egg-info/entry_points.txt +0 -0
  698. {lintro-0.13.0 → lintro-0.23.1}/lintro.egg-info/top_level.txt +0 -0
  699. {lintro-0.13.0 → lintro-0.23.1}/setup.cfg +0 -0
  700. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/config/docker}/Dockerfile.violations +0 -0
  701. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/config/github_actions}/actionlint_violations.yml +0 -0
  702. {lintro-0.13.0/test_samples → lintro-0.23.1/test_samples/tools/python/darglint}/darglint_violations.py +0 -0
  703. {lintro-0.13.0 → lintro-0.23.1}/tests/__init__.py +0 -0
  704. {lintro-0.13.0 → lintro-0.23.1}/tests/cli/__init__.py +0 -0
  705. {lintro-0.13.0 → lintro-0.23.1}/tests/formatters/__init__.py +0 -0
  706. {lintro-0.13.0 → lintro-0.23.1}/tests/integration/__init__.py +0 -0
  707. {lintro-0.13.0 → lintro-0.23.1}/tests/scripts/__init__.py +0 -0
  708. {lintro-0.13.0 → lintro-0.23.1}/tests/unit/__init__.py +0 -0
  709. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/cli}/test_cli_commands.py +0 -0
  710. /lintro-0.13.0/tests/unit/test_parsers_actionlint.py → /lintro-0.23.1/tests/unit/parsers/test_actionlint_parser.py +0 -0
  711. {lintro-0.13.0/tests/unit → lintro-0.23.1/tests/unit/utils}/test_ascii_normalize.py +0 -0
  712. {lintro-0.13.0 → lintro-0.23.1}/tests/utils/__init__.py +0 -0
  713. {lintro-0.13.0 → lintro-0.23.1}/tests/utils/test_formatting.py +0 -0
lintro-0.23.1/PKG-INFO ADDED
@@ -0,0 +1,287 @@
1
+ Metadata-Version: 2.4
2
+ Name: lintro
3
+ Version: 0.23.1
4
+ Summary: A unified CLI tool for code formatting, linting, and quality assurance
5
+ Author-email: TurboCoder13 <turbocoder13@gmail.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2024 TurboCoder13
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+ Project-URL: Homepage, https://github.com/TurboCoder13/py-lintro
28
+ Project-URL: Documentation, https://github.com/TurboCoder13/py-lintro/docs
29
+ Project-URL: Source, https://github.com/TurboCoder13/py-lintro
30
+ Keywords: linting,formatting,code-quality,cli,python,javascript,yaml,docker
31
+ Classifier: Development Status :: 4 - Beta
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: Operating System :: OS Independent
34
+ Classifier: Programming Language :: Python :: 3
35
+ Classifier: Programming Language :: Python :: 3.11
36
+ Classifier: Programming Language :: Python :: 3.12
37
+ Classifier: Programming Language :: Python :: 3.13
38
+ Classifier: Topic :: Software Development :: Quality Assurance
39
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
40
+ Classifier: Topic :: Utilities
41
+ Requires-Python: >=3.11
42
+ Description-Content-Type: text/markdown
43
+ License-File: LICENSE
44
+ Requires-Dist: click==8.1.8
45
+ Requires-Dist: coverage-badge==1.1.2
46
+ Requires-Dist: darglint==1.8.1
47
+ Requires-Dist: loguru==0.7.3
48
+ Requires-Dist: pathspec>=0.12.0
49
+ Requires-Dist: pydantic>=2.10.0
50
+ Requires-Dist: tabulate==0.9.0
51
+ Requires-Dist: yamllint==1.37.1
52
+ Requires-Dist: httpx==0.28.1
53
+ Requires-Dist: defusedxml==0.7.1
54
+ Requires-Dist: ruff>=0.14.0
55
+ Requires-Dist: black>=25.0.0
56
+ Requires-Dist: bandit>=1.8.0
57
+ Requires-Dist: mypy>=1.14.1
58
+ Provides-Extra: dev
59
+ Requires-Dist: pytest==9.0.2; extra == "dev"
60
+ Requires-Dist: pytest-cov==7.0.0; extra == "dev"
61
+ Requires-Dist: pytest-mock==3.15.1; extra == "dev"
62
+ Requires-Dist: pytest-xdist==3.8.0; extra == "dev"
63
+ Requires-Dist: pytest-sugar==1.1.1; extra == "dev"
64
+ Requires-Dist: tox==4.32.0; extra == "dev"
65
+ Requires-Dist: allure-pytest==2.15.3; extra == "dev"
66
+ Requires-Dist: ruff; extra == "dev"
67
+ Requires-Dist: mypy; extra == "dev"
68
+ Requires-Dist: coverage-badge==1.1.2; extra == "dev"
69
+ Requires-Dist: python-semantic-release==10.5.3; extra == "dev"
70
+ Requires-Dist: assertpy==1.1; extra == "dev"
71
+ Requires-Dist: httpx==0.28.1; extra == "dev"
72
+ Provides-Extra: test
73
+ Requires-Dist: pytest==9.0.2; extra == "test"
74
+ Requires-Dist: pytest-cov==7.0.0; extra == "test"
75
+ Requires-Dist: pytest-mock==3.15.1; extra == "test"
76
+ Requires-Dist: pytest-xdist==3.8.0; extra == "test"
77
+ Requires-Dist: assertpy==1.1; extra == "test"
78
+ Provides-Extra: typing
79
+ Requires-Dist: types-setuptools==80.9.0.20251223; extra == "typing"
80
+ Requires-Dist: types-tabulate==0.9.0.20241207; extra == "typing"
81
+ Dynamic: license-file
82
+
83
+ # Lintro
84
+
85
+ <!-- markdownlint-disable MD033 MD013 -->
86
+ <img src="https://raw.githubusercontent.com/TurboCoder13/py-lintro/main/assets/images/lintro.png" alt="Lintro Logo" style="width:100%;max-width:800px;height:auto;display:block;margin:0 auto 24px auto;">
87
+ <!-- markdownlint-enable MD033 MD013 -->
88
+
89
+ A comprehensive CLI tool that unifies various code formatting, linting, and quality
90
+ assurance tools under a single command-line interface.
91
+
92
+ <!-- Badges: Build & Quality -->
93
+
94
+ [![Tests](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/test-and-coverage.yml?label=tests&branch=main&logo=githubactions&logoColor=white)](https://github.com/TurboCoder13/py-lintro/actions/workflows/test-and-coverage.yml?query=branch%3Amain)
95
+ [![CI](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/ci-lintro-analysis.yml?label=ci&branch=main&logo=githubactions&logoColor=white)](https://github.com/TurboCoder13/py-lintro/actions/workflows/ci-lintro-analysis.yml?query=branch%3Amain)
96
+ [![Docker](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/docker-build-publish.yml?label=docker&logo=docker&branch=main)](https://github.com/TurboCoder13/py-lintro/actions/workflows/docker-build-publish.yml?query=branch%3Amain)
97
+ [![Coverage](https://codecov.io/gh/TurboCoder13/py-lintro/branch/main/graph/badge.svg)](https://codecov.io/gh/TurboCoder13/py-lintro)
98
+
99
+ <!-- Badges: Releases -->
100
+
101
+ [![Release](https://img.shields.io/github/v/release/TurboCoder13/py-lintro?label=release)](https://github.com/TurboCoder13/py-lintro/releases/latest)
102
+ [![PyPI](https://img.shields.io/pypi/v/lintro?label=pypi)](https://pypi.org/project/lintro/)
103
+ [![Python](https://img.shields.io/badge/python-3.11+-blue)](https://www.python.org/downloads/)
104
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
105
+
106
+ <!-- Badges: Security & Supply Chain -->
107
+
108
+ [![CodeQL](https://github.com/TurboCoder13/py-lintro/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/TurboCoder13/py-lintro/actions/workflows/codeql.yml?query=branch%3Amain)
109
+ [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/TurboCoder13/py-lintro/badge)](https://scorecard.dev/viewer/?uri=github.com/TurboCoder13/py-lintro)
110
+ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11142/badge)](https://www.bestpractices.dev/projects/11142)
111
+ [![SBOM](https://img.shields.io/badge/SBOM-CycloneDX-brightgreen)](docs/security/assurance.md)
112
+ [![SBOM Status](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/sbom-on-main.yml?label=sbom&branch=main)](https://github.com/TurboCoder13/py-lintro/actions/workflows/sbom-on-main.yml?query=branch%3Amain)
113
+
114
+ ## 🚀 Quick Start
115
+
116
+ ```bash
117
+ pip install lintro # Install
118
+ lintro check . # Find issues
119
+ lintro format . # Fix issues
120
+ lintro check --output-format grid # Beautiful output
121
+ ```
122
+
123
+ <!-- TODO: Add screenshot of grid output -->
124
+
125
+ ## ✨ Why Lintro?
126
+
127
+ - **🎯 Unified Interface** - One command for all your linting and formatting tools
128
+ - **📊 Consistent Output** - Beautiful, standardized output formats across all tools
129
+ - **🔧 Auto-fixing** - Automatically fix issues where possible
130
+ - **🐳 Docker Ready** - Run in isolated containers for consistent environments
131
+ - **📈 Rich Reporting** - Multiple formats: grid, JSON, HTML, CSV, Markdown
132
+ - **⚡ Fast** - Optimized parallel execution
133
+
134
+ ## 🔌 Works With Your Existing Configs
135
+
136
+ Lintro respects your native tool configurations. If you have a `.prettierrc`,
137
+ `pyproject.toml [tool.ruff]`, or `.yamllint`, Lintro uses them automatically - no
138
+ migration required.
139
+
140
+ - **Native configs are detected** - Your existing `.prettierrc`, `.eslintrc`, etc. work
141
+ as-is
142
+ - **Enforce settings override consistently** - Set `line_length: 88` once, applied
143
+ everywhere
144
+ - **Fallback defaults when needed** - Tools without native configs use sensible defaults
145
+
146
+ See the [Configuration Guide](docs/configuration.md) for details on the 4-tier config
147
+ system.
148
+
149
+ ## 🛠️ Supported Tools
150
+
151
+ <!-- markdownlint-disable MD013 MD060 -->
152
+
153
+ | Tool | Language | Auto-fix |
154
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | -------- |
155
+ | [![Ruff](https://img.shields.io/badge/Ruff-lint%2Bformat-000?logo=ruff&logoColor=white)](https://github.com/astral-sh/ruff) | 🐍 Python | ✅ |
156
+ | [![Black](https://img.shields.io/badge/Black-format-000000?logo=python&logoColor=white)](https://github.com/psf/black) | 🐍 Python | ✅ |
157
+ | [![Mypy](https://img.shields.io/badge/Mypy-type%20checking-2d50a5?logo=python&logoColor=white)](https://mypy-lang.org/) | 🐍 Python | - |
158
+ | [![Bandit](https://img.shields.io/badge/Bandit-security-yellow?logo=python&logoColor=white)](https://github.com/PyCQA/bandit) | 🐍 Python | - |
159
+ | [![Prettier](https://img.shields.io/badge/Prettier-format-1a2b34?logo=prettier&logoColor=white)](https://prettier.io/) | 🟨 JS/TS · 🧾 JSON | ✅ |
160
+ | [![Biome](https://img.shields.io/badge/Biome-lint-60A5FA?logo=biome&logoColor=white)](https://biomejs.dev/) | 🟨 JS/TS · 🧾 JSON/CSS | ✅ |
161
+ | [![Yamllint](https://img.shields.io/badge/Yamllint-lint-cb171e?logo=yaml&logoColor=white)](https://github.com/adrienverge/yamllint) | 🧾 YAML | - |
162
+ | [![Hadolint](https://img.shields.io/badge/Hadolint-lint-2496ED?logo=docker&logoColor=white)](https://github.com/hadolint/hadolint) | 🐳 Dockerfile | - |
163
+ | [![Actionlint](https://img.shields.io/badge/Actionlint-lint-24292e?logo=github&logoColor=white)](https://github.com/rhysd/actionlint) | ⚙️ GitHub Actions | - |
164
+ | [![Markdownlint](https://img.shields.io/badge/Markdownlint--cli2-lint-000000?logo=markdown&logoColor=white)](https://github.com/DavidAnson/markdownlint-cli2) | 📝 Markdown | - |
165
+ | [![Clippy](https://img.shields.io/badge/Clippy-lint-000000?logo=rust&logoColor=white)](https://github.com/rust-lang/rust-clippy) | 🦀 Rust | ✅ |
166
+ | [![Darglint](https://img.shields.io/badge/Darglint-docstrings-3776AB?logo=python&logoColor=white)](https://github.com/terrencepreilly/darglint) | 🐍 Python | - |
167
+
168
+ <!-- markdownlint-enable MD013 MD060 -->
169
+
170
+ ## 📋 Requirements
171
+
172
+ ### Python Version
173
+
174
+ **Python 3.11+** is required. Lintro uses modern Python features not available in older
175
+ versions.
176
+
177
+ ### Bundled Tools
178
+
179
+ These Python tools are automatically installed with Lintro:
180
+
181
+ - **Ruff** - Fast Python linter and formatter
182
+ - **Black** - Python code formatter
183
+ - **Bandit** - Python security linter
184
+ - **Mypy** - Python static type checker
185
+ - **Yamllint** - YAML linter
186
+ - **Darglint** - Python docstring linter
187
+
188
+ ### Optional External Tools
189
+
190
+ For full functionality, install these additional tools:
191
+
192
+ - **Prettier** - `npm install -g prettier`
193
+ - **Markdownlint-cli2** - `npm install -g markdownlint-cli2`
194
+ - **Hadolint** - [GitHub Releases](https://github.com/hadolint/hadolint/releases)
195
+ - **Actionlint** - [GitHub Releases](https://github.com/rhysd/actionlint/releases)
196
+
197
+ Check all tool versions with: `lintro list-tools`
198
+
199
+ ## 📦 Installation
200
+
201
+ ```bash
202
+ # PyPI (recommended)
203
+ pip install lintro
204
+
205
+ # Homebrew (macOS binary)
206
+ brew tap TurboCoder13/tap && brew install lintro-bin
207
+
208
+ # Docker (includes all tools)
209
+ docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check
210
+ ```
211
+
212
+ See [Getting Started](docs/getting-started.md) for detailed installation options.
213
+
214
+ ## 💻 Usage
215
+
216
+ ```bash
217
+ # Check all files
218
+ lintro check .
219
+
220
+ # Auto-fix issues
221
+ lintro format .
222
+
223
+ # Grid output with grouping
224
+ lintro check --output-format grid --group-by file
225
+
226
+ # Run specific tools
227
+ lintro check --tools ruff,prettier,mypy
228
+
229
+ # Exclude directories
230
+ lintro check --exclude "node_modules,dist,venv"
231
+
232
+ # List available tools
233
+ lintro list-tools
234
+ ```
235
+
236
+ ### 🐳 Docker
237
+
238
+ ```bash
239
+ # Run from GHCR
240
+ docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check
241
+
242
+ # With formatting
243
+ docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check --output-format grid
244
+ ```
245
+
246
+ ## 📚 Documentation
247
+
248
+ | Guide | Description |
249
+ | ------------------------------------------------ | --------------------------------------- |
250
+ | [Getting Started](docs/getting-started.md) | Installation, first steps, requirements |
251
+ | [Configuration](docs/configuration.md) | Tool configuration, options, presets |
252
+ | [Docker Usage](docs/docker.md) | Containerized development |
253
+ | [GitHub Integration](docs/github-integration.md) | CI/CD setup, workflows |
254
+ | [Contributing](docs/contributing.md) | Development guide, adding tools |
255
+ | [Troubleshooting](docs/troubleshooting.md) | Common issues and solutions |
256
+
257
+ **Advanced:** [Tool Analysis](docs/tool-analysis/) | [Architecture](docs/architecture/)
258
+ | [Security](docs/security/)
259
+
260
+ ## 🔨 Development
261
+
262
+ ```bash
263
+ # Clone and install
264
+ git clone https://github.com/TurboCoder13/py-lintro.git
265
+ cd py-lintro
266
+ uv sync --dev
267
+
268
+ # Run tests
269
+ ./scripts/local/run-tests.sh
270
+
271
+ # Run lintro on itself
272
+ ./scripts/local/local-lintro.sh check --output-format grid
273
+ ```
274
+
275
+ ## 🤝 Community
276
+
277
+ - 🐛
278
+ [Bug Reports](https://github.com/TurboCoder13/py-lintro/issues/new?template=bug_report.md)
279
+ - 💡
280
+ [Feature Requests](https://github.com/TurboCoder13/py-lintro/issues/new?template=feature_request.md)
281
+ - ❓
282
+ [Questions](https://github.com/TurboCoder13/py-lintro/issues/new?template=question.md)
283
+ - 📖 [Contributing Guide](docs/contributing.md)
284
+
285
+ ## 📄 License
286
+
287
+ MIT License - see [LICENSE](LICENSE) for details.
@@ -0,0 +1,205 @@
1
+ # Lintro
2
+
3
+ <!-- markdownlint-disable MD033 MD013 -->
4
+ <img src="https://raw.githubusercontent.com/TurboCoder13/py-lintro/main/assets/images/lintro.png" alt="Lintro Logo" style="width:100%;max-width:800px;height:auto;display:block;margin:0 auto 24px auto;">
5
+ <!-- markdownlint-enable MD033 MD013 -->
6
+
7
+ A comprehensive CLI tool that unifies various code formatting, linting, and quality
8
+ assurance tools under a single command-line interface.
9
+
10
+ <!-- Badges: Build & Quality -->
11
+
12
+ [![Tests](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/test-and-coverage.yml?label=tests&branch=main&logo=githubactions&logoColor=white)](https://github.com/TurboCoder13/py-lintro/actions/workflows/test-and-coverage.yml?query=branch%3Amain)
13
+ [![CI](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/ci-lintro-analysis.yml?label=ci&branch=main&logo=githubactions&logoColor=white)](https://github.com/TurboCoder13/py-lintro/actions/workflows/ci-lintro-analysis.yml?query=branch%3Amain)
14
+ [![Docker](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/docker-build-publish.yml?label=docker&logo=docker&branch=main)](https://github.com/TurboCoder13/py-lintro/actions/workflows/docker-build-publish.yml?query=branch%3Amain)
15
+ [![Coverage](https://codecov.io/gh/TurboCoder13/py-lintro/branch/main/graph/badge.svg)](https://codecov.io/gh/TurboCoder13/py-lintro)
16
+
17
+ <!-- Badges: Releases -->
18
+
19
+ [![Release](https://img.shields.io/github/v/release/TurboCoder13/py-lintro?label=release)](https://github.com/TurboCoder13/py-lintro/releases/latest)
20
+ [![PyPI](https://img.shields.io/pypi/v/lintro?label=pypi)](https://pypi.org/project/lintro/)
21
+ [![Python](https://img.shields.io/badge/python-3.11+-blue)](https://www.python.org/downloads/)
22
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
23
+
24
+ <!-- Badges: Security & Supply Chain -->
25
+
26
+ [![CodeQL](https://github.com/TurboCoder13/py-lintro/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/TurboCoder13/py-lintro/actions/workflows/codeql.yml?query=branch%3Amain)
27
+ [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/TurboCoder13/py-lintro/badge)](https://scorecard.dev/viewer/?uri=github.com/TurboCoder13/py-lintro)
28
+ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11142/badge)](https://www.bestpractices.dev/projects/11142)
29
+ [![SBOM](https://img.shields.io/badge/SBOM-CycloneDX-brightgreen)](docs/security/assurance.md)
30
+ [![SBOM Status](https://img.shields.io/github/actions/workflow/status/TurboCoder13/py-lintro/sbom-on-main.yml?label=sbom&branch=main)](https://github.com/TurboCoder13/py-lintro/actions/workflows/sbom-on-main.yml?query=branch%3Amain)
31
+
32
+ ## 🚀 Quick Start
33
+
34
+ ```bash
35
+ pip install lintro # Install
36
+ lintro check . # Find issues
37
+ lintro format . # Fix issues
38
+ lintro check --output-format grid # Beautiful output
39
+ ```
40
+
41
+ <!-- TODO: Add screenshot of grid output -->
42
+
43
+ ## ✨ Why Lintro?
44
+
45
+ - **🎯 Unified Interface** - One command for all your linting and formatting tools
46
+ - **📊 Consistent Output** - Beautiful, standardized output formats across all tools
47
+ - **🔧 Auto-fixing** - Automatically fix issues where possible
48
+ - **🐳 Docker Ready** - Run in isolated containers for consistent environments
49
+ - **📈 Rich Reporting** - Multiple formats: grid, JSON, HTML, CSV, Markdown
50
+ - **⚡ Fast** - Optimized parallel execution
51
+
52
+ ## 🔌 Works With Your Existing Configs
53
+
54
+ Lintro respects your native tool configurations. If you have a `.prettierrc`,
55
+ `pyproject.toml [tool.ruff]`, or `.yamllint`, Lintro uses them automatically - no
56
+ migration required.
57
+
58
+ - **Native configs are detected** - Your existing `.prettierrc`, `.eslintrc`, etc. work
59
+ as-is
60
+ - **Enforce settings override consistently** - Set `line_length: 88` once, applied
61
+ everywhere
62
+ - **Fallback defaults when needed** - Tools without native configs use sensible defaults
63
+
64
+ See the [Configuration Guide](docs/configuration.md) for details on the 4-tier config
65
+ system.
66
+
67
+ ## 🛠️ Supported Tools
68
+
69
+ <!-- markdownlint-disable MD013 MD060 -->
70
+
71
+ | Tool | Language | Auto-fix |
72
+ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | -------- |
73
+ | [![Ruff](https://img.shields.io/badge/Ruff-lint%2Bformat-000?logo=ruff&logoColor=white)](https://github.com/astral-sh/ruff) | 🐍 Python | ✅ |
74
+ | [![Black](https://img.shields.io/badge/Black-format-000000?logo=python&logoColor=white)](https://github.com/psf/black) | 🐍 Python | ✅ |
75
+ | [![Mypy](https://img.shields.io/badge/Mypy-type%20checking-2d50a5?logo=python&logoColor=white)](https://mypy-lang.org/) | 🐍 Python | - |
76
+ | [![Bandit](https://img.shields.io/badge/Bandit-security-yellow?logo=python&logoColor=white)](https://github.com/PyCQA/bandit) | 🐍 Python | - |
77
+ | [![Prettier](https://img.shields.io/badge/Prettier-format-1a2b34?logo=prettier&logoColor=white)](https://prettier.io/) | 🟨 JS/TS · 🧾 JSON | ✅ |
78
+ | [![Biome](https://img.shields.io/badge/Biome-lint-60A5FA?logo=biome&logoColor=white)](https://biomejs.dev/) | 🟨 JS/TS · 🧾 JSON/CSS | ✅ |
79
+ | [![Yamllint](https://img.shields.io/badge/Yamllint-lint-cb171e?logo=yaml&logoColor=white)](https://github.com/adrienverge/yamllint) | 🧾 YAML | - |
80
+ | [![Hadolint](https://img.shields.io/badge/Hadolint-lint-2496ED?logo=docker&logoColor=white)](https://github.com/hadolint/hadolint) | 🐳 Dockerfile | - |
81
+ | [![Actionlint](https://img.shields.io/badge/Actionlint-lint-24292e?logo=github&logoColor=white)](https://github.com/rhysd/actionlint) | ⚙️ GitHub Actions | - |
82
+ | [![Markdownlint](https://img.shields.io/badge/Markdownlint--cli2-lint-000000?logo=markdown&logoColor=white)](https://github.com/DavidAnson/markdownlint-cli2) | 📝 Markdown | - |
83
+ | [![Clippy](https://img.shields.io/badge/Clippy-lint-000000?logo=rust&logoColor=white)](https://github.com/rust-lang/rust-clippy) | 🦀 Rust | ✅ |
84
+ | [![Darglint](https://img.shields.io/badge/Darglint-docstrings-3776AB?logo=python&logoColor=white)](https://github.com/terrencepreilly/darglint) | 🐍 Python | - |
85
+
86
+ <!-- markdownlint-enable MD013 MD060 -->
87
+
88
+ ## 📋 Requirements
89
+
90
+ ### Python Version
91
+
92
+ **Python 3.11+** is required. Lintro uses modern Python features not available in older
93
+ versions.
94
+
95
+ ### Bundled Tools
96
+
97
+ These Python tools are automatically installed with Lintro:
98
+
99
+ - **Ruff** - Fast Python linter and formatter
100
+ - **Black** - Python code formatter
101
+ - **Bandit** - Python security linter
102
+ - **Mypy** - Python static type checker
103
+ - **Yamllint** - YAML linter
104
+ - **Darglint** - Python docstring linter
105
+
106
+ ### Optional External Tools
107
+
108
+ For full functionality, install these additional tools:
109
+
110
+ - **Prettier** - `npm install -g prettier`
111
+ - **Markdownlint-cli2** - `npm install -g markdownlint-cli2`
112
+ - **Hadolint** - [GitHub Releases](https://github.com/hadolint/hadolint/releases)
113
+ - **Actionlint** - [GitHub Releases](https://github.com/rhysd/actionlint/releases)
114
+
115
+ Check all tool versions with: `lintro list-tools`
116
+
117
+ ## 📦 Installation
118
+
119
+ ```bash
120
+ # PyPI (recommended)
121
+ pip install lintro
122
+
123
+ # Homebrew (macOS binary)
124
+ brew tap TurboCoder13/tap && brew install lintro-bin
125
+
126
+ # Docker (includes all tools)
127
+ docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check
128
+ ```
129
+
130
+ See [Getting Started](docs/getting-started.md) for detailed installation options.
131
+
132
+ ## 💻 Usage
133
+
134
+ ```bash
135
+ # Check all files
136
+ lintro check .
137
+
138
+ # Auto-fix issues
139
+ lintro format .
140
+
141
+ # Grid output with grouping
142
+ lintro check --output-format grid --group-by file
143
+
144
+ # Run specific tools
145
+ lintro check --tools ruff,prettier,mypy
146
+
147
+ # Exclude directories
148
+ lintro check --exclude "node_modules,dist,venv"
149
+
150
+ # List available tools
151
+ lintro list-tools
152
+ ```
153
+
154
+ ### 🐳 Docker
155
+
156
+ ```bash
157
+ # Run from GHCR
158
+ docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check
159
+
160
+ # With formatting
161
+ docker run --rm -v $(pwd):/code ghcr.io/turbocoder13/py-lintro:latest check --output-format grid
162
+ ```
163
+
164
+ ## 📚 Documentation
165
+
166
+ | Guide | Description |
167
+ | ------------------------------------------------ | --------------------------------------- |
168
+ | [Getting Started](docs/getting-started.md) | Installation, first steps, requirements |
169
+ | [Configuration](docs/configuration.md) | Tool configuration, options, presets |
170
+ | [Docker Usage](docs/docker.md) | Containerized development |
171
+ | [GitHub Integration](docs/github-integration.md) | CI/CD setup, workflows |
172
+ | [Contributing](docs/contributing.md) | Development guide, adding tools |
173
+ | [Troubleshooting](docs/troubleshooting.md) | Common issues and solutions |
174
+
175
+ **Advanced:** [Tool Analysis](docs/tool-analysis/) | [Architecture](docs/architecture/)
176
+ | [Security](docs/security/)
177
+
178
+ ## 🔨 Development
179
+
180
+ ```bash
181
+ # Clone and install
182
+ git clone https://github.com/TurboCoder13/py-lintro.git
183
+ cd py-lintro
184
+ uv sync --dev
185
+
186
+ # Run tests
187
+ ./scripts/local/run-tests.sh
188
+
189
+ # Run lintro on itself
190
+ ./scripts/local/local-lintro.sh check --output-format grid
191
+ ```
192
+
193
+ ## 🤝 Community
194
+
195
+ - 🐛
196
+ [Bug Reports](https://github.com/TurboCoder13/py-lintro/issues/new?template=bug_report.md)
197
+ - 💡
198
+ [Feature Requests](https://github.com/TurboCoder13/py-lintro/issues/new?template=feature_request.md)
199
+ - ❓
200
+ [Questions](https://github.com/TurboCoder13/py-lintro/issues/new?template=question.md)
201
+ - 📖 [Contributing Guide](docs/contributing.md)
202
+
203
+ ## 📄 License
204
+
205
+ MIT License - see [LICENSE](LICENSE) for details.
@@ -9,13 +9,13 @@
9
9
  </clipPath>
10
10
  <g clip-path="url(#a)">
11
11
  <path fill="#555" d="M0 0h63v20H0z"/>
12
- <path fill="#e05d44" d="M63 0h36v20H63z"/>
12
+ <path fill="#4c1" d="M63 0h36v20H63z"/>
13
13
  <path fill="url(#b)" d="M0 0h99v20H0z"/>
14
14
  </g>
15
15
  <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110">
16
16
  <text x="325" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="530">coverage</text>
17
17
  <text x="325" y="140" transform="scale(.1)" textLength="530">coverage</text>
18
- <text x="800" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="260">84.2%</text>
19
- <text x="800" y="140" transform="scale(.1)" textLength="260">84.2%</text>
18
+ <text x="800" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="260">86.7%</text>
19
+ <text x="800" y="140" transform="scale(.1)" textLength="260">86.7%</text>
20
20
  </g>
21
21
  </svg>