simplint 0.1.0__tar.gz → 0.3.0__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 (724) hide show
  1. simplint-0.3.0/CHANGELOG.md +600 -0
  2. simplint-0.3.0/CONTRIBUTING.md +153 -0
  3. simplint-0.3.0/Cargo.lock +3944 -0
  4. simplint-0.3.0/Cargo.toml +84 -0
  5. simplint-0.3.0/PKG-INFO +69 -0
  6. simplint-0.3.0/README.md +38 -0
  7. simplint-0.3.0/build.rs +38 -0
  8. simplint-0.3.0/docs/_static/apple-touch-icon.png +0 -0
  9. simplint-0.3.0/docs/_static/favicon.ico +0 -0
  10. simplint-0.3.0/docs/_static/favicon.svg +9 -0
  11. simplint-0.3.0/docs/_static/logo-192.png +0 -0
  12. simplint-0.3.0/docs/_static/logo-512.png +0 -0
  13. simplint-0.3.0/docs/_static/logo.png +0 -0
  14. simplint-0.3.0/docs/_static/rules.js +54 -0
  15. simplint-0.3.0/docs/_static/simplint.css +634 -0
  16. simplint-0.3.0/docs/_static/site.webmanifest +1 -0
  17. simplint-0.3.0/docs/_static/wordmark-dark.png +0 -0
  18. simplint-0.3.0/docs/_static/wordmark-light.png +0 -0
  19. simplint-0.3.0/docs/_templates/base.html +6 -0
  20. simplint-0.3.0/docs/cli.rst +11 -0
  21. simplint-0.3.0/docs/conf.py +298 -0
  22. simplint-0.3.0/docs/configuration.rst +321 -0
  23. simplint-0.3.0/docs/index.rst +195 -0
  24. simplint-0.3.0/docs/rules.rst +60 -0
  25. simplint-0.3.0/docs/simplint_cli.py +78 -0
  26. {simplint-0.1.0 → simplint-0.3.0}/ignore-words.txt +1 -0
  27. {simplint-0.1.0 → simplint-0.3.0}/pylock.toml +213 -96
  28. {simplint-0.1.0 → simplint-0.3.0}/pyproject.toml +17 -22
  29. simplint-0.3.0/src/cli/args.rs +617 -0
  30. simplint-0.3.0/src/cli/check.rs +640 -0
  31. simplint-0.3.0/src/cli/conflicts.rs +288 -0
  32. simplint-0.3.0/src/cli/diagnostics.rs +209 -0
  33. simplint-0.3.0/src/cli/mod.rs +7 -0
  34. simplint-0.3.0/src/cli/printer.rs +373 -0
  35. simplint-0.3.0/src/cli/subcommands.rs +290 -0
  36. simplint-0.3.0/src/cli/watch.rs +70 -0
  37. simplint-0.3.0/src/fix/apply.rs +128 -0
  38. simplint-0.3.0/src/fix/cleanup.rs +91 -0
  39. simplint-0.3.0/src/fix/errors.rs +104 -0
  40. simplint-0.3.0/src/fix/mod.rs +304 -0
  41. simplint-0.3.0/src/layout.rs +510 -0
  42. simplint-0.3.0/src/lint/checker.rs +270 -0
  43. simplint-0.3.0/src/lint/mod.rs +96 -0
  44. simplint-0.3.0/src/lint/noqa.rs +272 -0
  45. simplint-0.3.0/src/lint/registry.rs +255 -0
  46. simplint-0.3.0/src/lint/ruff.rs +238 -0
  47. simplint-0.3.0/src/lint/walker.rs +144 -0
  48. simplint-0.3.0/src/main.rs +125 -0
  49. simplint-0.3.0/src/project/cache.rs +373 -0
  50. simplint-0.3.0/src/project/constructors.rs +450 -0
  51. simplint-0.3.0/src/project/facts.rs +415 -0
  52. simplint-0.3.0/src/project/index.rs +763 -0
  53. simplint-0.3.0/src/project/mod.rs +8 -0
  54. simplint-0.3.0/src/project/receivers.rs +531 -0
  55. simplint-0.1.0/src/rules/docs/SMP005.md → simplint-0.3.0/src/rules/comments/long_paragraph.md +5 -5
  56. simplint-0.3.0/src/rules/comments/long_paragraph.rs +54 -0
  57. simplint-0.3.0/src/rules/comments/mod.rs +7 -0
  58. simplint-0.3.0/src/rules/comments/section_comment.md +45 -0
  59. simplint-0.3.0/src/rules/comments/section_comment.rs +98 -0
  60. simplint-0.3.0/src/rules/comments/suppression_without_reason.md +50 -0
  61. simplint-0.3.0/src/rules/comments/suppression_without_reason.rs +104 -0
  62. simplint-0.3.0/src/rules/dataclasses/dataclass_kw_only.md +73 -0
  63. simplint-0.3.0/src/rules/dataclasses/dataclass_kw_only.rs +177 -0
  64. simplint-0.3.0/src/rules/dataclasses/dataclass_options.md +78 -0
  65. simplint-0.3.0/src/rules/dataclasses/dataclass_options.rs +195 -0
  66. simplint-0.3.0/src/rules/dataclasses/mod.rs +99 -0
  67. simplint-0.3.0/src/rules/docstrings/function_docstring.md +135 -0
  68. simplint-0.3.0/src/rules/docstrings/function_docstring.rs +300 -0
  69. simplint-0.3.0/src/rules/docstrings/mod.rs +242 -0
  70. simplint-0.3.0/src/rules/docstrings/rest/attributes.rs +135 -0
  71. simplint-0.3.0/src/rules/docstrings/rest/edits.rs +149 -0
  72. simplint-0.3.0/src/rules/docstrings/rest/mod.rs +11 -0
  73. simplint-0.3.0/src/rules/docstrings/rest/parse.rs +246 -0
  74. simplint-0.3.0/src/rules/docstrings/rest/targets.rs +195 -0
  75. simplint-0.3.0/src/rules/docstrings/rest_attribute_kind.md +45 -0
  76. simplint-0.3.0/src/rules/docstrings/rest_attribute_kind.rs +39 -0
  77. simplint-0.3.0/src/rules/docstrings/rest_duplicate_param.md +49 -0
  78. simplint-0.3.0/src/rules/docstrings/rest_duplicate_param.rs +34 -0
  79. simplint-0.3.0/src/rules/docstrings/rest_field_syntax.md +58 -0
  80. simplint-0.3.0/src/rules/docstrings/rest_field_syntax.rs +98 -0
  81. simplint-0.3.0/src/rules/docstrings/rest_inline_markup.md +43 -0
  82. simplint-0.3.0/src/rules/docstrings/rest_inline_markup.rs +169 -0
  83. simplint-0.3.0/src/rules/docstrings/rest_missing_attribute.md +63 -0
  84. simplint-0.3.0/src/rules/docstrings/rest_missing_attribute.rs +41 -0
  85. simplint-0.3.0/src/rules/docstrings/rest_missing_param.md +48 -0
  86. simplint-0.3.0/src/rules/docstrings/rest_missing_param.rs +36 -0
  87. simplint-0.3.0/src/rules/docstrings/rest_missing_raises.md +67 -0
  88. simplint-0.3.0/src/rules/docstrings/rest_missing_raises.rs +133 -0
  89. simplint-0.3.0/src/rules/docstrings/rest_param_order.md +39 -0
  90. simplint-0.3.0/src/rules/docstrings/rest_param_order.rs +32 -0
  91. simplint-0.3.0/src/rules/docstrings/rest_private_field.md +45 -0
  92. simplint-0.3.0/src/rules/docstrings/rest_private_field.rs +26 -0
  93. simplint-0.3.0/src/rules/docstrings/rest_restating_field.md +41 -0
  94. simplint-0.3.0/src/rules/docstrings/rest_restating_field.rs +54 -0
  95. simplint-0.3.0/src/rules/docstrings/rest_returns.md +73 -0
  96. simplint-0.3.0/src/rules/docstrings/rest_returns.rs +153 -0
  97. simplint-0.3.0/src/rules/docstrings/rest_type_field.md +48 -0
  98. simplint-0.3.0/src/rules/docstrings/rest_type_field.rs +53 -0
  99. simplint-0.3.0/src/rules/docstrings/rest_unknown_attribute.md +47 -0
  100. simplint-0.3.0/src/rules/docstrings/rest_unknown_attribute.rs +36 -0
  101. simplint-0.3.0/src/rules/docstrings/rest_unknown_param.md +41 -0
  102. simplint-0.3.0/src/rules/docstrings/rest_unknown_param.rs +28 -0
  103. simplint-0.3.0/src/rules/docstrings/test_module_docstring.md +52 -0
  104. simplint-0.3.0/src/rules/docstrings/test_module_docstring.rs +25 -0
  105. simplint-0.3.0/src/rules/docstrings/undocumented_public_api.md +83 -0
  106. simplint-0.3.0/src/rules/docstrings/undocumented_public_api.rs +41 -0
  107. simplint-0.3.0/src/rules/exports/all_format.md +49 -0
  108. simplint-0.3.0/src/rules/exports/all_format.rs +91 -0
  109. simplint-0.3.0/src/rules/exports/all_not_last.md +52 -0
  110. simplint-0.3.0/src/rules/exports/all_not_last.rs +52 -0
  111. simplint-0.3.0/src/rules/exports/missing_from_all.md +109 -0
  112. simplint-0.3.0/src/rules/exports/missing_from_all.rs +133 -0
  113. simplint-0.3.0/src/rules/exports/mod.rs +18 -0
  114. simplint-0.3.0/src/rules/exports/unused_export.md +62 -0
  115. simplint-0.3.0/src/rules/exports/unused_export.rs +152 -0
  116. simplint-0.3.0/src/rules/imports/absolute_sibling_import.md +60 -0
  117. simplint-0.3.0/src/rules/imports/absolute_sibling_import.rs +110 -0
  118. simplint-0.3.0/src/rules/imports/dependency_import_guard.md +61 -0
  119. simplint-0.3.0/src/rules/imports/dependency_import_guard.rs +127 -0
  120. simplint-0.3.0/src/rules/imports/future_annotations.md +54 -0
  121. simplint-0.3.0/src/rules/imports/future_annotations.rs +44 -0
  122. simplint-0.3.0/src/rules/imports/init_module_content.md +51 -0
  123. simplint-0.3.0/src/rules/imports/init_module_content.rs +44 -0
  124. simplint-0.3.0/src/rules/imports/mod.rs +9 -0
  125. simplint-0.3.0/src/rules/mod.rs +191 -0
  126. simplint-0.3.0/src/rules/naming/mod.rs +95 -0
  127. simplint-0.3.0/src/rules/naming/module_variable_case.md +122 -0
  128. simplint-0.3.0/src/rules/naming/module_variable_case.rs +258 -0
  129. simplint-0.3.0/src/rules/naming/single_letter_name.md +48 -0
  130. simplint-0.3.0/src/rules/naming/single_letter_name.rs +93 -0
  131. simplint-0.3.0/src/rules/naming/unexported_public_name.md +74 -0
  132. simplint-0.3.0/src/rules/naming/unexported_public_name.rs +50 -0
  133. simplint-0.3.0/src/rules/strings/kinds.rs +1226 -0
  134. simplint-0.3.0/src/rules/strings/mod.rs +2 -0
  135. simplint-0.3.0/src/rules/strings/string_concatenation.md +72 -0
  136. simplint-0.3.0/src/rules/strings/string_concatenation.rs +201 -0
  137. simplint-0.3.0/src/rules/structure/definition_before_use.md +105 -0
  138. simplint-0.3.0/src/rules/structure/definition_before_use.rs +365 -0
  139. simplint-0.3.0/src/rules/structure/forwarding_function.md +47 -0
  140. simplint-0.3.0/src/rules/structure/forwarding_function.rs +82 -0
  141. simplint-0.3.0/src/rules/structure/mod.rs +16 -0
  142. simplint-0.3.0/src/rules/structure/single_user_constant.md +89 -0
  143. simplint-0.3.0/src/rules/structure/single_user_constant.rs +335 -0
  144. simplint-0.3.0/src/rules/structure/walrus_candidate.md +80 -0
  145. simplint-0.3.0/src/rules/structure/walrus_candidate.rs +242 -0
  146. simplint-0.1.0/src/rules/docs/SMP202.md → simplint-0.3.0/src/rules/testing/conditional_in_test.md +5 -4
  147. simplint-0.3.0/src/rules/testing/conditional_in_test.rs +53 -0
  148. simplint-0.3.0/src/rules/testing/constant_assert.md +39 -0
  149. simplint-0.3.0/src/rules/testing/constant_assert.rs +55 -0
  150. simplint-0.3.0/src/rules/testing/mock_attribute_assignment.md +45 -0
  151. simplint-0.3.0/src/rules/testing/mock_attribute_assignment.rs +120 -0
  152. simplint-0.3.0/src/rules/testing/mock_without_spec.md +47 -0
  153. simplint-0.3.0/src/rules/testing/mock_without_spec.rs +68 -0
  154. simplint-0.3.0/src/rules/testing/mod.rs +21 -0
  155. simplint-0.3.0/src/rules/testing/parametrize_without_id.md +46 -0
  156. simplint-0.3.0/src/rules/testing/parametrize_without_id.rs +43 -0
  157. simplint-0.3.0/src/rules/testing/test_class.md +46 -0
  158. simplint-0.3.0/src/rules/testing/test_class.rs +132 -0
  159. simplint-0.3.0/src/rules/typing/callable_ellipsis.md +37 -0
  160. simplint-0.3.0/src/rules/typing/callable_ellipsis.rs +24 -0
  161. simplint-0.3.0/src/rules/typing/missing_final.md +84 -0
  162. simplint-0.3.0/src/rules/typing/missing_final.rs +220 -0
  163. simplint-0.3.0/src/rules/typing/mod.rs +6 -0
  164. simplint-0.3.0/src/rules/typing/object_annotation.md +40 -0
  165. simplint-0.3.0/src/rules/typing/object_annotation.rs +45 -0
  166. simplint-0.3.0/src/rules/typing/vars_call.md +37 -0
  167. simplint-0.3.0/src/rules/typing/vars_call.rs +22 -0
  168. simplint-0.3.0/src/semantic/builder.rs +406 -0
  169. simplint-0.3.0/src/semantic/mod.rs +294 -0
  170. simplint-0.3.0/src/settings/api.rs +194 -0
  171. simplint-0.3.0/src/settings/file.rs +67 -0
  172. simplint-0.3.0/src/settings/metadata.rs +114 -0
  173. simplint-0.3.0/src/settings/mod.rs +381 -0
  174. simplint-0.3.0/src/settings/options.rs +487 -0
  175. simplint-0.3.0/src/syntax.rs +250 -0
  176. {simplint-0.1.0 → simplint-0.3.0}/tasks/assemble_release.py +16 -0
  177. {simplint-0.1.0 → simplint-0.3.0}/tasks/cargo_version.py +3 -0
  178. {simplint-0.1.0 → simplint-0.3.0}/tasks/check_sdist.py +3 -0
  179. simplint-0.3.0/tasks/ecosystem.py +301 -0
  180. simplint-0.3.0/tasks/generate_changelog.py +86 -0
  181. simplint-0.3.0/tasks/pgo.py +349 -0
  182. simplint-0.3.0/tasks/pgo.toml +8 -0
  183. simplint-0.3.0/tasks/pgo_corpus.toml +7 -0
  184. {simplint-0.1.0 → simplint-0.3.0}/tasks/python_versions.py +35 -16
  185. {simplint-0.1.0 → simplint-0.3.0}/tasks/update_cargo_edit.py +26 -0
  186. simplint-0.3.0/tests/cache.rs +321 -0
  187. simplint-0.3.0/tests/check.rs +350 -0
  188. simplint-0.3.0/tests/common/mod.rs +281 -0
  189. simplint-0.3.0/tests/configuration.rs +540 -0
  190. simplint-0.3.0/tests/conflicts.rs +145 -0
  191. simplint-0.3.0/tests/fix.rs +486 -0
  192. simplint-0.1.0/resources/test/fixtures/SMP005.py → simplint-0.3.0/tests/fixtures/comments/long_paragraph/long_paragraph.py +10 -0
  193. simplint-0.3.0/tests/fixtures/comments/long_paragraph/long_paragraph.snap +5 -0
  194. simplint-0.3.0/tests/fixtures/comments/section_comment/section_comment.py +33 -0
  195. simplint-0.3.0/tests/fixtures/comments/section_comment/section_comment.snap +43 -0
  196. simplint-0.3.0/tests/fixtures/comments/suppression_without_reason/suppression_without_reason.py +27 -0
  197. simplint-0.3.0/tests/fixtures/comments/suppression_without_reason/suppression_without_reason.snap +22 -0
  198. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP114_SMP114.py.snap → simplint-0.3.0/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only.snap +5 -5
  199. simplint-0.3.0/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only_calls.py +122 -0
  200. simplint-0.3.0/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only_calls.snap +141 -0
  201. simplint-0.3.0/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only_py39.snap +5 -0
  202. simplint-0.1.0/resources/test/fixtures/SMP111.py → simplint-0.3.0/tests/fixtures/dataclasses/dataclass_options/dataclass_options.py +2 -2
  203. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP111_SMP111.py.snap → simplint-0.3.0/tests/fixtures/dataclasses/dataclass_options/dataclass_options.snap +23 -23
  204. simplint-0.3.0/tests/fixtures/dataclasses/dataclass_options/dataclass_options_receivers.py +127 -0
  205. simplint-0.3.0/tests/fixtures/dataclasses/dataclass_options/dataclass_options_receivers.snap +141 -0
  206. simplint-0.3.0/tests/fixtures/dataclasses/dataclass_options/dataclass_options_runtime.py +86 -0
  207. simplint-0.3.0/tests/fixtures/dataclasses/dataclass_options/dataclass_options_runtime.snap +100 -0
  208. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/_internal/function_docstring.py +42 -0
  209. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring.snap +54 -0
  210. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_contract.py +123 -0
  211. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_contract.snap +148 -0
  212. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_dynamic.py +13 -0
  213. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_dynamic.snap +19 -0
  214. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_exported.py +19 -0
  215. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_exported.snap +26 -0
  216. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_facade__core.snap +25 -0
  217. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_facade__helpers.snap +9 -0
  218. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_runtime.py +78 -0
  219. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_runtime.snap +86 -0
  220. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_switched.snap +5 -0
  221. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_undocumented_public_api.snap +5 -0
  222. simplint-0.3.0/tests/fixtures/docstrings/function_docstring/function_docstring_undocumented_public_api_imported.snap +5 -0
  223. simplint-0.3.0/tests/fixtures/docstrings/rest_attribute_kind/rest_attribute_kind.py +57 -0
  224. simplint-0.3.0/tests/fixtures/docstrings/rest_attribute_kind/rest_attribute_kind.snap +64 -0
  225. simplint-0.3.0/tests/fixtures/docstrings/rest_duplicate_param/rest_duplicate_param.py +35 -0
  226. simplint-0.3.0/tests/fixtures/docstrings/rest_duplicate_param/rest_duplicate_param.snap +40 -0
  227. simplint-0.3.0/tests/fixtures/docstrings/rest_field_syntax/rest_field_syntax.py +95 -0
  228. simplint-0.3.0/tests/fixtures/docstrings/rest_field_syntax/rest_field_syntax.snap +113 -0
  229. simplint-0.3.0/tests/fixtures/docstrings/rest_inline_markup/rest_inline_markup.py +39 -0
  230. simplint-0.3.0/tests/fixtures/docstrings/rest_inline_markup/rest_inline_markup.snap +53 -0
  231. simplint-0.3.0/tests/fixtures/docstrings/rest_missing_attribute/rest_missing_attribute.py +95 -0
  232. simplint-0.3.0/tests/fixtures/docstrings/rest_missing_attribute/rest_missing_attribute.snap +118 -0
  233. simplint-0.3.0/tests/fixtures/docstrings/rest_missing_param/rest_missing_param.py +120 -0
  234. simplint-0.3.0/tests/fixtures/docstrings/rest_missing_param/rest_missing_param.snap +162 -0
  235. simplint-0.3.0/tests/fixtures/docstrings/rest_missing_raises/rest_missing_raises.py +148 -0
  236. simplint-0.3.0/tests/fixtures/docstrings/rest_missing_raises/rest_missing_raises.snap +165 -0
  237. simplint-0.3.0/tests/fixtures/docstrings/rest_param_order/rest_param_order.py +16 -0
  238. simplint-0.3.0/tests/fixtures/docstrings/rest_param_order/rest_param_order.snap +5 -0
  239. simplint-0.3.0/tests/fixtures/docstrings/rest_private_field/rest_private_field.py +47 -0
  240. simplint-0.3.0/tests/fixtures/docstrings/rest_private_field/rest_private_field.snap +52 -0
  241. simplint-0.3.0/tests/fixtures/docstrings/rest_restating_field/rest_restating_field.py +19 -0
  242. simplint-0.3.0/tests/fixtures/docstrings/rest_restating_field/rest_restating_field.snap +7 -0
  243. simplint-0.3.0/tests/fixtures/docstrings/rest_returns/rest_returns.py +159 -0
  244. simplint-0.3.0/tests/fixtures/docstrings/rest_returns/rest_returns.snap +172 -0
  245. simplint-0.3.0/tests/fixtures/docstrings/rest_type_field/rest_type_field.py +56 -0
  246. simplint-0.3.0/tests/fixtures/docstrings/rest_type_field/rest_type_field.snap +67 -0
  247. simplint-0.3.0/tests/fixtures/docstrings/rest_unknown_attribute/rest_unknown_attribute.py +96 -0
  248. simplint-0.3.0/tests/fixtures/docstrings/rest_unknown_attribute/rest_unknown_attribute.snap +99 -0
  249. simplint-0.3.0/tests/fixtures/docstrings/rest_unknown_param/rest_unknown_param.py +134 -0
  250. simplint-0.3.0/tests/fixtures/docstrings/rest_unknown_param/rest_unknown_param.snap +141 -0
  251. simplint-0.3.0/tests/fixtures/docstrings/test_module_docstring/test_module_docstring.snap +11 -0
  252. simplint-0.3.0/tests/fixtures/docstrings/test_module_docstring/test_module_docstring_inline.snap +9 -0
  253. simplint-0.3.0/tests/fixtures/docstrings/test_module_docstring/test_module_docstring_multiline_module_docstring.snap +5 -0
  254. simplint-0.3.0/tests/fixtures/docstrings/test_module_docstring/tests/test_module_docstring_inline.py +3 -0
  255. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/facade/__init__.py +11 -0
  256. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/facade/_core.py +19 -0
  257. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/facade/_helpers.py +2 -0
  258. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/loose/__init__.py +6 -0
  259. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/loose/_deep.py +1 -0
  260. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/loose/_extra.py +4 -0
  261. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/loose/_impl.py +4 -0
  262. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/loose/_stars.py +10 -0
  263. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/switched.py +59 -0
  264. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api.py +77 -0
  265. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api.snap +10 -0
  266. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_facade__core.snap +9 -0
  267. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_facade__helpers.snap +5 -0
  268. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_function_docstring_dynamic.snap +5 -0
  269. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_imported.py +12 -0
  270. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_imported.snap +5 -0
  271. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_loose__deep.snap +5 -0
  272. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_loose__extra.snap +5 -0
  273. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_loose__impl.snap +5 -0
  274. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_loose__stars.snap +5 -0
  275. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_switched.snap +7 -0
  276. simplint-0.3.0/tests/fixtures/docstrings/undocumented_public_api/undocumented_public_api_tests_test_module_docstring.snap +5 -0
  277. simplint-0.3.0/tests/fixtures/exports/all_format/all_format.py +19 -0
  278. simplint-0.3.0/tests/fixtures/exports/all_format/all_format.snap +34 -0
  279. simplint-0.3.0/tests/fixtures/exports/all_format/all_format_bare.py +5 -0
  280. simplint-0.3.0/tests/fixtures/exports/all_format/all_format_bare.snap +14 -0
  281. simplint-0.3.0/tests/fixtures/exports/all_format/all_format_tuple.py +11 -0
  282. simplint-0.3.0/tests/fixtures/exports/all_format/all_format_tuple.snap +25 -0
  283. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104.py.snap → simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last.snap +3 -3
  284. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_ann.py.snap → simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_ann.snap +2 -2
  285. simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_eof.snap +10 -0
  286. simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_fenced.py +13 -0
  287. simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_fenced.snap +19 -0
  288. simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_multiline_module_docstring_ok.snap +5 -0
  289. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_negated.py.snap → simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_negated.snap +3 -3
  290. simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_nested.py +5 -0
  291. simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_nested.snap +5 -0
  292. simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_nonl.snap +10 -0
  293. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_reversed.py.snap → simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_reversed.snap +3 -3
  294. simplint-0.3.0/tests/fixtures/exports/missing_from_all/consumer/use.py +35 -0
  295. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all.snap +23 -0
  296. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_aug.snap +14 -0
  297. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_bare.py +13 -0
  298. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_bare.snap +23 -0
  299. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_call.snap +4 -0
  300. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_empty.snap +13 -0
  301. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_guard.py +6 -0
  302. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_guard.snap +17 -0
  303. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_hanging.py +18 -0
  304. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_hanging.snap +28 -0
  305. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_hanging_comment.py +14 -0
  306. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_hanging_comment.snap +21 -0
  307. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_imported.py +10 -0
  308. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_imported.snap +19 -0
  309. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_multiline.py.snap → simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_multiline.snap +3 -3
  310. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_nested.py +10 -0
  311. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_nested.snap +5 -0
  312. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_noall.snap +13 -0
  313. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_package___init__.snap +5 -0
  314. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_reexport.py +1 -0
  315. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_reexport.snap +5 -0
  316. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_scripts.snap +13 -0
  317. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_sorted.py +19 -0
  318. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_sorted.snap +30 -0
  319. simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_tests_test_module_docstring.snap +5 -0
  320. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/__init__.py +1 -0
  321. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/sub/__init__.py +5 -0
  322. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/sub/inner.py +1 -0
  323. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export.py +14 -0
  324. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_all.py +4 -0
  325. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_call.py +8 -0
  326. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_comment.py +9 -0
  327. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_comment_all.py +7 -0
  328. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_double.py +5 -0
  329. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_extend.py +8 -0
  330. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_inline.py +7 -0
  331. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_lazy.py +5 -0
  332. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_noted.py +10 -0
  333. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_packed.py +12 -0
  334. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_star.py +4 -0
  335. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_tuple.py +7 -0
  336. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_tuple_end.py +7 -0
  337. simplint-0.3.0/tests/fixtures/exports/unused_export/exporting/unused_export_user.py +12 -0
  338. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export.snap +19 -0
  339. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_all.snap +10 -0
  340. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_call.snap +5 -0
  341. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_comment.snap +15 -0
  342. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_comment_all.snap +5 -0
  343. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_double.snap +6 -0
  344. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_exporting_sub___init__.snap +5 -0
  345. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_extend.snap +5 -0
  346. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_inline.snap +13 -0
  347. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_lazy.snap +5 -0
  348. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_noted.snap +5 -0
  349. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_packed.snap +19 -0
  350. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_root.py +4 -0
  351. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_root.snap +5 -0
  352. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_star.snap +5 -0
  353. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_tests_test_module_docstring.snap +5 -0
  354. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_tuple.snap +13 -0
  355. simplint-0.3.0/tests/fixtures/exports/unused_export/unused_export_tuple_end.snap +13 -0
  356. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_multiline_module_docstring_ok.snap +5 -0
  357. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_package___init__.py.snap → simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package___init__.snap +3 -3
  358. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_channel_exec.snap +5 -0
  359. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_package_sub_module.py.snap → simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_module.snap +4 -4
  360. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_remote_worker.snap +56 -0
  361. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_reversed_guard.snap +5 -0
  362. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/absolute_sibling_import_package_sub_script.snap +5 -0
  363. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/package/sub/channel_exec.py +8 -0
  364. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/package/sub/remote_worker.py +48 -0
  365. simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import/package/sub/reversed_guard.py +4 -0
  366. simplint-0.1.0/resources/test/fixtures/SMP040.py → simplint-0.3.0/tests/fixtures/imports/dependency_import_guard/dependency_import_guard.py +24 -0
  367. simplint-0.3.0/tests/fixtures/imports/dependency_import_guard/dependency_import_guard.snap +65 -0
  368. simplint-0.3.0/tests/fixtures/imports/dependency_import_guard/dependency_import_guard_py310.snap +68 -0
  369. simplint-0.3.0/tests/fixtures/imports/future_annotations/future_annotations.snap +11 -0
  370. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108_checking.py.snap → simplint-0.3.0/tests/fixtures/imports/future_annotations/future_annotations_checking.snap +3 -3
  371. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108_joined.py.snap → simplint-0.3.0/tests/fixtures/imports/future_annotations/future_annotations_joined.snap +2 -2
  372. simplint-0.3.0/tests/fixtures/imports/future_annotations/future_annotations_py310.snap +5 -0
  373. simplint-0.3.0/tests/fixtures/imports/init_module_content/_hidden/__init__.py +5 -0
  374. simplint-0.3.0/tests/fixtures/imports/init_module_content/_hidden/parts.py +1 -0
  375. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP109_package___init__.py.snap → simplint-0.3.0/tests/fixtures/imports/init_module_content/init_module_content__hidden___init__.snap +2 -2
  376. simplint-0.3.0/tests/fixtures/imports/init_module_content/init_module_content_facade___init__.snap +6 -0
  377. simplint-0.3.0/tests/fixtures/imports/init_module_content/init_module_content_loose___init__.snap +5 -0
  378. simplint-0.3.0/tests/fixtures/imports/init_module_content/init_module_content_multiline_module_docstring_ok.snap +5 -0
  379. simplint-0.3.0/tests/fixtures/imports/init_module_content/init_module_content_package___init__.snap +5 -0
  380. simplint-0.3.0/tests/fixtures/imports/init_module_content/init_module_content_package_sub___init__.snap +5 -0
  381. simplint-0.1.0/resources/test/fixtures/SMP102.py → simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case.py +4 -0
  382. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102.py.snap → simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case.snap +13 -7
  383. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_alembic.py +17 -0
  384. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_alembic.snap +23 -0
  385. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_ann.py.snap → simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_ann.snap +3 -3
  386. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_call.snap +4 -0
  387. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_conflict.py.snap → simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_conflict.snap +3 -3
  388. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_dbapi.py +4 -0
  389. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_dbapi.snap +10 -0
  390. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_frameworks.py +9 -0
  391. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_frameworks.snap +15 -0
  392. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_gunicorn.py +6 -0
  393. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_gunicorn.snap +12 -0
  394. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_kinds.py +21 -0
  395. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_kinds.snap +27 -0
  396. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_lookalikes.py +13 -0
  397. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_lookalikes.snap +29 -0
  398. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_noall.py.snap → simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_noall.snap +4 -4
  399. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_ply.py +19 -0
  400. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_ply.snap +26 -0
  401. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_ply_table.py +3 -0
  402. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_ply_table.snap +5 -0
  403. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_rename.py.snap → simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_rename.snap +3 -3
  404. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_scopes.snap +5 -0
  405. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_strings.py +6 -0
  406. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_strings.snap +15 -0
  407. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_typer.py +4 -0
  408. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_typer.snap +10 -0
  409. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_version.py +7 -0
  410. simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_version.snap +13 -0
  411. simplint-0.1.0/resources/test/fixtures/SMP010.py → simplint-0.3.0/tests/fixtures/naming/single_letter_name/single_letter_name.py +10 -0
  412. simplint-0.3.0/tests/fixtures/naming/single_letter_name/single_letter_name.snap +18 -0
  413. simplint-0.1.0/resources/test/fixtures/SMP103.py → simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name.py +4 -0
  414. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP103.py.snap → simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name.snap +8 -4
  415. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP103_extend.py.snap → simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_extend.snap +3 -3
  416. simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_multiline_module_docstring_ok.snap +5 -0
  417. simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_ply.py +19 -0
  418. simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_ply.snap +25 -0
  419. simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_remove.snap +5 -0
  420. simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_tests_test_module_docstring.snap +5 -0
  421. simplint-0.1.0/resources/test/fixtures/SMP112.py → simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation.py +14 -0
  422. simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation.snap +60 -0
  423. simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation_kinds.py +473 -0
  424. simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation_kinds.snap +630 -0
  425. simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation_old.py +14 -0
  426. simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation_old_py310.snap +24 -0
  427. simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation_types.py +130 -0
  428. simplint-0.3.0/tests/fixtures/strings/string_concatenation/string_concatenation_types.snap +177 -0
  429. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020.py.snap → simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use.snap +9 -9
  430. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_annotations.py.snap → simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_annotations.snap +4 -4
  431. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_annotations_py310.snap +5 -0
  432. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_classbody.py +10 -0
  433. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_classbody.snap +5 -0
  434. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_decorated.py +43 -0
  435. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_decorated.snap +49 -0
  436. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_decorated_py310.snap +49 -0
  437. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_floating.snap +5 -0
  438. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_import_time.py +47 -0
  439. simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_import_time.snap +55 -0
  440. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_nonl.py.snap → simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_nonl.snap +3 -3
  441. simplint-0.1.0/resources/test/fixtures/SMP030.py → simplint-0.3.0/tests/fixtures/structure/forwarding_function/forwarding_function.py +25 -0
  442. simplint-0.3.0/tests/fixtures/structure/forwarding_function/forwarding_function.snap +7 -0
  443. simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant.py +214 -0
  444. simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant.snap +214 -0
  445. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050_all.py.snap → simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant_all.snap +7 -7
  446. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050_dynamic.py.snap → simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant_dynamic.snap +3 -3
  447. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050_spacing.py.snap → simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant_spacing.snap +4 -4
  448. simplint-0.1.0/resources/test/fixtures/SMP100.py → simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate.py +33 -0
  449. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate.snap +123 -0
  450. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_dynamic.py +5 -0
  451. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_dynamic.snap +5 -0
  452. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_gate.py +11 -0
  453. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_gate.snap +5 -0
  454. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_listed.py +5 -0
  455. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_listed.snap +5 -0
  456. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_py37.snap +5 -0
  457. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_width.py +86 -0
  458. simplint-0.3.0/tests/fixtures/structure/walrus_candidate/walrus_candidate_width.snap +91 -0
  459. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP202_tests_test_SMP202.py.snap → simplint-0.3.0/tests/fixtures/testing/conditional_in_test/conditional_in_test.snap +2 -2
  460. simplint-0.3.0/tests/fixtures/testing/conditional_in_test/conditional_in_test_multiline_module_docstring_ok.snap +5 -0
  461. simplint-0.1.0/resources/test/fixtures/SMP205.py → simplint-0.3.0/tests/fixtures/testing/constant_assert/constant_assert.py +27 -0
  462. simplint-0.3.0/tests/fixtures/testing/constant_assert/constant_assert.snap +73 -0
  463. simplint-0.3.0/tests/fixtures/testing/mock_attribute_assignment/mock_attribute_assignment.snap +69 -0
  464. simplint-0.1.0/resources/test/fixtures/tests/test_SMP203.py → simplint-0.3.0/tests/fixtures/testing/mock_attribute_assignment/tests/test_mock_attribute_assignment.py +24 -0
  465. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP204_tests_test_SMP204.py.snap → simplint-0.3.0/tests/fixtures/testing/mock_without_spec/mock_without_spec.snap +4 -2
  466. simplint-0.1.0/resources/test/fixtures/tests/test_SMP204.py → simplint-0.3.0/tests/fixtures/testing/mock_without_spec/tests/test_mock_without_spec.py +11 -0
  467. simplint-0.3.0/tests/fixtures/testing/parametrize_without_id/parametrize_without_id.snap +7 -0
  468. simplint-0.1.0/resources/test/fixtures/tests/test_SMP201.py → simplint-0.3.0/tests/fixtures/testing/parametrize_without_id/tests/test_parametrize_without_id.py +5 -0
  469. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP200_tests_test_SMP200.py.snap → simplint-0.3.0/tests/fixtures/testing/test_class/test_class.snap +28 -9
  470. simplint-0.3.0/tests/fixtures/testing/test_class/test_class_multiline_module_docstring_ok.snap +5 -0
  471. simplint-0.1.0/resources/test/fixtures/tests/test_SMP200.py → simplint-0.3.0/tests/fixtures/testing/test_class/tests/test_class.py +17 -0
  472. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP105_SMP105.py.snap → simplint-0.3.0/tests/fixtures/typing/callable_ellipsis/callable_ellipsis.snap +2 -2
  473. simplint-0.1.0/resources/test/fixtures/SMP101.py → simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final.py +12 -0
  474. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final.snap +46 -0
  475. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_alias.py +3 -0
  476. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_alias.snap +9 -0
  477. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_bare.py.snap → simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_bare.snap +4 -4
  478. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_branch.py +8 -0
  479. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_branch.snap +15 -0
  480. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_checking.snap +12 -0
  481. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_checking_py310.snap +12 -0
  482. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_future_py310.snap +14 -0
  483. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_gate.py +10 -0
  484. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_gate.snap +5 -0
  485. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_module.snap +13 -0
  486. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_new.snap +13 -0
  487. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_order.py +8 -0
  488. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_order.snap +15 -0
  489. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_py37.snap +5 -0
  490. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_sorted.py +3 -0
  491. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_sorted.snap +9 -0
  492. simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_typing.snap +9 -0
  493. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP106_SMP106.py.snap → simplint-0.3.0/tests/fixtures/typing/object_annotation/object_annotation.snap +2 -2
  494. simplint-0.3.0/tests/fixtures/typing/vars_call/vars_call.snap +5 -0
  495. simplint-0.3.0/tests/fixtures/typing/vars_call/vars_call_bound.snap +5 -0
  496. simplint-0.3.0/tests/layout.rs +246 -0
  497. simplint-0.3.0/tests/output.rs +195 -0
  498. simplint-0.3.0/tests/project_index.rs +634 -0
  499. simplint-0.3.0/tests/rules/comments.rs +10 -0
  500. simplint-0.3.0/tests/rules/dataclasses.rs +13 -0
  501. simplint-0.3.0/tests/rules/docstrings.rs +144 -0
  502. simplint-0.3.0/tests/rules/exports.rs +70 -0
  503. simplint-0.3.0/tests/rules/imports.rs +28 -0
  504. simplint-0.3.0/tests/rules/main.rs +13 -0
  505. simplint-0.3.0/tests/rules/naming.rs +54 -0
  506. simplint-0.3.0/tests/rules/strings.rs +11 -0
  507. simplint-0.3.0/tests/rules/structure.rs +139 -0
  508. simplint-0.3.0/tests/rules/testing.rs +15 -0
  509. simplint-0.3.0/tests/rules/typing.rs +25 -0
  510. simplint-0.3.0/tests/snapshots/output__format_azure.snap +7 -0
  511. simplint-0.3.0/tests/snapshots/output__format_concise.snap +9 -0
  512. simplint-0.3.0/tests/snapshots/output__format_full.snap +27 -0
  513. simplint-0.3.0/tests/snapshots/output__format_github.snap +7 -0
  514. simplint-0.3.0/tests/snapshots/output__format_gitlab.snap +45 -0
  515. simplint-0.3.0/tests/snapshots/output__format_grouped.snap +11 -0
  516. simplint-0.3.0/tests/snapshots/output__format_json-lines.snap +7 -0
  517. simplint-0.3.0/tests/snapshots/output__format_json.snap +61 -0
  518. simplint-0.3.0/tests/snapshots/output__format_junit.snap +22 -0
  519. simplint-0.3.0/tests/snapshots/output__format_pylint.snap +7 -0
  520. simplint-0.3.0/tests/snapshots/output__format_rdjson.snap +69 -0
  521. simplint-0.3.0/tests/snapshots/output__format_sarif.snap +138 -0
  522. simplint-0.3.0/tests/subcommands.rs +190 -0
  523. simplint-0.3.0/tests/suppressions.rs +185 -0
  524. simplint-0.3.0/tests/tasks/test_ecosystem.py +240 -0
  525. simplint-0.3.0/tests/tasks/test_generate_changelog.py +85 -0
  526. simplint-0.3.0/tests/tasks/test_pgo.py +315 -0
  527. {simplint-0.1.0 → simplint-0.3.0}/tests/tasks/test_python_versions.py +9 -9
  528. simplint-0.3.0/tests/watch.rs +66 -0
  529. {simplint-0.1.0 → simplint-0.3.0}/tests/wheel/test_cli.py +9 -4
  530. {simplint-0.1.0 → simplint-0.3.0}/tox.toml +58 -9
  531. {simplint-0.1.0 → simplint-0.3.0}/uv.lock +77 -15
  532. simplint-0.1.0/CHANGELOG.md +0 -12
  533. simplint-0.1.0/CONTRIBUTING.md +0 -117
  534. simplint-0.1.0/Cargo.lock +0 -1469
  535. simplint-0.1.0/Cargo.toml +0 -37
  536. simplint-0.1.0/PKG-INFO +0 -147
  537. simplint-0.1.0/README.md +0 -14
  538. simplint-0.1.0/README.rst +0 -116
  539. simplint-0.1.0/docs/conf.py +0 -129
  540. simplint-0.1.0/docs/configuration.rst +0 -59
  541. simplint-0.1.0/docs/index.rst +0 -92
  542. simplint-0.1.0/docs/rules.rst +0 -23
  543. simplint-0.1.0/resources/test/fixtures/SMP001.py +0 -21
  544. simplint-0.1.0/resources/test/fixtures/SMP002.py +0 -22
  545. simplint-0.1.0/resources/test/fixtures/SMP050.py +0 -47
  546. simplint-0.1.0/resources/test/fixtures/SMP060.py +0 -13
  547. simplint-0.1.0/resources/test/fixtures/SMP112_old.py +0 -2
  548. simplint-0.1.0/resources/test/fixtures/consumer/use.py +0 -23
  549. simplint-0.1.0/src/checker.rs +0 -119
  550. simplint-0.1.0/src/fix.rs +0 -43
  551. simplint-0.1.0/src/guards.rs +0 -21
  552. simplint-0.1.0/src/linter.rs +0 -54
  553. simplint-0.1.0/src/main.rs +0 -270
  554. simplint-0.1.0/src/noqa.rs +0 -57
  555. simplint-0.1.0/src/project.rs +0 -202
  556. simplint-0.1.0/src/registry.rs +0 -140
  557. simplint-0.1.0/src/rules/comments.rs +0 -219
  558. simplint-0.1.0/src/rules/constants.rs +0 -336
  559. simplint-0.1.0/src/rules/dataclasses.rs +0 -133
  560. simplint-0.1.0/src/rules/docs/SMP001.md +0 -31
  561. simplint-0.1.0/src/rules/docs/SMP002.md +0 -30
  562. simplint-0.1.0/src/rules/docs/SMP003.md +0 -28
  563. simplint-0.1.0/src/rules/docs/SMP004.md +0 -34
  564. simplint-0.1.0/src/rules/docs/SMP010.md +0 -31
  565. simplint-0.1.0/src/rules/docs/SMP020.md +0 -50
  566. simplint-0.1.0/src/rules/docs/SMP030.md +0 -36
  567. simplint-0.1.0/src/rules/docs/SMP040.md +0 -36
  568. simplint-0.1.0/src/rules/docs/SMP050.md +0 -40
  569. simplint-0.1.0/src/rules/docs/SMP060.md +0 -32
  570. simplint-0.1.0/src/rules/docs/SMP100.md +0 -45
  571. simplint-0.1.0/src/rules/docs/SMP101.md +0 -39
  572. simplint-0.1.0/src/rules/docs/SMP102.md +0 -40
  573. simplint-0.1.0/src/rules/docs/SMP103.md +0 -48
  574. simplint-0.1.0/src/rules/docs/SMP104.md +0 -45
  575. simplint-0.1.0/src/rules/docs/SMP105.md +0 -33
  576. simplint-0.1.0/src/rules/docs/SMP106.md +0 -29
  577. simplint-0.1.0/src/rules/docs/SMP107.md +0 -31
  578. simplint-0.1.0/src/rules/docs/SMP108.md +0 -28
  579. simplint-0.1.0/src/rules/docs/SMP109.md +0 -32
  580. simplint-0.1.0/src/rules/docs/SMP110.md +0 -32
  581. simplint-0.1.0/src/rules/docs/SMP111.md +0 -33
  582. simplint-0.1.0/src/rules/docs/SMP112.md +0 -29
  583. simplint-0.1.0/src/rules/docs/SMP113.md +0 -44
  584. simplint-0.1.0/src/rules/docs/SMP114.md +0 -36
  585. simplint-0.1.0/src/rules/docs/SMP200.md +0 -34
  586. simplint-0.1.0/src/rules/docs/SMP201.md +0 -42
  587. simplint-0.1.0/src/rules/docs/SMP203.md +0 -32
  588. simplint-0.1.0/src/rules/docs/SMP204.md +0 -32
  589. simplint-0.1.0/src/rules/docs/SMP205.md +0 -32
  590. simplint-0.1.0/src/rules/docstrings.rs +0 -83
  591. simplint-0.1.0/src/rules/exports.rs +0 -141
  592. simplint-0.1.0/src/rules/functions.rs +0 -91
  593. simplint-0.1.0/src/rules/imports.rs +0 -215
  594. simplint-0.1.0/src/rules/mocks.rs +0 -212
  595. simplint-0.1.0/src/rules/mod.rs +0 -303
  596. simplint-0.1.0/src/rules/names.rs +0 -249
  597. simplint-0.1.0/src/rules/order.rs +0 -279
  598. simplint-0.1.0/src/rules/pytest.rs +0 -280
  599. simplint-0.1.0/src/rules/strings.rs +0 -132
  600. simplint-0.1.0/src/rules/typing.rs +0 -146
  601. simplint-0.1.0/src/rules/walrus.rs +0 -138
  602. simplint-0.1.0/src/semantic.rs +0 -474
  603. simplint-0.1.0/src/settings.rs +0 -197
  604. simplint-0.1.0/src/snapshot.rs +0 -69
  605. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP001_SMP001.py.snap +0 -26
  606. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP002_SMP002.py.snap +0 -28
  607. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP003_SMP003.py.snap +0 -5
  608. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP003_SMP003_ok.py.snap +0 -5
  609. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP003_tests_test_SMP004.py.snap +0 -5
  610. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP004_SMP003.py.snap +0 -5
  611. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP004_tests_test_SMP004.py.snap +0 -11
  612. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP005_SMP005.py.snap +0 -7
  613. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP010_SMP010.py.snap +0 -18
  614. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_annotations.py_py310.snap +0 -5
  615. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP020_SMP020_floating.py.snap +0 -5
  616. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP030_SMP030.py.snap +0 -7
  617. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP040_SMP040.py.snap +0 -40
  618. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP040_SMP040.py_py310.snap +0 -42
  619. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP050_SMP050.py.snap +0 -53
  620. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP060_SMP060.py.snap +0 -11
  621. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP100_SMP100.py.snap +0 -89
  622. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101.py.snap +0 -31
  623. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_checking.py.snap +0 -12
  624. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_checking.py_py310.snap +0 -12
  625. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_future.py_py310.snap +0 -14
  626. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_module.py.snap +0 -13
  627. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_new.py.snap +0 -12
  628. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP101_SMP101_typing.py.snap +0 -9
  629. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_call.py.snap +0 -4
  630. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP102_SMP102_scopes.py.snap +0 -5
  631. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP003_ok.py.snap +0 -5
  632. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_SMP103_remove.py.snap +0 -5
  633. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP103_tests_test_SMP004.py.snap +0 -5
  634. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP003_ok.py.snap +0 -5
  635. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_eof.py.snap +0 -10
  636. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP104_SMP104_nonl.py.snap +0 -9
  637. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP107_SMP107.py.snap +0 -5
  638. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP107_SMP107_bound.py.snap +0 -5
  639. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108.py.snap +0 -11
  640. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP108_SMP108.py_py310.snap +0 -5
  641. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP109_SMP003_ok.py.snap +0 -5
  642. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP109_package_sub___init__.py.snap +0 -5
  643. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_SMP003_ok.py.snap +0 -5
  644. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP110_package_sub_script.py.snap +0 -10
  645. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP112_SMP112.py.snap +0 -42
  646. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP112_SMP112_old.py_py310.snap +0 -5
  647. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113.py.snap +0 -19
  648. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_aug.py.snap +0 -12
  649. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_call.py.snap +0 -4
  650. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_empty.py.snap +0 -11
  651. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_noall.py.snap +0 -11
  652. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_SMP113_scripts.py.snap +0 -11
  653. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_package___init__.py.snap +0 -5
  654. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP113_tests_test_SMP004.py.snap +0 -5
  655. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP200_SMP003_ok.py.snap +0 -5
  656. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP201_tests_test_SMP201.py.snap +0 -6
  657. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP202_SMP003_ok.py.snap +0 -5
  658. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP203_tests_test_SMP203.py.snap +0 -45
  659. simplint-0.1.0/src/snapshots/simplint__snapshot__SMP205_SMP205.py.snap +0 -43
  660. simplint-0.1.0/tasks/generate_changelog.py +0 -48
  661. simplint-0.1.0/tasks/generate_readme.py +0 -107
  662. simplint-0.1.0/tests/cli.rs +0 -259
  663. simplint-0.1.0/tests/tasks/test_generate_changelog.py +0 -40
  664. simplint-0.1.0/tests/tasks/test_generate_readme.py +0 -44
  665. simplint-0.1.0/toxfile.py +0 -29
  666. {simplint-0.1.0 → simplint-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  667. {simplint-0.1.0 → simplint-0.3.0}/LICENSE.txt +0 -0
  668. {simplint-0.1.0 → simplint-0.3.0}/codecov.yml +0 -0
  669. {simplint-0.1.0 → simplint-0.3.0}/docs/__init__.py +0 -0
  670. {simplint-0.1.0 → simplint-0.3.0}/rust-toolchain.toml +0 -0
  671. /simplint-0.1.0/resources/test/fixtures/SMP114.py → /simplint-0.3.0/tests/fixtures/dataclasses/dataclass_kw_only/dataclass_kw_only.py +0 -0
  672. /simplint-0.1.0/resources/test/fixtures/SMP003.py → /simplint-0.3.0/tests/fixtures/docstrings/test_module_docstring/multiline_module_docstring.py +0 -0
  673. /simplint-0.1.0/resources/test/fixtures/SMP003_ok.py → /simplint-0.3.0/tests/fixtures/docstrings/test_module_docstring/multiline_module_docstring_ok.py +0 -0
  674. /simplint-0.1.0/resources/test/fixtures/tests/test_SMP004.py → /simplint-0.3.0/tests/fixtures/docstrings/test_module_docstring/tests/test_module_docstring.py +0 -0
  675. /simplint-0.1.0/resources/test/fixtures/SMP104.py → /simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last.py +0 -0
  676. /simplint-0.1.0/resources/test/fixtures/SMP104_ann.py → /simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_ann.py +0 -0
  677. /simplint-0.1.0/resources/test/fixtures/SMP104_eof.py → /simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_eof.py +0 -0
  678. /simplint-0.1.0/resources/test/fixtures/SMP104_negated.py → /simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_negated.py +0 -0
  679. /simplint-0.1.0/resources/test/fixtures/SMP104_nonl.py → /simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_nonl.py +0 -0
  680. /simplint-0.1.0/resources/test/fixtures/SMP104_reversed.py → /simplint-0.3.0/tests/fixtures/exports/all_not_last/all_not_last_reversed.py +0 -0
  681. /simplint-0.1.0/resources/test/fixtures/SMP113.py → /simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all.py +0 -0
  682. /simplint-0.1.0/resources/test/fixtures/SMP113_aug.py → /simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_aug.py +0 -0
  683. /simplint-0.1.0/resources/test/fixtures/SMP113_call.py → /simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_call.py +0 -0
  684. /simplint-0.1.0/resources/test/fixtures/SMP113_empty.py → /simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_empty.py +0 -0
  685. /simplint-0.1.0/resources/test/fixtures/SMP113_multiline.py → /simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_multiline.py +0 -0
  686. /simplint-0.1.0/resources/test/fixtures/SMP113_noall.py → /simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_noall.py +0 -0
  687. /simplint-0.1.0/resources/test/fixtures/SMP113_scripts.py → /simplint-0.3.0/tests/fixtures/exports/missing_from_all/missing_from_all_scripts.py +0 -0
  688. {simplint-0.1.0/resources/test/fixtures → simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import}/package/__init__.py +0 -0
  689. {simplint-0.1.0/resources/test/fixtures → simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import}/package/sub/__init__.py +0 -0
  690. {simplint-0.1.0/resources/test/fixtures → simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import}/package/sub/module.py +0 -0
  691. {simplint-0.1.0/resources/test/fixtures → simplint-0.3.0/tests/fixtures/imports/absolute_sibling_import}/package/sub/script.py +0 -0
  692. /simplint-0.1.0/resources/test/fixtures/SMP108.py → /simplint-0.3.0/tests/fixtures/imports/future_annotations/future_annotations.py +0 -0
  693. /simplint-0.1.0/resources/test/fixtures/SMP108_checking.py → /simplint-0.3.0/tests/fixtures/imports/future_annotations/future_annotations_checking.py +0 -0
  694. /simplint-0.1.0/resources/test/fixtures/SMP108_joined.py → /simplint-0.3.0/tests/fixtures/imports/future_annotations/future_annotations_joined.py +0 -0
  695. /simplint-0.1.0/resources/test/fixtures/SMP102_ann.py → /simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_ann.py +0 -0
  696. /simplint-0.1.0/resources/test/fixtures/SMP102_call.py → /simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_call.py +0 -0
  697. /simplint-0.1.0/resources/test/fixtures/SMP102_conflict.py → /simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_conflict.py +0 -0
  698. /simplint-0.1.0/resources/test/fixtures/SMP102_noall.py → /simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_noall.py +0 -0
  699. /simplint-0.1.0/resources/test/fixtures/SMP102_rename.py → /simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_rename.py +0 -0
  700. /simplint-0.1.0/resources/test/fixtures/SMP102_scopes.py → /simplint-0.3.0/tests/fixtures/naming/module_variable_case/module_variable_case_scopes.py +0 -0
  701. /simplint-0.1.0/resources/test/fixtures/SMP103_extend.py → /simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_extend.py +0 -0
  702. /simplint-0.1.0/resources/test/fixtures/SMP103_remove.py → /simplint-0.3.0/tests/fixtures/naming/unexported_public_name/unexported_public_name_remove.py +0 -0
  703. /simplint-0.1.0/resources/test/fixtures/SMP020.py → /simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use.py +0 -0
  704. /simplint-0.1.0/resources/test/fixtures/SMP020_annotations.py → /simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_annotations.py +0 -0
  705. /simplint-0.1.0/resources/test/fixtures/SMP020_floating.py → /simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_floating.py +0 -0
  706. /simplint-0.1.0/resources/test/fixtures/SMP020_nonl.py → /simplint-0.3.0/tests/fixtures/structure/definition_before_use/definition_before_use_nonl.py +0 -0
  707. /simplint-0.1.0/resources/test/fixtures/SMP050_all.py → /simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant_all.py +0 -0
  708. /simplint-0.1.0/resources/test/fixtures/SMP050_dynamic.py → /simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant_dynamic.py +0 -0
  709. /simplint-0.1.0/resources/test/fixtures/SMP050_spacing.py → /simplint-0.3.0/tests/fixtures/structure/single_user_constant/single_user_constant_spacing.py +0 -0
  710. /simplint-0.1.0/resources/test/fixtures/tests/test_SMP202.py → /simplint-0.3.0/tests/fixtures/testing/conditional_in_test/tests/test_conditional_in_test.py +0 -0
  711. /simplint-0.1.0/resources/test/fixtures/SMP105.py → /simplint-0.3.0/tests/fixtures/typing/callable_ellipsis/callable_ellipsis.py +0 -0
  712. /simplint-0.1.0/resources/test/fixtures/SMP101_bare.py → /simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_bare.py +0 -0
  713. /simplint-0.1.0/resources/test/fixtures/SMP101_checking.py → /simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_checking.py +0 -0
  714. /simplint-0.1.0/resources/test/fixtures/SMP101_future.py → /simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_future.py +0 -0
  715. /simplint-0.1.0/resources/test/fixtures/SMP101_module.py → /simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_module.py +0 -0
  716. /simplint-0.1.0/resources/test/fixtures/SMP101_new.py → /simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_new.py +0 -0
  717. /simplint-0.1.0/resources/test/fixtures/SMP101_typing.py → /simplint-0.3.0/tests/fixtures/typing/missing_final/missing_final_typing.py +0 -0
  718. /simplint-0.1.0/resources/test/fixtures/SMP106.py → /simplint-0.3.0/tests/fixtures/typing/object_annotation/object_annotation.py +0 -0
  719. /simplint-0.1.0/resources/test/fixtures/SMP107.py → /simplint-0.3.0/tests/fixtures/typing/vars_call/vars_call.py +0 -0
  720. /simplint-0.1.0/resources/test/fixtures/SMP107_bound.py → /simplint-0.3.0/tests/fixtures/typing/vars_call/vars_call_bound.py +0 -0
  721. {simplint-0.1.0 → simplint-0.3.0}/tests/tasks/test_assemble_release.py +0 -0
  722. {simplint-0.1.0 → simplint-0.3.0}/tests/tasks/test_cargo_version.py +0 -0
  723. {simplint-0.1.0 → simplint-0.3.0}/tests/tasks/test_check_sdist.py +0 -0
  724. {simplint-0.1.0 → simplint-0.3.0}/tests/tasks/test_update_cargo_edit.py +0 -0
@@ -0,0 +1,600 @@
1
+ # Changelog
2
+
3
+ ## 0.3.0 (2026-11-04)
4
+
5
+ <a name="release-0-3-0"></a>
6
+
7
+ <a name="release-0-3-0-added"></a>
8
+
9
+ ### Added
10
+
11
+ - The docstring rules share the new `SMP3` group, so `select = ["SMP3"]` picks all of them: `function-docstring` is
12
+ SMP300 (was SMP002), `test-module-docstring` SMP301 (was SMP004) and `undocumented-public-api` SMP302 (was SMP116);
13
+ update `select`, `ignore` and `noqa` comments that name the old codes. Docstrings no longer have a length limit:
14
+ `multiline-module-docstring` (SMP003) is gone, and `long-paragraph` (SMP005) checks comments only
15
+ ([#27](https://github.com/gaborbernat/simplint/pull/27)) by [@gaborbernat](https://github.com/gaborbernat).
16
+ - `undocumented-public-api` (SMP302) and `function-docstring` (SMP300) now follow a library's public API as the typing
17
+ spec and PEP 8 define it: modules under a `_`-prefixed path are internal, a public module without `__all__` offers
18
+ every name without a leading underscore, and a name a public module re-exports through `__all__`,
19
+ `from m import name as name` or `import *` needs its docstring where it is defined. A name another module imports
20
+ counts as public only in a public module, where `missing-from-all` (SMP113) lists it in `__all__`, and an application,
21
+ which nothing installs, has no public API at all. The new `project-kind`, `api-packages` and `api-modules` settings
22
+ tune this ([#27](https://github.com/gaborbernat/simplint/pull/27)) by [@gaborbernat](https://github.com/gaborbernat).
23
+ - `init-module-content` (SMP109) lets a public package of a library re-export its API from private modules
24
+ ([#27](https://github.com/gaborbernat/simplint/pull/27)) by [@gaborbernat](https://github.com/gaborbernat).
25
+ - The new reStructuredText rules, SMP310 to SMP323, check reStructuredText field lists in docstrings when
26
+ `docstring-style = "rest"`: every field is well formed, described with more than its name and separated from the text
27
+ above by a blank line, documents a parameter or attribute that exists, with `:ivar:` or `:cvar:` as fits, once, and
28
+ carries no type, which belongs in annotations; roles keep their backticks and inline literals close; a public function
29
+ or class documents each parameter, attribute, return or yield value and exception it raises itself, and no internal
30
+ name. Their fixes add each missing field with an empty description for you to fill in, and remove or correct fields
31
+ for what no longer exists ([#27](https://github.com/gaborbernat/simplint/pull/27)) by
32
+ [@gaborbernat](https://github.com/gaborbernat).
33
+ - `unused-export` (SMP117) removes names from `__all__` that no other module of the run imports, keeping the `__all__`
34
+ of a library's top-level package and of the modules `api-modules` names as written
35
+ ([#27](https://github.com/gaborbernat/simplint/pull/27)) by [@gaborbernat](https://github.com/gaborbernat).
36
+
37
+ <a name="release-0-3-0-fixed"></a>
38
+
39
+ ### Fixed
40
+
41
+ - `--fix`, `--add-noqa` and `--add-ignore` write a file by renaming a complete copy over it, so a failed write no longer
42
+ leaves a cut-short source, and a file edited during the run keeps the edit. A symlink stays a symlink and the file
43
+ keeps its permissions ([#33](https://github.com/gaborbernat/simplint/pull/33)) by
44
+ [@gaborbernat](https://github.com/gaborbernat).
45
+ - A run no longer deletes the new, still empty cache directory of another simplint version running at the same time, as
46
+ pre-commit and the command line can, which made that other run fail
47
+ ([#33](https://github.com/gaborbernat/simplint/pull/33)) by [@gaborbernat](https://github.com/gaborbernat).
48
+ - A development build no longer warns that it cannot read the cache an earlier build of the same version wrote, and the
49
+ caches of other builds go away once no run has written to them for 30 days
50
+ ([#27](https://github.com/gaborbernat/simplint/pull/27)) by [@gaborbernat](https://github.com/gaborbernat).
51
+ - A file that linted clean is checked again when a name moves between two of the run's sets, as from a name read off a
52
+ module to a base class, instead of reusing its stale cached result
53
+ ([#33](https://github.com/gaborbernat/simplint/pull/33)) by [@gaborbernat](https://github.com/gaborbernat).
54
+ - `dataclass-kw-only` (SMP114) rewrites a positional call that a `noqa` comment for another code sits on, or that holds
55
+ `noqa` in a string, instead of leaving the dataclass without `kw_only=True`; only a comment that suppresses SMP114
56
+ keeps the call as it is ([#33](https://github.com/gaborbernat/simplint/pull/33)) by
57
+ [@gaborbernat](https://github.com/gaborbernat).
58
+ - `string-concatenation` (SMP112) no longer slows to a crawl on a function where many names each extend themselves in
59
+ turn, as `text = text + "!"` does; such chains now take time in proportion to their length
60
+ ([#33](https://github.com/gaborbernat/simplint/pull/33)) by [@gaborbernat](https://github.com/gaborbernat).
61
+ - `suppression-without-reason` (SMP060) reads suppression comments the way they take effect, so it now also flags
62
+ `# flake8: noqa` and a directive with extra space around its colon, such as `# ruff : ignore[...]`
63
+ ([#33](https://github.com/gaborbernat/simplint/pull/33)) by [@gaborbernat](https://github.com/gaborbernat).
64
+ - `test-class` (SMP200) now fixes a class whose methods have docstrings spanning several lines, as it does once
65
+ `ruff format` has joined them, so one round of fixes settles ([#28](https://github.com/gaborbernat/simplint/pull/28))
66
+ by [@gaborbernat](https://github.com/gaborbernat).
67
+ - `undocumented-public-api` (SMP302) and the reStructuredText attribute rules now see the docstring under a variable
68
+ defined in an `if` or `try` block, so they no longer report it as undocumented
69
+ ([#33](https://github.com/gaborbernat/simplint/pull/33)) by [@gaborbernat](https://github.com/gaborbernat).
70
+
71
+ <a name="release-0-3-0-documentation"></a>
72
+
73
+ ### Documentation
74
+
75
+ - The changelog page renders again when a release lists no changes
76
+ ([#18](https://github.com/gaborbernat/simplint/pull/18)) by [@gaborbernat](https://github.com/gaborbernat).
77
+ - The pre-commit setup uses the `simplint-pre-commit` mirror, which installs the released wheel and so runs on
78
+ pre-commit.ci without a Rust toolchain ([#27](https://github.com/gaborbernat/simplint/pull/27)) by
79
+ [@gaborbernat](https://github.com/gaborbernat).
80
+ - The PyPI page shows a short introduction with links to the documentation instead of the full documentation pages
81
+ ([#20](https://github.com/gaborbernat/simplint/pull/20)) by [@gaborbernat](https://github.com/gaborbernat).
82
+
83
+ ## 0.2.2 (2026-11-02)
84
+
85
+ <a name="release-0-2-2"></a>
86
+
87
+ <a name="release-0-2-2-fixed"></a>
88
+
89
+ ### Fixed
90
+
91
+ - Release wheels build again: the profile-guided optimization run no longer stops on the Ruff docstring rules simplint
92
+ refuses to run beside ([#17](https://github.com/gaborbernat/simplint/pull/17)) by
93
+ [@gaborbernat](https://github.com/gaborbernat).
94
+
95
+ ## 0.2.1 (2026-11-02)
96
+
97
+ <a name="release-0-2-1"></a>
98
+
99
+ ## 0.2.0 (2026-11-02)
100
+
101
+ <a name="release-0-2-0"></a>
102
+
103
+ <a name="release-0-2-0-added"></a>
104
+
105
+ ### Added
106
+
107
+ - `all-format` follows Ruff's `skip-magic-trailing-comma`: with it set, `ruff format` drops the trailing comma, so the
108
+ rule only asks for a list ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
109
+ [@gaborbernat](https://github.com/gaborbernat).
110
+ - `all-format` requires `__all__` to be a list with a trailing comma, so the formatter keeps one name per line
111
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
112
+ - Like Ruff, `simplint check` caches which files had nothing to report, and with them the import facts of each file, so
113
+ later runs skip unchanged files. A cached result is reused only while the file, its settings and the names other files
114
+ use from it are unchanged. The cache lives in Ruff's cache directory, `.ruff_cache` unless Ruff's `cache-dir`,
115
+ `--cache-dir` or `RUFF_CACHE_DIR` names another, under `simplint/<version>`, next to Ruff's own files, which it leaves
116
+ alone. It is a compact binary file per package, written only when it changed, and keeps files other runs checked for
117
+ 30 days, as Ruff's does. `--no-cache` or `SIMPLINT_NO_CACHE` turns it off, and `simplint clean` removes simplint's
118
+ part of each `.ruff_cache` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
119
+ [@gaborbernat](https://github.com/gaborbernat).
120
+ - `constant-assert` (SMP205) reads truthiness the way Ruff does, so it also reports assertions on non-empty list, set
121
+ and dict literals, f-strings and lambdas, such as `assert [value]`. A tuple holding only starred elements, which may
122
+ be empty, is no longer reported. An assertion that calls something, such as `assert [compute()]`, gets no fix
123
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
124
+ - `[tool.simplint]` takes `fixable`, `unfixable`, `extend-fixable`, `extend-unfixable`, `extend-safe-fixes`,
125
+ `extend-unsafe-fixes` and `extend-per-file-ignores`, with Ruff's meaning, and a `per-file-ignores` pattern starting
126
+ with `!` applies to every file it does not match ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
127
+ [@gaborbernat](https://github.com/gaborbernat).
128
+ - Every fix carries a title saying what it changes, such as "Annotate `LIMIT` with `Final`", shown as the `help:` line
129
+ of the full output and as the fix message of the JSON, SARIF and GitHub formats, as Ruff does for its own fixes
130
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
131
+ - `--config`, `--isolated` and the new `--color` flag go before or after the subcommand, as in Ruff. `--config` also
132
+ takes `KEY = VALUE` overrides: a `[tool.simplint]` key, such as `--config "select = ['SMP1']"`, overrides simplint's
133
+ setting, and any other key Ruff's, such as `--config "target-version = 'py312'"`. `FORCE_COLOR` turns colors on as in
134
+ Ruff ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
135
+ - Add the `naming.keep-names` option, a list of module-scope names `module-variable-case` (SMP102) leaves as they are,
136
+ for frameworks simplint does not recognize; `--config "naming.keep-names = [...]"` overrides it
137
+ ([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
138
+ - `simplint check` now behaves like `ruff check`: it prints reports in any of Ruff's output formats (`full` by default,
139
+ `concise`, `grouped`, `json`, `json-lines`, `junit`, `github`, `gitlab`, `pylint`, `rdjson`, `azure` and `sarif`),
140
+ with Ruff's summary lines and exit codes, and takes Ruff's flags: `--fix-only`, `--show-fixes`, `--statistics`,
141
+ `--exit-zero`, `--exit-non-zero-on-fix`, `--ignore-noqa`, `--output-file`, `--extend-select`, `--stdin-filename` or
142
+ `-`, and the `--quiet`, `--silent` and `--verbose` log levels. A file that does not parse or cannot be read is
143
+ reported as an `invalid-syntax` or `io-error` diagnostic, and the rest of the run goes on
144
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
145
+ - `simplint check` takes the rest of `ruff check`'s flags: `--watch` checks again whenever a Python or TOML file
146
+ changes, `--add-noqa[=REASON]` and `--add-ignore[=REASON]` write suppression comments for every report, `--show-files`
147
+ and `--show-settings` print the files and settings a check would use, and `--preview`, `--extend-ignore`,
148
+ `--per-file-ignores`, `--extend-per-file-ignores`, `--fixable`, `--unfixable`, `--extend-fixable` and
149
+ `--extend-unfixable` work as in Ruff, with Ruff's conflicts between flags
150
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
151
+ - Fixes now leave nothing for Ruff to redo when `simplint check --fix` runs between `ruff check --fix` and
152
+ `ruff format`: a Ruff violation a fix introduces, or a Ruff fix it makes possible such as a return type Ruff can now
153
+ infer, gets Ruff's own fix in the same run, and otherwise the fix is withdrawn and the report kept. Layout is left to
154
+ `ruff format`, save a line no formatting can bring under the line length, such as a name or string too long by itself
155
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
156
+ - `simplint rule --all`, `simplint config [KEY]`, `simplint linter`, `simplint clean`, `simplint version` and
157
+ `simplint generate-shell-completion SHELL` work like Ruff's subcommands of the same names, and `rule`, `config`,
158
+ `linter` and `version` take `--output-format json` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
159
+ [@gaborbernat](https://github.com/gaborbernat).
160
+ - simplint stops with exit status 2 before linting when a simplint rule and a Ruff rule on for the same file work
161
+ against each other: `function-docstring` with Ruff's missing-docstring rules D101 to D107, `test-module-docstring`
162
+ with D100 or D104 on test modules, `future-annotations` with I002 adding `from __future__ import annotations` on
163
+ Python 3.14 and newer, and `absolute-sibling-import` with TID252 banning every relative import. The error names both
164
+ rules, the configuration files that enable them, the first file affected and how to resolve the clash. Before, the fix
165
+ loop kept the report forever, or gave up after 100 passes ([#4](https://github.com/gaborbernat/simplint/pull/4)) by
166
+ [@gaborbernat](https://github.com/gaborbernat).
167
+ - A `# simplint: ignore[SMP010]` comment suppresses the listed rules on its line, as `# ruff: ignore[...]` does for
168
+ Ruff's rules, and `suppression-without-reason` asks for a reason after it
169
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
170
+ - `string-concatenation` joins strings in different quote styles when one delimiter fits them all, joins implicitly
171
+ concatenated literals, puts an expression written over several lines on one, and before Python 3.12 switches the
172
+ quotes of string literals inside an expression that would clash with the f-string's own. It leaves alone a literal
173
+ with a named escape such as `\N{BULLET}`, and inside another f-string's replacement field keeps the quotes as written
174
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
175
+ - `undocumented-public-api` requires a docstring on every function, class and public method the module exports through
176
+ `__all__`, and a docstring or `#:` comment on every exported variable
177
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
178
+ - `walrus-candidate` also takes an assignment joined by `;` to the statements before it on its line, as `ruff format`
179
+ puts it on a line of its own either way ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
180
+ [@gaborbernat](https://github.com/gaborbernat).
181
+
182
+ <a name="release-0-2-0-changes"></a>
183
+
184
+ ### Changes
185
+
186
+ - `single-letter-name` no longer checks anything inside a comprehension or generator expression; single-letter names
187
+ there are fine ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
188
+ [@gaborbernat](https://github.com/gaborbernat).
189
+ - `definition-before-use` offers its fix on the first report of each body only: that one fix reorders the whole body,
190
+ and repeating it on every report made the default output slow on files with many misplaced definitions
191
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
192
+ - A file that cannot be read, parsed or fixed is reported as an error and left unchanged, and the other files are still
193
+ checked ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
194
+ - `missing-from-all` and `all-format` write `__all__` one name per line with a trailing comma, the layout `ruff format`
195
+ gives it, and `missing-from-all` inserts names in sorted order and above a closing `if __name__ == "__main__":` block
196
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
197
+ - `function-docstring` (SMP002) keeps the text of a docstring that may state a contract: its fix turns any docstring
198
+ longer than one line of five words into a `#` comment block in its place, wrapped to Ruff's line and doc line limits,
199
+ instead of deleting it. A one-line docstring of at most five words, such as `"""Return the value."""`, is still
200
+ deleted ([#7](https://github.com/gaborbernat/simplint/pull/7)) by [@gaborbernat](https://github.com/gaborbernat).
201
+ - `function-docstring` no longer reports docstrings on the public API, the names `__all__` exports and the public
202
+ methods of exported classes, which `undocumented-public-api` now requires
203
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
204
+ - `missing-final`'s fix is now unsafe, since the added `Final` shows in the module's runtime `__annotations__`
205
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
206
+ - `missing-from-all` writes a trailing comma when it creates `__all__`, and creating `__all__` is now an unsafe fix,
207
+ since it narrows what `from module import *` exports ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
208
+ [@gaborbernat](https://github.com/gaborbernat).
209
+ - Module names in imports, attribute access, patch targets and entry points now resolve to files with ty's module
210
+ resolver, the one behind `ruff analyze graph`, searching Ruff's `src` directories and package roots. Cross-file rules
211
+ such as `missing-from-all` and the rename fixes see `src` layouts and pytest rootdir test packages correctly and no
212
+ longer match a module by a guessed dotted suffix of its path ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
213
+ [@gaborbernat](https://github.com/gaborbernat).
214
+ - simplint no longer repeats Ruff's warnings about Ruff's own configuration, such as a removed rule left in `ignore` or
215
+ a deprecated top-level setting, on every run; `ruff check` already shows them. Warnings about simplint's own work stay
216
+ ([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
217
+ - Files and the target Python version now come from Ruff's own configuration resolution: `--config`, `--isolated`,
218
+ `extend` chains, user-level Ruff configuration, Ruff's built-in excludes, `lint.exclude`, `respect-gitignore`,
219
+ `force-exclude` and `per-file-target-version` all apply, and `--target-version`, `--exclude`, `--extend-exclude`,
220
+ `--respect-gitignore` and `--force-exclude` override them. Without any version setting the target is Ruff's default,
221
+ Python 3.14, instead of 3.11. `[tool.simplint]` also takes `fix`, `fix-only`, `unsafe-fixes`, `show-fixes` and
222
+ `output-format`, and rejects unknown keys ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
223
+ [@gaborbernat](https://github.com/gaborbernat).
224
+ - Imports resolve with `ruff_graph`'s module database and Ruff's import helpers, so a file's package follows Ruff's
225
+ package detection, including `namespace-packages`, and a relative import reaching above the top-level package resolves
226
+ to nothing, as in Python ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
227
+ [@gaborbernat](https://github.com/gaborbernat).
228
+ - `simplint rule` prints like `ruff rule`: a rule without a fix no longer says so, and an unknown rule is rejected as an
229
+ invalid argument ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
230
+ [@gaborbernat](https://github.com/gaborbernat).
231
+ - When `select` and `ignore` both match a rule, the more specific entry wins, as in Ruff:
232
+ `--select SMP001 --ignore SMP0` keeps `SMP001`. Before, `ignore` always won
233
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
234
+ - `mock-without-spec`, `mock-attribute-assignment`, `parametrize-without-id`, the dataclass rules, `missing-final` and
235
+ `callable-ellipsis` resolve `patch`, `pytest.mark.parametrize`, `pytest.param`, `dataclass`, `TypeVar` and `Callable`
236
+ through the module's imports, as Ruff does, instead of matching the last part of the name
237
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
238
+ - `single-user-constant` (SMP050) reports only constants whose value is written out in the source: strings, bytes,
239
+ numbers, booleans, `None`, operations between them, `frozenset` of them, and tuple, list, set and dict displays of
240
+ them. A call result such as a cache, a logger, a compiled pattern, a path or a client, and a name or attribute read
241
+ from elsewhere, stays at module level, since moving it would build a new object on every call and break tests that
242
+ patch it ([#7](https://github.com/gaborbernat/simplint/pull/7)) by [@gaborbernat](https://github.com/gaborbernat).
243
+ - `string-concatenation` turns `str(x)`, `repr(x)` and `ascii(x)` into `!s`, `!r` and `!a` conversions and offers no fix
244
+ when a comment sits between the operands ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
245
+ [@gaborbernat](https://github.com/gaborbernat).
246
+ - The `test-module-docstring` fix is now unsafe, since a fixture package under `tests` may read its docstring
247
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
248
+
249
+ <a name="release-0-2-0-fixed"></a>
250
+
251
+ ### Fixed
252
+
253
+ - `absolute-sibling-import` (SMP110) no longer reports an import in a directory without an `__init__.py` that Ruff's
254
+ `namespace-packages` makes a package, such as a pytest `tests` directory, where the relative import would fail
255
+ ([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
256
+ - `absolute-sibling-import` (SMP110) no longer reports imports in a module that compares `__name__` with a string, such
257
+ as a script with a `__main__` guard or an execnet `__channelexec__` module, nor imports inside a function passed to
258
+ `remote_exec` or `inspect.getsource`. That code runs outside its package, where the relative import fails
259
+ ([#13](https://github.com/gaborbernat/simplint/pull/13)) by [@gaborbernat](https://github.com/gaborbernat).
260
+ - `all-format` writes a multi-line `__all__` whose closing bracket follows the last name one name per line, instead of a
261
+ comma before the bracket that Ruff's COM819 removes again ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
262
+ [@gaborbernat](https://github.com/gaborbernat).
263
+ - `all-not-last` moves a `# fmt: off` / `# fmt: on` pair that fences `__all__` along with it, so `ruff format` does not
264
+ reformat the list and strand a suppression comment that covers several names on one line
265
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
266
+ - `all-not-last` offers no fix when a later block extends `__all__` with `+=`, which the move would leave without a list
267
+ to extend ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
268
+ - `all-not-last` keeps two blank lines before the moved `__all__` when the file has no final newline
269
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
270
+ - A file starting with a byte order mark no longer crashes `definition-before-use` and the rules that look for a comment
271
+ above a statement ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
272
+ [@gaborbernat](https://github.com/gaborbernat).
273
+ - `definition-before-use` no longer moves a definition below a class body that reads it, as in
274
+ `Interrupted = Interrupted` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
275
+ [@gaborbernat](https://github.com/gaborbernat).
276
+ - Ruff's cleanup after a fix keeps every rule on and only limits which ones it fixes, so it no longer drops suppression
277
+ comments such as `# ruff: ignore[unused-import]` as unused and then removes the imports they kept for other modules
278
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
279
+ - `long-paragraph` treats each reST field, such as `:param name:`, as its own paragraph, and `section-comment` no longer
280
+ deletes a prose line that ends in `===` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
281
+ [@gaborbernat](https://github.com/gaborbernat).
282
+ - `constant-assert` keeps an element of `assert (check, message)` that is written over several lines inside parentheses
283
+ when it rewrites the assertion, instead of leaving a syntax error
284
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
285
+ - `single-user-constant` (SMP050) keeps a local name for a string whose one use calls `format`, since Ruff's f-string
286
+ rule (UP032) would treat the inlined literal differently depending on the layout
287
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
288
+ - `dataclass-kw-only` (SMP114) no longer breaks positional calls such as `Partition(msg.topic(), msg.partition())`: its
289
+ fix passes the arguments of the calls in the same module by keyword, and reports each positional call in other checked
290
+ files with a safe fix of its own, which the same run applies. The fix of the decorator is not offered while a use
291
+ could still pass fields by position, such as a call unpacking `*args` (`**kwargs` passes by keyword and does not block
292
+ it), a subclass, a star import of the module, or a call in a file that ignores the rule
293
+ ([#9](https://github.com/gaborbernat/simplint/pull/9)) by [@gaborbernat](https://github.com/gaborbernat).
294
+ - `dataclass-options` (SMP111) no longer freezes a dataclass when a field name is written on an object simplint cannot
295
+ type, such as `envs[name].active = True`, or when the class has a base class other than `Generic[...]` or a subclass.
296
+ It no longer adds `slots=True` when a subclass has several bases, such as `threading.local`, whose layout conflicts
297
+ ([#9](https://github.com/gaborbernat/simplint/pull/9)) by [@gaborbernat](https://github.com/gaborbernat).
298
+ - `dataclass-options` (SMP111) now sees writes on instances of classes defined in a package's `__init__.py`, and no
299
+ longer adds `slots=True` to a class that writes a `ClassVar` through an instance, reaches its `__dict__`, is pickled
300
+ with protocol 0 or 1 while mutable, or is frozen with subclasses that store attributes. It offers no fix for a class
301
+ without fields or one a test creates inside `pytest.raises`. `dataclass-kw-only` (SMP114) treats `module.Name(...)`
302
+ positional calls on a module no import binds as uses it cannot rewrite
303
+ ([#14](https://github.com/gaborbernat/simplint/pull/14)) by [@gaborbernat](https://github.com/gaborbernat).
304
+ - `dataclass-options` and `dataclass-kw-only` stay silent for targets below Python 3.10, where those dataclass arguments
305
+ do not exist ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
306
+ - `definition-before-use` (SMP020) no longer moves a class below a decorated function or class that names it in an
307
+ annotation, such as a pydantic model in a FastAPI route's return annotation: the decorator reads the annotation while
308
+ the module loads, so after the move it met an unresolved forward reference. A name a function uses only in annotations
309
+ inside its body no longer counts as a helper to place below it ([#9](https://github.com/gaborbernat/simplint/pull/9))
310
+ by [@gaborbernat](https://github.com/gaborbernat).
311
+ - `definition-before-use` (SMP020) no longer moves a helper below a lambda that runs while the module loads, such as
312
+ `(lambda: helper())()` or a callback passed to a module-level call, or below a class body that calls one of its own
313
+ functions which reads the helper ([#11](https://github.com/gaborbernat/simplint/pull/11)) by
314
+ [@gaborbernat](https://github.com/gaborbernat).
315
+ - `function-docstring` (SMP002) drops a pragma comment such as `# noqa: E501` that followed a docstring it replaces with
316
+ `...` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
317
+ - Removing the docstring of a test module that is left with comments only no longer leaves blank lines at the end of the
318
+ file, which `ruff format` keeps and Ruff reports ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
319
+ [@gaborbernat](https://github.com/gaborbernat).
320
+ - `function-docstring` (SMP002) leaves alone docstrings code reads at runtime: those holding a `>>>` doctest, those of
321
+ objects decorated by anything but a known decorator such as `property` or `pytest.fixture`, and all of them when the
322
+ run reads `__doc__` or calls `getdoc` ([#16](https://github.com/gaborbernat/simplint/pull/16)) by
323
+ [@gaborbernat](https://github.com/gaborbernat).
324
+ - `parametrize-without-id` reports `pytest.param(..., id=None)`, and `mock-without-spec` reports `spec=None` and
325
+ `autospec=False`, since both leave the default in place ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
326
+ [@gaborbernat](https://github.com/gaborbernat).
327
+ - File-level `# ruff: noqa`, `# flake8: noqa` and `# ruff: file-ignore[...]` comments now suppress simplint rules, as
328
+ they do in Ruff ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
329
+ [@gaborbernat](https://github.com/gaborbernat).
330
+ - With `--fix`, a fix that changes what other files learn from the project index, such as `mock-attribute-assignment`
331
+ (SMP203) folding `user.uuid = 7` into the mock constructor, now gets the files depending on it linted and fixed again
332
+ in the same run, so `dataclass-options` (SMP111) freezes the dataclass whose `uuid` field the fix stopped assigning
333
+ without a second run ([#5](https://github.com/gaborbernat/simplint/pull/5)) by
334
+ [@gaborbernat](https://github.com/gaborbernat).
335
+ - Fixes whose edits interleave, such as renames of names used across a module, apply in the same pass, so a module with
336
+ more than a hundred of them no longer fails to converge ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
337
+ [@gaborbernat](https://github.com/gaborbernat).
338
+ - `simplint check --fix` runs its fixes again until they change nothing, so a fix that Ruff's cleanup makes possible,
339
+ such as joining the f-string Ruff writes for `%` formatting, or one withdrawn only next to another rule's pending
340
+ fixes, no longer waits for a second run ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
341
+ [@gaborbernat](https://github.com/gaborbernat).
342
+ - `forwarding-function` no longer reports a function that calls a method on a computed value, such as
343
+ `return make(name).strip()`, or that calls one of its own parameters
344
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
345
+ - `forwarding-function` skips wrappers with parameter defaults and functions other code patches by name
346
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
347
+ - `module-variable-case` (SMP102) no longer asks to rename module variables a framework reads by name: the revision
348
+ identifiers of an Alembic migration, the settings of a gunicorn configuration file, and an `app` or `application` that
349
+ builds a WSGI or ASGI application with Flask, FastAPI, Starlette, Django, Quart, Sanic, aiohttp, Litestar, Falcon,
350
+ Bottle or Pyramid ([#8](https://github.com/gaborbernat/simplint/pull/8)) by
351
+ [@gaborbernat](https://github.com/gaborbernat).
352
+ - `dependency-import-guard` (SMP040) no longer reports `from` imports, which can fail on a module that lacks the name on
353
+ some platform or version, such as `from os import geteuid` ([#10](https://github.com/gaborbernat/simplint/pull/10)) by
354
+ [@gaborbernat](https://github.com/gaborbernat).
355
+ - `function-docstring` (SMP002) and `test-module-docstring` (SMP004) fix a docstring that shares its line with the
356
+ signature or the next statement, as in `def run(): """Run."""`, instead of only after `ruff format` splits the line
357
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
358
+ - `future-annotations` marks its fix unsafe only when the code refers to `TYPE_CHECKING`, not when a comment mentions it
359
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
360
+ - `dependency-import-guard` no longer reports a guarded import of your own package, such as an optional compiled
361
+ extension, and recognizes `builtins.ImportError` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
362
+ [@gaborbernat](https://github.com/gaborbernat).
363
+ - `single-user-constant` and `walrus-candidate` parenthesize an inlined value that starts with a parenthesis without
364
+ being wrapped in one, such as `(RuntimeError,) if old else ()`, keep a tuple's parentheses, and inline a value written
365
+ over several lines on one; `single-user-constant` no longer derives a local name that starts with a digit or is a
366
+ keyword ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
367
+ - The JSON and JSON Lines outputs fill `noqa_row` for simplint's reports with the line a `noqa` comment belongs on, as
368
+ Ruff does, instead of `null` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
369
+ [@gaborbernat](https://github.com/gaborbernat).
370
+ - Fixes are withdrawn when they make a line no `ruff format` layout can fit in more cases: the first line of a string
371
+ over several lines, a `def` line with empty parentheses, an operand after the operator of a split operation, comments
372
+ moved deeper, code under `# fmt: off` or `# fmt: skip` or in a file `ruff format` excludes, and a pragma comment that
373
+ an added annotation moves. Lines Ruff does not report, such as one ending in a URL, or code after a bracket the
374
+ formatter splits, no longer withdraw a fix ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
375
+ [@gaborbernat](https://github.com/gaborbernat).
376
+ - `dependency-import-guard` no longer calls a standard library module such as `tomllib` a required dependency,
377
+ `suppression-without-reason` says to list the codes a blanket suppression silences, and `definition-before-use` says
378
+ which definition to move a misplaced one below ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
379
+ [@gaborbernat](https://github.com/gaborbernat).
380
+ - `missing-final` skips implicit type aliases and names another module assigns, adds `Final` to a `from typing import`
381
+ line in isort order, places a new import in the standard library section, and writes `t.Final` for
382
+ `import typing as t` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
383
+ [@gaborbernat](https://github.com/gaborbernat).
384
+ - `missing-final` treats `Annotated[Final[...], ...]` as already final
385
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
386
+ - `missing-from-all` (SMP113) no longer asks to list in `__all__` a name the module imports and uses itself, such as
387
+ `sys` or `Path`, when another module reaches it through this one. An import the module never uses still counts as a
388
+ re-export ([#5](https://github.com/gaborbernat/simplint/pull/5)) by [@gaborbernat](https://github.com/gaborbernat).
389
+ - `missing-from-all` no longer appends a second `__all__` when the module assigns one inside an `if` or `try`
390
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
391
+ - `mock-attribute-assignment` wraps a bare tuple, `:=` or `yield` value in parentheses when it moves it into the mock
392
+ constructor, so `return_value = "a", {}` no longer turns into two arguments
393
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
394
+ - `mock-without-spec` accepts `new=None` and `new=False`, `mock-attribute-assignment` also reports annotated
395
+ assignments, and its fix is unsafe for `create_autospec` attributes other than `return_value` and `side_effect`
396
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
397
+ - Names imported through a directory without `__init__.py`, such as `from tests.helpers import mark` with pytest's
398
+ rootdir on `sys.path`, now count as imported, so `module-variable-case`, `unexported-public-name` and
399
+ `single-user-constant` no longer rename or move them ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
400
+ [@gaborbernat](https://github.com/gaborbernat).
401
+ - `module-variable-case` (SMP102) and `unexported-public-name` (SMP103) keep the names PLY, PEP 249 and the `typer`
402
+ command read by name, and names read off modules loaded by a computed name, such as a test fixture's
403
+ `importlib.import_module`. Relative imports in namespace packages now count as imports, and `missing-from-all`
404
+ (SMP113) no longer lists a name that would shadow the module itself in its package's `import *`
405
+ ([#15](https://github.com/gaborbernat/simplint/pull/15)) by [@gaborbernat](https://github.com/gaborbernat).
406
+ - A nested `pyproject.toml` without a `[tool.simplint]` table no longer hides the settings of a parent directory,
407
+ matching how Ruff skips one without `[tool.ruff]` ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
408
+ [@gaborbernat](https://github.com/gaborbernat).
409
+ - A fix that Ruff's cleanup undoes, such as `absolute-sibling-import` in a project that bans relative imports, no longer
410
+ counts as a fix: the file is left alone and `--diff` and `--exit-non-zero-on-fix` see no change
411
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
412
+ - A `noqa` comment on the last line of a multi-line string or a backslash continuation suppresses a report that starts
413
+ on an earlier line of it, as in Ruff, instead of being ignored ([#2](https://github.com/gaborbernat/simplint/pull/2))
414
+ by [@gaborbernat](https://github.com/gaborbernat).
415
+ - `single-letter-name` skips the parameters of `@override` methods
416
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
417
+ - `missing-from-all` and `undocumented-public-api` no longer treat a name reached only by a dotted string, such as a
418
+ `mocker.patch` target through a module's `import os`, as an export. Fixes that rename or move names still leave such
419
+ names alone ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
420
+ - The `--preview` help text and docs no longer promise unstable rules and fixes; simplint has none, and the flag
421
+ switches the output to rule names ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
422
+ [@gaborbernat](https://github.com/gaborbernat).
423
+ - `function-docstring` keeps the docstrings of dunder methods, overrides and property setters of an exported class, and
424
+ `undocumented-public-api` no longer asks for them. It accepts a trailing `#:` comment on a variable and names
425
+ properties as such ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
426
+ [@gaborbernat](https://github.com/gaborbernat).
427
+ - `missing-from-all` no longer adds `__all__` to a module that imports it from elsewhere
428
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
429
+ - Rename fixes skip names that shadow a builtin, as in `zip = zip`
430
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
431
+ - `module-variable-case` (SMP102) looks for the name in the text strings hold rather than in their source, so whether
432
+ the rename is offered no longer depends on escapes that `ruff format` rewrites, such as `\N{latin small letter x}`
433
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
434
+ - The cache now accounts for `skip-magic-trailing-comma`; a relative `--config` path anchors per-file ignores at its
435
+ directory; a per-file-ignore pattern such as `./tests/*.py` matches as in Ruff; an empty rule selector is an error; a
436
+ file simplint cannot read is reported as `io-error` only while Ruff's `E902` is on, and otherwise logged as
437
+ `ruff check` does; and the "No Python files found" warning shows once
438
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
439
+ - Fixes no longer leave Ruff work that only shows up after `ruff format`: a nested `if` or `with` that a fix lets fit on
440
+ one line gets merged, an import block a fix joins across a `;` gets sorted, and a `# noqa: E501` on a line a fix
441
+ changes stays ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
442
+ [@gaborbernat](https://github.com/gaborbernat).
443
+ - Ruff's cleanup after a fix also takes in the rules its own fixes give new work, such as the import sort after an
444
+ import moves to the top, and a fix that would make `ruff format` split a line carrying a `noqa` or other pragma
445
+ comment is withdrawn, since the split moves the comment off the code it applies to
446
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
447
+ - Ruff fixes that depend on the line length, such as collapsing nested `if` statements, are judged the same before and
448
+ after `ruff format`, so a second run no longer applies what the first withdrew
449
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
450
+ - `suppression-without-reason` recognizes `# ruff: ignore[...]`, `# ruff: file-ignore[...]` and
451
+ `# pyrefly: ignore[...]`, and directives written without a space after the colon
452
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
453
+ - `simplint rule` and the rule selection settings now say when a code or selector names a Ruff rule and point to Ruff,
454
+ instead of rejecting it as unknown ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
455
+ [@gaborbernat](https://github.com/gaborbernat).
456
+ - A file simplint cannot read or write is reported with Ruff's own `io-error` (`E902`) diagnostic, at `1:1` as Ruff puts
457
+ it, and with Ruff's `preview` on, reports and the fix summary name rules as Ruff does, unless
458
+ `output-prefer-rule-codes` is set ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
459
+ [@gaborbernat](https://github.com/gaborbernat).
460
+ - The semantic model behind the rules is now Ruff's own, so names follow Python's scoping more closely: PEP 695 type
461
+ parameters and match captures resolve to their own scope, a star import no longer counts as a binding, and a class
462
+ body that annotates `type` without a value no longer hides the builtin
463
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
464
+ - `simplint rules --output-format json` names a rule's fix availability as `ruff rule --all --output-format json` does:
465
+ `"Always"`, `"Sometimes"` or `"None"`, no longer lowercase ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
466
+ [@gaborbernat](https://github.com/gaborbernat).
467
+ - The SARIF output links to simplint's repository instead of a non-existent `astral-sh/simplint`, and the rdjson output
468
+ names simplint and its documentation as the source instead of Ruff
469
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
470
+ - `section-comment` (SMP001) no longer deletes the text of a decorated comment with more than three words, such as
471
+ `# *** remove return to update cron`: its fix strips the decoration and keeps the text. Dividers, and banners around
472
+ a title of up to three words such as `# === helpers ===`, are still deleted. A pair of divider characters joined to a
473
+ word, such as the underscores of `__init__`, no longer makes a comment a section comment
474
+ ([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
475
+ - An unknown rule selector error now names the setting and the file it came from, or the command line, as Ruff does
476
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
477
+ - `single-user-constant`, `missing-from-all` and `all-format` take the indentation of a statement that follows a `;`
478
+ from its line instead of copying the statements before it, which duplicated them
479
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
480
+ - A second run of the documented pipeline no longer changes code: `single-user-constant` counts a comment that
481
+ `ruff format` moved inside the parentheses around a value as trailing it and handles a function body on the `def`
482
+ line, `dependency-import-guard` unwraps a one-line `try: import x` instead of breaking the syntax, and the fixes run
483
+ again on the code Ruff's cleanup leaves ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
484
+ [@gaborbernat](https://github.com/gaborbernat).
485
+ - `single-user-constant` no longer reports a constant whose only use is a module-level lambda, which it cannot fix
486
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
487
+ - `single-user-constant` no longer reports module values a function mutates, such as a set of warnings already shown or
488
+ a lock, and offers no fix for a constant with a trailing comment or a value that reads a name the module later
489
+ deletes. Its fix keeps the annotation of a new local, and inlines into an f-string only a plain name or number
490
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
491
+ - `module-variable-case` skips Sphinx `conf.py` settings and `TYPE_CHECKING`, `walrus-candidate` and `missing-final`
492
+ skip `TYPE_CHECKING`, and `unexported-public-name` skips Sphinx's `setup` hook
493
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
494
+ - The line length model no longer treats an augmented assignment such as `|=` as an operator `ruff format` moves to the
495
+ start of a line, and now does for the `not` of `not in`, so a fix is no longer kept when the line it makes stays too
496
+ long, or withdrawn when `ruff format` can split the line to fit ([#2](https://github.com/gaborbernat/simplint/pull/2))
497
+ by [@gaborbernat](https://github.com/gaborbernat).
498
+ - When withdrawing either of two rules would settle a conflict with Ruff, simplint withdraws the one a second run would
499
+ withdraw again, so a single `simplint check --fix` leaves nothing for the next
500
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
501
+ - Names a `from module import *` can reach count as used: renames to `_`-names by `module-variable-case` (SMP102),
502
+ `unexported-public-name` (SMP103), `single-user-constant` (SMP050) and other rules leave them alone, a name imported
503
+ from a package counts in the module its `__init__.py` star-imports it from, and `missing-from-all` (SMP113) no longer
504
+ creates an `__all__` that would narrow what `import *` takes. A star import that resolves to no file of the run keeps
505
+ the names of every file named after its module ([#5](https://github.com/gaborbernat/simplint/pull/5)) by
506
+ [@gaborbernat](https://github.com/gaborbernat).
507
+ - Source read from standard input is linted as the file `--stdin-filename` names would be: it gets that file's
508
+ `per-file-target-version`, its package, and the directory above its package as an import search root, so entry points
509
+ outside the `src` directories count as uses ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
510
+ [@gaborbernat](https://github.com/gaborbernat).
511
+ - `string-concatenation` (SMP112) offers its fix only when the code shows every operand is a `str`, so it no longer
512
+ turns `+` on an object with its own `__add__` or `__radd__`, such as `Markup`, a path or a `PageRange`, into an
513
+ f-string that formats it instead. It reads that from literals, `str` methods, annotations, loops, the module's own
514
+ functions and classes, and common standard library values such as `os.sep` or `os.path.join`
515
+ ([#12](https://github.com/gaborbernat/simplint/pull/12)) by [@gaborbernat](https://github.com/gaborbernat).
516
+ - Names a `.pyi` stub declares count as the public API of the module it describes, so fixes no longer rename them out of
517
+ step with the stub ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
518
+ [@gaborbernat](https://github.com/gaborbernat).
519
+ - `suppression-without-reason` no longer reads words such as `# noqa-ish` as a suppression directive
520
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
521
+ - `walrus-candidate` and `missing-final` do not run below Python 3.8, and `dependency-import-guard` treats a module as
522
+ standard library only when every supported version ships it, so guards around `distutils`, `ctypes`, `ssl`, `sqlite3`
523
+ or `tkinter` are no longer reported ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
524
+ [@gaborbernat](https://github.com/gaborbernat).
525
+ - `test-class` offers no fix for a class another class extends or the file refers to
526
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
527
+ - `module-variable-case` (SMP102) no longer renames `version`, `version_tuple` and `commit_id` in a module that binds
528
+ `__version__`, the names of the version file setuptools-scm writes
529
+ ([#10](https://github.com/gaborbernat/simplint/pull/10)) by [@gaborbernat](https://github.com/gaborbernat).
530
+ - `walrus-candidate` (SMP100) and `missing-final` (SMP101) no longer run in a module with a version gate, a top-level
531
+ `if` on `sys.version_info` that raises or exits, since such a module runs on interpreters that lack `:=` or
532
+ `typing.Final` ([#10](https://github.com/gaborbernat/simplint/pull/10)) by
533
+ [@gaborbernat](https://github.com/gaborbernat).
534
+ - `walrus-candidate` (SMP100) no longer reports an assignment when folding it into the `if` test would make the header
535
+ too wide for one line, which `ruff format` then split over several. The header is measured joined on one line at its
536
+ block's indentation, so the result does not depend on how the code is laid out
537
+ ([#8](https://github.com/gaborbernat/simplint/pull/8)) by [@gaborbernat](https://github.com/gaborbernat).
538
+ - `walrus-candidate` (SMP100) now also fixes values continued with a backslash, and when its fix leaves an `if` that
539
+ Ruff's collapsible-if (SIM102) asks to merge, the merge happens in the same run whatever the line length, so a second
540
+ run of the pipeline changes nothing ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
541
+ [@gaborbernat](https://github.com/gaborbernat).
542
+ - `walrus-candidate` no longer deletes a module-level name that `__all__` lists, or a class attribute assigned inside a
543
+ block of a class body ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
544
+ [@gaborbernat](https://github.com/gaborbernat).
545
+
546
+ <a name="release-0-2-0-documentation"></a>
547
+
548
+ ### Documentation
549
+
550
+ - Every color pair in the documentation, including code tokens, badges, form fields, focus rings and diagram nodes, now
551
+ reaches a WCAG contrast of 4.5:1 in the light, dark and automatic themes, with calmer diagram colors and a softer page
552
+ background and text ([#3](https://github.com/gaborbernat/simplint/pull/3)) by
553
+ [@gaborbernat](https://github.com/gaborbernat).
554
+ - Pages no longer grow wider than the window when a code block holds a long line, as the configuration page did; the
555
+ line scrolls inside its block, and diagrams fit their column ([#6](https://github.com/gaborbernat/simplint/pull/6)) by
556
+ [@gaborbernat](https://github.com/gaborbernat).
557
+ - Redesigned documentation with the project branding, a filterable rules index, side-by-side examples, diagrams and a
558
+ generated command-line reference; `simplint rule` leaves the diagram source out of terminal output
559
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
560
+
561
+ <a name="release-0-2-0-performance"></a>
562
+
563
+ ### Performance
564
+
565
+ - With `--fix` or `--diff`, the cache also remembers files the fixes leave as they are, together with the rules whose
566
+ fixes simplint held back for them, so a later run reports such a file from a single lint instead of running the whole
567
+ fix loop again. On an already fixed copy of `sympy`, a repeat `--fix --unsafe-fixes` run takes about a quarter of the
568
+ CPU time it did ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
569
+ [@gaborbernat](https://github.com/gaborbernat).
570
+ - `simplint check --fix` runs Ruff's findings checks without the whitespace, blank line and line length rules, whose
571
+ findings it ignores, unless a file's suppression comments may name one of them; the fix loop on `sympy` does about 6%
572
+ less work ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
573
+ - `simplint check` renders its default `full` output on all cores, so a report with many fix diffs, such as renames that
574
+ span whole modules, prints sooner: on `sympy` the run takes about 40% less wall time
575
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
576
+ - Release wheels for x86_64 Linux (glibc and musl), x64 Windows and arm64 macOS are built with profile-guided
577
+ optimization, trained on `simplint check` and `simplint check --fix` over pinned sdists of black, pip and botocore. On
578
+ `sympy` and `django` this runs about 6% fewer instructions in check mode and about 12% fewer with `--fix`
579
+ ([#2](https://github.com/gaborbernat/simplint/pull/2)) by [@gaborbernat](https://github.com/gaborbernat).
580
+ - The rules that look at statements and expressions share one walk over each file instead of walking it once each, so
581
+ `simplint check` takes about 7% less time ([#2](https://github.com/gaborbernat/simplint/pull/2)) by
582
+ [@gaborbernat](https://github.com/gaborbernat).
583
+
584
+ <a name="release-0-2-0-new-contributors"></a>
585
+
586
+ ### New Contributors
587
+
588
+ - [@gaborbernat](https://github.com/gaborbernat) made their first contribution in
589
+ [#2](https://github.com/gaborbernat/simplint/pull/2)
590
+
591
+ ## 0.1.0 (2026-10-30)
592
+
593
+ <a name="release-0-1-0"></a>
594
+
595
+ <a name="release-0-1-0-added"></a>
596
+
597
+ ### Added
598
+
599
+ - First release: 32 rules for code that is easier to read and review, beyond what Ruff checks, with safe and unsafe
600
+ fixes and a cross-module import index by Bernát Gábor.