pasika 0.3.0 → 0.3.2
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 +7 -5
- package/dist/cli/index.js +32 -38
- package/dist/cli/output.d.ts +3 -0
- package/dist/cli/output.js +11 -0
- package/dist/enforcement/coverage.js +25 -29
- package/dist/enforcement/doctor.d.ts +16 -0
- package/dist/enforcement/doctor.js +249 -0
- package/dist/enforcement/types.d.ts +0 -3
- package/dist/enforcement/types.js +4 -13
- package/dist/eslint/pasika/ast-types.d.ts +122 -0
- package/dist/eslint/pasika/ast-types.js +1 -0
- package/dist/eslint/pasika/index.d.ts +58 -3
- package/dist/eslint/pasika/index.js +61 -1
- package/dist/eslint/pasika/rules/application-structure.d.ts +2 -0
- package/dist/eslint/pasika/rules/application-structure.js +152 -0
- package/dist/eslint/pasika/rules/component-conventions.d.ts +16 -0
- package/dist/eslint/pasika/rules/component-conventions.js +145 -0
- package/dist/eslint/pasika/rules/component-nesting.d.ts +12 -0
- package/dist/eslint/pasika/rules/component-nesting.js +69 -0
- package/dist/eslint/pasika/rules/config-extraction.d.ts +14 -0
- package/dist/eslint/pasika/rules/config-extraction.js +74 -0
- package/dist/eslint/pasika/rules/cross-feature-import.d.ts +2 -0
- package/dist/eslint/pasika/rules/cross-feature-import.js +75 -0
- package/dist/eslint/pasika/rules/css/apply-usage.d.ts +10 -0
- package/dist/eslint/pasika/rules/css/apply-usage.js +45 -0
- package/dist/eslint/pasika/rules/css/base-layer-pair.d.ts +10 -0
- package/dist/eslint/pasika/rules/css/base-layer-pair.js +49 -0
- package/dist/eslint/pasika/rules/css/css-variable-naming.d.ts +10 -0
- package/dist/eslint/pasika/rules/css/css-variable-naming.js +39 -0
- package/dist/eslint/pasika/rules/css/custom-utility-apply.d.ts +11 -0
- package/dist/eslint/pasika/rules/css/custom-utility-apply.js +52 -0
- package/dist/eslint/pasika/rules/css/global-css-location.d.ts +10 -0
- package/dist/eslint/pasika/rules/css/global-css-location.js +42 -0
- package/dist/eslint/pasika/rules/css/helpers.d.ts +29 -0
- package/dist/eslint/pasika/rules/css/helpers.js +93 -0
- package/dist/eslint/pasika/rules/css/index.d.ts +13 -0
- package/dist/eslint/pasika/rules/css/index.js +25 -0
- package/dist/eslint/pasika/rules/css/root-variables.d.ts +11 -0
- package/dist/eslint/pasika/rules/css/root-variables.js +53 -0
- package/dist/eslint/pasika/rules/css/rule-tester.d.ts +11 -0
- package/dist/eslint/pasika/rules/css/rule-tester.js +22 -0
- package/dist/eslint/pasika/rules/css/stylesheet-ordering.d.ts +11 -0
- package/dist/eslint/pasika/rules/css/stylesheet-ordering.js +76 -0
- package/dist/eslint/pasika/rules/css/surface-utility.d.ts +10 -0
- package/dist/eslint/pasika/rules/css/surface-utility.js +41 -0
- package/dist/eslint/pasika/rules/css/theme-reset.d.ts +9 -0
- package/dist/eslint/pasika/rules/css/theme-reset.js +36 -0
- package/dist/eslint/pasika/rules/css/theme-variable-namespace.d.ts +11 -0
- package/dist/eslint/pasika/rules/css/theme-variable-namespace.js +53 -0
- package/dist/eslint/pasika/rules/cva-appearance-props.d.ts +10 -0
- package/dist/eslint/pasika/rules/cva-appearance-props.js +77 -0
- package/dist/eslint/pasika/rules/cva-boolean-variants.d.ts +11 -0
- package/dist/eslint/pasika/rules/cva-boolean-variants.js +97 -0
- package/dist/eslint/pasika/rules/data-testid-case.d.ts +2 -0
- package/dist/eslint/pasika/rules/data-testid-case.js +76 -0
- package/dist/eslint/pasika/rules/enforce-cn-merge.d.ts +13 -1
- package/dist/eslint/pasika/rules/enforce-cn-merge.js +46 -44
- package/dist/eslint/pasika/rules/enforce-cva-variant-props.js +53 -48
- package/dist/eslint/pasika/rules/filename-case.js +28 -5
- package/dist/eslint/pasika/rules/hook-complexity.d.ts +12 -0
- package/dist/eslint/pasika/rules/hook-complexity.js +114 -0
- package/dist/eslint/pasika/rules/hook-extraction.d.ts +11 -0
- package/dist/eslint/pasika/rules/hook-extraction.js +55 -0
- package/dist/eslint/pasika/rules/import-through-index.d.ts +2 -0
- package/dist/eslint/pasika/rules/import-through-index.js +52 -0
- package/dist/eslint/pasika/rules/interactive-component.d.ts +10 -0
- package/dist/eslint/pasika/rules/interactive-component.js +76 -0
- package/dist/eslint/pasika/rules/json/index.d.ts +5 -0
- package/dist/eslint/pasika/rules/json/index.js +9 -0
- package/dist/eslint/pasika/rules/json/no-cache-flag.d.ts +10 -0
- package/dist/eslint/pasika/rules/json/no-cache-flag.js +45 -0
- package/dist/eslint/pasika/rules/json/no-vulyk-dependency.d.ts +10 -0
- package/dist/eslint/pasika/rules/json/no-vulyk-dependency.js +41 -0
- package/dist/eslint/pasika/rules/json/rule-tester.d.ts +11 -0
- package/dist/eslint/pasika/rules/json/rule-tester.js +21 -0
- package/dist/eslint/pasika/rules/jsx-hygiene.d.ts +9 -0
- package/dist/eslint/pasika/rules/jsx-hygiene.js +108 -0
- package/dist/eslint/pasika/rules/locale-dotted-path.d.ts +10 -0
- package/dist/eslint/pasika/rules/locale-dotted-path.js +65 -0
- package/dist/eslint/pasika/rules/locale-placement.d.ts +13 -0
- package/dist/eslint/pasika/rules/locale-placement.js +163 -0
- package/dist/eslint/pasika/rules/locales-location.d.ts +11 -0
- package/dist/eslint/pasika/rules/locales-location.js +56 -0
- package/dist/eslint/pasika/rules/md/doc-kind-suffix.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/doc-kind-suffix.js +29 -0
- package/dist/eslint/pasika/rules/md/example-heading-description.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/example-heading-description.js +30 -0
- package/dist/eslint/pasika/rules/md/glossary-term-linking.d.ts +2 -0
- package/dist/eslint/pasika/rules/md/glossary-term-linking.js +99 -0
- package/dist/eslint/pasika/rules/md/guide-folder-entry-point.d.ts +2 -0
- package/dist/eslint/pasika/rules/md/guide-folder-entry-point.js +46 -0
- package/dist/eslint/pasika/rules/md/guide-link-anchors.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/guide-link-anchors.js +50 -0
- package/dist/eslint/pasika/rules/md/guide-overview-no-links.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/guide-overview-no-links.js +51 -0
- package/dist/eslint/pasika/rules/md/guide-states-no-requirement.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/guide-states-no-requirement.js +26 -0
- package/dist/eslint/pasika/rules/md/guide-step-single-link.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/guide-step-single-link.js +48 -0
- package/dist/eslint/pasika/rules/md/guide-step-single-sentence.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/guide-step-single-sentence.js +42 -0
- package/dist/eslint/pasika/rules/md/helpers.d.ts +25 -0
- package/dist/eslint/pasika/rules/md/helpers.js +37 -0
- package/dist/eslint/pasika/rules/md/index.d.ts +27 -0
- package/dist/eslint/pasika/rules/md/index.js +53 -0
- package/dist/eslint/pasika/rules/md/no-cross-document-link.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/no-cross-document-link.js +36 -0
- package/dist/eslint/pasika/rules/md/no-nested-how-to.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/no-nested-how-to.js +39 -0
- package/dist/eslint/pasika/rules/md/no-template-prompt.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/no-template-prompt.js +22 -0
- package/dist/eslint/pasika/rules/md/overview-length.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/overview-length.js +47 -0
- package/dist/eslint/pasika/rules/md/overview-present.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/overview-present.js +41 -0
- package/dist/eslint/pasika/rules/md/policy-no-examples.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/policy-no-examples.js +28 -0
- package/dist/eslint/pasika/rules/md/policy-single-document.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/policy-single-document.js +34 -0
- package/dist/eslint/pasika/rules/md/policy-subject-headings.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/policy-subject-headings.js +58 -0
- package/dist/eslint/pasika/rules/md/project-index.d.ts +17 -0
- package/dist/eslint/pasika/rules/md/project-index.js +67 -0
- package/dist/eslint/pasika/rules/md/reference-block-headings.d.ts +6 -0
- package/dist/eslint/pasika/rules/md/reference-block-headings.js +31 -0
- package/dist/eslint/pasika/rules/md/reference-no-rfc-vocabulary.d.ts +6 -0
- package/dist/eslint/pasika/rules/md/reference-no-rfc-vocabulary.js +26 -0
- package/dist/eslint/pasika/rules/md/requirement-present.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/requirement-present.js +41 -0
- package/dist/eslint/pasika/rules/md/rfc-only-in-bullets.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/rfc-only-in-bullets.js +46 -0
- package/dist/eslint/pasika/rules/md/rule-paired-examples.d.ts +5 -0
- package/dist/eslint/pasika/rules/md/rule-paired-examples.js +36 -0
- package/dist/eslint/pasika/rules/md/rule-tester.d.ts +11 -0
- package/dist/eslint/pasika/rules/md/rule-tester.js +21 -0
- package/dist/eslint/pasika/rules/md/support-document-placement.d.ts +2 -0
- package/dist/eslint/pasika/rules/md/support-document-placement.js +36 -0
- package/dist/eslint/pasika/rules/md/title-matches-file-name.d.ts +2 -0
- package/dist/eslint/pasika/rules/md/title-matches-file-name.js +46 -0
- package/dist/eslint/pasika/rules/named-exports.d.ts +2 -0
- package/dist/eslint/pasika/rules/named-exports.js +49 -0
- package/dist/eslint/pasika/rules/no-eslint-disable.d.ts +10 -0
- package/dist/eslint/pasika/rules/no-eslint-disable.js +33 -0
- package/dist/eslint/pasika/rules/no-mixed-concerns.js +9 -22
- package/dist/eslint/pasika/rules/no-util-barrel.d.ts +2 -0
- package/dist/eslint/pasika/rules/no-util-barrel.js +48 -0
- package/dist/eslint/pasika/rules/pure-function-extract.d.ts +9 -0
- package/dist/eslint/pasika/rules/pure-function-extract.js +92 -0
- package/dist/eslint/pasika/rules/shared-style-dedup.d.ts +13 -0
- package/dist/eslint/pasika/rules/shared-style-dedup.js +91 -0
- package/dist/eslint/pasika/rules/stay-flat.d.ts +12 -0
- package/dist/eslint/pasika/rules/stay-flat.js +81 -0
- package/dist/eslint/pasika/rules/support-folder-shape.d.ts +2 -0
- package/dist/eslint/pasika/rules/support-folder-shape.js +59 -0
- package/dist/eslint/pasika/rules/type-extraction.d.ts +13 -0
- package/dist/eslint/pasika/rules/type-extraction.js +85 -0
- package/dist/eslint/pasika/rules/ui-state.d.ts +9 -0
- package/dist/eslint/pasika/rules/ui-state.js +99 -0
- package/dist/eslint/pasika/rules/util-file-name.d.ts +2 -0
- package/dist/eslint/pasika/rules/util-file-name.js +48 -0
- package/dist/eslint/pasika/rules/value-extraction.d.ts +13 -0
- package/dist/eslint/pasika/rules/value-extraction.js +48 -0
- package/enforcement/registry.json +196 -190
- package/package.json +28 -19
- package/dist/enforcement/docs-check.d.ts +0 -17
- package/dist/enforcement/docs-check.js +0 -159
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"requirements": [
|
|
3
3
|
{
|
|
4
4
|
"doc": "agent-policy.md",
|
|
5
|
-
"text": "A change MUST NOT introduce a finding that
|
|
6
|
-
"hash": "
|
|
5
|
+
"text": "A change MUST NOT introduce a finding that the repository's lint command (mechanical rules) or npx pasika doctor (environment checks) did not already report.",
|
|
6
|
+
"hash": "f8d1db6aaf",
|
|
7
7
|
"kind": "judgment",
|
|
8
8
|
"note": "deciding a finding is new requires the previous state, which neither command carries"
|
|
9
9
|
},
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"doc": "agent-policy.md",
|
|
19
19
|
"text": "A change to the Vulyk registry MUST use Vulyk commands rather than edits to generated files.",
|
|
20
20
|
"hash": "27247db8eb",
|
|
21
|
-
"kind": "
|
|
22
|
-
"
|
|
21
|
+
"kind": "doctor",
|
|
22
|
+
"ref": "pasika/managed-file-edit"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"doc": "agent-policy.md",
|
|
@@ -39,22 +39,22 @@
|
|
|
39
39
|
"doc": "agent-policy.md",
|
|
40
40
|
"text": "A file listed in a .vulyk manifest MUST NOT be edited by hand.",
|
|
41
41
|
"hash": "2390e57f4f",
|
|
42
|
-
"kind": "
|
|
43
|
-
"
|
|
42
|
+
"kind": "doctor",
|
|
43
|
+
"ref": "pasika/managed-file-edit"
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"doc": "agent-policy.md",
|
|
47
47
|
"text": "A lint command MUST NOT pass ESLint's --cache flag, because rules that compare a file against the rest of the tree need every file in the run.",
|
|
48
48
|
"hash": "2b3f806581",
|
|
49
|
-
"kind": "
|
|
50
|
-
"
|
|
49
|
+
"kind": "eslint",
|
|
50
|
+
"ref": "pasika/no-cache-flag"
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"doc": "agent-policy.md",
|
|
54
54
|
"text": "A repository MUST take its lint, format, and TypeScript configuration from pasika and zirka rather than restating it locally.",
|
|
55
55
|
"hash": "12553abd17",
|
|
56
|
-
"kind": "
|
|
57
|
-
"
|
|
56
|
+
"kind": "doctor",
|
|
57
|
+
"ref": "pasika/config-baseline"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
"doc": "agent-policy.md",
|
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
"doc": "agent-policy.md",
|
|
74
74
|
"text": "Code MUST NOT use eslint-disable directives, and a reported violation MUST be fixed instead.",
|
|
75
75
|
"hash": "628ab4f6a6",
|
|
76
|
-
"kind": "
|
|
77
|
-
"
|
|
76
|
+
"kind": "eslint",
|
|
77
|
+
"ref": "pasika/no-eslint-disable"
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
80
|
"doc": "agent-policy.md",
|
|
@@ -94,15 +94,15 @@
|
|
|
94
94
|
"doc": "agent-policy.md",
|
|
95
95
|
"text": "Vulyk MUST NOT be added to package.json in order to run its CLI.",
|
|
96
96
|
"hash": "1061447825",
|
|
97
|
-
"kind": "
|
|
98
|
-
"
|
|
97
|
+
"kind": "eslint",
|
|
98
|
+
"ref": "pasika/no-vulyk-dependency"
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
"doc": "agent-policy.md",
|
|
102
102
|
"text": "Vulyk MUST run as an ephemeral command such as npx vulyk@latest.",
|
|
103
103
|
"hash": "c8aaf8ce02",
|
|
104
|
-
"kind": "
|
|
105
|
-
"
|
|
104
|
+
"kind": "eslint",
|
|
105
|
+
"ref": "pasika/no-vulyk-dependency"
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
108
|
"doc": "agent-policy.md",
|
|
@@ -130,43 +130,43 @@
|
|
|
130
130
|
"doc": "code-organization-guide/rules/application-structure-rule.md",
|
|
131
131
|
"text": "A folder holding support files MUST be named hooks/, types/, schemas/, constants/, or utils/, matching the kind of file it holds.",
|
|
132
132
|
"hash": "1ea6de0cbf",
|
|
133
|
-
"kind": "
|
|
134
|
-
"
|
|
133
|
+
"kind": "eslint",
|
|
134
|
+
"ref": "pasika/application-structure"
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
"doc": "code-organization-guide/rules/application-structure-rule.md",
|
|
138
138
|
"text": "A support folder MUST NOT contain a component.",
|
|
139
139
|
"hash": "25be7e89ec",
|
|
140
|
-
"kind": "
|
|
141
|
-
"
|
|
140
|
+
"kind": "eslint",
|
|
141
|
+
"ref": "pasika/application-structure"
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
144
|
"doc": "code-organization-guide/rules/application-structure-rule.md",
|
|
145
145
|
"text": "Application source MUST live under src/.",
|
|
146
146
|
"hash": "0a5c03a95d",
|
|
147
|
-
"kind": "
|
|
148
|
-
"
|
|
147
|
+
"kind": "doctor",
|
|
148
|
+
"ref": "pasika/source-under-src"
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
151
|
"doc": "code-organization-guide/rules/application-structure-rule.md",
|
|
152
152
|
"text": "src/ MUST contain only the app/, compositions/, features/, and shared/ folders, the root support folders, config/, locales/, and the files a framework requires at the src root.",
|
|
153
153
|
"hash": "dd84e5498f",
|
|
154
|
-
"kind": "
|
|
155
|
-
"
|
|
154
|
+
"kind": "eslint",
|
|
155
|
+
"ref": "pasika/application-structure"
|
|
156
156
|
},
|
|
157
157
|
{
|
|
158
158
|
"doc": "code-organization-guide/rules/application-structure-rule.md",
|
|
159
159
|
"text": "src/features/ MUST contain only feature folders.",
|
|
160
160
|
"hash": "8e68eeb8c4",
|
|
161
|
-
"kind": "
|
|
162
|
-
"
|
|
161
|
+
"kind": "eslint",
|
|
162
|
+
"ref": "pasika/application-structure"
|
|
163
163
|
},
|
|
164
164
|
{
|
|
165
165
|
"doc": "code-organization-guide/rules/component-placement-rule.md",
|
|
166
166
|
"text": "A component that imports from two or more feature folders MUST live in src/compositions/.",
|
|
167
167
|
"hash": "a00c621fbe",
|
|
168
|
-
"kind": "
|
|
169
|
-
"
|
|
168
|
+
"kind": "eslint",
|
|
169
|
+
"ref": "pasika/cross-feature-import"
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
"doc": "code-organization-guide/rules/component-placement-rule.md",
|
|
@@ -201,29 +201,29 @@
|
|
|
201
201
|
"doc": "code-organization-guide/rules/component-placement-rule.md",
|
|
202
202
|
"text": "src/app/ MUST contain Next.js App Router framework-convention files and assets, plus styles required by routing files, but MUST NOT contain ordinary components or support folders.",
|
|
203
203
|
"hash": "6a1d1f370e",
|
|
204
|
-
"kind": "
|
|
205
|
-
"
|
|
204
|
+
"kind": "eslint",
|
|
205
|
+
"ref": "pasika/application-structure"
|
|
206
206
|
},
|
|
207
207
|
{
|
|
208
208
|
"doc": "code-organization-guide/rules/configuration-rule.md",
|
|
209
209
|
"text": "A configuration module MUST be one src/config/<config-name>/ folder with index.ts as its entry point.",
|
|
210
210
|
"hash": "2f17655f6f",
|
|
211
|
-
"kind": "
|
|
212
|
-
"
|
|
211
|
+
"kind": "eslint",
|
|
212
|
+
"ref": "pasika/application-structure"
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
"doc": "code-organization-guide/rules/configuration-rule.md",
|
|
216
216
|
"text": "A type, schema, or utility used only to implement one configuration module MUST be extracted even with one consumer.",
|
|
217
217
|
"hash": "9e5da88f2e",
|
|
218
|
-
"kind": "
|
|
219
|
-
"
|
|
218
|
+
"kind": "eslint",
|
|
219
|
+
"ref": "pasika/config-extraction"
|
|
220
220
|
},
|
|
221
221
|
{
|
|
222
222
|
"doc": "code-organization-guide/rules/configuration-rule.md",
|
|
223
223
|
"text": "All configuration modules MUST live in src/config/.",
|
|
224
224
|
"hash": "068f9a0a91",
|
|
225
|
-
"kind": "
|
|
226
|
-
"
|
|
225
|
+
"kind": "eslint",
|
|
226
|
+
"ref": "pasika/application-structure"
|
|
227
227
|
},
|
|
228
228
|
{
|
|
229
229
|
"doc": "code-organization-guide/rules/configuration-rule.md",
|
|
@@ -236,8 +236,8 @@
|
|
|
236
236
|
"doc": "code-organization-guide/rules/configuration-rule.md",
|
|
237
237
|
"text": "An extracted configuration type, schema, or utility MUST live in its matching dedicated folder under src/config/<config-name>/.",
|
|
238
238
|
"hash": "d931ef91df",
|
|
239
|
-
"kind": "
|
|
240
|
-
"
|
|
239
|
+
"kind": "eslint",
|
|
240
|
+
"ref": "pasika/application-structure"
|
|
241
241
|
},
|
|
242
242
|
{
|
|
243
243
|
"doc": "code-organization-guide/rules/constants-rule.md",
|
|
@@ -250,22 +250,22 @@
|
|
|
250
250
|
"doc": "code-organization-guide/rules/constants-rule.md",
|
|
251
251
|
"text": "A constants/ folder MUST either define its constants directly in index.ts or group related constants in files that index.ts named-re-exports.",
|
|
252
252
|
"hash": "2d1591194c",
|
|
253
|
-
"kind": "
|
|
254
|
-
"
|
|
253
|
+
"kind": "eslint",
|
|
254
|
+
"ref": "pasika/support-folder-shape"
|
|
255
255
|
},
|
|
256
256
|
{
|
|
257
257
|
"doc": "code-organization-guide/rules/constants-rule.md",
|
|
258
258
|
"text": "A value MUST remain in its declaring component or file until another file imports it independently; it MUST then be extracted as a constant.",
|
|
259
259
|
"hash": "e779f5ec6f",
|
|
260
|
-
"kind": "
|
|
261
|
-
"
|
|
260
|
+
"kind": "eslint",
|
|
261
|
+
"ref": "pasika/value-extraction"
|
|
262
262
|
},
|
|
263
263
|
{
|
|
264
264
|
"doc": "code-organization-guide/rules/constants-rule.md",
|
|
265
265
|
"text": "Consumers MUST import an extracted constant through the index.ts in that constant's constants/ folder.",
|
|
266
266
|
"hash": "0a7bdc1dfe",
|
|
267
|
-
"kind": "
|
|
268
|
-
"
|
|
267
|
+
"kind": "eslint",
|
|
268
|
+
"ref": "pasika/import-through-index"
|
|
269
269
|
},
|
|
270
270
|
{
|
|
271
271
|
"doc": "code-organization-guide/rules/constants-rule.md",
|
|
@@ -306,8 +306,8 @@
|
|
|
306
306
|
"doc": "code-organization-guide/rules/exports-and-imports-rule.md",
|
|
307
307
|
"text": "A file that exports values MUST use named exports unless a framework or third-party package requires a different export style for that file.",
|
|
308
308
|
"hash": "b330b4c859",
|
|
309
|
-
"kind": "
|
|
310
|
-
"
|
|
309
|
+
"kind": "eslint",
|
|
310
|
+
"ref": "pasika/named-exports"
|
|
311
311
|
},
|
|
312
312
|
{
|
|
313
313
|
"doc": "code-organization-guide/rules/exports-and-imports-rule.md",
|
|
@@ -341,15 +341,15 @@
|
|
|
341
341
|
"doc": "code-organization-guide/rules/folder-nesting-rule.md",
|
|
342
342
|
"text": "A component MUST NOT be nested only because it has support files.",
|
|
343
343
|
"hash": "bd8c041512",
|
|
344
|
-
"kind": "
|
|
345
|
-
"
|
|
344
|
+
"kind": "eslint",
|
|
345
|
+
"ref": "pasika/component-nesting"
|
|
346
346
|
},
|
|
347
347
|
{
|
|
348
348
|
"doc": "code-organization-guide/rules/folder-nesting-rule.md",
|
|
349
349
|
"text": "A component MUST stay flat until it has one or more exclusive child components, then MUST be nested in a folder with the same name.",
|
|
350
350
|
"hash": "6adf7c4309",
|
|
351
|
-
"kind": "
|
|
352
|
-
"
|
|
351
|
+
"kind": "eslint",
|
|
352
|
+
"ref": "pasika/stay-flat"
|
|
353
353
|
},
|
|
354
354
|
{
|
|
355
355
|
"doc": "code-organization-guide/rules/folder-nesting-rule.md",
|
|
@@ -369,22 +369,22 @@
|
|
|
369
369
|
"doc": "code-organization-guide/rules/hook-extraction-rule.md",
|
|
370
370
|
"text": "A custom hook MUST be extracted to its own file when two or more consumers use it.",
|
|
371
371
|
"hash": "f7a5d6663d",
|
|
372
|
-
"kind": "
|
|
373
|
-
"
|
|
372
|
+
"kind": "eslint",
|
|
373
|
+
"ref": "pasika/hook-extraction"
|
|
374
374
|
},
|
|
375
375
|
{
|
|
376
376
|
"doc": "code-organization-guide/rules/hook-extraction-rule.md",
|
|
377
377
|
"text": "A custom hook with exactly one consumer MUST be extracted when it contains two or more imperative categories and can be described as one coherent behavior.",
|
|
378
378
|
"hash": "b057015bf3",
|
|
379
|
-
"kind": "
|
|
380
|
-
"
|
|
379
|
+
"kind": "eslint",
|
|
380
|
+
"ref": "pasika/hook-complexity"
|
|
381
381
|
},
|
|
382
382
|
{
|
|
383
383
|
"doc": "code-organization-guide/rules/hook-extraction-rule.md",
|
|
384
384
|
"text": "A custom hook with one consumer that contains fewer than two imperative categories MUST stay inline in its consumer file.",
|
|
385
385
|
"hash": "fb12bb6002",
|
|
386
|
-
"kind": "
|
|
387
|
-
"
|
|
386
|
+
"kind": "eslint",
|
|
387
|
+
"ref": "pasika/hook-complexity"
|
|
388
388
|
},
|
|
389
389
|
{
|
|
390
390
|
"doc": "code-organization-guide/rules/hook-extraction-rule.md",
|
|
@@ -404,8 +404,8 @@
|
|
|
404
404
|
"doc": "code-organization-guide/rules/interactive-component-rule.md",
|
|
405
405
|
"text": "An interactive HTML element MUST be extracted to a component with a descriptive name.",
|
|
406
406
|
"hash": "56a186c55b",
|
|
407
|
-
"kind": "
|
|
408
|
-
"
|
|
407
|
+
"kind": "eslint",
|
|
408
|
+
"ref": "pasika/interactive-component"
|
|
409
409
|
},
|
|
410
410
|
{
|
|
411
411
|
"doc": "code-organization-guide/rules/jsx-hygiene-rule.md",
|
|
@@ -418,8 +418,8 @@
|
|
|
418
418
|
"doc": "code-organization-guide/rules/jsx-hygiene-rule.md",
|
|
419
419
|
"text": "Arithmetic, chained built-in method calls, calls to functions declared outside the component, nested ternaries, and conditions containing two or more logical operators MUST be extracted before return, including in JSX attributes.",
|
|
420
420
|
"hash": "979a3e96c3",
|
|
421
|
-
"kind": "
|
|
422
|
-
"
|
|
421
|
+
"kind": "eslint",
|
|
422
|
+
"ref": "pasika/jsx-hygiene"
|
|
423
423
|
},
|
|
424
424
|
{
|
|
425
425
|
"doc": "code-organization-guide/rules/locales-rule.md",
|
|
@@ -432,29 +432,29 @@
|
|
|
432
432
|
"doc": "code-organization-guide/rules/locales-rule.md",
|
|
433
433
|
"text": "A namespaced locale MUST be read through its full dotted path (locales.stream.watchLiveStream).",
|
|
434
434
|
"hash": "3c10684240",
|
|
435
|
-
"kind": "
|
|
436
|
-
"
|
|
435
|
+
"kind": "eslint",
|
|
436
|
+
"ref": "pasika/locale-dotted-path"
|
|
437
437
|
},
|
|
438
438
|
{
|
|
439
439
|
"doc": "code-organization-guide/rules/locales-rule.md",
|
|
440
440
|
"text": "All locales MUST live in the named locales object exported from src/locales/index.ts.",
|
|
441
441
|
"hash": "2469d743da",
|
|
442
|
-
"kind": "
|
|
443
|
-
"
|
|
442
|
+
"kind": "eslint",
|
|
443
|
+
"ref": "pasika/locales-location"
|
|
444
444
|
},
|
|
445
445
|
{
|
|
446
446
|
"doc": "code-organization-guide/rules/locales-rule.md",
|
|
447
447
|
"text": "Locales read by files in more than one feature folder or by src/shared/, src/compositions/, src/app/, or root support folders MUST live at the top level of locales.",
|
|
448
448
|
"hash": "4f947bf362",
|
|
449
|
-
"kind": "
|
|
450
|
-
"
|
|
449
|
+
"kind": "eslint",
|
|
450
|
+
"ref": "pasika/locale-placement"
|
|
451
451
|
},
|
|
452
452
|
{
|
|
453
453
|
"doc": "code-organization-guide/rules/locales-rule.md",
|
|
454
454
|
"text": "Locales read only by files in one feature folder MUST live in an object with the camelCase form of its feature folder name (for example, user-settings becomes userSettings).",
|
|
455
455
|
"hash": "66addb15b3",
|
|
456
|
-
"kind": "
|
|
457
|
-
"
|
|
456
|
+
"kind": "eslint",
|
|
457
|
+
"ref": "pasika/locale-placement"
|
|
458
458
|
},
|
|
459
459
|
{
|
|
460
460
|
"doc": "code-organization-guide/rules/nameable-visual-concept-rule.md",
|
|
@@ -482,29 +482,29 @@
|
|
|
482
482
|
"doc": "code-organization-guide/rules/smart-vs-dumb-component-rule.md",
|
|
483
483
|
"text": "A dumb component MAY set data-testid on its root element, and the value MUST be kebab-case.",
|
|
484
484
|
"hash": "4c78863697",
|
|
485
|
-
"kind": "
|
|
486
|
-
"
|
|
485
|
+
"kind": "eslint",
|
|
486
|
+
"ref": "pasika/data-testid-case"
|
|
487
487
|
},
|
|
488
488
|
{
|
|
489
489
|
"doc": "code-organization-guide/rules/smart-vs-dumb-component-rule.md",
|
|
490
490
|
"text": "A dumb component file name MUST be kebab-case.tsx.",
|
|
491
491
|
"hash": "7639f7df0b",
|
|
492
|
-
"kind": "
|
|
493
|
-
"
|
|
492
|
+
"kind": "eslint",
|
|
493
|
+
"ref": "pasika/filename-case"
|
|
494
494
|
},
|
|
495
495
|
{
|
|
496
496
|
"doc": "code-organization-guide/rules/smart-vs-dumb-component-rule.md",
|
|
497
497
|
"text": "A smart component file name MUST be PascalCase.tsx.",
|
|
498
498
|
"hash": "1ece393f32",
|
|
499
|
-
"kind": "
|
|
500
|
-
"
|
|
499
|
+
"kind": "eslint",
|
|
500
|
+
"ref": "pasika/filename-case"
|
|
501
501
|
},
|
|
502
502
|
{
|
|
503
503
|
"doc": "code-organization-guide/rules/smart-vs-dumb-component-rule.md",
|
|
504
504
|
"text": "A smart component with one outer DOM element in every rendered result MUST set data-testid on that element, and its value MUST match the component name in PascalCase.",
|
|
505
505
|
"hash": "31dc8b3188",
|
|
506
|
-
"kind": "
|
|
507
|
-
"
|
|
506
|
+
"kind": "eslint",
|
|
507
|
+
"ref": "pasika/data-testid-case"
|
|
508
508
|
},
|
|
509
509
|
{
|
|
510
510
|
"doc": "code-organization-guide/rules/smart-vs-dumb-component-rule.md",
|
|
@@ -517,8 +517,8 @@
|
|
|
517
517
|
"doc": "code-organization-guide/rules/smart-vs-dumb-component-rule.md",
|
|
518
518
|
"text": "Next.js App Router routing files MUST use their required kebab-case names and are exempt from smart/dumb file-name and data-testid requirements.",
|
|
519
519
|
"hash": "fb2c9ab370",
|
|
520
|
-
"kind": "
|
|
521
|
-
"
|
|
520
|
+
"kind": "eslint",
|
|
521
|
+
"ref": "pasika/data-testid-case"
|
|
522
522
|
},
|
|
523
523
|
{
|
|
524
524
|
"doc": "code-organization-guide/rules/sole-state-owner-rule.md",
|
|
@@ -538,15 +538,15 @@
|
|
|
538
538
|
"doc": "code-organization-guide/rules/types-and-schemas-rule.md",
|
|
539
539
|
"text": "A type or schema declared in a component MUST stay in that component file until another file imports it without the component where it is defined.",
|
|
540
540
|
"hash": "165d0c0cad",
|
|
541
|
-
"kind": "
|
|
542
|
-
"
|
|
541
|
+
"kind": "eslint",
|
|
542
|
+
"ref": "pasika/type-extraction"
|
|
543
543
|
},
|
|
544
544
|
{
|
|
545
545
|
"doc": "code-organization-guide/rules/types-and-schemas-rule.md",
|
|
546
546
|
"text": "A type or schema declared outside a component MUST stay in its file until another file needs it without using the code in that file.",
|
|
547
547
|
"hash": "e63d1fbcb8",
|
|
548
|
-
"kind": "
|
|
549
|
-
"
|
|
548
|
+
"kind": "eslint",
|
|
549
|
+
"ref": "pasika/type-extraction"
|
|
550
550
|
},
|
|
551
551
|
{
|
|
552
552
|
"doc": "code-organization-guide/rules/types-and-schemas-rule.md",
|
|
@@ -559,15 +559,15 @@
|
|
|
559
559
|
"doc": "code-organization-guide/rules/types-and-schemas-rule.md",
|
|
560
560
|
"text": "A types/ or schemas/ folder MUST either define its exports directly in index.ts or group related types and schemas in files that index.ts named-re-exports.",
|
|
561
561
|
"hash": "b13a973306",
|
|
562
|
-
"kind": "
|
|
563
|
-
"
|
|
562
|
+
"kind": "eslint",
|
|
563
|
+
"ref": "pasika/support-folder-shape"
|
|
564
564
|
},
|
|
565
565
|
{
|
|
566
566
|
"doc": "code-organization-guide/rules/types-and-schemas-rule.md",
|
|
567
567
|
"text": "Consumers MUST import an extracted type or schema through the index.ts in that type or schema's types/ or schemas/ folder.",
|
|
568
568
|
"hash": "24fb9c0774",
|
|
569
|
-
"kind": "
|
|
570
|
-
"
|
|
569
|
+
"kind": "eslint",
|
|
570
|
+
"ref": "pasika/import-through-index"
|
|
571
571
|
},
|
|
572
572
|
{
|
|
573
573
|
"doc": "code-organization-guide/rules/types-and-schemas-rule.md",
|
|
@@ -594,22 +594,22 @@
|
|
|
594
594
|
"doc": "code-organization-guide/rules/utilities-rule.md",
|
|
595
595
|
"text": "A pure function MUST be extracted to utils/, even when it has one consumer.",
|
|
596
596
|
"hash": "d49b4ce49a",
|
|
597
|
-
"kind": "
|
|
598
|
-
"
|
|
597
|
+
"kind": "eslint",
|
|
598
|
+
"ref": "pasika/pure-function-extract"
|
|
599
599
|
},
|
|
600
600
|
{
|
|
601
601
|
"doc": "code-organization-guide/rules/utilities-rule.md",
|
|
602
602
|
"text": "A utility MUST be imported directly without a barrel.",
|
|
603
603
|
"hash": "a3bd205f5c",
|
|
604
|
-
"kind": "
|
|
605
|
-
"
|
|
604
|
+
"kind": "eslint",
|
|
605
|
+
"ref": "pasika/no-util-barrel"
|
|
606
606
|
},
|
|
607
607
|
{
|
|
608
608
|
"doc": "code-organization-guide/rules/utilities-rule.md",
|
|
609
609
|
"text": "A utility file that exports one function MUST have a name in that function's kebab-case form.",
|
|
610
610
|
"hash": "9b82ca27ee",
|
|
611
|
-
"kind": "
|
|
612
|
-
"
|
|
611
|
+
"kind": "eslint",
|
|
612
|
+
"ref": "pasika/util-file-name"
|
|
613
613
|
},
|
|
614
614
|
{
|
|
615
615
|
"doc": "code-organization-guide/rules/utilities-rule.md",
|
|
@@ -649,71 +649,74 @@
|
|
|
649
649
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
650
650
|
"text": "A Guide overview MUST contain one or two short descriptive sentences about the guide's scope and purpose, and MUST NOT contain instructions or links to other documentation.",
|
|
651
651
|
"hash": "694bfba1ab",
|
|
652
|
-
"kind": "
|
|
653
|
-
"ref": "overview-length, guide-overview-no-links"
|
|
652
|
+
"kind": "eslint",
|
|
653
|
+
"ref": "pasika/overview-length, pasika/guide-overview-no-links"
|
|
654
654
|
},
|
|
655
655
|
{
|
|
656
656
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
657
657
|
"text": "A Guide whose steps use terms that a glossary Reference defines MUST link that Reference from its first step.",
|
|
658
658
|
"hash": "caef1018c4",
|
|
659
|
-
"kind": "
|
|
659
|
+
"kind": "eslint",
|
|
660
|
+
"ref": "pasika/glossary-term-linking",
|
|
660
661
|
"note": "docs-check: compare glossary terms against the guide's steps"
|
|
661
662
|
},
|
|
662
663
|
{
|
|
663
664
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
664
665
|
"text": "A Guide with support files MUST become a folder named the same as its entry-point file, without the .md extension.",
|
|
665
666
|
"hash": "26a4eb93d4",
|
|
666
|
-
"kind": "
|
|
667
|
-
"ref": "guide-folder-entry-point"
|
|
667
|
+
"kind": "eslint",
|
|
668
|
+
"ref": "pasika/guide-folder-entry-point"
|
|
668
669
|
},
|
|
669
670
|
{
|
|
670
671
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
671
672
|
"text": "A Reference file that a Guide owns MUST live in a references/ subfolder inside the Guide's folder.",
|
|
672
673
|
"hash": "4efb50f75f",
|
|
673
|
-
"kind": "
|
|
674
|
-
"ref": "support-document-placement"
|
|
674
|
+
"kind": "eslint",
|
|
675
|
+
"ref": "pasika/support-document-placement"
|
|
675
676
|
},
|
|
676
677
|
{
|
|
677
678
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
678
679
|
"text": "A Rule file that a Guide owns MUST live in a rules/ subfolder inside the Guide's folder.",
|
|
679
680
|
"hash": "73d2f1cc23",
|
|
680
|
-
"kind": "
|
|
681
|
-
"ref": "support-document-placement"
|
|
681
|
+
"kind": "eslint",
|
|
682
|
+
"ref": "pasika/support-document-placement"
|
|
682
683
|
},
|
|
683
684
|
{
|
|
684
685
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
685
686
|
"text": "A step that links another Guide MUST link directly to the relevant How To section.",
|
|
686
687
|
"hash": "eade3a0166",
|
|
687
|
-
"kind": "
|
|
688
|
+
"kind": "eslint",
|
|
689
|
+
"ref": "pasika/guide-link-anchors",
|
|
688
690
|
"note": "docs-check: a guide link carries a How To anchor"
|
|
689
691
|
},
|
|
690
692
|
{
|
|
691
693
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
692
694
|
"text": "Each How To step MUST be concise and use one sentence.",
|
|
693
695
|
"hash": "5992821880",
|
|
694
|
-
"kind": "
|
|
695
|
-
"ref": "guide-step-single-sentence",
|
|
696
|
+
"kind": "eslint",
|
|
697
|
+
"ref": "pasika/guide-step-single-sentence",
|
|
696
698
|
"note": "one sentence is checked; whether it is concise is judgment"
|
|
697
699
|
},
|
|
698
700
|
{
|
|
699
701
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
700
702
|
"text": "Each How To step MUST link at most one documentation file total, whatever kind that file is.",
|
|
701
703
|
"hash": "12585da0c8",
|
|
702
|
-
"kind": "
|
|
703
|
-
"ref": "guide-step-single-link"
|
|
704
|
+
"kind": "eslint",
|
|
705
|
+
"ref": "pasika/guide-step-single-link"
|
|
704
706
|
},
|
|
705
707
|
{
|
|
706
708
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
707
709
|
"text": "Guide file names MUST match the document title in kebab-case and use the -guide suffix (e.g., foo-guide.md).",
|
|
708
710
|
"hash": "e820de2429",
|
|
709
|
-
"kind": "
|
|
710
|
-
"ref": "title-matches-file-name, doc-kind-suffix"
|
|
711
|
+
"kind": "eslint",
|
|
712
|
+
"ref": "pasika/title-matches-file-name, pasika/doc-kind-suffix"
|
|
711
713
|
},
|
|
712
714
|
{
|
|
713
715
|
"doc": "documentation-guide/rules/guide-creation-rule.md",
|
|
714
716
|
"text": "How To sections MUST NOT nest inside other How To sections.",
|
|
715
717
|
"hash": "23415cb949",
|
|
716
|
-
"kind": "
|
|
718
|
+
"kind": "eslint",
|
|
719
|
+
"ref": "pasika/no-nested-how-to",
|
|
717
720
|
"note": "docs-check: no heading nests inside a How To section"
|
|
718
721
|
},
|
|
719
722
|
{
|
|
@@ -727,29 +730,30 @@
|
|
|
727
730
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
728
731
|
"text": "A Policy document MUST NOT contain Incorrect/Correct examples, and a requirement that a reader cannot apply without one MUST live in a Rule instead.",
|
|
729
732
|
"hash": "c1e046ec18",
|
|
730
|
-
"kind": "
|
|
731
|
-
"ref": "policy-no-examples"
|
|
733
|
+
"kind": "eslint",
|
|
734
|
+
"ref": "pasika/policy-no-examples"
|
|
732
735
|
},
|
|
733
736
|
{
|
|
734
737
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
735
738
|
"text": "A Policy document MUST NOT link to Rules, References, Guides, or other Policy documents.",
|
|
736
739
|
"hash": "483c98a275",
|
|
737
|
-
"kind": "
|
|
738
|
-
"ref": "no-cross-document-link"
|
|
740
|
+
"kind": "eslint",
|
|
741
|
+
"ref": "pasika/no-cross-document-link"
|
|
739
742
|
},
|
|
740
743
|
{
|
|
741
744
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
742
745
|
"text": "A Policy document MUST group its bullets under a heading per subject.",
|
|
743
746
|
"hash": "fa77621dda",
|
|
744
|
-
"kind": "
|
|
747
|
+
"kind": "eslint",
|
|
748
|
+
"ref": "pasika/policy-subject-headings",
|
|
745
749
|
"note": "docs-check: every bullet sits under a subject heading"
|
|
746
750
|
},
|
|
747
751
|
{
|
|
748
752
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
749
753
|
"text": "A Policy document MUST state every requirement as a bullet that uses RFC 2119 vocabulary.",
|
|
750
754
|
"hash": "eff345fe21",
|
|
751
|
-
"kind": "
|
|
752
|
-
"ref": "requirement-present"
|
|
755
|
+
"kind": "eslint",
|
|
756
|
+
"ref": "pasika/requirement-present"
|
|
753
757
|
},
|
|
754
758
|
{
|
|
755
759
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
@@ -762,22 +766,22 @@
|
|
|
762
766
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
763
767
|
"text": "A Policy overview MUST contain one or two short sentences naming the scope the requirements apply to.",
|
|
764
768
|
"hash": "cd5ad978b1",
|
|
765
|
-
"kind": "
|
|
766
|
-
"ref": "overview-length"
|
|
769
|
+
"kind": "eslint",
|
|
770
|
+
"ref": "pasika/overview-length"
|
|
767
771
|
},
|
|
768
772
|
{
|
|
769
773
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
770
774
|
"text": "A repository MUST NOT have more than one Policy document per audience.",
|
|
771
775
|
"hash": "74dd5ffc9e",
|
|
772
|
-
"kind": "
|
|
773
|
-
"ref": "policy-single-document"
|
|
776
|
+
"kind": "eslint",
|
|
777
|
+
"ref": "pasika/policy-single-document"
|
|
774
778
|
},
|
|
775
779
|
{
|
|
776
780
|
"doc": "documentation-guide/rules/policy-creation-rule.md",
|
|
777
781
|
"text": "Policy file names MUST match the document title in kebab-case and use the -policy suffix (e.g., foo-policy.md).",
|
|
778
782
|
"hash": "e83fddcd78",
|
|
779
|
-
"kind": "
|
|
780
|
-
"ref": "title-matches-file-name, doc-kind-suffix"
|
|
783
|
+
"kind": "eslint",
|
|
784
|
+
"ref": "pasika/title-matches-file-name, pasika/doc-kind-suffix"
|
|
781
785
|
},
|
|
782
786
|
{
|
|
783
787
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
@@ -796,8 +800,8 @@
|
|
|
796
800
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
797
801
|
"text": "A Reference MUST NOT link to Rules, Guides, Policy documents, or other References.",
|
|
798
802
|
"hash": "50070e301c",
|
|
799
|
-
"kind": "
|
|
800
|
-
"ref": "no-cross-document-link"
|
|
803
|
+
"kind": "eslint",
|
|
804
|
+
"ref": "pasika/no-cross-document-link"
|
|
801
805
|
},
|
|
802
806
|
{
|
|
803
807
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
@@ -810,36 +814,36 @@
|
|
|
810
814
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
811
815
|
"text": "A Reference MUST NOT use RFC 2119 vocabulary (MUST, MUST NOT, SHOULD, SHOULD NOT, MAY), because lookup material describes what exists rather than imposing requirements.",
|
|
812
816
|
"hash": "b06563ebdb",
|
|
813
|
-
"kind": "
|
|
814
|
-
"ref": "reference-no-rfc-vocabulary"
|
|
817
|
+
"kind": "eslint",
|
|
818
|
+
"ref": "pasika/reference-no-rfc-vocabulary"
|
|
815
819
|
},
|
|
816
820
|
{
|
|
817
821
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
818
822
|
"text": "A Reference overview and the overview of each headed lookup block MUST contain one or two short sentences.",
|
|
819
823
|
"hash": "829df330c7",
|
|
820
|
-
"kind": "
|
|
821
|
-
"ref": "overview-length"
|
|
824
|
+
"kind": "eslint",
|
|
825
|
+
"ref": "pasika/overview-length"
|
|
822
826
|
},
|
|
823
827
|
{
|
|
824
828
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
825
829
|
"text": "A Reference with a single lookup block MUST NOT add a section heading for it.",
|
|
826
830
|
"hash": "a599ad8306",
|
|
827
|
-
"kind": "
|
|
828
|
-
"ref": "reference-block-headings"
|
|
831
|
+
"kind": "eslint",
|
|
832
|
+
"ref": "pasika/reference-block-headings"
|
|
829
833
|
},
|
|
830
834
|
{
|
|
831
835
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
832
836
|
"text": "A Reference with two or more lookup blocks MUST add a section heading for every block, including the first.",
|
|
833
837
|
"hash": "8c8152f907",
|
|
834
|
-
"kind": "
|
|
835
|
-
"ref": "reference-block-headings"
|
|
838
|
+
"kind": "eslint",
|
|
839
|
+
"ref": "pasika/reference-block-headings"
|
|
836
840
|
},
|
|
837
841
|
{
|
|
838
842
|
"doc": "documentation-guide/rules/reference-creation-rule.md",
|
|
839
843
|
"text": "Reference file names MUST match the document title in kebab-case and use the -reference suffix (e.g., foo-reference.md).",
|
|
840
844
|
"hash": "8aae1d6156",
|
|
841
|
-
"kind": "
|
|
842
|
-
"ref": "title-matches-file-name, doc-kind-suffix"
|
|
845
|
+
"kind": "eslint",
|
|
846
|
+
"ref": "pasika/title-matches-file-name, pasika/doc-kind-suffix"
|
|
843
847
|
},
|
|
844
848
|
{
|
|
845
849
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
@@ -851,22 +855,22 @@
|
|
|
851
855
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
852
856
|
"text": "A Rule MUST NOT link to References, Guides, or other Rules.",
|
|
853
857
|
"hash": "bda91d953c",
|
|
854
|
-
"kind": "
|
|
855
|
-
"ref": "no-cross-document-link"
|
|
858
|
+
"kind": "eslint",
|
|
859
|
+
"ref": "pasika/no-cross-document-link"
|
|
856
860
|
},
|
|
857
861
|
{
|
|
858
862
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
859
863
|
"text": "A Rule MUST contain at least one Incorrect/Correct pair.",
|
|
860
864
|
"hash": "099da63c35",
|
|
861
|
-
"kind": "
|
|
862
|
-
"ref": "rule-paired-examples"
|
|
865
|
+
"kind": "eslint",
|
|
866
|
+
"ref": "pasika/rule-paired-examples"
|
|
863
867
|
},
|
|
864
868
|
{
|
|
865
869
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
866
870
|
"text": "A Rule MUST contain at least one bullet point that uses RFC 2119 vocabulary (MUST, MUST NOT, SHOULD, SHOULD NOT, MAY).",
|
|
867
871
|
"hash": "2cfcc88337",
|
|
868
|
-
"kind": "
|
|
869
|
-
"ref": "requirement-present"
|
|
872
|
+
"kind": "eslint",
|
|
873
|
+
"ref": "pasika/requirement-present"
|
|
870
874
|
},
|
|
871
875
|
{
|
|
872
876
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
@@ -879,8 +883,8 @@
|
|
|
879
883
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
880
884
|
"text": "A Rule overview MUST contain one or two short sentences naming the problem the rule solves.",
|
|
881
885
|
"hash": "ab67bac18e",
|
|
882
|
-
"kind": "
|
|
883
|
-
"ref": "overview-length"
|
|
886
|
+
"kind": "eslint",
|
|
887
|
+
"ref": "pasika/overview-length"
|
|
884
888
|
},
|
|
885
889
|
{
|
|
886
890
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
@@ -900,29 +904,31 @@
|
|
|
900
904
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
901
905
|
"text": "An Incorrect/Correct pair MUST add a concise description after an em dash in both headings, so readers can scan the examples by decision.",
|
|
902
906
|
"hash": "001ce1c18c",
|
|
903
|
-
"kind": "
|
|
904
|
-
"ref": "example-heading-description"
|
|
907
|
+
"kind": "eslint",
|
|
908
|
+
"ref": "pasika/example-heading-description"
|
|
905
909
|
},
|
|
906
910
|
{
|
|
907
911
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
908
912
|
"text": "Prose outside bullet points — intros, Why: explanations, table cells, and code comments — MUST restate a requirement in plain language instead of repeating RFC 2119 vocabulary.",
|
|
909
913
|
"hash": "961d7db3b9",
|
|
910
|
-
"kind": "
|
|
914
|
+
"kind": "eslint",
|
|
915
|
+
"ref": "pasika/rfc-only-in-bullets",
|
|
911
916
|
"note": "docs-check: RFC 2119 vocabulary appears only in bullets"
|
|
912
917
|
},
|
|
913
918
|
{
|
|
914
919
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
915
920
|
"text": "RFC 2119 vocabulary MUST appear only in bullet points, so the bullet list is the single place a requirement is stated.",
|
|
916
921
|
"hash": "e68233ce8b",
|
|
917
|
-
"kind": "
|
|
922
|
+
"kind": "eslint",
|
|
923
|
+
"ref": "pasika/rfc-only-in-bullets",
|
|
918
924
|
"note": "docs-check: RFC 2119 vocabulary appears only in bullets"
|
|
919
925
|
},
|
|
920
926
|
{
|
|
921
927
|
"doc": "documentation-guide/rules/rule-creation-rule.md",
|
|
922
928
|
"text": "Rule file names MUST match the document title in kebab-case and use the -rule suffix (e.g., foo-rule.md).",
|
|
923
929
|
"hash": "58b18e4f61",
|
|
924
|
-
"kind": "
|
|
925
|
-
"ref": "title-matches-file-name, doc-kind-suffix"
|
|
930
|
+
"kind": "eslint",
|
|
931
|
+
"ref": "pasika/title-matches-file-name, pasika/doc-kind-suffix"
|
|
926
932
|
},
|
|
927
933
|
{
|
|
928
934
|
"doc": "documentation-guide/rules/template-usage-rule.md",
|
|
@@ -935,8 +941,8 @@
|
|
|
935
941
|
"doc": "documentation-guide/rules/template-usage-rule.md",
|
|
936
942
|
"text": "Authors MUST replace each bracketed prompt with the final title, explanation, step, or lookup content it asks for.",
|
|
937
943
|
"hash": "7e7db98db0",
|
|
938
|
-
"kind": "
|
|
939
|
-
"ref": "no-template-prompt"
|
|
944
|
+
"kind": "eslint",
|
|
945
|
+
"ref": "pasika/no-template-prompt"
|
|
940
946
|
},
|
|
941
947
|
{
|
|
942
948
|
"doc": "documentation-guide/rules/template-usage-rule.md",
|
|
@@ -963,15 +969,15 @@
|
|
|
963
969
|
"doc": "styling-guide/rules/class-composition-rule.md",
|
|
964
970
|
"text": "A className passed to a component MUST contain only outer-layout utilities: margins, sizing, flex or grid item placement, and z-index.",
|
|
965
971
|
"hash": "a84eca1927",
|
|
966
|
-
"kind": "
|
|
967
|
-
"
|
|
972
|
+
"kind": "eslint",
|
|
973
|
+
"ref": "pasika/enforce-cn-merge"
|
|
968
974
|
},
|
|
969
975
|
{
|
|
970
976
|
"doc": "styling-guide/rules/class-composition-rule.md",
|
|
971
977
|
"text": "A component MUST expose its supported appearance and size variants through typed props, not through a passed className or separate class-name props for internal elements.",
|
|
972
978
|
"hash": "294fb0dbae",
|
|
973
|
-
"kind": "
|
|
974
|
-
"
|
|
979
|
+
"kind": "eslint",
|
|
980
|
+
"ref": "pasika/enforce-cn-merge"
|
|
975
981
|
},
|
|
976
982
|
{
|
|
977
983
|
"doc": "styling-guide/rules/class-composition-rule.md",
|
|
@@ -999,8 +1005,8 @@
|
|
|
999
1005
|
"doc": "styling-guide/rules/component-ui-state-rule.md",
|
|
1000
1006
|
"text": "A component MUST express a UI state through the native element, attribute, or ARIA state for it and MUST NOT use a custom equivalent.",
|
|
1001
1007
|
"hash": "bb3c5b82cd",
|
|
1002
|
-
"kind": "
|
|
1003
|
-
"
|
|
1008
|
+
"kind": "eslint",
|
|
1009
|
+
"ref": "pasika/ui-state"
|
|
1004
1010
|
},
|
|
1005
1011
|
{
|
|
1006
1012
|
"doc": "styling-guide/rules/component-ui-state-rule.md",
|
|
@@ -1013,29 +1019,29 @@
|
|
|
1013
1019
|
"doc": "styling-guide/rules/component-ui-state-rule.md",
|
|
1014
1020
|
"text": "A component MUST use Tailwind \"state variants\" when they can express a supported UI state.",
|
|
1015
1021
|
"hash": "0f6c3bb7ed",
|
|
1016
|
-
"kind": "
|
|
1017
|
-
"
|
|
1022
|
+
"kind": "eslint",
|
|
1023
|
+
"ref": "pasika/ui-state"
|
|
1018
1024
|
},
|
|
1019
1025
|
{
|
|
1020
1026
|
"doc": "styling-guide/rules/component-variant-rule.md",
|
|
1021
1027
|
"text": "A boolean prop that changes appearance MUST use a CVA variant when both boolean values have explicit treatments or when the boolean participates in a compound variant.",
|
|
1022
1028
|
"hash": "3393d959ca",
|
|
1023
|
-
"kind": "
|
|
1024
|
-
"
|
|
1029
|
+
"kind": "eslint",
|
|
1030
|
+
"ref": "pasika/cva-boolean-variants"
|
|
1025
1031
|
},
|
|
1026
1032
|
{
|
|
1027
1033
|
"doc": "styling-guide/rules/component-variant-rule.md",
|
|
1028
1034
|
"text": "A boolean prop that changes appearance MUST use conditional cn() when it only adds or removes one standalone class treatment.",
|
|
1029
1035
|
"hash": "c1fc4dacbd",
|
|
1030
|
-
"kind": "
|
|
1031
|
-
"
|
|
1036
|
+
"kind": "eslint",
|
|
1037
|
+
"ref": "pasika/cva-boolean-variants"
|
|
1032
1038
|
},
|
|
1033
1039
|
{
|
|
1034
1040
|
"doc": "styling-guide/rules/component-variant-rule.md",
|
|
1035
1041
|
"text": "A component that lets callers choose visual options MUST define them with cva.",
|
|
1036
1042
|
"hash": "8162f16933",
|
|
1037
|
-
"kind": "
|
|
1038
|
-
"
|
|
1043
|
+
"kind": "eslint",
|
|
1044
|
+
"ref": "pasika/cva-appearance-props"
|
|
1039
1045
|
},
|
|
1040
1046
|
{
|
|
1041
1047
|
"doc": "styling-guide/rules/component-variant-rule.md",
|
|
@@ -1048,92 +1054,92 @@
|
|
|
1048
1054
|
"doc": "styling-guide/rules/global-stylesheet-rule.md",
|
|
1049
1055
|
"text": "A repository MUST have one global stylesheet entry point that registers Tailwind.",
|
|
1050
1056
|
"hash": "4f548b26c4",
|
|
1051
|
-
"kind": "
|
|
1052
|
-
"
|
|
1057
|
+
"kind": "doctor",
|
|
1058
|
+
"ref": "pasika/global-stylesheet"
|
|
1053
1059
|
},
|
|
1054
1060
|
{
|
|
1055
1061
|
"doc": "styling-guide/rules/global-stylesheet-rule.md",
|
|
1056
1062
|
"text": "Every value used for the project's styling MUST be defined as a CSS variable in :root, even when no theme selector overrides it. A Tailwind theme variable MUST reference that CSS variable through @theme inline.",
|
|
1057
1063
|
"hash": "d89d54996c",
|
|
1058
|
-
"kind": "
|
|
1059
|
-
"
|
|
1064
|
+
"kind": "eslint",
|
|
1065
|
+
"ref": "pasika/root-variables"
|
|
1060
1066
|
},
|
|
1061
1067
|
{
|
|
1062
1068
|
"doc": "styling-guide/rules/global-stylesheet-rule.md",
|
|
1063
1069
|
"text": "Style declarations added by the project inside global selectors MUST use @apply.",
|
|
1064
1070
|
"hash": "9799ce3761",
|
|
1065
|
-
"kind": "
|
|
1066
|
-
"
|
|
1071
|
+
"kind": "eslint",
|
|
1072
|
+
"ref": "pasika/apply-usage"
|
|
1067
1073
|
},
|
|
1068
1074
|
{
|
|
1069
1075
|
"doc": "styling-guide/rules/global-stylesheet-rule.md",
|
|
1070
1076
|
"text": "The global base layer MUST apply base-canvas and base-ink to the document body as the default page pair.",
|
|
1071
1077
|
"hash": "a3b7faf6da",
|
|
1072
|
-
"kind": "
|
|
1073
|
-
"
|
|
1078
|
+
"kind": "eslint",
|
|
1079
|
+
"ref": "pasika/base-layer-pair"
|
|
1074
1080
|
},
|
|
1075
1081
|
{
|
|
1076
1082
|
"doc": "styling-guide/rules/global-stylesheet-rule.md",
|
|
1077
1083
|
"text": "The global stylesheet MUST order imports, @custom-variant definitions, :root variables and the selectors that override them, @theme definitions, custom utilities, base styles, and keyframes in that order.",
|
|
1078
1084
|
"hash": "d483eb365b",
|
|
1079
|
-
"kind": "
|
|
1080
|
-
"
|
|
1085
|
+
"kind": "eslint",
|
|
1086
|
+
"ref": "pasika/stylesheet-ordering"
|
|
1081
1087
|
},
|
|
1082
1088
|
{
|
|
1083
1089
|
"doc": "styling-guide/rules/global-stylesheet-rule.md",
|
|
1084
1090
|
"text": "The global stylesheet MUST reset Tailwind's default theme with --*: initial.",
|
|
1085
1091
|
"hash": "d28608a7a3",
|
|
1086
|
-
"kind": "
|
|
1087
|
-
"
|
|
1092
|
+
"kind": "eslint",
|
|
1093
|
+
"ref": "pasika/theme-reset"
|
|
1088
1094
|
},
|
|
1089
1095
|
{
|
|
1090
1096
|
"doc": "styling-guide/rules/global-stylesheet-rule.md",
|
|
1091
1097
|
"text": "The project's global CSS MUST live in the global stylesheet entry point and MUST NOT be imported from another file.",
|
|
1092
1098
|
"hash": "dce78502d3",
|
|
1093
|
-
"kind": "
|
|
1094
|
-
"
|
|
1099
|
+
"kind": "eslint",
|
|
1100
|
+
"ref": "pasika/global-css-location"
|
|
1095
1101
|
},
|
|
1096
1102
|
{
|
|
1097
1103
|
"doc": "styling-guide/rules/theme-and-utility-definition-rule.md",
|
|
1098
1104
|
"text": "A CSS variable intended only for a background MUST be named --<role>-canvas, and one intended only for readable text MUST be named --<role>-ink. When a named custom utility exposes one of those values by itself, it MUST use bg-<role>-canvas or text-<role>-ink.",
|
|
1099
1105
|
"hash": "0fb98de16d",
|
|
1100
|
-
"kind": "
|
|
1101
|
-
"
|
|
1106
|
+
"kind": "eslint",
|
|
1107
|
+
"ref": "pasika/css-variable-naming"
|
|
1102
1108
|
},
|
|
1103
1109
|
{
|
|
1104
1110
|
"doc": "styling-guide/rules/theme-and-utility-definition-rule.md",
|
|
1105
1111
|
"text": "A custom utility MUST use @apply for every styling declaration added by the project. When no named built-in utility represents a property value, it MUST apply the Tailwind custom-property or arbitrary-property utility instead.",
|
|
1106
1112
|
"hash": "a61de0650b",
|
|
1107
|
-
"kind": "
|
|
1108
|
-
"
|
|
1113
|
+
"kind": "eslint",
|
|
1114
|
+
"ref": "pasika/custom-utility-apply"
|
|
1109
1115
|
},
|
|
1110
1116
|
{
|
|
1111
1117
|
"doc": "styling-guide/rules/theme-and-utility-definition-rule.md",
|
|
1112
1118
|
"text": "A repeated combination of canvas, ink, and related styles MUST become a *-surface custom Tailwind utility that owns the combination.",
|
|
1113
1119
|
"hash": "0d965db624",
|
|
1114
|
-
"kind": "
|
|
1115
|
-
"
|
|
1120
|
+
"kind": "eslint",
|
|
1121
|
+
"ref": "pasika/surface-utility"
|
|
1116
1122
|
},
|
|
1117
1123
|
{
|
|
1118
1124
|
"doc": "styling-guide/rules/theme-and-utility-definition-rule.md",
|
|
1119
1125
|
"text": "A style or group of styles that two or more components use together and should change together MUST become one named custom utility. The group MAY include utilities generated by theme variables, built-in utilities, other custom utilities, and interaction styles.",
|
|
1120
1126
|
"hash": "9cf4c454fb",
|
|
1121
|
-
"kind": "
|
|
1122
|
-
"
|
|
1127
|
+
"kind": "eslint",
|
|
1128
|
+
"ref": "pasika/shared-style-dedup"
|
|
1123
1129
|
},
|
|
1124
1130
|
{
|
|
1125
1131
|
"doc": "styling-guide/rules/theme-and-utility-definition-rule.md",
|
|
1126
1132
|
"text": "A value that needs at least two utility classes from the same Tailwind theme-variable namespace MUST use that namespace and have the same name in :root.",
|
|
1127
1133
|
"hash": "d9b8eeb83d",
|
|
1128
|
-
"kind": "
|
|
1129
|
-
"
|
|
1134
|
+
"kind": "eslint",
|
|
1135
|
+
"ref": "pasika/theme-variable-namespace"
|
|
1130
1136
|
},
|
|
1131
1137
|
{
|
|
1132
1138
|
"doc": "styling-guide/rules/theme-and-utility-definition-rule.md",
|
|
1133
1139
|
"text": "Styling used by only one component MUST stay in that component file as static Tailwind utility classes and MUST NOT be moved to the global stylesheet.",
|
|
1134
1140
|
"hash": "50f1692be2",
|
|
1135
|
-
"kind": "
|
|
1136
|
-
"
|
|
1141
|
+
"kind": "eslint",
|
|
1142
|
+
"ref": "pasika/shared-style-dedup"
|
|
1137
1143
|
}
|
|
1138
1144
|
]
|
|
1139
1145
|
}
|