sqlty 0.2.2__tar.gz → 0.4.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 (306) hide show
  1. {sqlty-0.2.2 → sqlty-0.4.0}/PKG-INFO +9 -3
  2. {sqlty-0.2.2 → sqlty-0.4.0}/README.md +8 -2
  3. {sqlty-0.2.2 → sqlty-0.4.0}/pyproject.toml +10 -3
  4. sqlty-0.4.0/rust/Cargo.lock +1768 -0
  5. {sqlty-0.2.2 → sqlty-0.4.0}/rust/Cargo.toml +11 -2
  6. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-ext/Cargo.toml +3 -0
  7. sqlty-0.4.0/rust/crates/sqlty-ext/src/config.rs +132 -0
  8. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-ext/src/lib.rs +458 -28
  9. sqlty-0.4.0/rust/crates/sqlty-ext/src/server.rs +167 -0
  10. sqlty-0.4.0/rust/crates/sqlty-format/Cargo.toml +17 -0
  11. sqlty-0.4.0/rust/crates/sqlty-format/src/lib.rs +269 -0
  12. sqlty-0.4.0/rust/crates/sqlty-lsp/Cargo.toml +21 -0
  13. sqlty-0.4.0/rust/crates/sqlty-lsp/src/actions.rs +103 -0
  14. sqlty-0.4.0/rust/crates/sqlty-lsp/src/completion.rs +154 -0
  15. sqlty-0.4.0/rust/crates/sqlty-lsp/src/highlight.rs +100 -0
  16. sqlty-0.4.0/rust/crates/sqlty-lsp/src/hover.rs +41 -0
  17. sqlty-0.4.0/rust/crates/sqlty-lsp/src/lib.rs +595 -0
  18. sqlty-0.4.0/rust/crates/sqlty-lsp/src/tests.rs +905 -0
  19. sqlty-0.4.0/rust/crates/sqlty-lsp/src/text.rs +134 -0
  20. sqlty-0.4.0/rust/crates/sqlty-lsp/src/uri.rs +33 -0
  21. sqlty-0.4.0/rust/crates/sqlty-lsp/src/worker.rs +218 -0
  22. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/Cargo.toml +1 -0
  23. sqlty-0.4.0/rust/crates/sqlty-python/clippy.toml +34 -0
  24. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/checker.rs +300 -81
  25. sqlty-0.4.0/rust/crates/sqlty-python/src/config.rs +498 -0
  26. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/fixer.rs +5 -2
  27. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/lib.rs +8 -0
  28. sqlty-0.4.0/rust/crates/sqlty-python/src/locate.rs +532 -0
  29. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/options.rs +3 -0
  30. sqlty-0.4.0/rust/crates/sqlty-python/src/params.rs +483 -0
  31. sqlty-0.4.0/rust/crates/sqlty-python/src/queries.rs +344 -0
  32. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/rewriter.rs +124 -31
  33. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/rules.rs +24 -5
  34. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/scan.rs +49 -2
  35. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/tokens.rs +62 -6
  36. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/build.rs +2 -0
  37. sqlty-0.4.0/rust/crates/sqlty-sql/clippy.toml +34 -0
  38. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/README.md +8 -6
  39. sqlty-0.4.0/rust/crates/sqlty-sql/rules/common/aggregates.inference.toml +111 -0
  40. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/common/arithmetic.inference.toml +9 -6
  41. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/common/comparison.inference.toml +10 -5
  42. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/common/concat.inference.toml +6 -4
  43. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/common/conditional.inference.toml +4 -2
  44. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/common/datetime.inference.toml +3 -3
  45. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/common/json.inference.toml +11 -9
  46. sqlty-0.4.0/rust/crates/sqlty-sql/rules/common/math.inference.toml +21 -0
  47. sqlty-0.4.0/rust/crates/sqlty-sql/rules/common/strings.inference.toml +35 -0
  48. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/common/window.inference.toml +11 -5
  49. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/compile.rs +44 -7
  50. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/aggregates.inference.toml +5 -5
  51. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/arithmetic.inference.toml +13 -13
  52. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/bits.inference.toml +1 -1
  53. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/comparison.inference.toml +3 -3
  54. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/concat.inference.toml +1 -1
  55. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/conditional.inference.toml +2 -2
  56. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/datetime.inference.toml +15 -15
  57. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/encryption.inference.toml +5 -5
  58. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/json.inference.toml +11 -11
  59. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/math.inference.toml +9 -9
  60. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/misc.inference.toml +12 -12
  61. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/spatial.inference.toml +13 -13
  62. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/strings.inference.toml +24 -24
  63. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/mysql/system.inference.toml +13 -13
  64. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/admin.inference.toml +16 -16
  65. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/aggregates.inference.toml +19 -19
  66. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/arithmetic.inference.toml +54 -54
  67. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/arrays.inference.toml +13 -13
  68. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/binary.inference.toml +5 -5
  69. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/comparison.inference.toml +2 -2
  70. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/concat.inference.toml +7 -7
  71. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/conditional.inference.toml +1 -1
  72. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/datetime.inference.toml +14 -14
  73. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/enums.inference.toml +2 -2
  74. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/events.inference.toml +2 -2
  75. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/extensions.inference.toml +3 -3
  76. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/formatting.inference.toml +3 -3
  77. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/geometry.inference.toml +19 -19
  78. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/json.inference.toml +27 -27
  79. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/math.inference.toml +10 -10
  80. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/merge.inference.toml +1 -1
  81. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/network.inference.toml +7 -7
  82. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/ranges.inference.toml +15 -15
  83. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/rows.inference.toml +1 -1
  84. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/sequences.inference.toml +1 -1
  85. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/series.inference.toml +2 -2
  86. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/strings.inference.toml +11 -11
  87. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/system.inference.toml +39 -39
  88. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/textsearch.inference.toml +17 -17
  89. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/uuid.inference.toml +3 -3
  90. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/postgres/xml.inference.toml +6 -6
  91. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/aggregates.inference.toml +3 -3
  92. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/arithmetic.inference.toml +5 -5
  93. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/bitwise.inference.toml +2 -2
  94. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/datetime.inference.toml +4 -4
  95. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/fts.inference.toml +4 -4
  96. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/json.inference.toml +11 -11
  97. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/math.inference.toml +4 -4
  98. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/scalar.inference.toml +10 -10
  99. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/sqlite/strings.inference.toml +1 -1
  100. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/api.rs +55 -3
  101. sqlty-0.4.0/rust/crates/sqlty-sql/src/analyzer/complete.rs +936 -0
  102. sqlty-0.4.0/rust/crates/sqlty-sql/src/analyzer/dialect.rs +353 -0
  103. sqlty-0.4.0/rust/crates/sqlty-sql/src/analyzer/entities.rs +194 -0
  104. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/explain.rs +4 -3
  105. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/expr.rs +25 -5
  106. sqlty-0.4.0/rust/crates/sqlty-sql/src/analyzer/fanout.rs +612 -0
  107. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/grouping.rs +1 -1
  108. sqlty-0.4.0/rust/crates/sqlty-sql/src/analyzer/hover.rs +427 -0
  109. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/inference.rs +55 -5
  110. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/input.rs +78 -8
  111. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/mod.rs +15 -3
  112. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/narrowing.rs +40 -0
  113. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/nullability.rs +93 -8
  114. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/preprocess.rs +60 -6
  115. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/query.rs +7 -1
  116. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/resolve.rs +98 -2
  117. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/respell.rs +29 -1
  118. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/scope.rs +28 -0
  119. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__dml__tests__returning_columns_in_queries.snap +1 -1
  120. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__literals_and_unary_operators.snap +1 -1
  121. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__cte_columns_are_resolved_like_tables.snap +1 -1
  122. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__quoted_names_keep_their_case_in_postgres_only.snap +2 -2
  123. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__system_columns_exist_without_being_declared.snap +1 -1
  124. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__unknown_names_say_what_is_missing.snap +2 -2
  125. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/sql_type.rs +1 -0
  126. sqlty-0.4.0/rust/crates/sqlty-sql/src/analyzer/suggest.rs +82 -0
  127. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/tests.rs +91 -0
  128. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/alter.rs +26 -2
  129. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/columns.rs +21 -1
  130. sqlty-0.4.0/rust/crates/sqlty-sql/src/catalog/index.rs +531 -0
  131. sqlty-0.4.0/rust/crates/sqlty-sql/src/catalog/joins.rs +106 -0
  132. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/loader.rs +57 -3
  133. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/mod.rs +117 -6
  134. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/names.rs +8 -5
  135. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/read.rs +58 -5
  136. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/resolve.rs +49 -19
  137. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/ddl.rs +16 -1
  138. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/diagnostics.rs +101 -11
  139. sqlty-0.4.0/rust/crates/sqlty-sql/src/highlight.rs +370 -0
  140. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/lib.rs +3 -1
  141. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/placeholders.rs +48 -23
  142. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/tests/inference_compiler.rs +7 -3
  143. {sqlty-0.2.2 → sqlty-0.4.0}/skills/sqlty/SKILL.md +1 -0
  144. {sqlty-0.2.2 → sqlty-0.4.0}/skills/sqlty-check/SKILL.md +38 -3
  145. {sqlty-0.2.2 → sqlty-0.4.0}/skills/sqlty-ci/SKILL.md +4 -3
  146. {sqlty-0.2.2 → sqlty-0.4.0}/skills/sqlty-rewrite/SKILL.md +26 -0
  147. sqlty-0.4.0/skills/sqlty-server/SKILL.md +115 -0
  148. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/__init__.py +29 -4
  149. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_breaking.py +130 -35
  150. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_check.py +400 -66
  151. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_cli.py +446 -88
  152. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_config.py +176 -257
  153. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_core.pyi +85 -3
  154. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_decode.py +1 -1
  155. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_drivers.py +20 -3
  156. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_helpers.py +169 -57
  157. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_json_types.py +4 -10
  158. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_lint.py +52 -3
  159. sqlty-0.4.0/src/sqlty/_lsp_breaking.py +150 -0
  160. sqlty-0.4.0/src/sqlty/_lsp_bridge.py +108 -0
  161. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_params.py +18 -0
  162. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_psycopg.py +35 -1
  163. sqlty-0.4.0/src/sqlty/_queries.py +125 -0
  164. sqlty-0.4.0/src/sqlty/_sarif.py +74 -0
  165. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_snapshot.py +24 -10
  166. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_source.py +83 -8
  167. sqlty-0.4.0/src/sqlty/_type_extractor/__init__.py +46 -0
  168. sqlty-0.4.0/src/sqlty/_type_extractor/_stdlib.py +2722 -0
  169. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_type_extractor/ast_fields.py +129 -18
  170. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_type_extractor/compat.py +4 -11
  171. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_type_extractor/extract.py +43 -64
  172. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_type_extractor/generic.py +13 -33
  173. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_type_extractor/info.py +0 -8
  174. sqlty-0.4.0/src/sqlty/_type_extractor/pydantic_types.py +133 -0
  175. sqlty-0.4.0/src/sqlty/_type_extractor/stdlib.py +46 -0
  176. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_type_extractor/subtype.py +5 -0
  177. sqlty-0.4.0/src/sqlty/_type_extractor/symbols.py +87 -0
  178. sqlty-0.4.0/src/sqlty/_variants.py +876 -0
  179. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/core.py +303 -24
  180. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/drivers/psycopg.py +65 -19
  181. sqlty-0.4.0/src/sqlty/rules/chasm-join.md +76 -0
  182. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/dynamic-query.md +4 -1
  183. sqlty-0.4.0/src/sqlty/rules/entity-mismatch.md +66 -0
  184. sqlty-0.4.0/src/sqlty/rules/fanout-aggregate.md +101 -0
  185. sqlty-0.4.0/src/sqlty/rules/params-type-mismatch.md +64 -0
  186. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/select-star.md +2 -1
  187. sqlty-0.4.0/src/sqlty/rules/sqruff.md +56 -0
  188. sqlty-0.4.0/src/sqlty/rules/stale-rewrite.md +58 -0
  189. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unchecked-query.md +5 -0
  190. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unknown-column.md +33 -1
  191. sqlty-0.4.0/src/sqlty/rules/unproven-join.md +55 -0
  192. sqlty-0.2.2/rust/Cargo.lock +0 -874
  193. sqlty-0.2.2/rust/crates/sqlty-sql/rules/common/aggregates.inference.toml +0 -101
  194. sqlty-0.2.2/rust/crates/sqlty-sql/rules/common/math.inference.toml +0 -17
  195. sqlty-0.2.2/rust/crates/sqlty-sql/rules/common/strings.inference.toml +0 -33
  196. sqlty-0.2.2/rust/crates/sqlty-sql/src/analyzer/dialect.rs +0 -171
  197. sqlty-0.2.2/src/sqlty/_type_extractor/__init__.py +0 -51
  198. sqlty-0.2.2/src/sqlty/_type_extractor/sandbox.py +0 -385
  199. sqlty-0.2.2/src/sqlty/rules/stale-rewrite.md +0 -33
  200. {sqlty-0.2.2 → sqlty-0.4.0}/LICENSE +0 -0
  201. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-ext/build.rs +0 -0
  202. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/edit.rs +0 -0
  203. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-python/src/template.rs +0 -0
  204. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/Cargo.toml +0 -0
  205. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/rules/dialects.toml +0 -0
  206. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/dml.rs +0 -0
  207. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/functions.rs +0 -0
  208. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/hashing.rs +0 -0
  209. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/json.rs +0 -0
  210. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/literals.rs +0 -0
  211. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/memo.rs +0 -0
  212. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/merged_star.rs +0 -0
  213. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/names.rs +0 -0
  214. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/operators.rs +0 -0
  215. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/params.rs +0 -0
  216. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/pg_record_functions.rs +0 -0
  217. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/planner_hints.sql +0 -0
  218. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/references.rs +0 -0
  219. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/registry.rs +0 -0
  220. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__arrays_and_subscripts.snap +0 -0
  221. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__case_expressions.snap +0 -0
  222. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__casts.snap +0 -0
  223. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__casts_without_a_schema_do_not_complain.snap +0 -0
  224. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__composite_fields_and_json_access.snap +0 -0
  225. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__misc_expressions.snap +0 -0
  226. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__expr__tests__mysql_and_sqlite_expressions.snap +0 -0
  227. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__aggregates_in_postgres.snap +0 -0
  228. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__function_availability_differs_by_dialect.snap +0 -0
  229. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__return_types_follow_the_argument.snap +0 -0
  230. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__functions__tests__unknown_functions_are_untyped_and_explained.snap +0 -0
  231. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__literals__tests__value_sets_flow_through_expressions.snap +0 -0
  232. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__names__tests__column_names_follow_postgres_figure_colname.snap +0 -0
  233. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__arithmetic_promotes_numbers_and_types_date_math.snap +0 -0
  234. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__binary_operators_in_queries.snap +0 -0
  235. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__common_type_follows_postgres_union_rules.snap +0 -0
  236. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__operators__tests__division_differs_between_postgres_and_mysql.snap +0 -0
  237. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__column_names_come_from_the_first_branch.snap +0 -0
  238. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__ctes.snap +0 -0
  239. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__dialects_name_and_type_the_same_query_differently.snap +0 -0
  240. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__projection_forms.snap +0 -0
  241. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__recursive_ctes_settle_nullability.snap +0 -0
  242. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__set_operations_combine_nullability.snap +0 -0
  243. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__set_operations_unify_types.snap +0 -0
  244. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__statements_that_are_not_queries_have_no_columns.snap +0 -0
  245. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__unsupported_query_forms_are_explained.snap +0 -0
  246. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__query__tests__values_lists.snap +0 -0
  247. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__ambiguous_names_are_reported_once_per_query.snap +0 -0
  248. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__names_are_not_judged_without_a_schema.snap +0 -0
  249. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__nullability_comes_from_the_declaration.snap +0 -0
  250. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__star_over_unreadable_sources_names_the_reason.snap +0 -0
  251. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__resolve__tests__unqualified_names_resolve_to_the_first_source_that_has_them.snap +0 -0
  252. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__correlated_subqueries_see_the_outer_scope.snap +0 -0
  253. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__derived_tables_ctes_and_views.snap +0 -0
  254. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__nullability_follows_the_join_kind.snap +0 -0
  255. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__opaque_sources_explain_themselves.snap +0 -0
  256. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__star_expansion_over_joins.snap +0 -0
  257. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/snapshots/sqlty_sql__analyzer__scope__tests__table_names_fold_by_dialect.snap +0 -0
  258. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/star_expand.rs +0 -0
  259. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/table_functions.rs +0 -0
  260. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/test_support.rs +0 -0
  261. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/text_names.rs +0 -0
  262. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/tokens.rs +0 -0
  263. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/analyzer/typed.rs +0 -0
  264. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/builtin_catalog.sql +0 -0
  265. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/catalog/pg_catalog_views.sql +0 -0
  266. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/json.rs +0 -0
  267. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/src/values.rs +0 -0
  268. {sqlty-0.2.2 → sqlty-0.4.0}/rust/crates/sqlty-sql/tests/timing.rs +0 -0
  269. {sqlty-0.2.2 → sqlty-0.4.0}/skills/sqlty-adopt/SKILL.md +0 -0
  270. {sqlty-0.2.2 → sqlty-0.4.0}/skills/sqlty-breaking/SKILL.md +0 -0
  271. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/__main__.py +0 -0
  272. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_gitignore.py +0 -0
  273. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/_json_shape.py +0 -0
  274. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/magic.py +0 -0
  275. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/py.typed +0 -0
  276. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/ambiguous-column.md +0 -0
  277. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/column-count-mismatch.md +0 -0
  278. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/column-name-mismatch.md +0 -0
  279. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/column-type-mismatch.md +0 -0
  280. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/fstring-skipped.md +0 -0
  281. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/inline-sql-comment.md +0 -0
  282. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/insert-missing-column.md +0 -0
  283. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/insert-value-count.md +0 -0
  284. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/json-shape-mismatch.md +0 -0
  285. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/literal-mismatch.md +0 -0
  286. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/mysql-sql-marker.md +0 -0
  287. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/narrow-type.md +0 -0
  288. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/nullable-mismatch.md +0 -0
  289. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/param-count-mismatch.md +0 -0
  290. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/param-type-mismatch.md +0 -0
  291. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/redundant-literal.md +0 -0
  292. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/redundant-optional.md +0 -0
  293. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/select-star-no-schema.md +0 -0
  294. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/stale-type.md +0 -0
  295. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/tstring-skipped.md +0 -0
  296. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/typeddict-inheritance.md +0 -0
  297. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/typeddict-key-mismatch.md +0 -0
  298. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/ungrouped-column.md +0 -0
  299. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unknown-function.md +0 -0
  300. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unknown-table.md +0 -0
  301. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unknown-type.md +0 -0
  302. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unparsed-query.md +0 -0
  303. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unsupported-syntax.md +0 -0
  304. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/untyped-query.md +0 -0
  305. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty/rules/unused-ignore.md +0 -0
  306. {sqlty-0.2.2 → sqlty-0.4.0}/src/sqlty_magic.pth +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlty
3
- Version: 0.2.2
3
+ Version: 0.4.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -31,7 +31,12 @@ Project-URL: Homepage, https://github.com/jirikuncar/sqlty
31
31
  Project-URL: Issues, https://github.com/jirikuncar/sqlty/issues
32
32
  Project-URL: Repository, https://github.com/jirikuncar/sqlty
33
33
 
34
- # SQLTy
34
+ <h1>
35
+ <picture>
36
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-dark.svg">
37
+ <img src="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-light.svg" alt="SQLTy" width="300">
38
+ </picture>
39
+ </h1>
35
40
 
36
41
  [![PyPI](https://img.shields.io/pypi/v/sqlty.svg)](https://pypi.org/project/sqlty/)
37
42
  [![Python 3.14+](https://img.shields.io/badge/python-3.14+-blue.svg)](https://www.python.org/downloads/)
@@ -193,7 +198,8 @@ sqlty strip . # undo: back to plain strings
193
198
  sqlty one module at a time and back out. New project:
194
199
  [Quickstart](https://jirikuncar.github.io/sqlty/quickstart/). Existing codebase:
195
200
  [Migration](https://jirikuncar.github.io/sqlty/recipes/migration/), starting
196
- with `pg_dump --schema-only app > schema.sql`.
201
+ with `pg_dump --schema-only app > schema.sql`. In the editor:
202
+ [VS Code](https://jirikuncar.github.io/sqlty/recipes/vscode/).
197
203
 
198
204
  Not a fit for ORMs, SQL built at runtime, or runtime validation;
199
205
  [Why SQLTy?](https://jirikuncar.github.io/sqlty/motivation/) compares it with
@@ -1,4 +1,9 @@
1
- # SQLTy
1
+ <h1>
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-dark.svg">
4
+ <img src="https://raw.githubusercontent.com/jirikuncar/sqlty/main/docs/assets/sqlty-wordmark-light.svg" alt="SQLTy" width="300">
5
+ </picture>
6
+ </h1>
2
7
 
3
8
  [![PyPI](https://img.shields.io/pypi/v/sqlty.svg)](https://pypi.org/project/sqlty/)
4
9
  [![Python 3.14+](https://img.shields.io/badge/python-3.14+-blue.svg)](https://www.python.org/downloads/)
@@ -160,7 +165,8 @@ sqlty strip . # undo: back to plain strings
160
165
  sqlty one module at a time and back out. New project:
161
166
  [Quickstart](https://jirikuncar.github.io/sqlty/quickstart/). Existing codebase:
162
167
  [Migration](https://jirikuncar.github.io/sqlty/recipes/migration/), starting
163
- with `pg_dump --schema-only app > schema.sql`.
168
+ with `pg_dump --schema-only app > schema.sql`. In the editor:
169
+ [VS Code](https://jirikuncar.github.io/sqlty/recipes/vscode/).
164
170
 
165
171
  Not a fit for ORMs, SQL built at runtime, or runtime validation;
166
172
  [Why SQLTy?](https://jirikuncar.github.io/sqlty/motivation/) compares it with
@@ -80,6 +80,9 @@ dev = [
80
80
  "rumdl>=0.3.0",
81
81
  "vale>=3.22.0.0",
82
82
  "zizmor>=1.31.1",
83
+ "pydantic[email]>=2.14.1",
84
+ "jsonschema>=4.26.0",
85
+ "pytest-xdist>=3.8.0",
83
86
  ]
84
87
  cli = ["rich>=15.0.0"]
85
88
  # Only the DuckDB type tests need it, and it has no wheel for every Python.
@@ -93,7 +96,8 @@ bench = [
93
96
  ]
94
97
 
95
98
  [tool.pytest.ini_options]
96
- addopts = ["-p", "tests._mdtest.plugin", "--cov-report=term-missing", "--cov-report=html", "-v"]
99
+ # In parallel and in random order; `make test-timing` runs the `timing` tests alone.
100
+ addopts = ["-p", "tests._mdtest.plugin", "-p", "tests._no_exec", "--cov-report=term-missing", "--cov-report=html", "-v", "-n", "auto", "-m", "not timing"]
97
101
  pythonpath = ["."]
98
102
  testpaths = ["tests", "docs", "src/sqlty/rules", "README.md"]
99
103
  mdtest_paths = ["tests/mdtest", "docs", "src/sqlty/rules", "README.md", "skills"]
@@ -101,6 +105,7 @@ markers = [
101
105
  "e2e: end-to-end tests (subprocess + inline-snapshot)",
102
106
  "slow: slow tests that can be skipped with -m 'not slow'",
103
107
  "pg: needs a PostgreSQL server (SQLTY_PG_DSN); skipped without it",
108
+ "timing: measures wall time, so runs alone: `make test-timing`",
104
109
  ]
105
110
 
106
111
  [tool.coverage.run]
@@ -168,8 +173,10 @@ indent-style = "space"
168
173
  [tool.rumdl]
169
174
  # Long lines are tables and links; spaces in code spans show `--sql ` on purpose.
170
175
  disable = ["MD013", "MD038"]
171
- exclude = ["site", ".vale", ".github", "tests", "scripts/compat/reports", "PLAN-FUTURE.md", "rust/target", "proofs/.lake"]
176
+ exclude = ["site", ".vale", ".github", "tests", "scripts/compat/reports", "plans/2026-02-13-future.md", "rust/target", "proofs/.lake"]
172
177
 
173
178
  [tool.rumdl.per-file-ignores]
174
- # The demo GIF needs HTML for its width and centering.
179
+ # The logo and demo GIF need HTML for light/dark variants, width and centering.
175
180
  "README.md" = ["MD033"]
181
+ # The editors and panels of the playground are HTML that its script fills in.
182
+ "docs/playground.md" = ["MD033"]