@gspothq/cli 0.0.0-stage → 0.1.1

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 (232) hide show
  1. package/README.md +18 -2
  2. package/configurations/database/postgres/manifest.toml +114 -0
  3. package/configurations/database/postgres/rules/POSTGRES.md +78 -0
  4. package/configurations/framework/astro/eslint-presets.json +138 -0
  5. package/configurations/framework/astro/manifest.toml +95 -0
  6. package/configurations/framework/astro/rules/ASTRO.md +39 -0
  7. package/configurations/framework/expo/manifest.toml +43 -0
  8. package/configurations/framework/express/manifest.toml +17 -0
  9. package/configurations/framework/express/rules/EXPRESS.md +73 -0
  10. package/configurations/framework/express/semgrep/express.yml +71 -0
  11. package/configurations/framework/fastapi/manifest.toml +11 -0
  12. package/configurations/framework/fastapi/rules/FASTAPI.md +100 -0
  13. package/configurations/framework/fastapi/semgrep/fastapi.yml +44 -0
  14. package/configurations/framework/nestjs/eslint-presets.json +62 -0
  15. package/configurations/framework/nestjs/manifest.toml +52 -0
  16. package/configurations/framework/nestjs/rules/NESTJS.md +44 -0
  17. package/configurations/framework/nextjs/eslint-presets.json +73 -0
  18. package/configurations/framework/nextjs/manifest.toml +119 -0
  19. package/configurations/framework/nextjs/rules/NEXTJS.md +43 -0
  20. package/configurations/framework/react/eslint-presets.json +77 -0
  21. package/configurations/framework/react/manifest.toml +93 -0
  22. package/configurations/framework/react/rules/REACT.md +108 -0
  23. package/configurations/framework/react-dom/eslint-presets.json +110 -0
  24. package/configurations/framework/react-dom/manifest.toml +24 -0
  25. package/configurations/framework/react-native/manifest.toml +46 -0
  26. package/configurations/framework/react-native/rules/REACT-NATIVE.md +51 -0
  27. package/configurations/framework/site/manifest.toml +170 -0
  28. package/configurations/framework/site/rules/SITE.md +20 -0
  29. package/configurations/framework/svelte/eslint-presets.json +67 -0
  30. package/configurations/framework/svelte/manifest.toml +83 -0
  31. package/configurations/framework/svelte/rules/SVELTE.md +48 -0
  32. package/configurations/framework/vue/eslint-presets.json +180 -0
  33. package/configurations/framework/vue/manifest.toml +83 -0
  34. package/configurations/framework/vue/rules/VUE.md +41 -0
  35. package/configurations/general/commits/manifest.toml +111 -0
  36. package/configurations/general/commits/rules/GIT.md +31 -0
  37. package/configurations/general/coverage/manifest.toml +3 -0
  38. package/configurations/general/dependencies/manifest.toml +159 -0
  39. package/configurations/general/dependencies/rules/DEPENDENCIES.md +30 -0
  40. package/configurations/general/dependencies/syncpack.json +15 -0
  41. package/configurations/general/docs/manifest.toml +79 -0
  42. package/configurations/general/docs/rules/DOCS.md +86 -0
  43. package/configurations/general/duplication/manifest.toml +32 -0
  44. package/configurations/general/engineering/manifest.toml +8 -0
  45. package/configurations/general/engineering/rules/agent/PLANNING.md +42 -0
  46. package/configurations/general/engineering/rules/agent/SUPPRESSIONS.md +16 -0
  47. package/configurations/general/engineering/rules/agent/TALKING.md +3 -0
  48. package/configurations/general/engineering/rules/agent/TASKS.md +19 -0
  49. package/configurations/general/engineering/rules/agent/WORKING.md +83 -0
  50. package/configurations/general/engineering/rules/code/ACCESSIBILITY.md +32 -0
  51. package/configurations/general/engineering/rules/code/CLI.md +37 -0
  52. package/configurations/general/engineering/rules/code/COMMENTS.md +38 -0
  53. package/configurations/general/engineering/rules/code/CONFIGURATION.md +25 -0
  54. package/configurations/general/engineering/rules/code/ERRORS.md +49 -0
  55. package/configurations/general/engineering/rules/code/HTTP.md +46 -0
  56. package/configurations/general/engineering/rules/code/LOGGING.md +55 -0
  57. package/configurations/general/engineering/rules/code/TESTING.md +58 -0
  58. package/configurations/general/files/manifest.toml +141 -0
  59. package/configurations/general/files/rules/YAML.md +19 -0
  60. package/configurations/general/format/manifest.toml +152 -0
  61. package/configurations/general/gspot/manifest.toml +65 -0
  62. package/configurations/general/gspot/rules/GENERATED.md +10 -0
  63. package/configurations/general/licenses/manifest.toml +33 -0
  64. package/configurations/general/naming/defaults.json +423 -0
  65. package/configurations/general/naming/manifest.toml +35 -0
  66. package/configurations/general/naming/rules/NAMING.md +179 -0
  67. package/configurations/general/prose/manifest.toml +86 -0
  68. package/configurations/general/prose/rules/WRITING.md +31 -0
  69. package/configurations/general/prose/vale/styles/LICENSES.md +55 -0
  70. package/configurations/general/prose/vale/styles/gspot/ampm.yml +8 -0
  71. package/configurations/general/prose/vale/styles/gspot/conscious-language.yml +16 -0
  72. package/configurations/general/prose/vale/styles/gspot/contractions.yml +43 -0
  73. package/configurations/general/prose/vale/styles/gspot/currency.yml +8 -0
  74. package/configurations/general/prose/vale/styles/gspot/dashes.yml +8 -0
  75. package/configurations/general/prose/vale/styles/gspot/date-ordinals.yml +41 -0
  76. package/configurations/general/prose/vale/styles/gspot/dates.yml +7 -0
  77. package/configurations/general/prose/vale/styles/gspot/file-paths.yml +7 -0
  78. package/configurations/general/prose/vale/styles/gspot/future.yml +17 -0
  79. package/configurations/general/prose/vale/styles/gspot/hedging.yml +22 -0
  80. package/configurations/general/prose/vale/styles/gspot/history.yml +16 -0
  81. package/configurations/general/prose/vale/styles/gspot/idioms.yml +21 -0
  82. package/configurations/general/prose/vale/styles/gspot/interface-verbs.yml +11 -0
  83. package/configurations/general/prose/vale/styles/gspot/jargon.yml +11 -0
  84. package/configurations/general/prose/vale/styles/gspot/leading-conjunctions.yml +12 -0
  85. package/configurations/general/prose/vale/styles/gspot/link-text.yml +8 -0
  86. package/configurations/general/prose/vale/styles/gspot/locations.yml +14 -0
  87. package/configurations/general/prose/vale/styles/gspot/marketing.yml +26 -0
  88. package/configurations/general/prose/vale/styles/gspot/merge-conflict-markers.yml +13 -0
  89. package/configurations/general/prose/vale/styles/gspot/militaristic-language.yml +22 -0
  90. package/configurations/general/prose/vale/styles/gspot/modals.yml +9 -0
  91. package/configurations/general/prose/vale/styles/gspot/numbered-units.yml +18 -0
  92. package/configurations/general/prose/vale/styles/gspot/obvious-fields.yml +14 -0
  93. package/configurations/general/prose/vale/styles/gspot/ordinal-adverbs.yml +15 -0
  94. package/configurations/general/prose/vale/styles/gspot/percentage-numbers.yml +8 -0
  95. package/configurations/general/prose/vale/styles/gspot/placeholders.yml +7 -0
  96. package/configurations/general/prose/vale/styles/gspot/product-centric-writing.yml +8 -0
  97. package/configurations/general/prose/vale/styles/gspot/punctuated-headings.yml +11 -0
  98. package/configurations/general/prose/vale/styles/gspot/self-reference.yml +15 -0
  99. package/configurations/general/prose/vale/styles/gspot/session-identifiers.yml +11 -0
  100. package/configurations/general/prose/vale/styles/gspot/since.yml +6 -0
  101. package/configurations/general/prose/vale/styles/gspot/straight-quotes.yml +11 -0
  102. package/configurations/general/prose/vale/styles/gspot/suspended-hyphens.yml +8 -0
  103. package/configurations/general/prose/vale/styles/gspot/symbols.yml +8 -0
  104. package/configurations/general/prose/vale/styles/gspot/time-ranges.yml +14 -0
  105. package/configurations/general/prose/vale/styles/gspot/url-prepositions.yml +10 -0
  106. package/configurations/general/prose/vale/styles/gspot/version-range.yml +8 -0
  107. package/configurations/general/repository/manifest.toml +24 -0
  108. package/configurations/general/secrets/gitleaks.toml +2 -0
  109. package/configurations/general/secrets/manifest.toml +125 -0
  110. package/configurations/general/secrets/rules/SECRETS.md +13 -0
  111. package/configurations/general/security/manifest.toml +77 -0
  112. package/configurations/general/security/rules/SECURITY.md +55 -0
  113. package/configurations/general/spelling/manifest.toml +46 -0
  114. package/configurations/general/structure/manifest.toml +70 -0
  115. package/configurations/infrastructure/ansible/manifest.toml +33 -0
  116. package/configurations/infrastructure/docker/manifest.toml +127 -0
  117. package/configurations/infrastructure/docker/rules/DOCKER.md +135 -0
  118. package/configurations/infrastructure/docker/trivyignore +2 -0
  119. package/configurations/infrastructure/github-actions/manifest.toml +76 -0
  120. package/configurations/infrastructure/github-actions/rules/GITHUB-ACTIONS.md +43 -0
  121. package/configurations/infrastructure/github-actions/zizmor.yml +3 -0
  122. package/configurations/infrastructure/nginx/manifest.toml +51 -0
  123. package/configurations/infrastructure/nginx/rules/NGINX.md +38 -0
  124. package/configurations/infrastructure/openapi/manifest.toml +50 -0
  125. package/configurations/infrastructure/openapi/rules/OPENAPI.md +39 -0
  126. package/configurations/infrastructure/xcode/manifest.toml +131 -0
  127. package/configurations/infrastructure/xcode/rules/XCODE.md +34 -0
  128. package/configurations/language/bash/manifest.toml +261 -0
  129. package/configurations/language/bash/rules/BASH.md +106 -0
  130. package/configurations/language/bash/rules/LANGUAGE.md +213 -0
  131. package/configurations/language/bash/rules/NAMING.md +62 -0
  132. package/configurations/language/bash/rules/OPERATIONS.md +77 -0
  133. package/configurations/language/bash/rules/SAFETY.md +222 -0
  134. package/configurations/language/bash/semgrep/bash.yml +30 -0
  135. package/configurations/language/css/manifest.toml +98 -0
  136. package/configurations/language/css/rules/CSS.md +28 -0
  137. package/configurations/language/css/rules/NAMING.md +17 -0
  138. package/configurations/language/css/rules/TAILWIND.md +26 -0
  139. package/configurations/language/css/stylelint-rule-names.json +89 -0
  140. package/configurations/language/html/manifest.toml +59 -0
  141. package/configurations/language/html/rules/HTML.md +27 -0
  142. package/configurations/language/html/rules/NAMING.md +16 -0
  143. package/configurations/language/javascript/eslint-presets.json +997 -0
  144. package/configurations/language/javascript/eslint-rule-names.json +299 -0
  145. package/configurations/language/javascript/eslint-runtime-names.json +61 -0
  146. package/configurations/language/javascript/manifest.toml +393 -0
  147. package/configurations/language/javascript/rules/BUN.md +13 -0
  148. package/configurations/language/javascript/rules/COMPONENTS.md +18 -0
  149. package/configurations/language/javascript/rules/DENO.md +15 -0
  150. package/configurations/language/javascript/rules/JAVASCRIPT.md +60 -0
  151. package/configurations/language/javascript/rules/NAMING.md +31 -0
  152. package/configurations/language/javascript/rules/NODE.md +21 -0
  153. package/configurations/language/javascript/rules/PLAYWRIGHT.md +34 -0
  154. package/configurations/language/javascript/semgrep/javascript.yml +84 -0
  155. package/configurations/language/markdown/manifest.toml +85 -0
  156. package/configurations/language/markdown/markdownlint-cli2.mjs +19 -0
  157. package/configurations/language/python/manifest.toml +621 -0
  158. package/configurations/language/python/rules/DESIGN.md +136 -0
  159. package/configurations/language/python/rules/FLOW.md +124 -0
  160. package/configurations/language/python/rules/NAMING.md +53 -0
  161. package/configurations/language/python/rules/PACKAGING.md +49 -0
  162. package/configurations/language/python/rules/PYTHON.md +136 -0
  163. package/configurations/language/python/rules/TYPING.md +132 -0
  164. package/configurations/language/sql/manifest.toml +68 -0
  165. package/configurations/language/sql/rules/NAMING.md +90 -0
  166. package/configurations/language/sql/rules/SQL.md +9 -0
  167. package/configurations/language/swift/manifest.toml +164 -0
  168. package/configurations/language/swift/rules/NAMING.md +88 -0
  169. package/configurations/language/swift/rules/SWIFT.md +134 -0
  170. package/configurations/language/swift/rules/SWIFTUI.md +61 -0
  171. package/configurations/language/swift/rules/UIKIT.md +99 -0
  172. package/configurations/language/swift/semgrep/swift.yml +126 -0
  173. package/configurations/language/typescript/eslint-presets.json +215 -0
  174. package/configurations/language/typescript/manifest.toml +72 -0
  175. package/configurations/language/typescript/rules/NAMING.md +73 -0
  176. package/configurations/language/typescript/rules/TYPESCRIPT.md +79 -0
  177. package/configurations/library/drizzle/manifest.toml +68 -0
  178. package/configurations/library/drizzle/rules/DRIZZLE.md +44 -0
  179. package/configurations/library/react-hook-form/manifest.toml +15 -0
  180. package/configurations/library/react-hook-form/rules/REACT-HOOK-FORM.md +48 -0
  181. package/configurations/library/swift-snapshot-testing/manifest.toml +32 -0
  182. package/configurations/library/tanstack-query/eslint-presets.json +21 -0
  183. package/configurations/library/tanstack-query/manifest.toml +26 -0
  184. package/configurations/library/tanstack-query/rules/TANSTACK-QUERY.md +41 -0
  185. package/configurations/library/testing-library/eslint-presets.json +191 -0
  186. package/configurations/library/testing-library/manifest.toml +47 -0
  187. package/configurations/library/translations/manifest.toml +40 -0
  188. package/configurations/library/translations/rules/NEXT-INTL.md +33 -0
  189. package/configurations/library/translations/rules/TRANSLATIONS.md +102 -0
  190. package/configurations/library/trpc/manifest.toml +14 -0
  191. package/configurations/library/trpc/rules/TRPC.md +43 -0
  192. package/configurations/library/zod/manifest.toml +25 -0
  193. package/configurations/library/zod/rules/ZOD.md +44 -0
  194. package/configurations/library/zustand/manifest.toml +18 -0
  195. package/configurations/library/zustand/rules/ZUSTAND.md +106 -0
  196. package/configurations/platform/cloudflare/manifest.toml +94 -0
  197. package/configurations/platform/cloudflare/rules/CLOUDFLARE.md +23 -0
  198. package/configurations/platform/cloudflare/semgrep/cloudflare.yml +12 -0
  199. package/configurations/platform/supabase/manifest.toml +112 -0
  200. package/configurations/platform/supabase/rules/SUPABASE.md +129 -0
  201. package/configurations/platform/supabase/semgrep/supabase.yml +60 -0
  202. package/configurations/testing/jest/manifest.toml +54 -0
  203. package/configurations/testing/pytest/manifest.toml +53 -0
  204. package/configurations/testing/swift-tests/manifest.toml +52 -0
  205. package/configurations/testing/swift-tests/rules/SWIFT-TESTS.md +79 -0
  206. package/configurations/testing/vitest/eslint-presets.json +22 -0
  207. package/configurations/testing/vitest/manifest.toml +69 -0
  208. package/configurations/testing/vitest/rules/VITEST.md +18 -0
  209. package/dist/LICENSE.md +201 -0
  210. package/dist/THIRD-PARTY-NOTICES.md +25 -0
  211. package/dist/eslint-rule-levels.json +10 -0
  212. package/dist/gspot.js +30740 -0
  213. package/dist/linkinator-program.js +65 -0
  214. package/dist/purgecss-program.js +51 -0
  215. package/dist/tool-versions.json +3 -0
  216. package/grammars/bash.wasm +0 -0
  217. package/grammars/css.wasm +0 -0
  218. package/grammars/html.wasm +0 -0
  219. package/grammars/javascript.wasm +0 -0
  220. package/grammars/licenses/tree-sitter-bash.txt +21 -0
  221. package/grammars/licenses/tree-sitter-css.txt +21 -0
  222. package/grammars/licenses/tree-sitter-html.txt +21 -0
  223. package/grammars/licenses/tree-sitter-javascript.txt +21 -0
  224. package/grammars/licenses/tree-sitter-python.txt +21 -0
  225. package/grammars/licenses/tree-sitter-swift.txt +21 -0
  226. package/grammars/licenses/tree-sitter-typescript.txt +21 -0
  227. package/grammars/python.wasm +0 -0
  228. package/grammars/swift.wasm +0 -0
  229. package/grammars/tsx.wasm +0 -0
  230. package/grammars/typescript.wasm +0 -0
  231. package/gspot.schema.json +45991 -0
  232. package/package.json +93 -5
@@ -0,0 +1,152 @@
1
+ allowed_words = ["Prettier"]
2
+
3
+ [configuration]
4
+ always_selected = true
5
+ title = "Format"
6
+ description = "One [format] block every formatter reads, so indentation cannot disagree between Prettier, shfmt, Ruff, and markdownlint."
7
+
8
+ [files]
9
+ extensions = [".ts", ".tsx", ".mts", ".cts", ".js", ".mjs", ".cjs", ".jsx", ".json", ".jsonc", ".json5", ".md", ".mdx", ".css", ".scss", ".html", ".yml", ".yaml", ".vue", ".graphql"]
10
+ prettier_plugins = true
11
+
12
+ [[tool]]
13
+ name = "prettier"
14
+ crash_pattern = "\\[error\\] (?:No parser|Cannot find|Invalid)"
15
+ version = "3.8.1"
16
+ npm = "prettier"
17
+ [[tool.replace]]
18
+ file = ".prettierrc"
19
+ shared = false
20
+
21
+ [[tool.replace]]
22
+ file = ".prettierrc.json"
23
+ shared = false
24
+
25
+ [[tool.replace]]
26
+ file = ".prettierrc.yml"
27
+ shared = false
28
+
29
+ [[tool.replace]]
30
+ file = ".prettierrc.yaml"
31
+ shared = false
32
+
33
+ [[tool.replace]]
34
+ file = ".prettierrc.json5"
35
+ shared = false
36
+
37
+ [[tool.replace]]
38
+ file = ".prettierrc.js"
39
+ shared = false
40
+
41
+ [[tool.replace]]
42
+ file = "prettier.config.js"
43
+ shared = false
44
+
45
+ [[tool.replace]]
46
+ file = ".prettierrc.ts"
47
+ shared = false
48
+
49
+ [[tool.replace]]
50
+ file = "prettier.config.ts"
51
+ shared = false
52
+
53
+ [[tool.replace]]
54
+ file = ".prettierrc.mjs"
55
+ shared = false
56
+
57
+ [[tool.replace]]
58
+ file = "prettier.config.mjs"
59
+ shared = false
60
+
61
+ [[tool.replace]]
62
+ file = ".prettierrc.mts"
63
+ shared = false
64
+
65
+ [[tool.replace]]
66
+ file = "prettier.config.mts"
67
+ shared = false
68
+
69
+ [[tool.replace]]
70
+ file = ".prettierrc.cjs"
71
+ shared = false
72
+
73
+ [[tool.replace]]
74
+ file = "prettier.config.cjs"
75
+ shared = false
76
+
77
+ [[tool.replace]]
78
+ file = ".prettierrc.cts"
79
+ shared = false
80
+
81
+ [[tool.replace]]
82
+ file = "prettier.config.cts"
83
+ shared = false
84
+
85
+ [[tool.replace]]
86
+ file = ".prettierrc.toml"
87
+ shared = false
88
+
89
+ [[tool.replace]]
90
+ file = ".prettierignore"
91
+ shared = false
92
+
93
+ [[tool.replace]]
94
+ file = "package.json"
95
+ key = "prettier"
96
+ shared = true
97
+
98
+ [[tool.replace]]
99
+ file = "package.yaml"
100
+ key = "prettier"
101
+ shared = true
102
+
103
+ [[tool]]
104
+ name = "editorconfig-checker"
105
+ version = "3.4.0"
106
+ env = { EC_VERSION = "v3.4.0" }
107
+ npm = { name = "editorconfig-checker", version = "7.0.0" }
108
+ mise = { name = "npm:editorconfig-checker", version = "7.0.0" }
109
+ brew = "editorconfig-checker"
110
+ github = { name = "editorconfig-checker/editorconfig-checker", version = "v3.4.0" }
111
+ [[tool.replace]]
112
+ file = ".editorconfig"
113
+ shared = false
114
+
115
+ [[tool_file]]
116
+ target = ".editorconfig"
117
+ tool = ["editorconfig-checker", "prettier"]
118
+
119
+ [[tool_file]]
120
+ target = ".gspot/config/prettier.json"
121
+ tool = "prettier"
122
+ pointer = { path = "prettier.config.mjs", when = { configuration = "javascript" } }
123
+
124
+ [[tool_file]]
125
+ target = ".prettierignore"
126
+ tool = "prettier"
127
+
128
+ [[check]]
129
+ name = "prettier"
130
+ example = "A selected JavaScript file containing `const value={enabled:true};` differs from the configured Prettier output. Run the formatter and retain its spacing and wrapping changes before rerunning."
131
+ level = "recommended"
132
+ stage = "commit"
133
+ command = ["prettier", "--check", "--config", "{tool_file:prettier}", "--ignore-path", ".prettierignore", "--log-level", "warn", "{files}"]
134
+ exit_codes = [1]
135
+ fix = ["prettier", "--write", "--config", "{tool_file:prettier}", "--ignore-path", ".prettierignore", "--log-level", "warn", "{files}"]
136
+ output = { format = "regex", pattern = "^\\[warn\\] (?<file>[^\\s].*[^\\s.])$", message = "This file is not formatted the way Prettier formats it." }
137
+ summary = "Checks that every file Prettier formats is already formatted that way."
138
+ why = "Formatting by hand differs by editor; one formatter keeps diffs about the change and not the spacing."
139
+ help = "Run gspot check --fix to format every file, or prettier --write on one file."
140
+
141
+ [[check]]
142
+ name = "editorconfig-checker"
143
+ example = "A file containing CRLF line endings when `.editorconfig` requires LF reports a line-ending finding. Save it with LF endings and rerun. Use the exact configured indentation and final-newline settings as well."
144
+ level = "recommended"
145
+ stage = "commit"
146
+ command = ["editorconfig-checker", "-no-color", "-disable-indentation", "{files}"]
147
+ tool = "editorconfig-checker"
148
+ files = { paths = ["**"] }
149
+ output = { format = "grouped", file_pattern = "^(?<file>.+):$", pattern = "^\\s+(?:(?<line>\\d+)(?:-\\d+)?: )?(?<message>\\S.*)$" }
150
+ summary = "Checks line endings, final newlines and trailing whitespace in every file against .editorconfig."
151
+ why = "These rules cover the files no formatter touches, so a stray tab or missing newline never lands in a diff. Indentation is the formatters' job and is not checked here."
152
+ help = "Fix the line the checker names; most editors apply .editorconfig on save."
@@ -0,0 +1,65 @@
1
+ allowed_words = ["gspot"]
2
+ [configuration]
3
+ title = "gspot"
4
+ always_selected = true
5
+ description = "Checks gspot.toml and generated files, checks suppression reasons with gspot/suppressions, and requires Node.js as a system tool."
6
+
7
+ [[tool]]
8
+ name = "node"
9
+ install_hint = "Install Node.js 24.2.0 or newer. On macOS, run brew install node@24. On Windows, run winget install OpenJS.NodeJS.LTS."
10
+ min_version = "24.2.0"
11
+ version_command = ["--version"]
12
+ system = true
13
+ brew = "node@24"
14
+ winget = "OpenJS.NodeJS.LTS"
15
+
16
+ [[check]]
17
+ name = "settings-format"
18
+ example = "A hand-edited gspot.toml with separated tables reports a layout finding. Run gspot check --fix --only gspot/settings-format to regroup its tables and retain their comments."
19
+ level = "recommended"
20
+ stage = "commit"
21
+ files = { paths = ["gspot.toml"] }
22
+ summary = "Keeps gspot.toml formatted."
23
+ why = "One settings layout keeps related settings and their reasons together."
24
+ help = "Run gspot check --fix --only gspot/settings-format."
25
+
26
+ [[check]]
27
+ name = "generated-files"
28
+ example = "A file under `.gspot/config/` edited by hand differs from what gspot writes from gspot.toml and reports drift. Change the settings in gspot.toml and run gspot apply, or move the edited file aside so apply writes it again."
29
+ level = "recommended"
30
+ stage = "commit"
31
+ runs = "once"
32
+ summary = "Compares every generated file with what gspot writes from the settings: a changed, missing, or stray file, or one with merge conflict markers, is a finding."
33
+ why = "A generated file that no longer matches the settings runs a tool with settings nobody chose."
34
+ help = "Change the settings in gspot.toml, then run gspot apply. After a merge, run gspot apply and then gspot install."
35
+
36
+ [[check]]
37
+ name = "unused-entries"
38
+ example = "An `[[ignore]]` entry for `bash/shellcheck` with `paths = [\"nowhere/**\"]` reports `unmatched-pattern` when that path matches no selected file. Remove the obsolete entry or correct its path to the actual exception, preserving its reason."
39
+ level = "recommended"
40
+ stage = "commit"
41
+ runs = "once"
42
+ summary = "Checks settings path patterns against tracked files."
43
+ why = "An ignore or declaration that matches nothing misleads the next reader."
44
+ help = "Remove the entry or correct its path."
45
+
46
+ [[check]]
47
+ name = "settings"
48
+ example = "An unknown setting or a loosened limit without a reason reports its gspot.toml key path. Correct the declaration or record the required reason."
49
+ level = "recommended"
50
+ stage = "commit"
51
+ runs = "once"
52
+ files = { paths = ["gspot.toml"] }
53
+ summary = "Checks the captured gspot.toml declarations for invalid settings and missing reasons."
54
+ why = "A setting no check reads, or an unexplained loosening, can leave repository settings unenforced."
55
+ help = "Fix the gspot.toml key the finding names, and give each loosened value a reason."
56
+
57
+ [[check]]
58
+ name = "suppressions"
59
+ example = "An `eslint-disable-next-line` comment without a reason reports an unexplained suppression. Fix the underlying finding and remove the suppression, or append a specific `-- reason: ...` explanation of the required exception."
60
+ level = "recommended"
61
+ stage = "commit"
62
+ runs = "once"
63
+ summary = "Checks suppression reasons; Semgrep and Vale directives are refused outright."
64
+ why = "A suppression with no reason hides a finding nobody reviewed."
65
+ help = "Use the tool's suppression syntax to write a meaningful reason, or fix the finding and remove the suppression."
@@ -0,0 +1,10 @@
1
+ # Generated Code
2
+
3
+ - Never edit a generated file by hand. Change the source or the generator and regenerate
4
+ through its generation command.
5
+ - Mark generated paths in `.gitattributes` with `linguist-generated`; for example,
6
+ `output/** linguist-generated`. Where the format allows comments, add a header that names the
7
+ generation command. A folder named `generated/` does not make its files generated.
8
+ - A generated file equals a fresh run of its command. A difference shows a defect in the change.
9
+ - Do not commit build output (`dist/`, `coverage/`, compiled assets) unless the deployment reads
10
+ it from the repository, and then declare it.
@@ -0,0 +1,33 @@
1
+ [configuration]
2
+ title = "Licenses"
3
+ description = "Every installed dependency reports a license from the allowed list, or has an allowed-package record whose reason names its license."
4
+
5
+ [files]
6
+ filenames = ["package.json", "pyproject.toml"]
7
+
8
+ [[tool]]
9
+ name = "license-checker-rseidelsohn"
10
+ version = "5.0.1"
11
+ npm = "license-checker-rseidelsohn"
12
+ version_exit_code = 1
13
+ mise = "npm:license-checker-rseidelsohn"
14
+ [[tool.replace]]
15
+ file = ".license-checker.json"
16
+ shared = false
17
+
18
+ [[tool]]
19
+ name = "pip-licenses"
20
+ version = "5.5.5"
21
+ pypi = "pip-licenses"
22
+ mise = "pipx:pip-licenses"
23
+
24
+ [[check]]
25
+ name = "allowed"
26
+ example = "An installed package whose reported license is outside licenses.allowed reports a finding for that exact package version. Replace it with an acceptable dependency, or write a [[licenses.allowed_package]] record with name, version, and a reason naming the license. A record for another version does not apply."
27
+ level = "recommended"
28
+ stage = "push"
29
+ runs = "once"
30
+ files = { filenames = ["package.json", "pyproject.toml"] }
31
+ summary = "Compares the license every installed npm or Python package reports with the allowed list and the allowed-package records."
32
+ why = "A license the project cannot accept arrives silently with a transitive dependency."
33
+ help = "Replace the package, or write a [[licenses.allowed_package]] record by hand with its name, exact version, and a reason naming the license."
@@ -0,0 +1,423 @@
1
+ {
2
+ "groups": {
3
+ "containers": {
4
+ "terms": [
5
+ "core",
6
+ "common",
7
+ "generic",
8
+ "misc",
9
+ "stuff",
10
+ "thing",
11
+ "things",
12
+ "details",
13
+ "info",
14
+ "object",
15
+ "taxonomy",
16
+ "tmp",
17
+ "temp"
18
+ ]
19
+ },
20
+ "roles": {
21
+ "terms": [
22
+ "helper",
23
+ "helpers",
24
+ "util",
25
+ "utils",
26
+ "manager",
27
+ "handler",
28
+ "processor",
29
+ "wrapper",
30
+ "shim",
31
+ "shims",
32
+ "support"
33
+ ]
34
+ },
35
+ "marketing": {
36
+ "terms": [
37
+ "advanced",
38
+ "enhanced",
39
+ "improved",
40
+ "intelligent",
41
+ "smart",
42
+ "modern",
43
+ "robust",
44
+ "seamless",
45
+ "ultimate",
46
+ "comprehensive",
47
+ "optimized",
48
+ "reusable",
49
+ "custom",
50
+ "final",
51
+ "latest",
52
+ "old",
53
+ "new",
54
+ "legacy",
55
+ "plus",
56
+ "combined"
57
+ ]
58
+ },
59
+ "defensive": {
60
+ "terms": [
61
+ "ensure",
62
+ "maybe",
63
+ "likely",
64
+ "should",
65
+ "if needed",
66
+ "ifneeded",
67
+ "if available",
68
+ "ifavailable",
69
+ "if changed",
70
+ "ifchanged",
71
+ "if possible",
72
+ "ifpossible",
73
+ "or throw",
74
+ "orthrow",
75
+ "waitfor",
76
+ "with retries",
77
+ "transient",
78
+ "belt and suspenders",
79
+ "fallback",
80
+ "load bearing",
81
+ "load-bearing",
82
+ "loadbearing"
83
+ ]
84
+ },
85
+ "conjunctions": {
86
+ "terms": ["and", "or", "with", "when", "what", "whatever", "once", "plus"]
87
+ },
88
+ "tests": {
89
+ "terms": [
90
+ "test case",
91
+ "testcase",
92
+ "under test",
93
+ "undertest",
94
+ "edge case",
95
+ "edge cases",
96
+ "snapshot",
97
+ "snapshots",
98
+ "actual"
99
+ ]
100
+ },
101
+ "folders": {
102
+ "terms": ["common", "core", "helper", "helpers", "util", "utils", "support", "misc", "shared"]
103
+ }
104
+ },
105
+ "reserved": {
106
+ "config": [
107
+ "directories",
108
+ "packages",
109
+ "files",
110
+ "modules",
111
+ "variables",
112
+ "constants",
113
+ "parameters",
114
+ "properties",
115
+ "attributes",
116
+ "enum_cases"
117
+ ]
118
+ },
119
+ "languages": {
120
+ "typescript": {
121
+ "acronyms": "word",
122
+ "categories": {
123
+ "files": {
124
+ "cases": ["kebab"]
125
+ },
126
+ "directories": {
127
+ "cases": ["kebab"]
128
+ },
129
+ "types": {
130
+ "cases": ["pascal"]
131
+ },
132
+ "classes": {
133
+ "cases": ["pascal"]
134
+ },
135
+ "functions": {
136
+ "cases": ["camel"]
137
+ },
138
+ "methods": {
139
+ "cases": ["camel"]
140
+ },
141
+ "parameters": {
142
+ "cases": ["camel"]
143
+ },
144
+ "variables": {
145
+ "cases": ["camel", "upper-snake"]
146
+ },
147
+ "constants": {
148
+ "cases": ["camel", "upper-snake"]
149
+ },
150
+ "properties": {
151
+ "cases": ["camel", "upper-snake"]
152
+ },
153
+ "routes": {
154
+ "cases": ["kebab"]
155
+ },
156
+ "path_parameters": {
157
+ "cases": ["camel"]
158
+ },
159
+ "operation_ids": {
160
+ "cases": ["camel"]
161
+ },
162
+ "enum_cases": {
163
+ "cases": ["pascal", "camel"]
164
+ }
165
+ }
166
+ },
167
+ "javascript": {
168
+ "acronyms": "word",
169
+ "categories": {
170
+ "files": {
171
+ "cases": ["kebab"]
172
+ },
173
+ "directories": {
174
+ "cases": ["kebab"]
175
+ },
176
+ "types": {
177
+ "cases": ["pascal"]
178
+ },
179
+ "classes": {
180
+ "cases": ["pascal"]
181
+ },
182
+ "functions": {
183
+ "cases": ["camel"]
184
+ },
185
+ "methods": {
186
+ "cases": ["camel"]
187
+ },
188
+ "parameters": {
189
+ "cases": ["camel"]
190
+ },
191
+ "variables": {
192
+ "cases": ["camel", "upper-snake"]
193
+ },
194
+ "constants": {
195
+ "cases": ["camel", "upper-snake"]
196
+ },
197
+ "properties": {
198
+ "cases": ["camel", "upper-snake"]
199
+ },
200
+ "routes": {
201
+ "cases": ["kebab"]
202
+ }
203
+ }
204
+ },
205
+ "python": {
206
+ "acronyms": "lower",
207
+ "categories": {
208
+ "files": {
209
+ "cases": ["snake"]
210
+ },
211
+ "directories": {
212
+ "cases": ["snake"]
213
+ },
214
+ "modules": {
215
+ "cases": ["snake"]
216
+ },
217
+ "packages": {
218
+ "cases": ["snake"]
219
+ },
220
+ "type_aliases": {
221
+ "cases": ["pascal"]
222
+ },
223
+ "variables": {
224
+ "cases": ["snake", "upper-snake"]
225
+ },
226
+ "constants": {
227
+ "cases": ["upper-snake"]
228
+ },
229
+ "attributes": {
230
+ "cases": ["snake", "upper-snake"]
231
+ },
232
+ "properties": {
233
+ "cases": ["snake"]
234
+ }
235
+ }
236
+ },
237
+ "swift": {
238
+ "acronyms": "initialism",
239
+ "categories": {
240
+ "files": {
241
+ "cases": ["pascal", "pascal-extension"]
242
+ },
243
+ "directories": {
244
+ "cases": ["pascal"]
245
+ },
246
+ "functions": {
247
+ "cases": ["camel"]
248
+ },
249
+ "methods": {
250
+ "cases": ["camel"]
251
+ }
252
+ }
253
+ },
254
+ "bash": {
255
+ "acronyms": "lower",
256
+ "categories": {
257
+ "files": {
258
+ "cases": ["kebab", "snake"]
259
+ },
260
+ "directories": {
261
+ "cases": ["kebab", "snake"]
262
+ },
263
+ "functions": {
264
+ "cases": ["snake"]
265
+ },
266
+ "variables": {
267
+ "cases": ["snake", "upper-snake"]
268
+ },
269
+ "constants": {
270
+ "cases": ["upper-snake"]
271
+ }
272
+ }
273
+ },
274
+ "sql": {
275
+ "acronyms": "lower",
276
+ "categories": {
277
+ "files": {
278
+ "cases": ["timestamp-snake", "snake"]
279
+ },
280
+ "directories": {
281
+ "cases": ["snake"]
282
+ },
283
+ "functions": {
284
+ "cases": ["snake"]
285
+ },
286
+ "parameters": {
287
+ "cases": ["snake"]
288
+ },
289
+ "schemas": {
290
+ "cases": ["snake"]
291
+ },
292
+ "tables": {
293
+ "cases": ["snake"]
294
+ },
295
+ "columns": {
296
+ "cases": ["snake"]
297
+ },
298
+ "indexes": {
299
+ "cases": ["snake"]
300
+ },
301
+ "triggers": {
302
+ "cases": ["snake"]
303
+ },
304
+ "policies": {
305
+ "cases": ["snake"]
306
+ }
307
+ }
308
+ }
309
+ },
310
+ "allowed_names": [
311
+ "setTimeout",
312
+ "clearTimeout",
313
+ "setInterval",
314
+ "clearInterval",
315
+ "setImmediate",
316
+ "queueMicrotask",
317
+ "structuredClone",
318
+ "URLSearchParams",
319
+ "console",
320
+ "document",
321
+ "window",
322
+ "navigator",
323
+ "localStorage",
324
+ "sessionStorage",
325
+ "CustomEvent",
326
+ "HTMLElement",
327
+ "XMLHttpRequest",
328
+ "toJSON",
329
+ "toString",
330
+ "valueOf",
331
+ "GET",
332
+ "POST",
333
+ "PUT",
334
+ "PATCH",
335
+ "DELETE",
336
+ "HEAD",
337
+ "OPTIONS",
338
+ "NODE_ENV",
339
+ "CI",
340
+ "HOME",
341
+ "PATH",
342
+ "PWD",
343
+ "TMPDIR",
344
+ "TERM",
345
+ "SHELL",
346
+ "USER",
347
+ "LANG",
348
+ "NO_COLOR",
349
+ "FORCE_COLOR",
350
+ "GITHUB_TOKEN",
351
+ "GITHUB_ACTIONS",
352
+ "GITHUB_SHA",
353
+ "GITHUB_REF"
354
+ ],
355
+ "allow_digits": false,
356
+ "allow_repeated_words": false,
357
+ "override": [
358
+ {
359
+ "paths": ["**"],
360
+ "categories": ["variables", "parameters"],
361
+ "reason": "Loop and lambda positions take single letters.",
362
+ "allowed_names": ["_", "i", "j", "k", "x", "y", "n"]
363
+ },
364
+ {
365
+ "paths": ["**"],
366
+ "categories": ["directories"],
367
+ "reason": "Tools name these directories.",
368
+ "allowed_names": ["node_modules", "__pycache__", "__tests__", "__mocks__"]
369
+ },
370
+ {
371
+ "paths": ["**"],
372
+ "languages": ["typescript", "javascript"],
373
+ "categories": ["parameters", "variables"],
374
+ "ignored_prefix": "^_+"
375
+ },
376
+ {
377
+ "paths": ["**/.githooks/**", "**/.gspot/hooks/**", "**/.husky/**", "**/hooks/**"],
378
+ "categories": ["files"],
379
+ "reason": "git names its hooks.",
380
+ "allowed_names": [
381
+ "pre-commit",
382
+ "pre-push",
383
+ "commit-msg",
384
+ "post-checkout",
385
+ "post-merge",
386
+ "pre-rebase",
387
+ "prepare-commit-msg"
388
+ ]
389
+ },
390
+ {
391
+ "paths": ["**/e2e/**"],
392
+ "categories": ["directories", "files"],
393
+ "allow_digits": true
394
+ },
395
+ {
396
+ "paths": ["**/migrations/**"],
397
+ "categories": ["files"],
398
+ "allow_digits": true
399
+ }
400
+ ],
401
+ "path_containers": [
402
+ {
403
+ "open": "[",
404
+ "close": "]",
405
+ "category": "path_parameters"
406
+ },
407
+ {
408
+ "open": "(",
409
+ "close": ")",
410
+ "category": "directories"
411
+ },
412
+ {
413
+ "open": "@",
414
+ "close": "",
415
+ "category": "directories"
416
+ },
417
+ {
418
+ "open": "_",
419
+ "close": "",
420
+ "category": "directories"
421
+ }
422
+ ]
423
+ }