@shivaedev/quality 0.8.2 → 0.10.0
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/CHANGELOG.md +19 -0
- package/README.md +14 -9
- package/biome/preset.json +1 -0
- package/dist/rule.d.ts +1 -1
- package/dist/rule.d.ts.map +1 -1
- package/dist/rules/built-in.d.ts +2 -2
- package/dist/rules/built-in.d.ts.map +1 -1
- package/dist/rules/built-in.js +2 -0
- package/dist/rules/built-in.js.map +1 -1
- package/dist/rules/comments/no-environment-pragma.js +1 -1
- package/dist/rules/comments/no-environment-pragma.js.map +1 -1
- package/dist/rules/suppressions/noIgnoreDeprecations.d.ts +2 -0
- package/dist/rules/suppressions/noIgnoreDeprecations.d.ts.map +1 -0
- package/dist/rules/suppressions/noIgnoreDeprecations.js +26 -0
- package/dist/rules/suppressions/noIgnoreDeprecations.js.map +1 -0
- package/package.json +9 -13
- package/src/rule.ts +1 -1
- package/src/rules/built-in.ts +2 -0
- package/src/rules/comments/no-environment-pragma.ts +1 -1
- package/src/rules/suppressions/noIgnoreDeprecations.ts +30 -0
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -5
- package/dist/index.js.map +0 -1
- package/src/index.ts +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.10.0 - 2026-10-05
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `suppressions/no-ignore-deprecations` reports `compilerOptions.ignoreDeprecations` in every tsconfig the repository owns, whatever the file is named, outside the sources too, and names the line of the setting. The setting silences TypeScript's errors for deprecated options; replace the deprecated option and remove it. The rule takes no registry exceptions. A repository that upgrades records its existing findings with `quality baseline write --rule suppressions/no-ignore-deprecations`.
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- `useConsistentTestIt`, which asks for `it` over `test`, inside a `describe` too, only reports: `quality fix` no longer rewrites `test` to `it`, and the author decides.
|
|
12
|
+
|
|
13
|
+
## 0.9.0 - 2026-10-04
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Breaking: no root entry and no module that re-exports another. `exports` maps one `"./*.ts"` pattern to every module (`src` under the `source` condition, `dist` otherwise), so you import the module that defines a name, and a bundler sees only the modules you use. Where each name now lives:
|
|
18
|
+
- `@shivaedev/quality`: `@shivaedev/quality/imports/fences/dsl.ts` (`fence`), `@shivaedev/quality/imports/fences/model.ts` (`Chain`, `ExampleStep`, `Examples`, `External`, `Fence`, `Target`), `@shivaedev/quality/imports/fences/selectors.ts` (`anyOf`, `anything`, `external`, `files`, `folders`, `modules`, `packages`, `scopes`, `workspace`), `@shivaedev/quality/config.ts` (`BuiltInRules`, `Level`, `QualityConfig`, `RuleSetting`, `RuleSettings`, `defineConfig`), `@shivaedev/quality/rule.ts` (`Configured`, `Finding`, `Findings`, `Rule`, `RuleContext`, `RuleInputs`, `SourceFile`, `defineRule`), `@shivaedev/quality/standard-schema.ts` (`StandardIssue`, `StandardResult`, `StandardSchemaV1`)
|
|
19
|
+
- `@shivaedev/quality/vitest`: `@shivaedev/quality/vitest.ts`
|
|
20
|
+
- A consumer `quality.config.ts` imports `defineConfig` from `@shivaedev/quality/config.ts`, `defineRule` from `rule.ts`, `fence` from `imports/fences/dsl.ts` and the selectors from `imports/fences/selectors.ts`. `./biome`, `./tsconfig/base.json` and `./tsconfig/package.json` are unchanged.
|
|
21
|
+
|
|
3
22
|
## 0.8.2 - 2026-10-04
|
|
4
23
|
|
|
5
24
|
### Changed
|
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Node 24 or later loads `quality.config.ts` directly (type stripping), so no buil
|
|
|
21
21
|
|
|
22
22
|
```ts
|
|
23
23
|
// quality.config.ts
|
|
24
|
-
import { defineConfig } from "@shivaedev/quality";
|
|
24
|
+
import { defineConfig } from "@shivaedev/quality/config.ts";
|
|
25
25
|
import { noConsoleLog } from "./quality/no-console-log.ts";
|
|
26
26
|
|
|
27
27
|
export default defineConfig({
|
|
@@ -101,13 +101,14 @@ A repository with existing comments adopts the rules through the baseline, for e
|
|
|
101
101
|
|
|
102
102
|
### Suppressions
|
|
103
103
|
|
|
104
|
-
A check that is silenced at one site hides the problem instead of fixing it.
|
|
104
|
+
A check that is silenced at one site hides the problem instead of fixing it. Four rules close the escape hatches, and none of them takes registry exceptions: a registry entry that names one fails the gate as stale. A repository with existing suppressions adopts the rules through the baseline.
|
|
105
105
|
|
|
106
106
|
| Rule | Reports | Options |
|
|
107
107
|
| --- | --- | --- |
|
|
108
108
|
| `suppressions/no-inline` | Every comment directive that silences a linter, the compiler or a formatter, except `@ts-expect-error` in a type test | none |
|
|
109
109
|
| `suppressions/no-double-cast` | A cast through `unknown`, `any` or `never`: `x as unknown as T`, `x as any as T`, `x as never as T`, `<T><unknown>x` | none |
|
|
110
110
|
| `suppressions/biome-overrides` | A Biome setting that turns a check off or down, or keeps files out of it, without a declaration, and a declaration that matches no setting | `declared` |
|
|
111
|
+
| `suppressions/no-ignore-deprecations` | `compilerOptions.ignoreDeprecations` in a tsconfig, which silences TypeScript's errors for deprecated options | none |
|
|
111
112
|
|
|
112
113
|
`suppressions/no-inline` reports these directives, wherever a line of a comment starts with one:
|
|
113
114
|
|
|
@@ -119,6 +120,8 @@ A check that is silenced at one site hides the problem instead of fixing it. Thr
|
|
|
119
120
|
|
|
120
121
|
Coverage hints (`c8 ignore`, `v8 ignore`, `istanbul ignore`) are allowed: they leave code out of a coverage measure and silence no linter or compiler. The rule reads the TypeScript and JavaScript modules among the sources, declaration files included, and every `.css`, `.scss` and `.less` file among the checked files, whatever `extensions` says. Each finding names the line its comment starts on and has the directive as its subject.
|
|
121
122
|
|
|
123
|
+
`suppressions/no-ignore-deprecations` reads every JSON file in the repository whose `compilerOptions` sets `ignoreDeprecations`, whatever the file is named, so a shared config such as `tsconfig/base.json` counts as much as a `tsconfig.json`. Like `manifests/sorted`, it walks the whole repository, not only the sources, and skips files ignored by git and `node_modules`. Each finding names the line of the setting. Replace the deprecated option it hides, then remove it.
|
|
124
|
+
|
|
122
125
|
#### Type tests
|
|
123
126
|
|
|
124
127
|
A type test proves that an API rejects what its types forbid, and TypeScript asserts a compile error only through `@ts-expect-error`, which fails as soon as the error it expects goes away. So `@ts-expect-error`, and no other directive, is allowed in a type test: a file named `*.typecheck.test.ts` or `typecheck.test.ts` (or `.tsx`). The compiler checks these files; [Vitest projects](#vitest-projects) never run them. `@ts-ignore`, `@ts-nocheck` and every linter and formatter directive stay reported in them. A test that must pass a rejected value at run time, to prove the runtime refuses it too, calls the API through `Reflect.apply` instead of a directive.
|
|
@@ -243,7 +246,9 @@ The rule only reports; nothing rewrites the import. Whoever writes the import pi
|
|
|
243
246
|
A fence is one prohibition, stated in the config without patterns:
|
|
244
247
|
|
|
245
248
|
```ts
|
|
246
|
-
import { defineConfig
|
|
249
|
+
import { defineConfig } from "@shivaedev/quality/config.ts";
|
|
250
|
+
import { external, folders, packages } from "@shivaedev/quality/imports/fences/selectors.ts";
|
|
251
|
+
import { fence } from "@shivaedev/quality/imports/fences/dsl.ts";
|
|
247
252
|
|
|
248
253
|
const fences = [
|
|
249
254
|
fence("ui-never-imports-server")
|
|
@@ -251,8 +256,8 @@ const fences = [
|
|
|
251
256
|
.from(folders("packages/ui/src"))
|
|
252
257
|
.mayNotImport(packages("server"))
|
|
253
258
|
.demonstratedBy({
|
|
254
|
-
illegal: ["packages/ui/src/
|
|
255
|
-
legal: ["packages/ui/src/
|
|
259
|
+
illegal: ["packages/ui/src/app.ts", "packages/server/src/db.ts"],
|
|
260
|
+
legal: ["packages/ui/src/app.ts", external("effect")],
|
|
256
261
|
}),
|
|
257
262
|
];
|
|
258
263
|
|
|
@@ -278,7 +283,7 @@ A finding has its fence's name as its subject, so a registry entry with that sub
|
|
|
278
283
|
### Local rules
|
|
279
284
|
|
|
280
285
|
```ts
|
|
281
|
-
import { defineRule } from "@shivaedev/quality";
|
|
286
|
+
import { defineRule } from "@shivaedev/quality/rule.ts";
|
|
282
287
|
|
|
283
288
|
export const noConsoleLog = defineRule({
|
|
284
289
|
id: "local/no-console-log",
|
|
@@ -392,7 +397,7 @@ The preset sets:
|
|
|
392
397
|
|
|
393
398
|
The preset turns off `noUnusedVariables` and `noUnusedFunctionParameters`, because the tsconfig presets report them through TypeScript, allows default exports in `*.config.*` files, which tools load through the default export, and turns off `useComponentExportOnlyModules` in `*.test.*` and `*.spec.*` files, which define the helper and harness components they render. It also turns off `noProcessGlobal`, `useJsonImportAttributes`, `noMisusedPromises`, `useExhaustiveSwitchCases`, `useSortedClasses`, `noDelete`, `useConsistentArrayType`, `useConsistentCurlyBraces`, `noEqualsToNull` and `noSkippedTests`, because `quality fix` applies every lint fix and their fixes changed behavior or did not terminate on real code. It declares these weakenings in its `declarations.json`, so `suppressions/biome-overrides` takes them as declared. Every other weakening a repository adds is an override it declares with a reason.
|
|
394
399
|
|
|
395
|
-
An autofix applies only a change that removes no decision; a fix that can change behavior or delete something written on purpose reports only, and the author decides. The preset keeps `noAccessKey`, `noAriaHiddenOnFocusable`, `noAutofocus`, `noInteractiveElementToNoninteractiveRole`, `noNoninteractiveElementToInteractiveRole`, `noNoninteractiveTabindex`, `noRedundantRoles`, `useValidAriaProps`, `useValidAriaRole`, `noImportantStyles`, `noConstAssign`, `noUnusedPrivateClassMembers`, `useExhaustiveDependencies`, `noFloatingPromises`, `useRegexpTest`, `useUnicodeRegex`, `noNonNullAssertion`, `useAtIndex`, `noParametersOnlyUsedInRecursion` and `useNamingConvention` at `error` with their fixes off, and `quality fix` skips `noDuplicateObjectKeys` and `useSortedKeys`, whose fixes Biome's config cannot turn off.
|
|
400
|
+
An autofix applies only a change that removes no decision; a fix that can change behavior or delete something written on purpose reports only, and the author decides. The preset keeps `noAccessKey`, `noAriaHiddenOnFocusable`, `noAutofocus`, `noInteractiveElementToNoninteractiveRole`, `noNoninteractiveElementToInteractiveRole`, `noNoninteractiveTabindex`, `noRedundantRoles`, `useValidAriaProps`, `useValidAriaRole`, `noImportantStyles`, `noConstAssign`, `noUnusedPrivateClassMembers`, `useExhaustiveDependencies`, `noFloatingPromises`, `useConsistentTestIt`, `useRegexpTest`, `useUnicodeRegex`, `noNonNullAssertion`, `useAtIndex`, `noParametersOnlyUsedInRecursion` and `useNamingConvention` at `error` with their fixes off, and `quality fix` skips `noDuplicateObjectKeys` and `useSortedKeys`, whose fixes Biome's config cannot turn off.
|
|
396
401
|
|
|
397
402
|
The `biome` rule runs `biome check` with the repository's config and reports each finding as `biome/<category>`, such as `biome/lint/style/useBlockStatements`, `biome/assist/source/useSortedKeys`, `biome/format` or `biome/plugin`, so Biome's findings go through the baseline like any other rule's. `quality baseline write --rule biome` takes in every Biome category at once. A finding below `error`, such as a rule a repository declared at `warn`, is not reported. The rule also asks for a root `biome.json` or `biome.jsonc` that extends the preset, and it takes no registry exceptions. A Biome config that Biome cannot load stops the run with Biome's message.
|
|
398
403
|
|
|
@@ -505,11 +510,11 @@ Both rules take a `suites` option, `.gitignore` patterns of folders that hold te
|
|
|
505
510
|
|
|
506
511
|
## Vitest projects
|
|
507
512
|
|
|
508
|
-
`@shivaedev/quality/vitest` sets up the tests of a package by file name, so no test file sets its environment with a pragma. It needs `vitest`, and `happy-dom` for DOM tests.
|
|
513
|
+
`@shivaedev/quality/vitest.ts` sets up the tests of a package by file name, so no test file sets its environment with a pragma. It needs `vitest`, and `happy-dom` for DOM tests.
|
|
509
514
|
|
|
510
515
|
```ts
|
|
511
516
|
// vitest.config.ts
|
|
512
|
-
import { testProjects } from "@shivaedev/quality/vitest";
|
|
517
|
+
import { testProjects } from "@shivaedev/quality/vitest.ts";
|
|
513
518
|
import { defineConfig } from "vitest/config";
|
|
514
519
|
|
|
515
520
|
export default defineConfig({ test: testProjects() });
|
package/biome/preset.json
CHANGED
package/dist/rule.d.ts
CHANGED
package/dist/rule.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../src/rule.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/built-in.d.ts
CHANGED
|
@@ -7,14 +7,14 @@ export declare const builtInRules: readonly [import("../rule.ts").Rule<"structur
|
|
|
7
7
|
}>, import("../rule.ts").Rule<"comments/no-line-reference", undefined>, import("../rule.ts").Rule<"comments/no-pr-reference", undefined>, import("../rule.ts").Rule<"comments/no-banner", undefined>, import("../rule.ts").Rule<"comments/no-todo", undefined>, import("../rule.ts").Rule<"comments/no-environment-pragma", undefined>, import("../rule.ts").Rule<"comments/max-per-file", {
|
|
8
8
|
readonly allow?: readonly string[];
|
|
9
9
|
readonly max?: number;
|
|
10
|
-
}>, import("../rule.ts").Rule<"suppressions/no-inline", undefined>, import("../rule.ts").Rule<"suppressions/no-double-cast", undefined>, import("../rule.ts").Rule<"suppressions/biome-overrides", {
|
|
10
|
+
}>, import("../rule.ts").Rule<"suppressions/no-inline", undefined>, import("../rule.ts").Rule<"suppressions/no-double-cast", undefined>, import("../rule.ts").Rule<"suppressions/no-ignore-deprecations", undefined>, import("../rule.ts").Rule<"suppressions/biome-overrides", {
|
|
11
11
|
readonly declared?: readonly {
|
|
12
12
|
readonly includes: readonly [string, ...string[]];
|
|
13
13
|
readonly reason: string;
|
|
14
14
|
readonly rule: string;
|
|
15
15
|
}[];
|
|
16
16
|
}>, import("../rule.ts").Rule<"biome", undefined>, import("../rule.ts").Rule<"imports/cycles", undefined>, import("../rule.ts").Rule<"imports/fences", {
|
|
17
|
-
readonly fences?: readonly import("../
|
|
17
|
+
readonly fences?: readonly import("../imports/fences/model.ts").Fence[];
|
|
18
18
|
}>, import("../rule.ts").Rule<"imports/resolvable", {
|
|
19
19
|
readonly generated?: readonly string[];
|
|
20
20
|
}>, import("../rule.ts").Rule<"imports/aliased", undefined>, import("../rule.ts").Rule<"manifests/sorted", undefined>, import("../rule.ts").Rule<"files/named-after-export", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-in.d.ts","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"built-in.d.ts","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwBf,CAAC"}
|
package/dist/rules/built-in.js
CHANGED
|
@@ -15,6 +15,7 @@ import { importsResolvable } from "#rules/imports/resolvable.ts";
|
|
|
15
15
|
import { biomeOverrides } from "#rules/suppressions/biome-overrides.ts";
|
|
16
16
|
import { noDoubleCast } from "#rules/suppressions/no-double-cast.ts";
|
|
17
17
|
import { noInline } from "#rules/suppressions/no-inline.ts";
|
|
18
|
+
import { noIgnoreDeprecations } from "#rules/suppressions/noIgnoreDeprecations.ts";
|
|
18
19
|
import { testsColocated } from "#rules/test-names/colocated.ts";
|
|
19
20
|
import { testsFollow } from "#rules/test-names/follow.ts";
|
|
20
21
|
import { biome } from "./biome.js";
|
|
@@ -31,6 +32,7 @@ export const builtInRules = [
|
|
|
31
32
|
maxPerFile,
|
|
32
33
|
noInline,
|
|
33
34
|
noDoubleCast,
|
|
35
|
+
noIgnoreDeprecations,
|
|
34
36
|
biomeOverrides,
|
|
35
37
|
biome,
|
|
36
38
|
importCycles,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,QAAQ;IACR,MAAM;IACN,mBAAmB;IACnB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,WAAW;IACX,cAAc;CACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"built-in.js","sourceRoot":"","sources":["../../src/rules/built-in.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,QAAQ;IACR,OAAO;IACP,eAAe;IACf,aAAa;IACb,QAAQ;IACR,MAAM;IACN,mBAAmB;IACnB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,oBAAoB;IACpB,cAAc;IACd,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,WAAW;IACX,cAAc;CACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { definePatternRule } from "./pattern-rule.js";
|
|
2
2
|
export const noEnvironmentPragma = definePatternRule({
|
|
3
|
-
description: "A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest` sets up the Vitest projects that read the name.",
|
|
3
|
+
description: "A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest.ts` sets up the Vitest projects that read the name.",
|
|
4
4
|
id: "comments/no-environment-pragma",
|
|
5
5
|
message: (match) => `Sets the test environment with "${match}". Name the file *.dom.test.ts or *.dom.test.tsx instead.`,
|
|
6
6
|
patterns: [/^@(?:vitest|jest)-environment(?:-options)?(?=\s|$)/mu],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-environment-pragma.js","sourceRoot":"","sources":["../../../src/rules/comments/no-environment-pragma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;IACpD,WAAW,EACV,
|
|
1
|
+
{"version":3,"file":"no-environment-pragma.js","sourceRoot":"","sources":["../../../src/rules/comments/no-environment-pragma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;IACpD,WAAW,EACV,4MAA4M;IAC7M,EAAE,EAAE,gCAAgC;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,mCAAmC,KAAK,2DAA2D;IACvH,QAAQ,EAAE,CAAC,sDAAsD,CAAC;CAClE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noIgnoreDeprecations.d.ts","sourceRoot":"","sources":["../../../src/rules/suppressions/noIgnoreDeprecations.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,oBAAoB,2EAW/B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { relative } from "node:path";
|
|
2
|
+
import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { posix } from "#inventory/ignore-scope.ts";
|
|
5
|
+
import { walk } from "#inventory/walk.ts";
|
|
6
|
+
import { defineRule } from "#rule.ts";
|
|
7
|
+
import { member, parseJsonc } from "#rules/suppressions/biome/json.ts";
|
|
8
|
+
const OPTION = "ignoreDeprecations";
|
|
9
|
+
const MESSAGE = `Sets "${OPTION}", which silences TypeScript's errors for deprecated options. Remove it and replace the deprecated option it hides.`;
|
|
10
|
+
function settingIn(path, text) {
|
|
11
|
+
const parsed = parseJsonc(path, text);
|
|
12
|
+
const setting = parsed._tag === "Parsed" ? member(member(parsed.json, "compilerOptions"), OPTION) : undefined;
|
|
13
|
+
return setting === undefined ? [] : [{ file: path, line: setting.line, message: MESSAGE, subject: OPTION }];
|
|
14
|
+
}
|
|
15
|
+
export const noIgnoreDeprecations = defineRule({
|
|
16
|
+
check: async ({ readText, root }) => {
|
|
17
|
+
const paths = await Effect.runPromise(walk(root).pipe(Effect.provide(NodeFileSystem.layer)));
|
|
18
|
+
const configs = paths.map((path) => posix(relative(root, path))).filter((path) => path.endsWith(".json"));
|
|
19
|
+
const texts = await Promise.all(configs.toSorted().map(async (path) => ({ path, text: (await readText(path)) ?? "" })));
|
|
20
|
+
return texts.filter(({ text }) => text.includes(OPTION)).flatMap(({ path, text }) => settingIn(path, text));
|
|
21
|
+
},
|
|
22
|
+
description: "ignoreDeprecations in a tsconfig silences TypeScript's errors for deprecated options, so the project keeps an option the next TypeScript removes. Replace the deprecated option and remove ignoreDeprecations.",
|
|
23
|
+
id: "suppressions/no-ignore-deprecations",
|
|
24
|
+
registrable: false,
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=noIgnoreDeprecations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noIgnoreDeprecations.js","sourceRoot":"","sources":["../../../src/rules/suppressions/noIgnoreDeprecations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,cAAc,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAgB,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAEvE,MAAM,MAAM,GAAG,oBAAoB,CAAC;AAEpC,MAAM,OAAO,GAAG,SAAS,MAAM,qHAAqH,CAAC;AAErJ,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9G,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7G,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC9C,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1G,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACxH,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC;IACD,WAAW,EACV,gNAAgN;IACjN,EAAE,EAAE,qCAAqC;IACzC,WAAW,EAAE,KAAK;CAClB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/quality",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Repository quality gate with typed rules, a baseline of existing debt and a registry of reasoned exceptions",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/quality#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -23,19 +23,13 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"exports": {
|
|
26
|
-
"
|
|
27
|
-
"types": "./dist
|
|
28
|
-
"source": "./src
|
|
29
|
-
"import": "./dist
|
|
30
|
-
"default": "./dist
|
|
26
|
+
"./*.ts": {
|
|
27
|
+
"types": "./dist/*.d.ts",
|
|
28
|
+
"source": "./src/*.ts",
|
|
29
|
+
"import": "./dist/*.js",
|
|
30
|
+
"default": "./dist/*.js"
|
|
31
31
|
},
|
|
32
32
|
"./biome": "./biome/preset.json",
|
|
33
|
-
"./vitest": {
|
|
34
|
-
"types": "./dist/vitest.d.ts",
|
|
35
|
-
"source": "./src/vitest.ts",
|
|
36
|
-
"import": "./dist/vitest.js",
|
|
37
|
-
"default": "./dist/vitest.js"
|
|
38
|
-
},
|
|
39
33
|
"./tsconfig/base.json": "./tsconfig/base.json",
|
|
40
34
|
"./tsconfig/package.json": "./tsconfig/package.json",
|
|
41
35
|
"./package.json": "./package.json"
|
|
@@ -47,13 +41,15 @@
|
|
|
47
41
|
"dist",
|
|
48
42
|
"biome",
|
|
49
43
|
"src",
|
|
44
|
+
"!src/**/*.test.ts",
|
|
45
|
+
"!src/**/*.spec.ts",
|
|
50
46
|
"tsconfig",
|
|
51
47
|
"CHANGELOG.md",
|
|
52
48
|
"README.md"
|
|
53
49
|
],
|
|
54
50
|
"dependencies": {
|
|
55
51
|
"@biomejs/biome": "2.5.14",
|
|
56
|
-
"@shivaedev/types": "0.
|
|
52
|
+
"@shivaedev/types": "0.2.0",
|
|
57
53
|
"ignore": "7.0.6",
|
|
58
54
|
"sort-package-json": "4.0.0",
|
|
59
55
|
"typescript": "npm:@typescript/typescript6@6.0.2"
|
package/src/rule.ts
CHANGED
package/src/rules/built-in.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { importsResolvable } from "#rules/imports/resolvable.ts";
|
|
|
15
15
|
import { biomeOverrides } from "#rules/suppressions/biome-overrides.ts";
|
|
16
16
|
import { noDoubleCast } from "#rules/suppressions/no-double-cast.ts";
|
|
17
17
|
import { noInline } from "#rules/suppressions/no-inline.ts";
|
|
18
|
+
import { noIgnoreDeprecations } from "#rules/suppressions/noIgnoreDeprecations.ts";
|
|
18
19
|
import { testsColocated } from "#rules/test-names/colocated.ts";
|
|
19
20
|
import { testsFollow } from "#rules/test-names/follow.ts";
|
|
20
21
|
import { biome } from "./biome.ts";
|
|
@@ -32,6 +33,7 @@ export const builtInRules = [
|
|
|
32
33
|
maxPerFile,
|
|
33
34
|
noInline,
|
|
34
35
|
noDoubleCast,
|
|
36
|
+
noIgnoreDeprecations,
|
|
35
37
|
biomeOverrides,
|
|
36
38
|
biome,
|
|
37
39
|
importCycles,
|
|
@@ -2,7 +2,7 @@ import { definePatternRule } from "./pattern-rule.ts";
|
|
|
2
2
|
|
|
3
3
|
export const noEnvironmentPragma = definePatternRule({
|
|
4
4
|
description:
|
|
5
|
-
"A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest` sets up the Vitest projects that read the name.",
|
|
5
|
+
"A test file gets its environment from its name, not from a pragma: `*.dom.test.ts` runs in a DOM, every other test in Node. `@shivaedev/quality/vitest.ts` sets up the Vitest projects that read the name.",
|
|
6
6
|
id: "comments/no-environment-pragma",
|
|
7
7
|
message: (match) => `Sets the test environment with "${match}". Name the file *.dom.test.ts or *.dom.test.tsx instead.`,
|
|
8
8
|
patterns: [/^@(?:vitest|jest)-environment(?:-options)?(?=\s|$)/mu],
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { relative } from "node:path";
|
|
2
|
+
import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { posix } from "#inventory/ignore-scope.ts";
|
|
5
|
+
import { walk } from "#inventory/walk.ts";
|
|
6
|
+
import { defineRule, type Finding } from "#rule.ts";
|
|
7
|
+
import { member, parseJsonc } from "#rules/suppressions/biome/json.ts";
|
|
8
|
+
|
|
9
|
+
const OPTION = "ignoreDeprecations";
|
|
10
|
+
|
|
11
|
+
const MESSAGE = `Sets "${OPTION}", which silences TypeScript's errors for deprecated options. Remove it and replace the deprecated option it hides.`;
|
|
12
|
+
|
|
13
|
+
function settingIn(path: string, text: string): readonly Finding[] {
|
|
14
|
+
const parsed = parseJsonc(path, text);
|
|
15
|
+
const setting = parsed._tag === "Parsed" ? member(member(parsed.json, "compilerOptions"), OPTION) : undefined;
|
|
16
|
+
return setting === undefined ? [] : [{ file: path, line: setting.line, message: MESSAGE, subject: OPTION }];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const noIgnoreDeprecations = defineRule({
|
|
20
|
+
check: async ({ readText, root }) => {
|
|
21
|
+
const paths = await Effect.runPromise(walk(root).pipe(Effect.provide(NodeFileSystem.layer)));
|
|
22
|
+
const configs = paths.map((path) => posix(relative(root, path))).filter((path) => path.endsWith(".json"));
|
|
23
|
+
const texts = await Promise.all(configs.toSorted().map(async (path) => ({ path, text: (await readText(path)) ?? "" })));
|
|
24
|
+
return texts.filter(({ text }) => text.includes(OPTION)).flatMap(({ path, text }) => settingIn(path, text));
|
|
25
|
+
},
|
|
26
|
+
description:
|
|
27
|
+
"ignoreDeprecations in a tsconfig silences TypeScript's errors for deprecated options, so the project keeps an option the next TypeScript removes. Replace the deprecated option and remove ignoreDeprecations.",
|
|
28
|
+
id: "suppressions/no-ignore-deprecations",
|
|
29
|
+
registrable: false,
|
|
30
|
+
});
|
package/dist/index.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { fence } from "#imports/fences/dsl.ts";
|
|
2
|
-
export type { Chain, ExampleStep, Examples, External, Fence, Target } from "#imports/fences/model.ts";
|
|
3
|
-
export { anyOf, anything, external, files, folders, modules, packages, scopes, workspace } from "#imports/fences/selectors.ts";
|
|
4
|
-
export type { BuiltInRules, Level, QualityConfig, RuleSetting, RuleSettings } from "./config.ts";
|
|
5
|
-
export { defineConfig } from "./config.ts";
|
|
6
|
-
export type { Configured, Finding, Findings, Rule, RuleContext, RuleInputs, SourceFile } from "./rule.ts";
|
|
7
|
-
export { defineRule } from "./rule.ts";
|
|
8
|
-
export type { StandardIssue, StandardResult, StandardSchemaV1 } from "./standard-schema.ts";
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC/H,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC1G,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { fence } from "#imports/fences/dsl.ts";
|
|
2
|
-
export { anyOf, anything, external, files, folders, modules, packages, scopes, workspace } from "#imports/fences/selectors.ts";
|
|
3
|
-
export { defineConfig } from "./config.js";
|
|
4
|
-
export { defineRule } from "./rule.js";
|
|
5
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE/H,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/src/index.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { fence } from "#imports/fences/dsl.ts";
|
|
2
|
-
export type { Chain, ExampleStep, Examples, External, Fence, Target } from "#imports/fences/model.ts";
|
|
3
|
-
export { anyOf, anything, external, files, folders, modules, packages, scopes, workspace } from "#imports/fences/selectors.ts";
|
|
4
|
-
export type { BuiltInRules, Level, QualityConfig, RuleSetting, RuleSettings } from "./config.ts";
|
|
5
|
-
export { defineConfig } from "./config.ts";
|
|
6
|
-
export type { Configured, Finding, Findings, Rule, RuleContext, RuleInputs, SourceFile } from "./rule.ts";
|
|
7
|
-
export { defineRule } from "./rule.ts";
|
|
8
|
-
export type { StandardIssue, StandardResult, StandardSchemaV1 } from "./standard-schema.ts";
|