pasika 0.4.0 → 0.4.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 CHANGED
@@ -122,6 +122,7 @@ Because the preset blocks wire ESLint's language plugins, using them directly (w
122
122
  | `pasika/import-boundaries` | The shorter of the relative path and the `@/*` alias, and the layer boundaries |
123
123
  | `pasika/no-mixed-concerns` | One exported React component per `.tsx` file |
124
124
  | `pasika/no-arbitrary-tailwind` | No arbitrary `-[value]` classes, including inside `cn()` conditionals |
125
+ | `pasika/unknown-utility` | Component class names are a custom `@utility`, a theme-generated utility, or a built-in the reset keeps |
125
126
  | `pasika/enforce-cn-merge` | `cn()` instead of `+` or template literals; at most five classes per group |
126
127
  | `pasika/enforce-cva-variant-props` | `VariantProps<typeof …>` instead of hand-written unions |
127
128
  | `pasika/cva-appearance-props` | Visual option props (`size`, `variant`, …) declared through CVA appearance props |
@@ -175,6 +176,7 @@ Applied to `src/**/globals.css` (and other stylesheets) through `@eslint/css` wi
175
176
  | `pasika/surface-utility` | Repeated canvas+ink combos become a named surface utility |
176
177
  | `pasika/theme-variable-namespace` | Utility class groups share a namespace prefix |
177
178
  | `pasika/global-css-location` | Global CSS lives in the correct entry point |
179
+ | `pasika/unused-utility` | A custom `@utility` no source file references is reported as dead |
178
180
 
179
181
  ### Package.json rules
180
182
 
@@ -1,9 +1,9 @@
1
- import * as eslint from 'eslint';
2
- import { Rule, Linter } from 'eslint';
3
- import * as ESTree from 'estree';
4
1
  import * as _eslint_markdown from '@eslint/markdown';
5
2
  import * as _eslint_css from '@eslint/css';
6
3
  import * as _eslint_json from '@eslint/json';
4
+ import * as eslint from 'eslint';
5
+ import { Rule, Linter } from 'eslint';
6
+ import * as ESTree from 'estree';
7
7
 
8
8
  /**
9
9
  * Local AST node types for the parser-specific shapes ESLint's ESTree types
@@ -112,6 +112,7 @@ declare const tailwindRules: {
112
112
  "theme-variable-namespace": _eslint_css.CSSRuleDefinition;
113
113
  "global-css-location": _eslint_css.CSSRuleDefinition;
114
114
  "global-stylesheet": _eslint_css.CSSRuleDefinition;
115
+ "unused-utility": _eslint_css.CSSRuleDefinition;
115
116
  };
116
117
 
117
118
  /** Framework-agnostic package.json rules any repository should follow. */
@@ -142,6 +143,7 @@ declare const pasikaRules: {
142
143
  "ui-state": eslint.Rule.RuleModule;
143
144
  "no-mixed-concerns": eslint.Rule.RuleModule;
144
145
  "no-arbitrary-tailwind": eslint.Rule.RuleModule;
146
+ "unknown-utility": eslint.Rule.RuleModule;
145
147
  "enforce-cn-merge": {
146
148
  meta: {
147
149
  schema: never[];
@@ -188,6 +190,110 @@ declare const pasikaRules: {
188
190
  "zirka-baseline": eslint.Rule.RuleModule;
189
191
  };
190
192
 
193
+ /**
194
+ * One plugin object every preset block references. ESLint only permits a
195
+ * plugin name to be redefined across configs when the value is the same
196
+ * object reference, and several blocks share file scopes (`src/**`, the
197
+ * manifest, `globals.css`), so a per-block plugin object would collide when
198
+ * the blocks merge.
199
+ */
200
+ declare const pasikaPlugin: {
201
+ rules: {
202
+ "vulyk-docs": _eslint_json.JSONRuleDefinition;
203
+ "husky-hook": _eslint_json.JSONRuleDefinition;
204
+ "nextjs-stack": _eslint_json.JSONRuleDefinition;
205
+ "no-vulyk-dependency": _eslint_json.JSONRuleDefinition;
206
+ "exact-version": _eslint_json.JSONRuleDefinition;
207
+ "theme-reset": _eslint_css.CSSRuleDefinition;
208
+ "root-variables": _eslint_css.CSSRuleDefinition;
209
+ "apply-usage": _eslint_css.CSSRuleDefinition;
210
+ "base-layer-pair": _eslint_css.CSSRuleDefinition;
211
+ "stylesheet-ordering": _eslint_css.CSSRuleDefinition;
212
+ "css-variable-naming": _eslint_css.CSSRuleDefinition;
213
+ "custom-utility-apply": _eslint_css.CSSRuleDefinition;
214
+ "surface-utility": _eslint_css.CSSRuleDefinition;
215
+ "theme-variable-namespace": _eslint_css.CSSRuleDefinition;
216
+ "global-css-location": _eslint_css.CSSRuleDefinition;
217
+ "global-stylesheet": _eslint_css.CSSRuleDefinition;
218
+ "unused-utility": _eslint_css.CSSRuleDefinition;
219
+ "doc-kind-suffix": _eslint_markdown.MarkdownRuleDefinition;
220
+ "title-matches-file-name": _eslint_markdown.MarkdownRuleDefinition;
221
+ overview: _eslint_markdown.MarkdownRuleDefinition;
222
+ "guide-step-single-sentence": _eslint_markdown.MarkdownRuleDefinition;
223
+ "guide-step-single-link": _eslint_markdown.MarkdownRuleDefinition;
224
+ "guide-states-no-requirement": _eslint_markdown.MarkdownRuleDefinition;
225
+ "requirement-present": _eslint_markdown.MarkdownRuleDefinition;
226
+ "rule-paired-examples": _eslint_markdown.MarkdownRuleDefinition;
227
+ "example-heading-description": _eslint_markdown.MarkdownRuleDefinition;
228
+ "policy-no-examples": _eslint_markdown.MarkdownRuleDefinition;
229
+ "no-cross-document-link": _eslint_markdown.MarkdownRuleDefinition;
230
+ "reference-no-rfc-vocabulary": _eslint_markdown.MarkdownRuleDefinition;
231
+ "reference-block-headings": _eslint_markdown.MarkdownRuleDefinition;
232
+ "support-document-placement": _eslint_markdown.MarkdownRuleDefinition;
233
+ "no-template-prompt": _eslint_markdown.MarkdownRuleDefinition;
234
+ "guide-folder-entry-point": _eslint_markdown.MarkdownRuleDefinition;
235
+ "rfc-only-in-bullets": _eslint_markdown.MarkdownRuleDefinition;
236
+ "rfc-keyword-in-every-bullet": _eslint_markdown.MarkdownRuleDefinition;
237
+ "policy-subject-headings": _eslint_markdown.MarkdownRuleDefinition;
238
+ "guide-link-anchors": _eslint_markdown.MarkdownRuleDefinition;
239
+ "no-nested-how-to": _eslint_markdown.MarkdownRuleDefinition;
240
+ "glossary-term-linking": _eslint_markdown.MarkdownRuleDefinition;
241
+ "guide-mentions-documents": _eslint_markdown.MarkdownRuleDefinition;
242
+ "component-placement": eslint.Rule.RuleModule;
243
+ "application-structure": eslint.Rule.RuleModule;
244
+ "data-testid-case": eslint.Rule.RuleModule;
245
+ "jsx-hygiene": eslint.Rule.RuleModule;
246
+ "interactive-component": eslint.Rule.RuleModule;
247
+ "ui-state": eslint.Rule.RuleModule;
248
+ "no-mixed-concerns": eslint.Rule.RuleModule;
249
+ "no-arbitrary-tailwind": eslint.Rule.RuleModule;
250
+ "unknown-utility": eslint.Rule.RuleModule;
251
+ "enforce-cn-merge": {
252
+ meta: {
253
+ schema: never[];
254
+ type: "problem";
255
+ docs: {
256
+ description: string;
257
+ };
258
+ };
259
+ create(context: eslint.Rule.RuleContext): {
260
+ JSXAttribute(node: JsxAttributeNode): void;
261
+ };
262
+ };
263
+ "cn-helper": eslint.Rule.RuleModule;
264
+ "enforce-cva-variant-props": eslint.Rule.RuleModule;
265
+ "cva-appearance-props": eslint.Rule.RuleModule;
266
+ "cva-boolean-variants": eslint.Rule.RuleModule;
267
+ "cross-feature-import": eslint.Rule.RuleModule;
268
+ "pure-function-extract": eslint.Rule.RuleModule;
269
+ "hook-complexity": eslint.Rule.RuleModule;
270
+ "locale-dotted-path": eslint.Rule.RuleModule;
271
+ "locales-location": eslint.Rule.RuleModule;
272
+ "hook-extraction": eslint.Rule.RuleModule;
273
+ "component-nesting": eslint.Rule.RuleModule;
274
+ "stay-flat": eslint.Rule.RuleModule;
275
+ "locale-placement": eslint.Rule.RuleModule;
276
+ "sole-state-owner": eslint.Rule.RuleModule;
277
+ "locale-key-shape": eslint.Rule.RuleModule;
278
+ "shared-style-dedup": eslint.Rule.RuleModule;
279
+ "repeated-structure": eslint.Rule.RuleModule;
280
+ "filename-case": eslint.Rule.RuleModule;
281
+ "import-boundaries": eslint.Rule.RuleModule;
282
+ "named-exports": eslint.Rule.RuleModule;
283
+ "support-file-placement": eslint.Rule.RuleModule;
284
+ "support-folder-shape": eslint.Rule.RuleModule;
285
+ "import-through-index": eslint.Rule.RuleModule;
286
+ "util-file-name": eslint.Rule.RuleModule;
287
+ "no-util-barrel": eslint.Rule.RuleModule;
288
+ "enforce-barrel-exports": eslint.Rule.RuleModule;
289
+ "config-extraction": eslint.Rule.RuleModule;
290
+ "value-extraction": eslint.Rule.RuleModule;
291
+ "type-extraction": eslint.Rule.RuleModule;
292
+ "zod-schema-validation": eslint.Rule.RuleModule;
293
+ "source-under-src": eslint.Rule.RuleModule;
294
+ "zirka-baseline": eslint.Rule.RuleModule;
295
+ };
296
+ };
191
297
  /** Every rule id, as they appear in configuration and in lint output. */
192
298
  declare const allPasikaRuleIds: string[];
193
299
  /**
@@ -205,4 +311,4 @@ declare const typescriptApp: Linter.Config[];
205
311
  */
206
312
  declare const nextjsApp: Linter.Config[];
207
313
 
208
- export { allPasikaRuleIds, documentationRules, huskyRules, nextPackageJsonRules, nextjsApp, pasikaRules, repoPackageJsonRules, tailwindRules, typescriptApp, vulykRules };
314
+ export { allPasikaRuleIds, documentationRules, huskyRules, nextPackageJsonRules, nextjsApp, pasikaPlugin, pasikaRules, repoPackageJsonRules, tailwindRules, typescriptApp, vulykRules };