@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.
- package/README.md +18 -2
- package/configurations/database/postgres/manifest.toml +114 -0
- package/configurations/database/postgres/rules/POSTGRES.md +78 -0
- package/configurations/framework/astro/eslint-presets.json +138 -0
- package/configurations/framework/astro/manifest.toml +95 -0
- package/configurations/framework/astro/rules/ASTRO.md +39 -0
- package/configurations/framework/expo/manifest.toml +43 -0
- package/configurations/framework/express/manifest.toml +17 -0
- package/configurations/framework/express/rules/EXPRESS.md +73 -0
- package/configurations/framework/express/semgrep/express.yml +71 -0
- package/configurations/framework/fastapi/manifest.toml +11 -0
- package/configurations/framework/fastapi/rules/FASTAPI.md +100 -0
- package/configurations/framework/fastapi/semgrep/fastapi.yml +44 -0
- package/configurations/framework/nestjs/eslint-presets.json +62 -0
- package/configurations/framework/nestjs/manifest.toml +52 -0
- package/configurations/framework/nestjs/rules/NESTJS.md +44 -0
- package/configurations/framework/nextjs/eslint-presets.json +73 -0
- package/configurations/framework/nextjs/manifest.toml +119 -0
- package/configurations/framework/nextjs/rules/NEXTJS.md +43 -0
- package/configurations/framework/react/eslint-presets.json +77 -0
- package/configurations/framework/react/manifest.toml +93 -0
- package/configurations/framework/react/rules/REACT.md +108 -0
- package/configurations/framework/react-dom/eslint-presets.json +110 -0
- package/configurations/framework/react-dom/manifest.toml +24 -0
- package/configurations/framework/react-native/manifest.toml +46 -0
- package/configurations/framework/react-native/rules/REACT-NATIVE.md +51 -0
- package/configurations/framework/site/manifest.toml +170 -0
- package/configurations/framework/site/rules/SITE.md +20 -0
- package/configurations/framework/svelte/eslint-presets.json +67 -0
- package/configurations/framework/svelte/manifest.toml +83 -0
- package/configurations/framework/svelte/rules/SVELTE.md +48 -0
- package/configurations/framework/vue/eslint-presets.json +180 -0
- package/configurations/framework/vue/manifest.toml +83 -0
- package/configurations/framework/vue/rules/VUE.md +41 -0
- package/configurations/general/commits/manifest.toml +111 -0
- package/configurations/general/commits/rules/GIT.md +31 -0
- package/configurations/general/coverage/manifest.toml +3 -0
- package/configurations/general/dependencies/manifest.toml +159 -0
- package/configurations/general/dependencies/rules/DEPENDENCIES.md +30 -0
- package/configurations/general/dependencies/syncpack.json +15 -0
- package/configurations/general/docs/manifest.toml +79 -0
- package/configurations/general/docs/rules/DOCS.md +86 -0
- package/configurations/general/duplication/manifest.toml +32 -0
- package/configurations/general/engineering/manifest.toml +8 -0
- package/configurations/general/engineering/rules/agent/PLANNING.md +42 -0
- package/configurations/general/engineering/rules/agent/SUPPRESSIONS.md +16 -0
- package/configurations/general/engineering/rules/agent/TALKING.md +3 -0
- package/configurations/general/engineering/rules/agent/TASKS.md +19 -0
- package/configurations/general/engineering/rules/agent/WORKING.md +83 -0
- package/configurations/general/engineering/rules/code/ACCESSIBILITY.md +32 -0
- package/configurations/general/engineering/rules/code/CLI.md +37 -0
- package/configurations/general/engineering/rules/code/COMMENTS.md +38 -0
- package/configurations/general/engineering/rules/code/CONFIGURATION.md +25 -0
- package/configurations/general/engineering/rules/code/ERRORS.md +49 -0
- package/configurations/general/engineering/rules/code/HTTP.md +46 -0
- package/configurations/general/engineering/rules/code/LOGGING.md +55 -0
- package/configurations/general/engineering/rules/code/TESTING.md +58 -0
- package/configurations/general/files/manifest.toml +141 -0
- package/configurations/general/files/rules/YAML.md +19 -0
- package/configurations/general/format/manifest.toml +152 -0
- package/configurations/general/gspot/manifest.toml +65 -0
- package/configurations/general/gspot/rules/GENERATED.md +10 -0
- package/configurations/general/licenses/manifest.toml +33 -0
- package/configurations/general/naming/defaults.json +423 -0
- package/configurations/general/naming/manifest.toml +35 -0
- package/configurations/general/naming/rules/NAMING.md +179 -0
- package/configurations/general/prose/manifest.toml +86 -0
- package/configurations/general/prose/rules/WRITING.md +31 -0
- package/configurations/general/prose/vale/styles/LICENSES.md +55 -0
- package/configurations/general/prose/vale/styles/gspot/ampm.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/conscious-language.yml +16 -0
- package/configurations/general/prose/vale/styles/gspot/contractions.yml +43 -0
- package/configurations/general/prose/vale/styles/gspot/currency.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/dashes.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/date-ordinals.yml +41 -0
- package/configurations/general/prose/vale/styles/gspot/dates.yml +7 -0
- package/configurations/general/prose/vale/styles/gspot/file-paths.yml +7 -0
- package/configurations/general/prose/vale/styles/gspot/future.yml +17 -0
- package/configurations/general/prose/vale/styles/gspot/hedging.yml +22 -0
- package/configurations/general/prose/vale/styles/gspot/history.yml +16 -0
- package/configurations/general/prose/vale/styles/gspot/idioms.yml +21 -0
- package/configurations/general/prose/vale/styles/gspot/interface-verbs.yml +11 -0
- package/configurations/general/prose/vale/styles/gspot/jargon.yml +11 -0
- package/configurations/general/prose/vale/styles/gspot/leading-conjunctions.yml +12 -0
- package/configurations/general/prose/vale/styles/gspot/link-text.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/locations.yml +14 -0
- package/configurations/general/prose/vale/styles/gspot/marketing.yml +26 -0
- package/configurations/general/prose/vale/styles/gspot/merge-conflict-markers.yml +13 -0
- package/configurations/general/prose/vale/styles/gspot/militaristic-language.yml +22 -0
- package/configurations/general/prose/vale/styles/gspot/modals.yml +9 -0
- package/configurations/general/prose/vale/styles/gspot/numbered-units.yml +18 -0
- package/configurations/general/prose/vale/styles/gspot/obvious-fields.yml +14 -0
- package/configurations/general/prose/vale/styles/gspot/ordinal-adverbs.yml +15 -0
- package/configurations/general/prose/vale/styles/gspot/percentage-numbers.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/placeholders.yml +7 -0
- package/configurations/general/prose/vale/styles/gspot/product-centric-writing.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/punctuated-headings.yml +11 -0
- package/configurations/general/prose/vale/styles/gspot/self-reference.yml +15 -0
- package/configurations/general/prose/vale/styles/gspot/session-identifiers.yml +11 -0
- package/configurations/general/prose/vale/styles/gspot/since.yml +6 -0
- package/configurations/general/prose/vale/styles/gspot/straight-quotes.yml +11 -0
- package/configurations/general/prose/vale/styles/gspot/suspended-hyphens.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/symbols.yml +8 -0
- package/configurations/general/prose/vale/styles/gspot/time-ranges.yml +14 -0
- package/configurations/general/prose/vale/styles/gspot/url-prepositions.yml +10 -0
- package/configurations/general/prose/vale/styles/gspot/version-range.yml +8 -0
- package/configurations/general/repository/manifest.toml +24 -0
- package/configurations/general/secrets/gitleaks.toml +2 -0
- package/configurations/general/secrets/manifest.toml +125 -0
- package/configurations/general/secrets/rules/SECRETS.md +13 -0
- package/configurations/general/security/manifest.toml +77 -0
- package/configurations/general/security/rules/SECURITY.md +55 -0
- package/configurations/general/spelling/manifest.toml +46 -0
- package/configurations/general/structure/manifest.toml +70 -0
- package/configurations/infrastructure/ansible/manifest.toml +33 -0
- package/configurations/infrastructure/docker/manifest.toml +127 -0
- package/configurations/infrastructure/docker/rules/DOCKER.md +135 -0
- package/configurations/infrastructure/docker/trivyignore +2 -0
- package/configurations/infrastructure/github-actions/manifest.toml +76 -0
- package/configurations/infrastructure/github-actions/rules/GITHUB-ACTIONS.md +43 -0
- package/configurations/infrastructure/github-actions/zizmor.yml +3 -0
- package/configurations/infrastructure/nginx/manifest.toml +51 -0
- package/configurations/infrastructure/nginx/rules/NGINX.md +38 -0
- package/configurations/infrastructure/openapi/manifest.toml +50 -0
- package/configurations/infrastructure/openapi/rules/OPENAPI.md +39 -0
- package/configurations/infrastructure/xcode/manifest.toml +131 -0
- package/configurations/infrastructure/xcode/rules/XCODE.md +34 -0
- package/configurations/language/bash/manifest.toml +261 -0
- package/configurations/language/bash/rules/BASH.md +106 -0
- package/configurations/language/bash/rules/LANGUAGE.md +213 -0
- package/configurations/language/bash/rules/NAMING.md +62 -0
- package/configurations/language/bash/rules/OPERATIONS.md +77 -0
- package/configurations/language/bash/rules/SAFETY.md +222 -0
- package/configurations/language/bash/semgrep/bash.yml +30 -0
- package/configurations/language/css/manifest.toml +98 -0
- package/configurations/language/css/rules/CSS.md +28 -0
- package/configurations/language/css/rules/NAMING.md +17 -0
- package/configurations/language/css/rules/TAILWIND.md +26 -0
- package/configurations/language/css/stylelint-rule-names.json +89 -0
- package/configurations/language/html/manifest.toml +59 -0
- package/configurations/language/html/rules/HTML.md +27 -0
- package/configurations/language/html/rules/NAMING.md +16 -0
- package/configurations/language/javascript/eslint-presets.json +997 -0
- package/configurations/language/javascript/eslint-rule-names.json +299 -0
- package/configurations/language/javascript/eslint-runtime-names.json +61 -0
- package/configurations/language/javascript/manifest.toml +393 -0
- package/configurations/language/javascript/rules/BUN.md +13 -0
- package/configurations/language/javascript/rules/COMPONENTS.md +18 -0
- package/configurations/language/javascript/rules/DENO.md +15 -0
- package/configurations/language/javascript/rules/JAVASCRIPT.md +60 -0
- package/configurations/language/javascript/rules/NAMING.md +31 -0
- package/configurations/language/javascript/rules/NODE.md +21 -0
- package/configurations/language/javascript/rules/PLAYWRIGHT.md +34 -0
- package/configurations/language/javascript/semgrep/javascript.yml +84 -0
- package/configurations/language/markdown/manifest.toml +85 -0
- package/configurations/language/markdown/markdownlint-cli2.mjs +19 -0
- package/configurations/language/python/manifest.toml +621 -0
- package/configurations/language/python/rules/DESIGN.md +136 -0
- package/configurations/language/python/rules/FLOW.md +124 -0
- package/configurations/language/python/rules/NAMING.md +53 -0
- package/configurations/language/python/rules/PACKAGING.md +49 -0
- package/configurations/language/python/rules/PYTHON.md +136 -0
- package/configurations/language/python/rules/TYPING.md +132 -0
- package/configurations/language/sql/manifest.toml +68 -0
- package/configurations/language/sql/rules/NAMING.md +90 -0
- package/configurations/language/sql/rules/SQL.md +9 -0
- package/configurations/language/swift/manifest.toml +164 -0
- package/configurations/language/swift/rules/NAMING.md +88 -0
- package/configurations/language/swift/rules/SWIFT.md +134 -0
- package/configurations/language/swift/rules/SWIFTUI.md +61 -0
- package/configurations/language/swift/rules/UIKIT.md +99 -0
- package/configurations/language/swift/semgrep/swift.yml +126 -0
- package/configurations/language/typescript/eslint-presets.json +215 -0
- package/configurations/language/typescript/manifest.toml +72 -0
- package/configurations/language/typescript/rules/NAMING.md +73 -0
- package/configurations/language/typescript/rules/TYPESCRIPT.md +79 -0
- package/configurations/library/drizzle/manifest.toml +68 -0
- package/configurations/library/drizzle/rules/DRIZZLE.md +44 -0
- package/configurations/library/react-hook-form/manifest.toml +15 -0
- package/configurations/library/react-hook-form/rules/REACT-HOOK-FORM.md +48 -0
- package/configurations/library/swift-snapshot-testing/manifest.toml +32 -0
- package/configurations/library/tanstack-query/eslint-presets.json +21 -0
- package/configurations/library/tanstack-query/manifest.toml +26 -0
- package/configurations/library/tanstack-query/rules/TANSTACK-QUERY.md +41 -0
- package/configurations/library/testing-library/eslint-presets.json +191 -0
- package/configurations/library/testing-library/manifest.toml +47 -0
- package/configurations/library/translations/manifest.toml +40 -0
- package/configurations/library/translations/rules/NEXT-INTL.md +33 -0
- package/configurations/library/translations/rules/TRANSLATIONS.md +102 -0
- package/configurations/library/trpc/manifest.toml +14 -0
- package/configurations/library/trpc/rules/TRPC.md +43 -0
- package/configurations/library/zod/manifest.toml +25 -0
- package/configurations/library/zod/rules/ZOD.md +44 -0
- package/configurations/library/zustand/manifest.toml +18 -0
- package/configurations/library/zustand/rules/ZUSTAND.md +106 -0
- package/configurations/platform/cloudflare/manifest.toml +94 -0
- package/configurations/platform/cloudflare/rules/CLOUDFLARE.md +23 -0
- package/configurations/platform/cloudflare/semgrep/cloudflare.yml +12 -0
- package/configurations/platform/supabase/manifest.toml +112 -0
- package/configurations/platform/supabase/rules/SUPABASE.md +129 -0
- package/configurations/platform/supabase/semgrep/supabase.yml +60 -0
- package/configurations/testing/jest/manifest.toml +54 -0
- package/configurations/testing/pytest/manifest.toml +53 -0
- package/configurations/testing/swift-tests/manifest.toml +52 -0
- package/configurations/testing/swift-tests/rules/SWIFT-TESTS.md +79 -0
- package/configurations/testing/vitest/eslint-presets.json +22 -0
- package/configurations/testing/vitest/manifest.toml +69 -0
- package/configurations/testing/vitest/rules/VITEST.md +18 -0
- package/dist/LICENSE.md +201 -0
- package/dist/THIRD-PARTY-NOTICES.md +25 -0
- package/dist/eslint-rule-levels.json +10 -0
- package/dist/gspot.js +30740 -0
- package/dist/linkinator-program.js +65 -0
- package/dist/purgecss-program.js +51 -0
- package/dist/tool-versions.json +3 -0
- package/grammars/bash.wasm +0 -0
- package/grammars/css.wasm +0 -0
- package/grammars/html.wasm +0 -0
- package/grammars/javascript.wasm +0 -0
- package/grammars/licenses/tree-sitter-bash.txt +21 -0
- package/grammars/licenses/tree-sitter-css.txt +21 -0
- package/grammars/licenses/tree-sitter-html.txt +21 -0
- package/grammars/licenses/tree-sitter-javascript.txt +21 -0
- package/grammars/licenses/tree-sitter-python.txt +21 -0
- package/grammars/licenses/tree-sitter-swift.txt +21 -0
- package/grammars/licenses/tree-sitter-typescript.txt +21 -0
- package/grammars/python.wasm +0 -0
- package/grammars/swift.wasm +0 -0
- package/grammars/tsx.wasm +0 -0
- package/grammars/typescript.wasm +0 -0
- package/gspot.schema.json +45991 -0
- package/package.json +93 -5
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
[configuration]
|
|
2
|
+
title = "Naming"
|
|
3
|
+
always_selected = true
|
|
4
|
+
description = "The naming engine: banned terms, case rules, length and word ceilings over every identifier, file, and folder."
|
|
5
|
+
|
|
6
|
+
[files]
|
|
7
|
+
languages = true
|
|
8
|
+
|
|
9
|
+
[[check]]
|
|
10
|
+
name = "identifiers"
|
|
11
|
+
example = "`export const userHelper = 1;` reports the banned term `helper`. Rename it after what it holds, such as `userCount`."
|
|
12
|
+
level = "all"
|
|
13
|
+
stage = "commit"
|
|
14
|
+
summary = "Checks every identifier against the naming settings: banned terms, case, length, and word count."
|
|
15
|
+
why = "Names such as `enhancedHandler`, `ensureConfigIfNeeded`, and `utils` do not explain the value or behavior a reader needs to understand."
|
|
16
|
+
help = "Rename after what the thing is or does. Write the exact names under allowed_names in a [[naming.override]] record with a reason, or adjust a ceiling with gspot set naming.`<language>`.max_words."
|
|
17
|
+
|
|
18
|
+
[[check]]
|
|
19
|
+
name = "paths"
|
|
20
|
+
example = "`utils/format.js` reports `utils`. Move it into the folder of the feature it serves, such as `invoices/format.js`."
|
|
21
|
+
level = "all"
|
|
22
|
+
stage = "commit"
|
|
23
|
+
summary = "Checks every file stem and folder name against the language's case rules and the banned terms."
|
|
24
|
+
why = "A file named `enhanced-utils.ts` is a home for code nobody placed; the case rule keeps imports predictable."
|
|
25
|
+
help = "Rename the file or folder, or add a path rule under [[naming.override]] with a reason."
|
|
26
|
+
|
|
27
|
+
[[check]]
|
|
28
|
+
name = "settings"
|
|
29
|
+
example = "A naming allowance for an identifier that no selected source contains reports an unmatched settings entry. Remove the obsolete allowance or correct it to the exact required identifier and scope."
|
|
30
|
+
level = "recommended"
|
|
31
|
+
stage = "commit"
|
|
32
|
+
runs = "once"
|
|
33
|
+
summary = "Reports allowed names that no selected source uses."
|
|
34
|
+
why = "An allowed name that nothing uses hides an obsolete exception."
|
|
35
|
+
help = "Remove the entry that matches nothing, or fix its name or path."
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Naming
|
|
2
|
+
|
|
3
|
+
## Casing across languages
|
|
4
|
+
|
|
5
|
+
<!-- level: all -->
|
|
6
|
+
|
|
7
|
+
Each language naming file states its own case table. These decisions hold across every language so
|
|
8
|
+
the same concept reads the same way throughout the program.
|
|
9
|
+
|
|
10
|
+
| Concern | Rule |
|
|
11
|
+
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
12
|
+
| Acronyms | Follow the language: TypeScript, JavaScript treat them as words such as `parseHttpUrl`, `userId`; Swift keeps uppercase initialisms (`avatarURL`, `userID`, `apiClient` at the start of a name); Python, SQL, Bash lowercase them inside snake_case such as `http_url`, `user_id`. A platform name keeps its spelling such as `XMLHttpRequest`. |
|
|
13
|
+
| Directories | kebab-case for TypeScript, JavaScript, Bash, HTML, CSS, and static sites; snake_case for Python packages; PascalCase for Swift directories, which mirror type names. |
|
|
14
|
+
| On the wire | Preserve existing external interfaces. For interfaces defined by the project, use camelCase JSON fields, kebab-case URL segments. |
|
|
15
|
+
| Environment variables | `UPPER_SNAKE_CASE`, named by the external interface. No application prefix is required; names defined by the platform are kept verbatim. |
|
|
16
|
+
| Constants | Module-level constants bound to a literal or a frozen object are `UPPER_SNAKE_CASE` in TypeScript, JavaScript, Python, and Bash, and lowerCamelCase in Swift. |
|
|
17
|
+
|
|
18
|
+
## Authority
|
|
19
|
+
|
|
20
|
+
<!-- level: all -->
|
|
21
|
+
|
|
22
|
+
The naming check enforces banned words, case, and length. Fix a finding by renaming. Never hide a
|
|
23
|
+
bad name in a string key, an alias, or a file name.
|
|
24
|
+
|
|
25
|
+
## Principles
|
|
26
|
+
|
|
27
|
+
<!-- level: all -->
|
|
28
|
+
|
|
29
|
+
A name lets a reader understand the concept, scope, role, and expected value without reading
|
|
30
|
+
the implementation. Name by role, responsibility, and domain meaning, never by storage type,
|
|
31
|
+
UI framework type, collection shape, or implementation accident. Use English unless an
|
|
32
|
+
external identifier keeps another spelling. Prefer the shortest name that gives a clear meaning at the use
|
|
33
|
+
site, and add a qualifier only when the bare name has more than one meaning there. Never invent private
|
|
34
|
+
shorthand or drop letters from a word.
|
|
35
|
+
|
|
36
|
+
Do not repeat context the enclosing type, module, directory, or package already supplies, and
|
|
37
|
+
do not encode every implementation detail. One concept keeps one word across a feature. Use singular names for single values, plural names for collections, and
|
|
38
|
+
named by their contents. A role word carries meaning where a primitive or weak type does not.
|
|
39
|
+
|
|
40
|
+
| Avoid | Prefer | Why |
|
|
41
|
+
| ------------------- | ----------------------------- | ----------------------------------- |
|
|
42
|
+
| `string`, `dict` | `welcomeMessage`, `usersById` | The role, not the type. |
|
|
43
|
+
| `u`, `tmp`, `cfg` | `user`, `accountSummary` | Whole words a stranger can read. |
|
|
44
|
+
| `userArray` | `users` | The type already says array. |
|
|
45
|
+
| `Car.carMake` | `Car.make` | The type supplies the context. |
|
|
46
|
+
| `optionalAvatarURL` | `avatarURL` | Optionality lives in the type. |
|
|
47
|
+
| `UserManager` | `UserRepository` | The real responsibility. |
|
|
48
|
+
| `DataProcessor` | `ProfileImageClient` | An external API. |
|
|
49
|
+
| `CommonUtils` | `DateRangeFormatter` | A capability, not a dumping ground. |
|
|
50
|
+
|
|
51
|
+
## Role words
|
|
52
|
+
|
|
53
|
+
<!-- level: all -->
|
|
54
|
+
|
|
55
|
+
A suffix names the role of a type. Use each suffix for one meaning. Name a type with no such role for its concrete domain concept.
|
|
56
|
+
|
|
57
|
+
| Role word | Use when |
|
|
58
|
+
| ------------ | -------------------------------------------------------------------- |
|
|
59
|
+
| `UseCase` | Application operation or business workflow. |
|
|
60
|
+
| `Repository` | Domain-facing access to persisted, cached, or remote domain data. |
|
|
61
|
+
| `Client` | External API, SDK, HTTP, storage, or platform protocol. |
|
|
62
|
+
| `Factory` | Type that constructs instances and assembles dependencies. |
|
|
63
|
+
| `Formatter` | Converts a value into a display or wire representation. |
|
|
64
|
+
| `Parser` | Converts raw input into structured data. |
|
|
65
|
+
| `Validator` | Checks a value and returns or throws validation failure. |
|
|
66
|
+
| `Mapper` | Converts between explicit layers, such as record to domain. |
|
|
67
|
+
| `Store` | Holds local mutable state or persistence mechanics. |
|
|
68
|
+
| `Provider` | Supplies a capability or value, especially when the source may vary. |
|
|
69
|
+
| `Adapter` | Bridges one interface or framework shape to another. |
|
|
70
|
+
|
|
71
|
+
Use `Route`, `Callback`, `Observer`, and `Listener` only for the corresponding framework shape. The language file for the framework defines UI role words such as `View`, `ViewModel`, `ViewController`, and `Coordinator`. Never use `Manager`. Use `Service` only
|
|
72
|
+
where the framework uses it, such as a NestJS provider. Preserve external names such as Apple's
|
|
73
|
+
`FileManager`.
|
|
74
|
+
|
|
75
|
+
## Functions and methods
|
|
76
|
+
|
|
77
|
+
<!-- level: all -->
|
|
78
|
+
|
|
79
|
+
A function name starts with the action and carries enough domain context to read at the call
|
|
80
|
+
site without repeating the enclosing type or module. A generic verb such as `process`, `handle`, `run`, `execute`,
|
|
81
|
+
`manage`, `perform` never stands where the name can state the action. `handle` exists only in a
|
|
82
|
+
framework callback such as a React `handleSubmit` or a UIKit `@objc handleConfirmButtonTapped`.
|
|
83
|
+
Never use `Handler` as a type suffix. A name that needs `and`, `or`, `with`, or an umbrella verb
|
|
84
|
+
marks a function that combines too many concepts.
|
|
85
|
+
|
|
86
|
+
A fixed verb vocabulary spares the reader a guess at which synonym a module chose:
|
|
87
|
+
|
|
88
|
+
| Verb | Meaning |
|
|
89
|
+
| -------------------- | ------------------------------------------------------------------------------- |
|
|
90
|
+
| `get` | Retrieve an existing value from memory, cache, file, database, SDK, or API. |
|
|
91
|
+
| `set` | Assign or replace current state with the supplied value. |
|
|
92
|
+
| `insert`, `update` | Add or change a row or item in persisted data. |
|
|
93
|
+
| `delete` | Destroy a durable row, object, or domain value. |
|
|
94
|
+
| `add`, `remove` | In-memory collection membership only. |
|
|
95
|
+
| `create` | Make a new independent domain value before persistence. |
|
|
96
|
+
| `make`, `build` | Construct an object or dependency; construct a value from existing values. |
|
|
97
|
+
| `parse`, `decode` | Raw input to structured data; encoded bytes or payloads to typed values. |
|
|
98
|
+
| `encode` | Typed values to bytes or serialized payloads. |
|
|
99
|
+
| `validate`, `assert` | Report invalidity; stop execution on failure. |
|
|
100
|
+
| `refresh`, `prepare` | Replace presentation state from a source; set up local state before a workflow. |
|
|
101
|
+
| `reset` | Return to an initial state. |
|
|
102
|
+
|
|
103
|
+
Each act keeps one verb across the codebase: once retrieval uses `get`, no module reads, finds,
|
|
104
|
+
fetches, or loads instead. The noun and the return type carry multiplicity and optionality
|
|
105
|
+
such as `getSession`, `getSessions`, and a qualifier appears only to tell apart two operations at one
|
|
106
|
+
use site. Give a domain operation that combines create, read, update, and delete (CRUD) acts its precise domain verb.
|
|
107
|
+
Preserve framework, SDK, generated, and external names exactly.
|
|
108
|
+
|
|
109
|
+
| Avoid | Prefer | Meaning |
|
|
110
|
+
| ------------------------ | ------------------------ | ------------------------------ |
|
|
111
|
+
| `saveCall` | `insertCall` | Insert a new call. |
|
|
112
|
+
| `handleData` | `decodeAccountResponse` | Decode account response bytes. |
|
|
113
|
+
| `process` | `validateEmailAddress` | Validate an email address. |
|
|
114
|
+
| `update` | `updateDraftMessageText` | Replace draft message text. |
|
|
115
|
+
| `mapUserRowToUserDomain` | `mapUser` | The parameter type says row. |
|
|
116
|
+
|
|
117
|
+
Where external data enters, name the conversion for the operation and the concept, `decodeUserResponse`
|
|
118
|
+
rather than `transform`. Shape suffixes such as `Row`, `DTO`, `Request`, and `Response` stay on
|
|
119
|
+
the type that declares the shape and never travel onto domain entities, view models, or the
|
|
120
|
+
functions that accept the shape.
|
|
121
|
+
|
|
122
|
+
## Booleans and predicates
|
|
123
|
+
|
|
124
|
+
<!-- level: all -->
|
|
125
|
+
|
|
126
|
+
Name stored boolean columns and direct domain mappings as concise positive states without a
|
|
127
|
+
prefix: `enabled`, `active`, `retryable`, `webSearchEnabled`. Predicates, computed
|
|
128
|
+
predicates, and presentation-state assertions ask their question with `is` for state, `has`
|
|
129
|
+
for presence, and `can` for capability. Name an action for what it does even when it
|
|
130
|
+
returns a boolean such as `sendInvite`. Name a proposed answer or control parameter
|
|
131
|
+
for its role such as `defaultCountry`; a boolean type does not make a function a
|
|
132
|
+
predicate.
|
|
133
|
+
|
|
134
|
+
Negative names such as `isNotReady`, `isEmailNotUsed` give way to the positive form that
|
|
135
|
+
matches the branch without double negation. A boolean never reads like a noun value. Preserve external boolean names exactly, including framework, SDK,
|
|
136
|
+
protocol, wire, and generated relationship names.
|
|
137
|
+
|
|
138
|
+
| Avoid | Prefer | Meaning |
|
|
139
|
+
| ------------------------ | ---------------------- | ---------------------------------------------- |
|
|
140
|
+
| `SearchPolicy.isEnabled` | `SearchPolicy.enabled` | Stored policy state. |
|
|
141
|
+
| `email` | `hasEmailAddress` | Presence of an email address. |
|
|
142
|
+
| `textFile` | `isTextFile` | Whether a file meets the text-file definition. |
|
|
143
|
+
| `isEmailNotUsed` | `isEmailUsed` | Whether an email address is already used. |
|
|
144
|
+
| `ready` | `is_ready` | A computed readiness predicate in Bash. |
|
|
145
|
+
|
|
146
|
+
## Files and directories
|
|
147
|
+
|
|
148
|
+
<!-- level: all -->
|
|
149
|
+
|
|
150
|
+
Name files and directories for the behavior or entity they contain, not for reuse.
|
|
151
|
+
|
|
152
|
+
- Name a file with one primary type after that type where the language does so. Name a module
|
|
153
|
+
after the capability it implements. Prefer feature folders to top-level type buckets.
|
|
154
|
+
- Move code to a shared place only for a repeated concept with one module that implements it, never for a caller
|
|
155
|
+
that does not exist yet.
|
|
156
|
+
- A file name avoids the banned terms identifiers avoid. Only a generated artifact may carry a
|
|
157
|
+
timestamp in its name.
|
|
158
|
+
|
|
159
|
+
| Avoid | Prefer | Meaning |
|
|
160
|
+
| ------------------ | ----------------------------- | ---------------------- |
|
|
161
|
+
| `Helpers.swift` | `DateRangeFormatter.swift` | Date range formatting. |
|
|
162
|
+
| `LoginStuff.swift` | `LoginView.swift` | Login presentation. |
|
|
163
|
+
| `common-utils.ts` | `email-address-validation.ts` | Email validation. |
|
|
164
|
+
| `src/helpers/` | `src/accounts/` | Account behavior. |
|
|
165
|
+
|
|
166
|
+
## External names
|
|
167
|
+
|
|
168
|
+
<!-- level: all -->
|
|
169
|
+
|
|
170
|
+
External systems use names that do not match the domain language. Keep those names in code that reads or writes external data.
|
|
171
|
+
|
|
172
|
+
DTOs, SQL rows, generated types, wire payloads, and validation schemas keep the external field names.
|
|
173
|
+
Renaming one changes the public interface. Translate them into domain names, through explicitly
|
|
174
|
+
named mappings, before the values reach domain or presentation code; provider, database, and HTTP
|
|
175
|
+
mechanics stay out of domain names.
|
|
176
|
+
|
|
177
|
+
A wire shape such as `MessageAttachmentDTO` keeps `storage_object_path`. The validated
|
|
178
|
+
`MessageAttachment` uses `attachmentPath`, and the module that implements the storage protocol
|
|
179
|
+
converts one into the other.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
allowed_words = ["Vale", "DOM", "DTO", "RPC"]
|
|
2
|
+
|
|
3
|
+
[configuration]
|
|
4
|
+
title = "Prose"
|
|
5
|
+
always_selected = true
|
|
6
|
+
description = "Vale over every comment and every documentation file, with the gspot style, and the upstream packages."
|
|
7
|
+
|
|
8
|
+
[files]
|
|
9
|
+
extensions = [".md", ".mdx", ".ts", ".tsx", ".mts", ".cts", ".js", ".mjs", ".cjs", ".jsx", ".swift", ".css", ".sh", ".bash", ".zsh", ".py", ".sql", ".pgsql", ".psql"]
|
|
10
|
+
tags = ["shebang:shell"]
|
|
11
|
+
|
|
12
|
+
[[tool]]
|
|
13
|
+
name = "vale"
|
|
14
|
+
version = "3.21.0"
|
|
15
|
+
mise = "vale"
|
|
16
|
+
brew = "vale"
|
|
17
|
+
winget = "errata-ai.Vale"
|
|
18
|
+
scoop = "vale"
|
|
19
|
+
github = { name = "errata-ai/vale", version = "v3.21.0" }
|
|
20
|
+
suppression = { marker = "^<!--\\s*vale\\b", reason = "reason: (?<reason>\\S.*)", forbidden = true }
|
|
21
|
+
[[tool.replace]]
|
|
22
|
+
file = ".vale.ini"
|
|
23
|
+
shared = false
|
|
24
|
+
|
|
25
|
+
[[tool.replace]]
|
|
26
|
+
file = "_vale.ini"
|
|
27
|
+
shared = false
|
|
28
|
+
|
|
29
|
+
[[tool.replace]]
|
|
30
|
+
file = "vale.ini"
|
|
31
|
+
shared = false
|
|
32
|
+
|
|
33
|
+
[[tool_file]]
|
|
34
|
+
target = ".gspot/config/vale.ini"
|
|
35
|
+
tool = "vale"
|
|
36
|
+
rule_keys = ["*.rules", "*.BasedOnStyles"]
|
|
37
|
+
|
|
38
|
+
[[tool_file]]
|
|
39
|
+
target = ".gspot/config/vale/styles/gspot/acronyms.yml"
|
|
40
|
+
tool = "vale"
|
|
41
|
+
|
|
42
|
+
[[tool_file]]
|
|
43
|
+
target = ".gspot/config/vale/styles/gspot/alt-text.yml"
|
|
44
|
+
tool = "vale"
|
|
45
|
+
|
|
46
|
+
[[tool_file]]
|
|
47
|
+
target = ".gspot/config/vale/styles/gspot/banned-headings.yml"
|
|
48
|
+
tool = "vale"
|
|
49
|
+
|
|
50
|
+
[[tool_file]]
|
|
51
|
+
target = ".gspot/config/vale/styles/gspot/heading-case.yml"
|
|
52
|
+
tool = "vale"
|
|
53
|
+
|
|
54
|
+
[[tool_file]]
|
|
55
|
+
target = ".gspot/config/vale/styles/gspot/item-length.yml"
|
|
56
|
+
tool = "vale"
|
|
57
|
+
|
|
58
|
+
[[tool_file]]
|
|
59
|
+
target = ".gspot/config/vale/styles/gspot/paragraph-length.yml"
|
|
60
|
+
tool = "vale"
|
|
61
|
+
|
|
62
|
+
[[tool_file]]
|
|
63
|
+
target = ".gspot/config/vale/styles/gspot/possessives.yml"
|
|
64
|
+
tool = "vale"
|
|
65
|
+
|
|
66
|
+
[[tool_file]]
|
|
67
|
+
target = ".gspot/config/vale/styles/gspot/sentence-length.yml"
|
|
68
|
+
tool = "vale"
|
|
69
|
+
|
|
70
|
+
[[tool_file]]
|
|
71
|
+
target = ".gspot/config/vale/styles/gspot/title-case.yml"
|
|
72
|
+
tool = "vale"
|
|
73
|
+
|
|
74
|
+
[[tool_file]]
|
|
75
|
+
target = ".gspot/config/vale/styles/config/vocabularies/words/accept.txt"
|
|
76
|
+
tool = "vale"
|
|
77
|
+
|
|
78
|
+
[[check]]
|
|
79
|
+
name = "vale"
|
|
80
|
+
tool = "vale"
|
|
81
|
+
example = "The sentence `Release on 03/04/2026.` reports an ambiguous date at the recommended level. Write `Release on March 4, 2026.` when March 4 is the intended date, then rerun. Write legitimate project names in the root allowed_words setting."
|
|
82
|
+
level = "recommended"
|
|
83
|
+
stage = "commit"
|
|
84
|
+
summary = "Checks ambiguous dates, link text, and alternative text with bundled Vale styles at level `recommended`. Level `all` adds the complete style and upstream packages."
|
|
85
|
+
why = "Prose that hedges, markets or wanders is read by everyone who reads the code, and nothing else checks it."
|
|
86
|
+
help = "Rewrite the sentence the alert names, write a real name and its reason in the root allowed_words setting, or use gspot ignore prose/vale --rule `<rule>` --reason \"`<why>`\"."
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Writing
|
|
2
|
+
|
|
3
|
+
Write in plain language under `ISO 24495-1`: short sentences and common words. State the action or result early.
|
|
4
|
+
Use familiar words and explain a technical term when the reader needs it.
|
|
5
|
+
|
|
6
|
+
## Evidence
|
|
7
|
+
|
|
8
|
+
Check commands, fields, defaults, limits, and supported versions against the implementation that defines them.
|
|
9
|
+
A measurement does not guarantee future results. When evidence lacks required facts, narrow the claim. Link external
|
|
10
|
+
facts to the primary source; never invent behavior to complete a page.
|
|
11
|
+
|
|
12
|
+
Preserve exact API identifiers, public messages, official product names, and legal license text.
|
|
13
|
+
Keep private reasoning, temporary acceptance notes out of shipped content.
|
|
14
|
+
Examples use fictional people, safe values, and `example.com` addresses.
|
|
15
|
+
|
|
16
|
+
## Voice
|
|
17
|
+
|
|
18
|
+
<!-- level: all -->
|
|
19
|
+
|
|
20
|
+
Use active voice when the actor matters. Address the reader as you in procedures. Use imperatives
|
|
21
|
+
for requirements and label optional steps. Put a condition before its action and keep one main
|
|
22
|
+
idea per sentence. Name the subject instead of relying on an ambiguous pronoun.
|
|
23
|
+
|
|
24
|
+
Avoid idioms, unexplained abbreviations, and decorative wording. Use literal terms that survive
|
|
25
|
+
translation. Keep one term for each concept. Dates shown to people include their time zone;
|
|
26
|
+
machine values retain their required format.
|
|
27
|
+
|
|
28
|
+
## References
|
|
29
|
+
|
|
30
|
+
See the [Google developer documentation style guide](https://developers.google.com/style)
|
|
31
|
+
for general writing guidance. Project-specific requirements take precedence.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Vale Style Notices
|
|
2
|
+
|
|
3
|
+
The shipped gspot style includes rules adapted from the Microsoft and Red Hat Vale styles.
|
|
4
|
+
|
|
5
|
+
## Microsoft
|
|
6
|
+
|
|
7
|
+
Source: <https://github.com/errata-ai/Microsoft>
|
|
8
|
+
|
|
9
|
+
MIT License
|
|
10
|
+
|
|
11
|
+
Copyright (c) 2018 - 2019 Joseph Kato
|
|
12
|
+
|
|
13
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
14
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
15
|
+
in the Software without restriction, including without limitation the rights
|
|
16
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
17
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
18
|
+
furnished to do so, subject to the following conditions:
|
|
19
|
+
|
|
20
|
+
The above copyright notice and this permission notice shall be included in all
|
|
21
|
+
copies or substantial portions of the Software.
|
|
22
|
+
|
|
23
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
24
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
26
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
27
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
28
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
29
|
+
SOFTWARE.
|
|
30
|
+
|
|
31
|
+
## Red Hat
|
|
32
|
+
|
|
33
|
+
Source: <https://github.com/redhat-documentation/vale-at-red-hat>
|
|
34
|
+
|
|
35
|
+
MIT License
|
|
36
|
+
|
|
37
|
+
Copyright (c) 2021 Rolfe Dlugy-Hegwer
|
|
38
|
+
|
|
39
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
40
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
41
|
+
in the Software without restriction, including without limitation the rights
|
|
42
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
43
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
44
|
+
furnished to do so, subject to the following conditions:
|
|
45
|
+
|
|
46
|
+
The above copyright notice and this permission notice shall be included in all
|
|
47
|
+
copies or substantial portions of the Software.
|
|
48
|
+
|
|
49
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
50
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
51
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
52
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
53
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
54
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
55
|
+
SOFTWARE.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Adapted from Microsoft.AMPM; see ../LICENSES.md.
|
|
2
|
+
extends: existence
|
|
3
|
+
message: Use 'AM' or 'PM' (preceded by a space).
|
|
4
|
+
link: https://learn.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms
|
|
5
|
+
level: error
|
|
6
|
+
nonword: true
|
|
7
|
+
tokens:
|
|
8
|
+
- \d{1,2} [ap]m\B
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Adapted from RedHat.ConsciousLanguage; see ../LICENSES.md.
|
|
2
|
+
extends: substitution
|
|
3
|
+
ignorecase: true
|
|
4
|
+
level: warning
|
|
5
|
+
link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#conscious-language
|
|
6
|
+
message: Use %s rather than '%s'.
|
|
7
|
+
action:
|
|
8
|
+
name: replace
|
|
9
|
+
swap:
|
|
10
|
+
blacklist: blocklist
|
|
11
|
+
master(?! broker| boot record): primary|source|initiator|requester|controller|host|director|supplier
|
|
12
|
+
slave(?! broker): secondary|replica|responder|device|worker|proxy|performer|consumer|child
|
|
13
|
+
whitelist: allowlist
|
|
14
|
+
(?:demilitarized zone|DMZ): perimeter network
|
|
15
|
+
spirit animal: role model
|
|
16
|
+
mans: operates
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Adapted from RedHat.Contractions; see ../LICENSES.md.
|
|
2
|
+
extends: substitution
|
|
3
|
+
ignorecase: true
|
|
4
|
+
level: suggestion
|
|
5
|
+
link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#contractions
|
|
6
|
+
message: Avoid contractions. Use '%s' rather than '%s.'
|
|
7
|
+
action:
|
|
8
|
+
name: replace
|
|
9
|
+
swap:
|
|
10
|
+
aren't: are not
|
|
11
|
+
can't: cannot
|
|
12
|
+
couldn't: could not
|
|
13
|
+
didn't: did not
|
|
14
|
+
doesn't: does not
|
|
15
|
+
don't: do not
|
|
16
|
+
hasn't: has not
|
|
17
|
+
haven't: have not
|
|
18
|
+
how'll: how will
|
|
19
|
+
how's: how is
|
|
20
|
+
isn't: is not
|
|
21
|
+
it'll: it will
|
|
22
|
+
it's: it is
|
|
23
|
+
shouldn't: should not
|
|
24
|
+
that'll: that will
|
|
25
|
+
that's: that is
|
|
26
|
+
they'll: they will
|
|
27
|
+
they're: they are
|
|
28
|
+
wasn't: was not
|
|
29
|
+
we'll: we will
|
|
30
|
+
we're: we are
|
|
31
|
+
we've: we have
|
|
32
|
+
weren't: were not
|
|
33
|
+
what'll: what will
|
|
34
|
+
what's: what is
|
|
35
|
+
when'll: when will
|
|
36
|
+
when's: when is
|
|
37
|
+
where'll: where will
|
|
38
|
+
where's: where is
|
|
39
|
+
who'll: who will
|
|
40
|
+
who's: who is
|
|
41
|
+
why'll: why will
|
|
42
|
+
why's: why is
|
|
43
|
+
won't: will not
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Adapted from Microsoft.DateNumbers; see ../LICENSES.md.
|
|
2
|
+
extends: existence
|
|
3
|
+
message: 'Write the day of a date as a plain number, not an ordinal.'
|
|
4
|
+
link: https://learn.microsoft.com/en-us/style-guide/numbers#numbers-in-dates
|
|
5
|
+
level: error
|
|
6
|
+
nonword: true
|
|
7
|
+
ignorecase: true
|
|
8
|
+
raw:
|
|
9
|
+
- \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b\s*
|
|
10
|
+
tokens:
|
|
11
|
+
- first
|
|
12
|
+
- second
|
|
13
|
+
- third
|
|
14
|
+
- fourth
|
|
15
|
+
- fifth
|
|
16
|
+
- sixth
|
|
17
|
+
- seventh
|
|
18
|
+
- eighth
|
|
19
|
+
- ninth
|
|
20
|
+
- tenth
|
|
21
|
+
- eleventh
|
|
22
|
+
- twelfth
|
|
23
|
+
- thirteenth
|
|
24
|
+
- fourteenth
|
|
25
|
+
- fifteenth
|
|
26
|
+
- sixteenth
|
|
27
|
+
- seventeenth
|
|
28
|
+
- eighteenth
|
|
29
|
+
- nineteenth
|
|
30
|
+
- twentieth
|
|
31
|
+
- twenty-first
|
|
32
|
+
- twenty-second
|
|
33
|
+
- twenty-third
|
|
34
|
+
- twenty-fourth
|
|
35
|
+
- twenty-fifth
|
|
36
|
+
- twenty-sixth
|
|
37
|
+
- twenty-seventh
|
|
38
|
+
- twenty-eighth
|
|
39
|
+
- twenty-ninth
|
|
40
|
+
- thirtieth
|
|
41
|
+
- thirty-first
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "A file path in prose goes stale: '%s'. Name the concept, or put the path in code formatting only where the reader must open it."
|
|
3
|
+
level: error
|
|
4
|
+
scope: paragraph
|
|
5
|
+
nonword: true
|
|
6
|
+
tokens:
|
|
7
|
+
- "(?<!`)\\b[a-z0-9_-]+/[a-z0-9_./-]+\\.[a-z]{1,5}\\b(?!`)"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Future promise '%s'. Document what exists."
|
|
3
|
+
level: error
|
|
4
|
+
ignorecase: true
|
|
5
|
+
tokens:
|
|
6
|
+
- will be added
|
|
7
|
+
- will be supported
|
|
8
|
+
- coming soon
|
|
9
|
+
- in the future
|
|
10
|
+
- is planned
|
|
11
|
+
- are planned
|
|
12
|
+
- planned for
|
|
13
|
+
- planned to
|
|
14
|
+
- roadmap
|
|
15
|
+
- eventually
|
|
16
|
+
- for now
|
|
17
|
+
- later on
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Hedge '%s'. Say when, or drop it."
|
|
3
|
+
level: error
|
|
4
|
+
ignorecase: true
|
|
5
|
+
tokens:
|
|
6
|
+
- probably
|
|
7
|
+
- usually
|
|
8
|
+
- generally
|
|
9
|
+
- typically
|
|
10
|
+
- where practical
|
|
11
|
+
- when practical
|
|
12
|
+
- where possible
|
|
13
|
+
- when possible
|
|
14
|
+
- if needed
|
|
15
|
+
- as needed
|
|
16
|
+
- if possible
|
|
17
|
+
- in most cases
|
|
18
|
+
- for the most part
|
|
19
|
+
- somewhat
|
|
20
|
+
- fairly
|
|
21
|
+
- quite
|
|
22
|
+
- very
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "History in prose: '%s'. Describe the present state."
|
|
3
|
+
level: error
|
|
4
|
+
ignorecase: true
|
|
5
|
+
tokens:
|
|
6
|
+
- previously
|
|
7
|
+
- formerly
|
|
8
|
+
- used to
|
|
9
|
+
- no longer
|
|
10
|
+
- refactored from
|
|
11
|
+
- renamed from
|
|
12
|
+
- moved from
|
|
13
|
+
- legacy
|
|
14
|
+
- was removed
|
|
15
|
+
- was replaced
|
|
16
|
+
- migrated from
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
extends: existence
|
|
2
|
+
message: "Idiom '%s'. Say the plain thing."
|
|
3
|
+
level: error
|
|
4
|
+
ignorecase: true
|
|
5
|
+
tokens:
|
|
6
|
+
- belt and suspenders
|
|
7
|
+
- belt and braces
|
|
8
|
+
- sanity check
|
|
9
|
+
- sanity-check
|
|
10
|
+
- low-hanging fruit
|
|
11
|
+
- under the hood
|
|
12
|
+
- out of the box
|
|
13
|
+
- load-bearing
|
|
14
|
+
- load bearing
|
|
15
|
+
- rule of thumb
|
|
16
|
+
- silver bullet
|
|
17
|
+
- moving parts
|
|
18
|
+
- at the end of the day
|
|
19
|
+
- in a nutshell
|
|
20
|
+
- touch base
|
|
21
|
+
- deep dive
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
extends: substitution
|
|
2
|
+
message: "Use '%s' instead of '%s' for interface actions."
|
|
3
|
+
level: error
|
|
4
|
+
ignorecase: true
|
|
5
|
+
swap:
|
|
6
|
+
click on: select
|
|
7
|
+
hit enter: press Enter
|
|
8
|
+
hit return: press Return
|
|
9
|
+
tap on: select
|
|
10
|
+
key in your: enter your
|
|
11
|
+
type in your: enter your
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Adapted from Microsoft.Jargon; see ../LICENSES.md.
|
|
2
|
+
extends: substitution
|
|
3
|
+
message: Consider using '%s' instead of the jargon '%s'.
|
|
4
|
+
link: https://learn.microsoft.com/en-us/style-guide/word-choice/avoid-jargon
|
|
5
|
+
level: suggestion
|
|
6
|
+
ignorecase: true
|
|
7
|
+
action:
|
|
8
|
+
name: replace
|
|
9
|
+
swap:
|
|
10
|
+
bucketize: group
|
|
11
|
+
glyph: symbol
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Adapted from RedHat.Conjunctions; see ../LICENSES.md.
|
|
2
|
+
extends: existence
|
|
3
|
+
level: suggestion
|
|
4
|
+
link: https://redhat-documentation.github.io/vale-at-red-hat/reference-guide.html#conjunctions
|
|
5
|
+
message: Do not overuse beginning sentences with '%s'.
|
|
6
|
+
scope: paragraph
|
|
7
|
+
action:
|
|
8
|
+
name: remove
|
|
9
|
+
tokens:
|
|
10
|
+
- ^And
|
|
11
|
+
- ^Or
|
|
12
|
+
- ^So(?! that)(?![\s,])
|