diff --git a/flint.config.ts b/flint.config.ts index 44570a86a..3c493d510 100644 --- a/flint.config.ts +++ b/flint.config.ts @@ -1,5 +1,5 @@ -import { cspell } from "@flint.fyi/plugin-cspell"; import { flint } from "@flint.fyi/plugin-flint"; +import { spelling } from "@flint.fyi/plugin-spelling"; import { defineConfig, globs, json, md, ts, yaml } from "flint"; export default defineConfig({ @@ -28,7 +28,7 @@ export default defineConfig({ }, { files: globs.all, - rules: cspell.presets.logical, + rules: spelling.presets.logical, }, ], }); diff --git a/knip.json b/knip.json index 20c7eb897..dd274b46e 100644 --- a/knip.json +++ b/knip.json @@ -4,6 +4,9 @@ "ignoreDependencies": ["flint", "^@flint\\.fyi\\/.*"], "ignoreExportsUsedInFile": { "interface": true, "type": true }, "workspaces": { + "packages/comparisons": { + "entry": ["src/sort-data.ts"] + }, "packages/site": { "entry": ["src/components/*.astro"], "ignoreDependencies": ["sharp"] diff --git a/package.json b/package.json index a23928210..7f67f143a 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,10 @@ "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", "@eslint/js": "9.39.1", "@flint.fyi/plugin-browser": "workspace:^", - "@flint.fyi/plugin-cspell": "workspace:^", "@flint.fyi/plugin-flint": "workspace:^", "@flint.fyi/plugin-jsx": "workspace:^", + "@flint.fyi/plugin-node": "workspace:^", + "@flint.fyi/plugin-spelling": "workspace:^", "@types/eslint-plugin-markdown": "2.0.2", "@types/mdast": "4.0.4", "@types/node": "24.10.0", @@ -78,5 +79,12 @@ "publishConfig": { "access": "public", "provenance": true + }, + "pnpm": { + "overrides": { + "read-package-up": "12.0.0", + "read-pkg": "10.0.0", + "unicorn-magic": "0.4.0" + } } } diff --git a/packages/comparisons/src/data.json b/packages/comparisons/src/data.json index 69f819bbe..d972fb759 100644 --- a/packages/comparisons/src/data.json +++ b/packages/comparisons/src/data.json @@ -1,4 +1,230 @@ [ + { + "eslint": [ + { + "name": "astro/sort-attibutes", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/sort-attibutes" + } + ], + "flint": { + "name": "attributesSorting", + "plugin": "astro", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "astro/prefer-object-class-list", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/prefer-object-class-list" + } + ], + "flint": { + "name": "classListDirectiveObjects", + "plugin": "astro", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "astro/prefer-class-list-directive", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/prefer-class-list-directive" + } + ], + "flint": { + "name": "classListDirectives", + "plugin": "astro", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "astro/prefer-split-class-list", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/prefer-split-class-list" + } + ], + "flint": { + "name": "classListDirectiveSplits", + "plugin": "astro", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "astro/missing-client-only-directive-value", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/missing-client-only-directive-value" + } + ], + "flint": { + "name": "clientOnlyDirectiveValues", + "plugin": "astro", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "astro/valid-compile", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/valid-compile" + } + ], + "flint": { + "name": "compiles", + "plugin": "astro", + "status": "skipped" + }, + "notes": "Handled by the Astro compiler." + }, + { + "eslint": [ + { + "name": "astro/no-exports-from-components", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-exports-from-components" + } + ], + "flint": { + "name": "componentFileExports", + "plugin": "astro", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "astro/no-deprecated-astro-canonicalurl", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-deprecated-astro-canonicalurl" + } + ], + "flint": { + "name": "deprecatedAstroCanonicalURL", + "plugin": "astro", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { + "eslint": [ + { + "name": "astro/no-deprecated-astro-fetchcontent", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-deprecated-astro-fetchcontent" + } + ], + "flint": { + "name": "deprecatedAstroFetchContent", + "plugin": "astro", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { + "eslint": [ + { + "name": "astro/no-deprecated-astro-resolve", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-deprecated-astro-resolve" + } + ], + "flint": { + "name": "deprecatedAstroResolve", + "plugin": "astro", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { + "eslint": [ + { + "name": "astro/no-deprecated-getentrybyslug", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-deprecated-getentrybyslug" + } + ], + "flint": { + "name": "deprecatedGetEntryBySlug", + "plugin": "astro", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { + "eslint": [ + { + "name": "astro/no-conflict-set-directive", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-conflict-set-directive" + } + ], + "flint": { + "name": "setDirectiveChildContentConflicts", + "plugin": "astro", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "astro/no-set-html-directive", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-set-html-directive" + } + ], + "flint": { + "name": "setHtmlDirectives", + "plugin": "astro", + "preset": "security" + } + }, + { + "eslint": [ + { + "name": "astro/no-set-text-directive", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-set-text-directive" + } + ], + "flint": { + "name": "setTextDirectives", + "plugin": "astro", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "astro/no-unsafe-inline-scripts", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-unsafe-inline-scripts" + } + ], + "flint": { + "name": "unsafeInlineScripts", + "plugin": "astro", + "preset": "security" + } + }, + { + "eslint": [ + { + "name": "astro/no-unused-css-selector", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-unused-css-selector" + } + ], + "flint": { + "name": "unusedCssSelectors", + "plugin": "astro", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "astro/no-unused-define-vars-in-style", + "url": "https://ota-meshi.github.io/eslint-plugin-astro/rules/no-unused-define-vars-in-style" + } + ], + "flint": { + "name": "unusedStyleDefineVars", + "plugin": "astro", + "preset": "logical" + } + }, { "biome": [ { @@ -13,10 +239,10 @@ } ], "flint": { - "implemented": true, "name": "alerts", "plugin": "browser", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { @@ -33,10 +259,10 @@ } ], "flint": { - "implemented": true, "name": "classListToggles", "plugin": "browser", - "preset": "Stylistic" + "preset": "stylistic", + "status": "implemented" } }, { @@ -53,11 +279,11 @@ } ], "flint": { - "implemented": true, "name": "documentCookies", "plugin": "browser", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -76,9 +302,9 @@ "flint": { "name": "eventListenerSubscriptions", "plugin": "browser", - "preset": "Logical", - "strictness": "Strict", - "implemented": true + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -95,10 +321,10 @@ } ], "flint": { - "implemented": true, "name": "implicitGlobals", "plugin": "browser", - "preset": "Logical" + "preset": "logical", + "status": "implemented" } }, { @@ -109,10 +335,10 @@ } ], "flint": { - "implemented": true, "name": "keyboardEventKeys", "plugin": "browser", - "preset": "Logical" + "preset": "logical", + "status": "implemented" } }, { @@ -123,11 +349,11 @@ } ], "flint": { - "implemented": true, "name": "nodeAppendMethods", "plugin": "browser", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -144,11 +370,11 @@ } ], "flint": { - "implemented": true, "name": "nodeDatasetAttributes", "plugin": "browser", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -165,11 +391,11 @@ } ], "flint": { - "implemented": true, "name": "nodeModificationMethods", "plugin": "browser", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -188,9 +414,9 @@ "flint": { "name": "nodeQueryMethods", "plugin": "browser", - "preset": "Stylistic", - "strictness": "Strict", - "implemented": true + "preset": "stylistic", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -207,11 +433,11 @@ } ], "flint": { - "implemented": true, "name": "nodeRemoveMethods", "plugin": "browser", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -228,11 +454,11 @@ } ], "flint": { - "implemented": true, "name": "nodeTextContents", "plugin": "browser", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { @@ -249,10 +475,10 @@ } ], "flint": { - "implemented": true, "name": "removeEventListenerExpressions", "plugin": "browser", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { @@ -269,10 +495,10 @@ } ], "flint": { - "implemented": true, "name": "scriptUrls", "plugin": "browser", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { @@ -289,10 +515,10 @@ } ], "flint": { - "implemented": true, "name": "windowMessagingTargetOrigin", "plugin": "browser", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { @@ -302,16103 +528,20607 @@ ] }, { - "deno": [ + "eslint": [ { - "name": "prefer-ascii", - "url": "https://docs.deno.com/lint/rules/prefer-ascii" + "name": "eslint-plugin-eslint-plugin/require-meta-schema-description", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-schema-description" } ], "flint": { - "name": "asciiCharacters", - "plugin": "deno", - "preset": "Not implementing" + "name": "aboutSchemaDescriptions", + "plugin": "flint", + "status": "skipped" } }, { - "deno": [ + "eslint": [ { - "name": "no-node-globals", - "url": "https://docs.deno.com/lint/rules/no-node-globals" + "name": "eslint-plugin-eslint-plugin/require-meta-schema", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-schema" } ], "flint": { - "name": "nodeGlobals", - "plugin": "deno", - "preset": "Not implementing" + "name": "aboutSchemas", + "plugin": "flint", + "status": "skipped" } }, { - "deno": [ + "eslint": [ { - "name": "no-sync-fn-in-async-fn", - "url": "https://docs.deno.com/lint/rules/no-sync-fn-in-async-fn" + "name": "eslint-plugin-eslint-plugin/require-meta-has-suggestions", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-has-suggestions" } ], "flint": { - "name": "syncFunctionInAsyncFunctions", - "plugin": "deno", - "preset": "Not implementing" + "name": "aboutSuggestions", + "plugin": "flint", + "status": "skipped" } }, { "eslint": [ { - "name": "jsonc/sort-array-values", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/sort-array-values.html" + "name": "eslint-plugin-eslint-plugin/require-meta-type", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-type" } ], "flint": { - "name": "arrayElementsSorting", - "plugin": "json", - "preset": "Not implementing" + "name": "aboutTypes", + "plugin": "flint", + "status": "skipped" } }, { "eslint": [ { - "name": "jsonc/no-bigint-literals", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-bigint-literals.html" + "name": "eslint-plugin-eslint-plugin/no-deprecated-context-methods", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-deprecated-context-methods" } ], "flint": { - "name": "bigintLiterals", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedContextMethods", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-binary-expression", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-binary-expression.html" + "name": "eslint-plugin-eslint-plugin/prefer-placeholders", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-placeholders" } ], "flint": { - "name": "binaryExpressions", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedMessagePlaceholders", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-binary-numeric-literals", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-binary-numeric-literals.html" + "name": "eslint-plugin-eslint-plugin/prefer-message-ids", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-message-ids" } ], "flint": { - "name": "binaryNumericLiterals", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedMessageStrings", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-comments", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-comments.html" + "name": "eslint-plugin-eslint-plugin/no-meta-replaced-by", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-meta-replaced-by" } ], "flint": { - "name": "comments", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedReplacedBy", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-floating-decimal", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-floating-decimal.html" + "name": "eslint-plugin-eslint-plugin/no-deprecated-report-api", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-deprecated-report-api" } ], "flint": { - "name": "floatingDecimals", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedReportAPIs", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-hexadecimal-numeric-literals", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-hexadecimal-numeric-literals.html" + "name": "eslint-plugin-eslint-plugin/prefer-object-rule", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-object-rule" } ], "flint": { - "name": "hexadecimalNumericLiterals", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedRuleFunctions", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-escape-sequence-in-identifier", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-escape-sequence-in-identifier.html" + "name": "eslint-plugin-eslint-plugin/no-meta-schema-default", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-meta-schema-default" } ], "flint": { - "name": "identifierEscapeSequences", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedSchemaDefaults", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-number-props", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-number-props.html" + "name": "eslint-plugin-eslint-plugin/prefer-replace-text", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-replace-text" } ], "flint": { - "name": "identifierNumbers", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "deprecatedTextReplacements", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-infinity", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-infinity.html" + "name": "eslint-plugin-eslint-plugin/fixer-return", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/fixer-return" } ], "flint": { - "name": "infinity", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "fixerReturns", + "plugin": "flint", + "status": "skipped" + } }, { - "eslint": [ - { - "name": "jsonc/key-name-casing", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/key-name-casing.html" - } - ], "flint": { - "name": "keyCasing", - "plugin": "json", - "preset": "Not implementing" + "name": "invalidCodeLines", + "plugin": "flint", + "preset": "logical", + "status": "implemented" } }, { "eslint": [ { - "name": "json/no-empty-keys", - "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/no-empty-keys.md" + "name": "eslint-plugin-eslint-plugin/no-missing-message-ids", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-missing-message-ids" } ], "flint": { - "name": "keyContents", - "plugin": "json", - "preset": "Not implementing" + "name": "messageIdMismatches", + "plugin": "flint", + "status": "skipped" } }, { - "deno": [ - { - "name": "no-dupe-keys", - "url": "https://docs.deno.com/lint/rules/no-dupe-keys" - } - ], "eslint": [ { - "name": "jsonc/no-dupe-keys", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-dupe-keys.html" + "name": "eslint-plugin-eslint-plugin/report-message-format", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/report-message-format" } ], "flint": { - "implemented": true, - "name": "keyDuplicates", - "plugin": "json", - "preset": "Logical" + "name": "messagePhrases", + "plugin": "flint", + "preset": "logical", + "strictness": "strict" } }, { "eslint": [ { - "name": "json/no-unnormalized-keys", - "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/no-unnormalized-keys.md" + "name": "eslint-plugin-eslint-plugin/no-missing-placeholders", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-missing-placeholders" } ], "flint": { - "implemented": true, - "name": "keyNormalization", - "plugin": "json", - "preset": "Logical" + "name": "missingPlaceholders", + "plugin": "flint", + "preset": "logical" } }, { "eslint": [ { - "name": "jsonc/no-nan", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-nan.html" + "name": "eslint-plugin-eslint-plugin/no-property-in-node", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-property-in-node" } ], "flint": { - "name": "nan", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "nodePropertyInChecks", + "plugin": "flint", + "preset": "logical" + } }, { "eslint": [ { - "name": "jsonc/valid-json-number", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/valid-json-number.html" + "name": "eslint-plugin-eslint-plugin/require-meta-default-options", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-default-options" } ], "flint": { - "name": "numbers", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "optionDefaults", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-numeric-separators", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-numeric-separators.html" + "name": "eslint-plugin-eslint-plugin/meta-property-ordering", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/meta-property-ordering" } ], "flint": { - "name": "numericSeparators", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "propertyOrdering", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-octal-escape", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-octal-escape.html" + "name": "eslint-plugin-eslint-plugin/require-meta-fixable", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-fixable" } ], "flint": { - "name": "octalEscapeSequences", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "ruleAboutChangers", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-octal-escape", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-octal-escape.html" + "name": "eslint-plugin-eslint-plugin/require-meta-docs-description", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-docs-description" } ], "flint": { - "name": "octalLiterals", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "ruleDescriptions", + "plugin": "flint", + "preset": "logical" + } }, { "eslint": [ { - "name": "jsonc/no-octal-numeric-literals", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-octal-numeric-literals.html" + "name": "eslint-plugin-eslint-plugin/require-meta-docs-recommended", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-docs-recommended" } ], "flint": { - "name": "octalNumericLiterals", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "rulePresets", + "plugin": "flint", + "preset": "logical" + } }, { "eslint": [ { - "name": "jsonc/no-parenthesized", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-parenthesized.html" + "name": "eslint-plugin-eslint-plugin/require-meta-docs-url", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-docs-url" } ], "flint": { - "name": "parentheses", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "ruleURLs", + "plugin": "flint", + "preset": "logical" + } }, { "eslint": [ { - "name": "jsonc/no-plus-sign", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-plus-sign.html" + "name": "eslint-plugin-eslint-plugin/no-identical-tests", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-identical-tests" } ], "flint": { - "name": "plusOperators", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "testCaseDuplicates", + "plugin": "flint", + "preset": "logical", + "status": "implemented" + } }, { "eslint": [ { - "name": "jsonc/no-template-literals", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-template-literals.html" + "name": "eslint-plugin-eslint-plugin/no-only-tests", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-only-tests" } ], "flint": { - "name": "templateLiterals", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "testCaseOnlies", + "plugin": "flint", + "preset": "logical" + } }, { "eslint": [ { - "name": "json/top-level-interop", - "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/top-level-interop.md" + "name": "eslint-plugin-eslint-plugin/require-test-case-name", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-test-case-name" } ], "flint": { - "name": "topLevelInteroperability", - "plugin": "json", - "preset": "Not implementing" + "name": "testNames", + "plugin": "flint", + "status": "skipped" } }, { "eslint": [ { - "name": "jsonc/no-undefined-value", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-undefined-value.html" + "name": "eslint-plugin-eslint-plugin/prefer-output-null", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-output-null" } ], "flint": { - "name": "undefined", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "testOutputNulls", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsonc/no-unicode-codepoint-escapes", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-unicode-codepoint-escapes.html" + "name": "eslint-plugin-eslint-plugin/consistent-output", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/consistent-output" } ], "flint": { - "name": "unicodeCodepointEscapes", - "plugin": "json", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "testOutputs", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "json/no-unsafe-values", - "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/no-unsafe-values.md" + "name": "eslint-plugin-eslint-plugin/test-case-property-ordering", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/test-case-property-ordering" } ], "flint": { - "implemented": true, - "name": "valueSafety", - "plugin": "json", - "preset": "Logical" + "name": "testPropertyOrders", + "plugin": "flint", + "status": "skipped" } }, { "eslint": [ { - "name": "jsx-a11y/no-access-key", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-access-key.md" + "name": "eslint-plugin-eslint-plugin/test-case-shorthand-strings", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/test-case-shorthand-strings" } ], "flint": { - "implemented": true, - "name": "accessKeys", - "plugin": "jsx", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "jsx-a11y/no-access-key", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-access-key.html" - } - ] + "name": "testShorthands", + "plugin": "flint", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "jsx-a11y/alt-text", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/alt-text.md" + "name": "eslint-plugin-eslint-plugin/no-useless-token-range", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-useless-token-range" } ], "flint": { - "implemented": true, - "name": "altTexts", - "plugin": "jsx", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "jsx_a11y/alt-text", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/alt-text.html" - } - ] + "name": "unnecessaryTokenRanges", + "plugin": "flint", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsx-a11y/anchor-ambiguous-text", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-ambiguous-text.md" + "name": "eslint-plugin-eslint-plugin/no-unused-message-ids", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-unused-message-ids" } ], "flint": { - "implemented": true, - "name": "anchorAmbiguousText", - "plugin": "jsx", - "preset": "Logical", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "jsx-a11y/anchor-ambiguous-text", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx-a11y/anchor-ambiguous-text.html" - } - ] + "name": "unusedMessageIds", + "plugin": "flint", + "preset": "logical" + } }, { "eslint": [ { - "name": "jsx-a11y/anchor-content", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-content.md" + "name": "eslint-plugin-eslint-plugin/no-unused-placeholders", + "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-unused-placeholders" } ], "flint": { - "implemented": true, - "name": "anchorContent", - "plugin": "jsx", - "preset": "Logical" - }, - "oxlint": [ + "name": "unusedPlaceholders", + "plugin": "flint", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "jsx_a11y/anchor-has-content", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/anchor-has-content.html" + "name": "jsonc/sort-array-values", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/sort-array-values.html" } - ] + ], + "flint": { + "name": "arrayElementsSorting", + "plugin": "json", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsx-a11y/anchor-is-valid", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-is-valid.md" + "name": "jsonc/no-bigint-literals", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-bigint-literals.html" } ], "flint": { - "implemented": true, - "name": "anchorValidity", - "plugin": "jsx", - "preset": "Logical" + "name": "bigintLiterals", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/anchor-is-valid", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/anchor-is-valid.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/aria-activedescendant-has-tabindex", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-activedescendant-has-tabindex.md" + "name": "jsonc/no-binary-expression", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-binary-expression.html" } ], "flint": { - "implemented": true, - "name": "ariaActiveDescendantTabIndex", - "plugin": "jsx", - "preset": "Logical" + "name": "binaryExpressions", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/aria-activedescendant-has-tabindex", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-activedescendant-has-tabindex.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/no-aria-hidden-on-focusable", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-aria-hidden-on-focusable.md" + "name": "jsonc/no-binary-numeric-literals", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-binary-numeric-literals.html" } ], "flint": { - "implemented": true, - "name": "ariaHiddenFocusables", - "plugin": "jsx", - "preset": "Logical", - "strictness": "Strict" + "name": "binaryNumericLiterals", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/no-aria-hidden-on-focusable", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-aria-hidden-on-focusable.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/aria-props", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-props.md" + "name": "jsonc/no-comments", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-comments.html" } ], "flint": { - "implemented": true, - "name": "ariaProps", - "plugin": "jsx", - "preset": "Logical" + "name": "comments", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/aria-props", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-props.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/aria-proptypes", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-proptypes.md" + "name": "jsonc/no-floating-decimal", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-floating-decimal.html" } ], "flint": { - "implemented": true, - "name": "ariaPropTypes", - "plugin": "jsx", - "preset": "Logical" - } + "name": "floatingDecimals", + "plugin": "json", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/aria-role", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-role.md" + "name": "jsonc/no-hexadecimal-numeric-literals", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-hexadecimal-numeric-literals.html" } ], "flint": { - "implemented": true, - "name": "ariaRoleValidity", - "plugin": "jsx", - "preset": "Logical" + "name": "hexadecimalNumericLiterals", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/aria-role", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-role.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/aria-unsupported-elements", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-unsupported-elements.md" + "name": "jsonc/no-escape-sequence-in-identifier", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-escape-sequence-in-identifier.html" } ], "flint": { - "implemented": true, - "name": "ariaUnsupportedElements", - "plugin": "jsx", - "preset": "Logical" + "name": "identifierEscapeSequences", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/aria-unsupported-elements", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-unsupported-elements.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/autocomplete-valid", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/autocomplete-valid.md" + "name": "jsonc/no-number-props", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-number-props.html" } ], "flint": { - "implemented": true, - "name": "autocomplete", - "plugin": "jsx", - "preset": "Logical" + "name": "identifierNumbers", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/autocomplete-valid", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/autocomplete-valid.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/no-autofocus", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-autofocus.md" + "name": "jsonc/no-infinity", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-infinity.html" } ], "flint": { - "implemented": true, - "name": "autoFocusProps", - "plugin": "jsx", - "preset": "Logical" + "name": "infinity", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/no-autofocus", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-autofocus.html" - } - ] + "notes": "Generally handled by parsers." }, { - "deno": [ + "eslint": [ { - "name": "jsx-boolean-value", - "url": "https://docs.deno.com/lint/rules/jsx-boolean-value" + "name": "jsonc/key-name-casing", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/key-name-casing.html" } ], "flint": { - "implemented": true, - "name": "booleanValues", - "plugin": "jsx", - "preset": "Stylistic" + "name": "keyCasing", + "plugin": "json", + "status": "skipped" } }, { - "deno": [ + "eslint": [ { - "name": "jsx-curly-braces", - "url": "https://docs.deno.com/lint/rules/jsx-curly-braces" + "name": "json/no-empty-keys", + "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/no-empty-keys.md" } ], "flint": { - "implemented": true, - "name": "bracedStatements", - "plugin": "jsx", - "preset": "Stylistic" + "name": "keyContents", + "plugin": "json", + "status": "skipped" } }, { "deno": [ { - "name": "button-has-type", - "url": "https://docs.deno.com/lint/rules/button-has-type" - }, + "name": "no-dupe-keys", + "url": "https://docs.deno.com/lint/rules/no-dupe-keys" + } + ], + "eslint": [ { - "name": "jsx-button-has-type", - "url": "https://docs.deno.com/lint/rules/jsx-button-has-type" + "name": "jsonc/no-dupe-keys", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-dupe-keys.html" } ], "flint": { - "implemented": true, - "name": "buttonTypes", - "plugin": "jsx", - "preset": "logical" + "name": "keyDuplicates", + "plugin": "json", + "preset": "logical", + "status": "implemented" } }, { - "deno": [ + "eslint": [ { - "name": "jsx-no-children-prop", - "url": "https://docs.deno.com/lint/rules/jsx-no-children-prop" + "name": "json/no-unnormalized-keys", + "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/no-unnormalized-keys.md" } ], "flint": { - "implemented": true, - "name": "childrenProps", - "plugin": "jsx", - "preset": "Stylistic" + "name": "keyNormalization", + "plugin": "json", + "preset": "logical", + "status": "implemented" } }, { "eslint": [ { - "name": "jsx-a11y/click-events-have-key-events", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/click-events-have-key-events.md" + "name": "jsonc/no-nan", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-nan.html" } ], "flint": { - "implemented": true, - "name": "clickEventKeyEvents", - "plugin": "jsx", - "preset": "Logical" + "name": "nan", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/click-events-have-key-events", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/click-events-have-key-events.html" - } - ] + "notes": "Generally handled by parsers." }, { - "deno": [ + "eslint": [ { - "name": "jsx-no-comment-text-nodes", - "url": "https://docs.deno.com/lint/rules/jsx-no-comment-text-nodes" + "name": "jsonc/valid-json-number", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/valid-json-number.html" } ], "flint": { - "implemented": true, - "name": "commentTextNodes", - "plugin": "jsx", - "preset": "Logical" - } + "name": "numbers", + "plugin": "json", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/no-distracting-elements", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-distracting-elements.md" + "name": "jsonc/no-numeric-separators", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-numeric-separators.html" } ], "flint": { - "implemented": true, - "name": "distractingElements", - "plugin": "jsx", - "preset": "Logical" + "name": "numericSeparators", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/no-distracting-elements", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-distracting-elements.html" - } - ] + "notes": "Generally handled by parsers." }, { - "deno": [ + "eslint": [ { - "name": "jsx-no-duplicate-props", - "url": "https://docs.deno.com/lint/rules/jsx-no-duplicate-props" + "name": "jsonc/no-octal-escape", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-octal-escape.html" } ], "flint": { - "implemented": true, - "name": "propDuplicates", - "plugin": "jsx", - "preset": "Logical" - } + "name": "octalEscapeSequences", + "plugin": "json", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { - "deno": [ + "eslint": [ { - "name": "jsx-props-no-spread-multi", - "url": "https://docs.deno.com/lint/rules/jsx-props-no-spread-multi" + "name": "jsonc/no-octal-escape", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-octal-escape.html" } ], "flint": { - "name": "duplicateSpreads", - "plugin": "jsx", - "preset": "Not implementing" - } + "name": "octalLiterals", + "plugin": "json", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/heading-has-content", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/heading-has-content.md" + "name": "jsonc/no-octal-numeric-literals", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-octal-numeric-literals.html" } ], "flint": { - "implemented": true, - "name": "headingContents", - "plugin": "jsx", - "preset": "Logical" - } + "name": "octalNumericLiterals", + "plugin": "json", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/html-has-lang", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/html-has-lang.md" + "name": "jsonc/no-parenthesized", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-parenthesized.html" } ], "flint": { - "implemented": true, - "name": "htmlLangs", - "plugin": "jsx", - "preset": "Logical" + "name": "parentheses", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/html-has-lang", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/html-has-lang.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/iframe-has-title", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/iframe-has-title.md" + "name": "jsonc/no-plus-sign", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-plus-sign.html" } ], "flint": { - "implemented": true, - "name": "iframeTitles", - "plugin": "jsx", - "preset": "Logical" + "name": "plusOperators", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/iframe-has-title", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/iframe-has-title.html" - } - ] + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/img-redundant-alt", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/img-redundant-alt.md" + "name": "jsonc/no-template-literals", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-template-literals.html" } ], "flint": { - "name": "imageAltRedundancy", - "plugin": "jsx", - "preset": "Not implementing" + "name": "templateLiterals", + "plugin": "json", + "status": "skipped" }, - "oxlint": [ + "notes": "Generally handled by parsers." + }, + { + "eslint": [ { - "name": "jsx_a11y/img-redundant-alt", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/img-redundant-alt.html" + "name": "json/top-level-interop", + "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/top-level-interop.md" } - ] + ], + "flint": { + "name": "topLevelInteroperability", + "plugin": "json", + "status": "skipped" + } }, { "eslint": [ { - "name": "jsx-a11y/no-interactive-element-to-noninteractive-role", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-interactive-element-to-noninteractive-role.md" + "name": "jsonc/no-undefined-value", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-undefined-value.html" } ], "flint": { - "implemented": true, - "name": "interactiveElementRoles", - "plugin": "jsx", - "preset": "Logical" - } + "name": "undefined", + "plugin": "json", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { "eslint": [ { - "name": "jsx-a11y/interactive-elements-focusable", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/interactive-elements-focusable.md" + "name": "jsonc/no-unicode-codepoint-escapes", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-unicode-codepoint-escapes.html" } ], "flint": { - "implemented": true, - "name": "interactiveElementsFocusable", - "plugin": "jsx", - "preset": "Logical" - } + "name": "unicodeCodepointEscapes", + "plugin": "json", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { - "deno": [ + "eslint": [ { - "name": "jsx-key", - "url": "https://docs.deno.com/lint/rules/jsx-key" + "name": "json/no-unsafe-values", + "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/no-unsafe-values.md" } ], "flint": { - "name": "iterableKeys", - "plugin": "jsx", - "preset": "Not implementing" + "name": "valueSafety", + "plugin": "json", + "preset": "logical", + "status": "implemented" } }, { "eslint": [ { - "name": "jsx-a11y/label-has-associated-control", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/label-has-associated-control.md" + "name": "jsx-a11y/no-access-key", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-access-key.md" } ], "flint": { - "implemented": true, - "name": "labelAssociatedControls", + "name": "accessKeys", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/label-has-associated-control", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/label-has-associated-control.html" + "name": "jsx-a11y/no-access-key", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-access-key.html" } ] }, { "eslint": [ { - "name": "jsx-a11y/lang", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/lang.md" + "name": "react/no-adjacent-inline-elements", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-adjacent-inline-elements.md" } ], "flint": { - "implemented": true, - "name": "langValidity", + "name": "adjacentInlineElements", "plugin": "jsx", - "preset": "Logical", - "strictness": "Strict" + "status": "skipped" }, - "oxlint": [ - { - "name": "jsx_a11y/lang", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/lang.html" - } - ] + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "jsx-a11y/media-has-caption", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/media-has-caption.md" + "name": "jsx-a11y/alt-text", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/alt-text.md" } ], "flint": { - "implemented": true, - "name": "mediaCaptions", + "name": "altTexts", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/media-has-caption", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/media-has-caption.html" + "name": "jsx_a11y/alt-text", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/alt-text.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "noSuspiciousSemicolonInJsx", - "url": "https://biomejs.dev/linter/rules/noSuspiciousSemicolonInJsx" + "name": "jsx-a11y/anchor-ambiguous-text", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-ambiguous-text.md" } ], "flint": { - "name": "misleadingSemicolons", + "name": "anchorAmbiguousText", "plugin": "jsx", - "preset": "Not implementing" - } + "preset": "logical", + "status": "implemented", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "jsx-a11y/anchor-ambiguous-text", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx-a11y/anchor-ambiguous-text.html" + } + ] }, { "eslint": [ { - "name": "jsx-a11y/mouse-events-have-key-events", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/mouse-events-have-key-events.md" + "name": "jsx-a11y/anchor-content", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-content.md" } ], "flint": { - "implemented": true, - "name": "mouseEventKeyEvents", + "name": "anchorContent", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/mouse-events-have-key-events", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/mouse-events-have-key-events.html" + "name": "jsx_a11y/anchor-has-content", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/anchor-has-content.html" } ] }, { "eslint": [ { - "name": "jsx-a11y/no-noninteractive-element-interactions", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-noninteractive-element-interactions.md" + "name": "jsx-a11y/anchor-is-valid", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-is-valid.md" } ], "flint": { - "implemented": true, - "name": "nonInteractiveElementInteractions", + "name": "anchorValidity", "plugin": "jsx", - "preset": "Logical" - } - }, - { - "eslint": [ + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ { - "name": "jsx-a11y/no-noninteractive-element-to-interactive-role", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-noninteractive-element-to-interactive-role.md" + "name": "jsx_a11y/anchor-is-valid", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/anchor-is-valid.html" } - ], - "flint": { - "implemented": true, - "name": "nonInteractiveElementRoles", - "plugin": "jsx", - "preset": "Logical" - } + ] }, { "eslint": [ { - "name": "jsx-a11y/no-noninteractive-tabindex", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-noninteractive-tabindex.md" + "name": "jsx-a11y/aria-activedescendant-has-tabindex", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-activedescendant-has-tabindex.md" } ], "flint": { - "implemented": true, - "name": "nonInteractiveElementTabIndexes", + "name": "ariaActiveDescendantTabIndex", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/no-noninteractive-tabindex", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-noninteractive-tabindex.html" + "name": "jsx_a11y/aria-activedescendant-has-tabindex", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-activedescendant-has-tabindex.html" } ] }, { "eslint": [ { - "name": "jsx-a11y/no-redundant-roles", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-redundant-roles.md" + "name": "jsx-a11y/no-aria-hidden-on-focusable", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-aria-hidden-on-focusable.md" } ], "flint": { - "implemented": true, - "name": "roleRedundancies", + "name": "ariaHiddenFocusables", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, "oxlint": [ { - "name": "jsx_a11y/no-redundant-roles", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-redundant-roles.html" + "name": "jsx_a11y/no-aria-hidden-on-focusable", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-aria-hidden-on-focusable.html" } ] }, { "eslint": [ { - "name": "jsx-a11y/role-has-required-aria-props", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/role-has-required-aria-props.md" + "name": "jsx-a11y/aria-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-props.md" } ], "flint": { - "implemented": true, - "name": "roleRequiredAriaProps", + "name": "ariaProps", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/role-has-required-aria-props", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/role-has-required-aria-props.html" + "name": "jsx_a11y/aria-props", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-props.html" } ] }, { "eslint": [ { - "name": "jsx-a11y/prefer-tag-over-role", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/prefer-tag-over-role.md" + "name": "jsx-a11y/aria-proptypes", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-proptypes.md" } ], "flint": { - "implemented": true, - "name": "roleTags", + "name": "ariaPropTypes", "plugin": "jsx", - "preset": "Logical", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "jsx_a11y/prefer-tag-over-role", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/prefer-tag-over-role.html" - } - ] + "preset": "logical", + "status": "implemented" + } }, { "eslint": [ { - "name": "jsx-a11y/role-supports-aria-props", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/role-supports-aria-props.md" + "name": "jsx-a11y/aria-role", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-role.md" } ], "flint": { - "implemented": true, - "name": "roleSupportedAriaProps", + "name": "ariaRoleValidity", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/role-supports-aria-props", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/role-supports-aria-props.html" + "name": "jsx_a11y/aria-role", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-role.html" } ] }, { "eslint": [ { - "name": "jsx-a11y/scope", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/scope.md" + "name": "jsx-a11y/aria-unsupported-elements", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/aria-unsupported-elements.md" } ], "flint": { - "implemented": true, - "name": "scopeProps", + "name": "ariaUnsupportedElements", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/scope", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/scope.html" + "name": "jsx_a11y/aria-unsupported-elements", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/aria-unsupported-elements.html" } ] }, { "eslint": [ { - "name": "jsx-a11y/no-static-element-interactions", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-static-element-interactions.md" + "name": "react/no-invalid-html-attribute", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-invalid-html-attribute.md" } ], "flint": { - "implemented": true, - "name": "staticElementInteractions", + "name": "attributeValidity", "plugin": "jsx", - "preset": "Logical" + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noSvgWithoutTitle", - "url": "https://biomejs.dev/linter/rules/noSvgWithoutTitle" + "name": "jsx-a11y/autocomplete-valid", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/autocomplete-valid.md" } ], "flint": { - "implemented": true, - "name": "svgTitles", + "name": "autocomplete", "plugin": "jsx", - "preset": "Logical" - } + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/autocomplete-valid", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/autocomplete-valid.html" + } + ] }, { "eslint": [ { - "name": "jsx-a11y/tabindex-no-positive", - "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/tabindex-no-positive.md" + "name": "jsx-a11y/no-autofocus", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-autofocus.md" } ], "flint": { - "implemented": true, - "name": "tabIndexPositiveValues", + "name": "autoFocusProps", "plugin": "jsx", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "jsx_a11y/tabindex-no-positive", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/tabindex-no-positive.html" + "name": "jsx_a11y/no-autofocus", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-autofocus.html" } ] }, { - "deno": [ + "eslint": [ { - "name": "jsx-no-unescaped-entities", - "url": "https://docs.deno.com/lint/rules/jsx-no-unescaped-entities" + "name": "react/boolean-prop-naming", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/boolean-prop-naming.md" } ], "flint": { - "implemented": true, - "name": "unescapedEntities", + "name": "booleanPropNames", "plugin": "jsx", - "preset": "Stylistic" + "preset": "stylistic", + "strictness": "strict" } }, { "deno": [ { - "name": "jsx-no-useless-fragment", - "url": "https://docs.deno.com/lint/rules/jsx-no-useless-fragment" + "name": "jsx-boolean-value", + "url": "https://docs.deno.com/lint/rules/jsx-boolean-value" + } + ], + "eslint": [ + { + "name": "react/jsx-boolean-value", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md" } ], "flint": { - "implemented": true, - "name": "unnecessaryFragments", + "name": "booleanValues", "plugin": "jsx", - "preset": "Stylistic" + "preset": "stylistic", + "status": "implemented" } }, { "deno": [ { - "name": "jsx-void-dom-elements-no-children", - "url": "https://docs.deno.com/lint/rules/jsx-void-dom-elements-no-children" + "name": "jsx-curly-braces", + "url": "https://docs.deno.com/lint/rules/jsx-curly-braces" } ], "flint": { - "implemented": true, - "name": "elementChildrenValidity", + "name": "bracedStatements", "plugin": "jsx", - "preset": "Logical", - "strictness": "Strict" + "preset": "stylistic", + "status": "implemented" } }, { + "deno": [ + { + "name": "button-has-type", + "url": "https://docs.deno.com/lint/rules/button-has-type" + }, + { + "name": "jsx-button-has-type", + "url": "https://docs.deno.com/lint/rules/jsx-button-has-type" + } + ], "eslint": [ { - "name": "markdown/no-bare-urls", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-bare-urls.md" + "name": "react/button-has-type", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/button-has-type.md" } ], "flint": { - "implemented": true, - "name": "bareUrls", - "plugin": "md", - "preset": "Stylistic", - "strictness": "Strict" - }, - "markdownlint": [ + "name": "buttonTypes", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ { - "name": "no-bare-urls", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md034.md" + "name": "react/jsx-curly-brace-presence", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-brace-presence.md" } - ] + ], + "flint": { + "name": "childrenCurlyBraces", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." }, { + "deno": [ + { + "name": "jsx-no-children-prop", + "url": "https://docs.deno.com/lint/rules/jsx-no-children-prop" + } + ], "eslint": [ { - "name": "markdown/no-empty-definitions", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-empty-definitions.md" + "name": "react/no-children-prop", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md" } ], "flint": { - "implemented": true, - "name": "definitionContents", - "plugin": "md", - "preset": "Logical" + "name": "childrenProps", + "plugin": "jsx", + "preset": "stylistic", + "status": "implemented" } }, { "eslint": [ { - "name": "markdown/no-duplicate-definitions", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-duplicate-definitions.md" + "name": "react/jsx-child-element-spacing", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-child-element-spacing.md" } ], "flint": { - "implemented": true, - "name": "definitionDuplicates", - "plugin": "md", - "preset": "Logical" + "name": "childrenWhitespace", + "plugin": "jsx", + "preset": "logical", + "strictness": "strict" } }, { "eslint": [ { - "name": "markdown/no-unused-definitions", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-unused-definitions.md" + "name": "jsx-a11y/click-events-have-key-events", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/click-events-have-key-events.md" } ], "flint": { - "implemented": true, - "name": "definitionUses", - "plugin": "md", - "preset": "Logical" + "name": "clickEventKeyEvents", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" }, - "markdownlint": [ + "oxlint": [ { - "name": "link-image-reference-definitions", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md053.md" + "name": "jsx_a11y/click-events-have-key-events", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/click-events-have-key-events.html" } ] }, { "eslint": [ { - "name": "markdown/no-space-in-emphasis", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-space-in-emphasis.md" + "name": "react/jsx-closing-bracket-location", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md" } ], "flint": { - "name": "emphasisMarkerSpacing", - "plugin": "md", - "preset": "Not implementing" - } + "name": "closingBracketSpacing", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." }, { "eslint": [ { - "name": "markdown/fenced-code-language", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/fenced-code-language.md" + "name": "react/jsx-closing-tag-location", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md" } ], "flint": { - "implemented": true, - "name": "fencedCodeLanguages", - "plugin": "md", - "preset": "Stylistic", - "strictness": "Strict" + "name": "closingTagSpacing", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ - { - "name": "fenced-code-language", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md040.md" - } - ] + "notes": "Formatting rule." }, { - "eslint": [ + "deno": [ { - "name": "markdown/no-duplicate-headings", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-duplicate-headings.md" + "name": "jsx-no-comment-text-nodes", + "url": "https://docs.deno.com/lint/rules/jsx-no-comment-text-nodes" } ], - "flint": { - "name": "headingDuplicates", - "plugin": "md", - "preset": "Stylistic", - "strictness": "Strict" - }, - "markdownlint": [ + "eslint": [ { - "name": "no-duplicate-heading", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md024.md" + "name": "react/no-comment-textnodes", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-comment-textnodes.md" } ], - "notes": "Enable with Markdownlint's siblings_only equivalent" + "flint": { + "name": "commentTextNodes", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } }, { "eslint": [ { - "name": "markdown/heading-increment", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/heading-increment.md" + "name": "react/jsx-pascal-case", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md" } ], "flint": { - "implemented": true, - "name": "headingIncrements", - "plugin": "md", - "preset": "Logical" + "name": "componentNameCases", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ - { - "name": "heading-increment", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md001.md" - } - ] + "notes": "Overly opinionated and brittle." }, { "eslint": [ { - "name": "markdown/no-missing-atx-heading-space", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-missing-atx-heading-space.md" + "name": "react/jsx-curly-newline", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md" } ], "flint": { - "name": "headingSpaces", - "plugin": "md", - "preset": "Not implementing" + "name": "curlyNewlines", + "plugin": "jsx", + "status": "skipped" }, - "notes": "I intend to write a Prettier plugin." + "notes": "Formatting rule." }, { "eslint": [ { - "name": "markdown/no-multiple-h1", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-multiple-h1.md" + "name": "react/jsx-curly-spacing", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md" } ], "flint": { - "implemented": true, - "name": "headingRootDuplicates", - "plugin": "md", - "preset": "Logical", - "strictness": "Strict" + "name": "curlySpacing", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ - { - "name": "single-h1", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md025.md" - } - ] + "notes": "Formatting rule." }, { - "flint": { - "implemented": true, - "name": "headingRootPresence", - "plugin": "md", - "preset": "Logical", - "strictness": "Strict" - }, - "markdownlint": [ + "eslint": [ { - "name": "first-line-h1", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md041.md" + "name": "react/no-object-type-as-default-prop", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-object-type-as-default-prop.md" } - ] + ], + "flint": { + "name": "defaultPropObjectValues", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "markdown/no-html", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-html.md" + "name": "jsx-a11y/no-distracting-elements", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-distracting-elements.md" } ], "flint": { - "name": "html", - "plugin": "md", - "preset": "Not implementing" + "name": "distractingElements", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" }, - "markdownlint": [ + "oxlint": [ { - "name": "no-inline-html", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md033.md" + "name": "jsx_a11y/no-distracting-elements", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-distracting-elements.html" } ] }, { "eslint": [ { - "name": "markdown/require-alt-text", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/require-alt-text.md" + "name": "react/jsx-props-no-spread-multi", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spread-multi.md" } ], - "flint": { - "implemented": true, - "name": "imageAltTexts", - "plugin": "md", - "preset": "Logical" - }, - "markdownlint": [ + "deno": [ { - "name": "no-alt-text", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md045.md" + "name": "jsx-props-no-spread-multi", + "url": "https://docs.deno.com/lint/rules/jsx-props-no-spread-multi" } - ] + ], + "flint": { + "name": "duplicateSpreads", + "plugin": "jsx", + "status": "skipped" + } }, { + "deno": [ + { + "name": "jsx-void-dom-elements-no-children", + "url": "https://docs.deno.com/lint/rules/jsx-void-dom-elements-no-children" + } + ], "eslint": [ { - "name": "markdown/no-empty-images", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-empty-images.md" + "name": "react/void-dom-elements-no-children", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md" } ], "flint": { - "implemented": true, - "name": "imageContents", - "plugin": "md", - "preset": "Logical" + "name": "elementChildrenValidity", + "plugin": "jsx", + "preset": "logical", + "status": "implemented", + "strictness": "strict" } }, { "eslint": [ { - "name": "markdown/no-missing-label-refs", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-missing-label-refs.md" + "name": "react/jsx-equals-spacing", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md" } ], "flint": { - "implemented": true, - "name": "labelReferences", - "plugin": "md", - "preset": "Logical" + "name": "equalsSpacing", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ - { - "name": "reference-links-images", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md052.md" - } - ] + "notes": "Formatting rule." }, { "eslint": [ { - "name": "markdown/no-invalid-label-refs", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-invalid-label-refs.md" + "name": "react/jsx-one-expression-per-line", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-one-expression-per-line.md" } ], "flint": { - "implemented": true, - "name": "labelReferenceValidity", - "plugin": "md", - "preset": "Logical" - } + "name": "expressionsPerLine", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." }, { "eslint": [ { - "name": "markdown/no-empty-links", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-empty-links.md" + "name": "react/filename-extension", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/filename-extension.md" } ], "flint": { - "implemented": true, - "name": "linkContents", - "plugin": "md", - "preset": "Logical" + "name": "filenameExtensions", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ - { - "name": "no-empty-links", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md042.md" - } - ] + "notes": "Generally handled by parsers." }, { + "eslint": [ + { + "name": "react/jsx-fragments", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-fragments.md" + } + ], "flint": { - "implemented": true, - "name": "linkDescriptions", - "plugin": "md", - "preset": "Logical", - "strictness": "Strict" - }, - "markdownlint": [ + "name": "fragmentElements", + "plugin": "jsx", + "preset": "stylistic" + } + }, + { + "eslint": [ { - "name": "descriptive-link-text", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md059.md" + "name": "react/jsx-no-bind", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md" } - ] + ], + "flint": { + "name": "functionBinds", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "markdown/no-missing-link-fragments", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-missing-link-fragments.md" + "name": "react/jsx-handler-names", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md" } ], "flint": { - "name": "linkFragments", - "plugin": "md", - "preset": "Logical" + "name": "handlerNames", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "link-fragments", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md051.md" + "name": "jsx-a11y/heading-has-content", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/heading-has-content.md" } - ] + ], + "flint": { + "name": "headingContents", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } }, { "eslint": [ { - "name": "markdown/no-reversed-media-syntax", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-reversed-media-syntax.md" + "name": "jsx-a11y/html-has-lang", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/html-has-lang.md" } ], "flint": { - "implemented": true, - "name": "mediaSyntaxReversals", - "plugin": "md", - "preset": "Stylistic" + "name": "htmlLangs", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" }, - "markdownlint": [ + "oxlint": [ { - "name": "no-reversed-links", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md011.md" + "name": "jsx_a11y/html-has-lang", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/html-has-lang.html" } ] }, { "eslint": [ { - "name": "markdown/no-reference-like-url", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-reference-like-url.md" + "name": "react/iframe-missing-sandbox", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/iframe-missing-sandbox.md" } ], "flint": { - "name": "referenceLikeUrls", - "plugin": "md", - "preset": "Logical" + "name": "iframeSandboxes", + "plugin": "jsx", + "preset": "logical", + "strictness": "strict" } }, { "eslint": [ { - "name": "markdown/table-column-count", - "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/table-column-count.md" + "name": "jsx-a11y/iframe-has-title", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/iframe-has-title.md" } ], "flint": { - "name": "tableColumnCounts", - "plugin": "md", - "preset": "Logical" + "name": "iframeTitles", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" }, - "markdownlint": [ + "oxlint": [ { - "name": "table-column-count", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md056.md" + "name": "jsx_a11y/iframe-has-title", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/iframe-has-title.html" } ] }, { - "flint": { - "name": "blankLineMultiples", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "no-multiple-blanks", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md012.md" + "name": "jsx-a11y/img-redundant-alt", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/img-redundant-alt.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "blockquoteSpaces", - "plugin": "md", - "preset": "Not implementing" + "name": "imageAltRedundancy", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ + "oxlint": [ { - "name": "no-multiple-space-blockquote", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md027.md" + "name": "jsx_a11y/img-redundant-alt", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/img-redundant-alt.html" } - ], - "notes": "Formatting rule" + ] }, { - "flint": { - "name": "codeblockBlankLines", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "blanks-around-fences", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md031.md" + "name": "react/jsx-indent", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "codeBlockStyles", - "plugin": "md", - "preset": "Not implementing" + "name": "indents", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "code-block-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md046.md" + "name": "react/checked-requires-onchange-or-readonly", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/checked-requires-onchange-or-readonly.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "inputCheckedMutability", + "plugin": "jsx", + "preset": "logical" + } }, { - "flint": { - "name": "codeFenceStyles", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "code-fence-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md048.md" + "name": "jsx-a11y/no-interactive-element-to-noninteractive-role", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-interactive-element-to-noninteractive-role.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "interactiveElementRoles", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } }, { - "flint": { - "name": "codeSpaces", - "plugin": "md", - "preset": "Stylistic" - }, - "markdownlint": [ + "eslint": [ { - "name": "no-space-in-code", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md038.md" + "name": "jsx-a11y/interactive-elements-focusable", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/interactive-elements-focusable.md" } - ] + ], + "flint": { + "name": "interactiveElementsFocusable", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } }, { - "flint": { - "name": "commandOutputs", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "deno": [ { - "name": "commands-show-output", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md014.md" + "name": "jsx-key", + "url": "https://docs.deno.com/lint/rules/jsx-key" } ], - "notes": "Overly opinionated" + "flint": { + "name": "iterableKeys", + "plugin": "jsx", + "status": "skipped" + } }, { - "flint": { - "name": "emphasisSpaces", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "no-space-in-emphasis", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md037.md" + "name": "jsx-a11y/label-has-associated-control", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/label-has-associated-control.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "emphasisStyles", - "plugin": "md", - "preset": "Not implementing" + "name": "labelAssociatedControls", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" }, - "markdownlint": [ + "oxlint": [ { - "name": "emphasis-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md049.md" + "name": "jsx_a11y/label-has-associated-control", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/label-has-associated-control.html" } - ], - "notes": "Formatting rule" + ] }, { - "flint": { - "name": "fileTrailingNewlines", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "single-trailing-newline", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md047.md" + "name": "jsx-a11y/lang", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/lang.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "hardTabs", - "plugin": "md", - "preset": "Not implementing" + "name": "langValidity", + "plugin": "jsx", + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, - "markdownlint": [ + "oxlint": [ { - "name": "no-hard-tabs", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md010.md" + "name": "jsx_a11y/lang", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/lang.html" } - ], - "notes": "Formatting rule" + ] }, { - "flint": { - "name": "headingBlankLines", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "blanks-around-headings", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md022.md" + "name": "react/no-array-function-lifecycle", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-function-lifecycle.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "headingClosingSpaceMultiples", - "plugin": "md", - "preset": "Not implementing" + "name": "lifecycleMethodArrowFunctions", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "no-multiple-space-closed-atx", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md021.md" + "name": "react/jsx-no-literals", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "headingClosingSpaceMultiples", - "plugin": "md", - "preset": "Not implementing" + "name": "literals", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "no-multiple-space-atx", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md019.md" + "name": "react/jsx-max-depth", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-max-depth.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "headingIndents", - "plugin": "md", - "preset": "Not implementing" + "name": "maximumChildrenDepth", + "plugin": "jsx", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "heading-start-left", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md023.md" + "name": "react/jsx-max-props-per-line", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "maximumPropsPerLine", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." }, { - "flint": { + "eslint": [ + { + "name": "jsx-a11y/media-has-caption", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/media-has-caption.md" + } + ], + "flint": { + "name": "mediaCaptions", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/media-has-caption", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/media-has-caption.html" + } + ] + }, + { + "biome": [ + { + "name": "noSuspiciousSemicolonInJsx", + "url": "https://biomejs.dev/linter/rules/noSuspiciousSemicolonInJsx" + } + ], + "flint": { + "name": "misleadingSemicolons", + "plugin": "jsx", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "jsx-a11y/mouse-events-have-key-events", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/mouse-events-have-key-events.md" + } + ], + "flint": { + "name": "mouseEventKeyEvents", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/mouse-events-have-key-events", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/mouse-events-have-key-events.html" + } + ] + }, + { + "eslint": [ + { + "name": "react/no-namespace", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-namespace.md" + } + ], + "flint": { + "name": "namespaces", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Generally handled by parsers." + }, + { + "eslint": [ + { + "name": "react/jsx-newline", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-newline.md" + } + ], + "flint": { + "name": "newlines", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "jsx-a11y/no-noninteractive-element-interactions", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-noninteractive-element-interactions.md" + } + ], + "flint": { + "name": "nonInteractiveElementInteractions", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "jsx-a11y/no-noninteractive-element-to-interactive-role", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-noninteractive-element-to-interactive-role.md" + } + ], + "flint": { + "name": "nonInteractiveElementRoles", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "jsx-a11y/no-noninteractive-tabindex", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-noninteractive-tabindex.md" + } + ], + "flint": { + "name": "nonInteractiveElementTabIndexes", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/no-noninteractive-tabindex", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-noninteractive-tabindex.html" + } + ] + }, + { + "deno": [ + { + "name": "jsx-no-duplicate-props", + "url": "https://docs.deno.com/lint/rules/jsx-no-duplicate-props" + } + ], + "eslint": [ + { + "name": "jsx-a11y/no-duplicate-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md" + } + ], + "flint": { + "name": "propDuplicates", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "react/jsx-indent-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md" + } + ], + "flint": { + "name": "propIndents", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "react/jsx-first-prop-newline", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-newline.md" + } + ], + "flint": { + "name": "propNewlines", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "react/jsx-sort-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md" + } + ], + "flint": { + "name": "propsSorting", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Superseded by sorting plugin" + }, + { + "eslint": [ + { + "name": "react/jsx-no-multi-spaces", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-multi-spaces.md" + } + ], + "flint": { + "name": "propsSpaces", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "react/jsx-props-no-spreading", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md" + } + ], + "flint": { + "name": "propsSpreads", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Overly opinionated." + }, + { + "eslint": [ + { + "name": "react/no-redundant-should-component-update", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-redundant-should-component-update.md" + } + ], + "flint": { + "name": "pureComponentShouldUpdateDefinitions", + "plugin": "jsx", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react/jsx-no-leaked-render", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-leaked-render.md" + } + ], + "flint": { + "name": "renderedLiteralLeaks", + "plugin": "jsx", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "jsx-a11y/no-redundant-roles", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-redundant-roles.md" + } + ], + "flint": { + "name": "roleRedundancies", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/no-redundant-roles", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/no-redundant-roles.html" + } + ] + }, + { + "eslint": [ + { + "name": "jsx-a11y/role-has-required-aria-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/role-has-required-aria-props.md" + } + ], + "flint": { + "name": "roleRequiredAriaProps", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/role-has-required-aria-props", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/role-has-required-aria-props.html" + } + ] + }, + { + "eslint": [ + { + "name": "jsx-a11y/role-supports-aria-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/role-supports-aria-props.md" + } + ], + "flint": { + "name": "roleSupportedAriaProps", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/role-supports-aria-props", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/role-supports-aria-props.html" + } + ] + }, + { + "eslint": [ + { + "name": "jsx-a11y/prefer-tag-over-role", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/prefer-tag-over-role.md" + } + ], + "flint": { + "name": "roleTags", + "plugin": "jsx", + "preset": "logical", + "status": "implemented", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "jsx_a11y/prefer-tag-over-role", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/prefer-tag-over-role.html" + } + ] + }, + { + "eslint": [ + { + "name": "jsx-a11y/scope", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/scope.md" + } + ], + "flint": { + "name": "scopeProps", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/scope", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/scope.html" + } + ] + }, + { + "eslint": [ + { + "name": "react/jsx-no-script-url", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-script-url.md" + } + ], + "flint": { + "name": "scriptUrls", + "plugin": "jsx", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react/jsx-no-target-blank", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md" + } + ], + "flint": { + "name": "scriptUrls", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "No longer necessary in modern browsers." + }, + { + "eslint": [ + { + "name": "react/self-closing-comp", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/self-closing-comp" + } + ], + "flint": { + "name": "selfClosingTags", + "plugin": "jsx", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "react/no-access-state-in-setstate", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-access-state-in-setstate.md" + } + ], + "flint": { + "name": "stateAccessesInSets", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Overly opinionated." + }, + { + "eslint": [ + { + "name": "jsx-a11y/no-static-element-interactions", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/no-static-element-interactions.md" + } + ], + "flint": { + "name": "staticElementInteractions", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } + }, + { + "biome": [ + { + "name": "noSvgWithoutTitle", + "url": "https://biomejs.dev/linter/rules/noSvgWithoutTitle" + } + ], + "flint": { + "name": "svgTitles", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "jsx-a11y/tabindex-no-positive", + "url": "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/tabindex-no-positive.md" + } + ], + "flint": { + "name": "tabIndexPositiveValues", + "plugin": "jsx", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "jsx_a11y/tabindex-no-positive", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsx_a11y/tabindex-no-positive.html" + } + ] + }, + { + "eslint": [ + { + "name": "react/jsx-tag-closing", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-tag-closing.md" + } + ], + "flint": { + "name": "tagSpaces", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { + "deno": [ + { + "name": "jsx-no-unescaped-entities", + "url": "https://docs.deno.com/lint/rules/jsx-no-unescaped-entities" + } + ], + "eslint": [ + { + "name": "react/no-unescaped-entities", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md" + } + ], + "flint": { + "name": "unescapedEntities", + "plugin": "jsx", + "preset": "stylistic", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "react/jsx-no-useless-fragment", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md" + } + ], + "deno": [ + { + "name": "jsx-no-useless-fragment", + "url": "https://docs.deno.com/lint/rules/jsx-no-useless-fragment" + } + ], + "flint": { + "name": "unnecessaryFragments", + "plugin": "jsx", + "preset": "stylistic", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "react/jsx-wrap-multilines", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md" + } + ], + "flint": { + "name": "wrappedMultilines", + "plugin": "jsx", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "markdown/no-bare-urls", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-bare-urls.md" + } + ], + "flint": { + "name": "bareUrls", + "plugin": "md", + "preset": "stylistic", + "status": "implemented", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "no-bare-urls", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md034.md" + } + ] + }, + { + "flint": { + "name": "blankLineMultiples", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-multiple-blanks", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md012.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "blockquoteBlankLineMultiples", + "plugin": "md", + "preset": "stylistic", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "no-blanks-blockquote", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md028.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "blockquoteSpaces", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-multiple-space-blockquote", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md027.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "codeblockBlankLines", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "blanks-around-fences", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md031.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "codeBlockStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "code-block-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md046.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "codeFenceStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "code-fence-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md048.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "codeSpaces", + "plugin": "md", + "preset": "stylistic" + }, + "markdownlint": [ + { + "name": "no-space-in-code", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md038.md" + } + ] + }, + { + "flint": { + "name": "commandOutputs", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "commands-show-output", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md014.md" + } + ], + "notes": "Overly opinionated." + }, + { + "eslint": [ + { + "name": "markdown/no-empty-definitions", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-empty-definitions.md" + } + ], + "flint": { + "name": "definitionContents", + "plugin": "md", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "markdown/no-duplicate-definitions", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-duplicate-definitions.md" + } + ], + "flint": { + "name": "definitionDuplicates", + "plugin": "md", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "markdown/no-unused-definitions", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-unused-definitions.md" + } + ], + "flint": { + "name": "definitionUses", + "plugin": "md", + "preset": "logical", + "status": "implemented" + }, + "markdownlint": [ + { + "name": "link-image-reference-definitions", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md053.md" + } + ] + }, + { + "eslint": [ + { + "name": "markdown/no-space-in-emphasis", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-space-in-emphasis.md" + } + ], + "flint": { + "name": "emphasisMarkerSpacing", + "plugin": "md", + "status": "skipped" + } + }, + { + "flint": { + "name": "emphasisSpaces", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-space-in-emphasis", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md037.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "emphasisStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "emphasis-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md049.md" + } + ], + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "markdown/fenced-code-language", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/fenced-code-language.md" + } + ], + "flint": { + "name": "fencedCodeLanguages", + "plugin": "md", + "preset": "stylistic", + "status": "implemented", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "fenced-code-language", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md040.md" + } + ] + }, + { + "flint": { + "name": "fileTrailingNewlines", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "single-trailing-newline", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md047.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "hardTabs", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-hard-tabs", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md010.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "headingBlankLines", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "blanks-around-headings", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md022.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "headingClosingSpaceMultiples", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-multiple-space-closed-atx", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md021.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "headingClosingSpaceMultiples", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-multiple-space-atx", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md019.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "headingClosingSpaces", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-missing-space-closed-atx", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md020.md" + } + ], + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "markdown/no-duplicate-headings", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-duplicate-headings.md" + } + ], + "flint": { + "name": "headingDuplicates", + "plugin": "md", + "preset": "stylistic", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "no-duplicate-heading", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md024.md" + } + ], + "notes": "Enable with Markdownlint's siblings_only equivalent" + }, + { + "flint": { + "name": "headingEmphasisEquivalents", + "plugin": "md", + "preset": "stylistic", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "no-emphasis-as-heading", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md036.md" + } + ], + "notes": "Overly opinionated." + }, + { + "eslint": [ + { + "name": "markdown/heading-increment", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/heading-increment.md" + } + ], + "flint": { + "name": "headingIncrements", + "plugin": "md", + "preset": "logical", + "status": "implemented" + }, + "markdownlint": [ + { + "name": "heading-increment", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md001.md" + } + ] + }, + { + "flint": { + "name": "headingIndents", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "heading-start-left", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md023.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { "name": "headingMissingSpaces", "plugin": "md", - "preset": "Not implementing" + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-missing-space-atx", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md018.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "headingPresence", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "required-headings", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md043.md" + } + ], + "notes": "Overly opinionated." + }, + { + "eslint": [ + { + "name": "markdown/no-multiple-h1", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-multiple-h1.md" + } + ], + "flint": { + "name": "headingRootDuplicates", + "plugin": "md", + "preset": "logical", + "status": "implemented", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "single-h1", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md025.md" + } + ] + }, + { + "flint": { + "name": "headingRootPresence", + "plugin": "md", + "preset": "logical", + "status": "implemented", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "first-line-h1", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md041.md" + } + ] + }, + { + "eslint": [ + { + "name": "markdown/no-missing-atx-heading-space", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-missing-atx-heading-space.md" + } + ], + "flint": { + "name": "headingSpaces", + "plugin": "md", + "status": "skipped" + }, + "notes": "I intend to write a Prettier plugin." + }, + { + "flint": { + "name": "headingStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "heading-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md003.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "headingTrailingPunctuation", + "plugin": "md", + "preset": "stylistic", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "no-trailing-punctuation", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md026.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "hrStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "hr-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md035.md" + } + ], + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "markdown/no-html", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-html.md" + } + ], + "flint": { + "name": "html", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-inline-html", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md033.md" + } + ] + }, + { + "eslint": [ + { + "name": "markdown/require-alt-text", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/require-alt-text.md" + } + ], + "flint": { + "name": "imageAltTexts", + "plugin": "md", + "preset": "logical", + "status": "implemented" + }, + "markdownlint": [ + { + "name": "no-alt-text", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md045.md" + } + ] + }, + { + "eslint": [ + { + "name": "markdown/no-empty-images", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-empty-images.md" + } + ], + "flint": { + "name": "imageContents", + "plugin": "md", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "markdown/no-missing-label-refs", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-missing-label-refs.md" + } + ], + "flint": { + "name": "labelReferences", + "plugin": "md", + "preset": "logical", + "status": "implemented" + }, + "markdownlint": [ + { + "name": "reference-links-images", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md052.md" + } + ] + }, + { + "eslint": [ + { + "name": "markdown/no-invalid-label-refs", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-invalid-label-refs.md" + } + ], + "flint": { + "name": "labelReferenceValidity", + "plugin": "md", + "preset": "logical", + "status": "implemented" + } + }, + { + "flint": { + "name": "liIndents", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "list-indent", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md005.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "lineLengths", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "line-length", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "linkBlankLines", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "blanks-around-lists", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md032.md" + } + ], + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "markdown/no-empty-links", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-empty-links.md" + } + ], + "flint": { + "name": "linkContents", + "plugin": "md", + "preset": "logical", + "status": "implemented" + }, + "markdownlint": [ + { + "name": "no-empty-links", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md042.md" + } + ] + }, + { + "flint": { + "name": "linkDescriptions", + "plugin": "md", + "preset": "logical", + "status": "implemented", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "descriptive-link-text", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md059.md" + } + ] + }, + { + "eslint": [ + { + "name": "markdown/no-missing-link-fragments", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-missing-link-fragments.md" + } + ], + "flint": { + "name": "linkFragments", + "plugin": "md", + "preset": "logical" + }, + "markdownlint": [ + { + "name": "link-fragments", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md051.md" + } + ] + }, + { + "flint": { + "name": "linkImageStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "link-image-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md054.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "linkSpaces", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-space-in-links", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md039.md" + } + ] + }, + { + "flint": { + "name": "listMarkerSpaces", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "list-marker-space", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md030.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "listStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "ul-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md004.md" + } + ], + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "markdown/no-reversed-media-syntax", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-reversed-media-syntax.md" + } + ], + "flint": { + "name": "mediaSyntaxReversals", + "plugin": "md", + "preset": "stylistic", + "status": "implemented" + }, + "markdownlint": [ + { + "name": "no-reversed-links", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md011.md" + } + ] + }, + { + "flint": { + "name": "olPrefixes", + "plugin": "md", + "preset": "stylistic", + "strictness": "strict" + }, + "markdownlint": [ + { + "name": "ol-prefix", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md029.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "properNames", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "proper-names", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md044.md" + } + ], + "notes": "Superseded by cspell." + }, + { + "eslint": [ + { + "name": "markdown/no-reference-like-url", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/no-reference-like-url.md" + } + ], + "flint": { + "name": "referenceLikeUrls", + "plugin": "md", + "preset": "logical" + } + }, + { + "flint": { + "name": "strongStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "strong-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md050.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "tableBlankLines", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "blanks-around-tables", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md058.md" + } + ], + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "markdown/table-column-count", + "url": "https://github.com/eslint/markdown/blob/HEAD/docs/rules/table-column-count.md" + } + ], + "flint": { + "name": "tableColumnCounts", + "plugin": "md", + "preset": "logical" + }, + "markdownlint": [ + { + "name": "table-column-count", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md056.md" + } + ] + }, + { + "flint": { + "name": "tableColumnStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "table-column-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md060.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "tablePipeStyles", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "table-pipe-style", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md055.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "trailingSpaces", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "no-trailing-spaces", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md009.md" + } + ], + "notes": "Formatting rule." + }, + { + "flint": { + "name": "ulIndents", + "plugin": "md", + "status": "skipped" + }, + "markdownlint": [ + { + "name": "ul-indent", + "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md007.md" + } + ], + "notes": "Formatting rule." + }, + { + "eslint": [ + { + "name": "@next/next/no-html-link-for-pages", + "url": "https://nextjs.org/docs/messages/no-html-link-for-pages" + } + ], + "flint": { + "name": "anchorNatives", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-async-client-component", + "url": "https://nextjs.org/docs/messages/no-async-client-component" + } + ], + "flint": { + "name": "clientComponentAsyncDefinitions", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-css-tags", + "url": "https://nextjs.org/docs/messages/no-css-tags" + } + ], + "flint": { + "name": "cssManualStylesheets", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-page-custom-font", + "url": "https://nextjs.org/docs/messages/no-page-custom-font" + } + ], + "flint": { + "name": "customFontsInPages", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/next-script-for-ga", + "url": "https://nextjs.org/docs/messages/next-script-for-ga" + } + ], + "flint": { + "name": "googleAnalyticsInlineScript", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/google-font-display", + "url": "https://nextjs.org/docs/messages/google-font-display" + } + ], + "flint": { + "name": "googleFontDisplay", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/google-font-preconnect", + "url": "https://nextjs.org/docs/messages/google-font-preconnect" + } + ], + "flint": { + "name": "googleFontPreconnect", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-duplicate-head", + "url": "https://nextjs.org/docs/messages/no-duplicate-head" + } + ], + "flint": { + "name": "headDuplicates", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-head-import-in-document", + "url": "https://nextjs.org/docs/messages/no-head-import-in-document" + } + ], + "flint": { + "name": "headImportsInDocuments", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-head-element", + "url": "https://nextjs.org/docs/messages/no-head-element" + } + ], + "flint": { + "name": "headNatives", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-img-element", + "url": "https://nextjs.org/docs/messages/no-img-element" + } + ], + "flint": { + "name": "imgNatives", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/inline-script-id", + "url": "https://nextjs.org/docs/messages/inline-script-id" + } + ], + "flint": { + "name": "inlineScriptId", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-assign-module-variable", + "url": "https://nextjs.org/docs/messages/no-assign-module-variable" + } + ], + "flint": { + "name": "moduleAssignments", + "plugin": "next", + "preset": "untyped" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-document-import-in-page", + "url": "https://nextjs.org/docs/messages/no-document-import-in-page" + } + ], + "flint": { + "name": "nextDocumentOutsidePage", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-script-component-in-head", + "url": "https://nextjs.org/docs/messages/no-script-component-in-head" + } + ], + "flint": { + "name": "nextScriptInHeads", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-before-interactive-script-outside-document", + "url": "https://nextjs.org/docs/messages/no-before-interactive-script-outside-document" + } + ], + "flint": { + "name": "nextScriptInteractiveOutsideDocument", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-unwanted-polyfillio", + "url": "https://nextjs.org/docs/messages/no-unwanted-polyfillio" + } + ], + "flint": { + "name": "polyfillDuplicates", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-sync-scripts", + "url": "https://nextjs.org/docs/messages/no-sync-scripts" + } + ], + "flint": { + "name": "scriptSyncs", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-styled-jsx-in-document", + "url": "https://nextjs.org/docs/messages/no-styled-jsx-in-document" + } + ], + "flint": { + "name": "styledJsxInDocuments", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-title-in-document-head", + "url": "https://nextjs.org/docs/messages/no-title-in-document-head" + } + ], + "flint": { + "name": "titleInDocumentHeads", + "plugin": "next", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "@next/next/no-typos", + "url": "https://nextjs.org/docs/messages/no-typos" + } + ], + "flint": { + "name": "typos", + "plugin": "next", + "preset": "logical" + } + }, + { + "deno": [ + { + "name": "prefer-ascii", + "url": "https://docs.deno.com/lint/rules/prefer-ascii" + } + ], + "flint": { + "name": "asciiCharacters", + "plugin": "node", + "status": "skipped" + } + }, + { + "biome": [ + { + "name": "useNodeAssertStrict", + "url": "https://biomejs.dev/linter/rules/useNodeAssertStrict" + } + ], + "flint": { + "name": "assertStrict", + "plugin": "node", + "preset": "logical", + "status": "implemented" + } + }, + { + "eslint": [ + { + "name": "unicorn/consistent-assert", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-assert.md" + } + ], + "flint": { + "name": "assertStyles", + "plugin": "node", + "preset": "stylistic", + "status": "implemented" + }, + "oxlint": [ + { + "name": "unicorn/consistent-assert", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-assert.html" + } + ] + }, + { + "eslint": [ + { + "name": "unicorn/prefer-blob-reading-methods", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-blob-reading-methods.md" + } + ], + "flint": { + "name": "blobReadingMethods", + "plugin": "node", + "preset": "stylistic", + "status": "implemented" + }, + "oxlint": [ + { + "name": "unicorn/prefer-blob-reading-methods", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-blob-reading-methods.html" + } + ] + }, + { + "eslint": [ + { + "name": "unicorn/no-new-buffer", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-new-buffer.md" + } + ], + "flint": { + "name": "bufferAllocators", + "plugin": "node", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "unicorn/no-new-buffer", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-new-buffer.html" + } + ] + }, + { + "eslint": [ + { + "name": "n/handle-callback-err", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/handle-callback-err.md" + } + ], + "flint": { + "name": "callbackErrorHandling", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-callback-literal", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-callback-literal.md" + } + ], + "flint": { + "name": "callbackErrorLiterals", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/callback-return", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/callback-return.md" + } + ], + "flint": { + "name": "callbackReturns", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "unicorn/no-console-spaces", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-console-spaces.md" + } + ], + "flint": { + "name": "consoleSpaces", + "plugin": "node", + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/no-console-spaces", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-console-spaces.html" + } + ] + }, + { + "deno": [ + { + "name": "no-deprecated-deno-api", + "url": "https://docs.deno.com/lint/rules/no-deprecated-deno-api" + } + ], + "eslint": [ + { + "name": "n/no-deprecated-api", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-deprecated-api.md" + } + ], + "flint": { + "name": "deprecatedAPIs", + "plugin": "node", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { + "eslint": [ + { + "name": "unicorn/prefer-event-target", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-event-target.md" + } + ], + "flint": { + "name": "eventClasses", + "plugin": "node", + "preset": "logical", + "status": "implemented", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-event-target", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-event-target.html" + } + ] + }, + { + "eslint": [ + { + "name": "n/no-exports-assign", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-exports-assign.md" + } + ], + "flint": { + "name": "exportsAssignments", + "plugin": "node", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "node/no-exports-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/node/no-exports-assign.html" + } + ] + }, + { + "eslint": [ + { + "name": "n/exports-style", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/exports-style.md" + } + ], + "flint": { + "name": "exportsStyle", + "plugin": "node", + "status": "skipped" + }, + "notes": "CJS-specific." + }, + { + "eslint": [ + { + "name": "n/no-extraneous-import", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-extraneous-import.md" + } + ], + "flint": { + "name": "extraneousImports", + "plugin": "node", + "status": "skipped" + }, + "notes": "Superseded by Knip" + }, + { + "eslint": [ + { + "name": "n/no-extraneous-require", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-extraneous-require.md" + } + ], + "flint": { + "name": "extraneousRequires", + "plugin": "node", + "status": "skipped" + }, + "notes": "Superseded by Knip" + }, + { + "eslint": [ + { + "name": "unicorn/prefer-import-meta-properties", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-import-meta-properties.md" + } + ], + "flint": { + "name": "filePathsFromImportMeta", + "plugin": "node", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "unicorn/prefer-json-parse-buffer", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-json-parse-buffer.md" + } + ], + "flint": { + "name": "fileReadJSONBuffers", + "plugin": "node", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "n/prefer-global/buffer", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + } + ], + "flint": { + "name": "globalBuffer", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/prefer-global/console", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + } + ], + "flint": { + "name": "globalConsole", + "plugin": "node", + "status": "skipped" + } + }, + { + "biome": [ + { + "name": "noProcessGlobal", + "url": "https://biomejs.dev/linter/rules/noProcessGlobal" + } + ], + "deno": [ + { + "name": "no-process-global", + "url": "https://docs.deno.com/lint/rules/no-process-global" + } + ], + "eslint": [ + { + "name": "n/prefer-global/process", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + } + ], + "flint": { + "name": "globalProcess", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/prefer-global/text-decoder", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + } + ], + "flint": { + "name": "globalTextDecoder", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/prefer-global/text-encoder", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + } + ], + "flint": { + "name": "globalTextEncoder", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/prefer-global/url-search-params", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + } + ], + "flint": { + "name": "globalURL", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/prefer-global/url-search-params", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + } + ], + "flint": { + "name": "globalURLSearchParams", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/hashbang", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/hashbang.md" + } + ], + "flint": { + "name": "hashbangs", + "plugin": "node", + "preset": "logical" + } + }, + { + "biome": [ + { + "name": "useImportExtensions", + "url": "https://biomejs.dev/linter/rules/useImportExtensions" + } + ], + "deno": [ + { + "name": "no-sloppy-imports", + "url": "https://docs.deno.com/lint/rules/no-sloppy-imports" + } + ], + "eslint": [ + { + "name": "n/file-extension-in-import", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/file-extension-in-import.md" + } + ], + "flint": { + "name": "importFileExtensions", + "plugin": "node" + }, + "oxlint": [ + { + "name": "import/extensions", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/extensions.html" + } + ] + }, + { + "eslint": [ + { + "name": "n/no-missing-import", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-missing-import.md" + } + ], + "flint": { + "name": "missingImports", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-missing-require", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-missing-require.md" + } + ], + "flint": { + "name": "missingRequires", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-mixed-requires", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-mixed-requires.md" + } + ], + "flint": { + "name": "mixedRequires", + "plugin": "node", + "status": "skipped" + }, + "notes": "Superseded by ESM and ordering rules." + }, + { + "eslint": [ + { + "name": "n/no-new-requires", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-new-requires.md" + } + ], + "flint": { + "name": "newRequires", + "plugin": "node", + "status": "skipped" + }, + "oxlint": [ + { + "name": "node/no-new-require", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/node/no-new-require.html" + } + ] + }, + { + "deno": [ + { + "name": "no-node-globals", + "url": "https://docs.deno.com/lint/rules/no-node-globals" + } + ], + "flint": { + "name": "nodeGlobals", + "plugin": "node", + "status": "skipped" + } + }, + { + "biome": [ + { + "name": "useNodejsImportProtocol", + "url": "https://biomejs.dev/linter/rules/useNodejsImportProtocol" + } + ], + "eslint": [ + { + "name": "import/enforce-node-protocol-usage", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/enforce-node-protocol-usage.md" + }, + { + "name": "n/prefer-node-protocol", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-node-protocol.md" + }, + { + "name": "unicorn/prefer-node-protocol", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-node-protocol.md" + } + ], + "flint": { + "name": "nodeProtocols", + "plugin": "node", + "preset": "logical" + }, + "oxlint": [ + { + "name": "unicorn/prefer-node-protocol", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-node-protocol.html" + } + ] + }, + { + "eslint": [ + { + "name": "n/no-path-concat", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-path-concat.md" + } + ], + "flint": { + "name": "pathConcatenations", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-process-env", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-process-env.md" + } + ], + "flint": { + "name": "processEnvs", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-process-exit", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-process-exit.md" + }, + { + "name": "unicorn/no-process-exit", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-process-exit.md" + } + ], + "flint": { + "name": "processExists", + "plugin": "node", + "preset": "logical" + }, + "oxlint": [ + { + "name": "unicorn/no-process-exit", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-process-exit.html" + } + ] + }, + { + "eslint": [ + { + "name": "n/process-exit-as-throw", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/process-exit-as-throw.md" + } + ], + "flint": { + "name": "processExitThrows", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "promise/no-callback-in-promise", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/no-callback-in-promise.md" + } + ], + "flint": { + "name": "promiseCallbackFunctions", + "plugin": "node", + "status": "skipped" + }, + "oxlint": [ + { + "name": "promise/no-callback-in-promise", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-callback-in-promise.html" + } + ] + }, + { + "eslint": [ + { + "name": "n/prefer-promises/dns", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-promises.md" + } + ], + "flint": { + "name": "promisesDNS", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/prefer-promises/fs", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-promises.md" + } + ], + "flint": { + "name": "promisesFS", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-restricted-require", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-restricted-require.md" + } + ], + "flint": { + "name": "restrictedRequires", + "plugin": "node", + "status": "skipped" + } + }, + { + "deno": [ + { + "name": "no-sync-fn-in-async-fn", + "url": "https://docs.deno.com/lint/rules/no-sync-fn-in-async-fn" + } + ], + "flint": { + "name": "syncFunctionInAsyncFunctions", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-sync", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-sync.md" + } + ], + "flint": { + "name": "synchronousMethods", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/global-require", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/global-require.md" + } + ], + "flint": { + "name": "topLevelRequires", + "plugin": "node", + "status": "skipped" + }, + "notes": "CJS-specific." + }, + { + "eslint": [ + { + "name": "n/no-unpublished-bin", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unpublished-bin.md" + } + ], + "flint": { + "name": "unpublishedBins", + "plugin": "node", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "n/no-unpublished-import", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unpublished-import.md" + } + ], + "flint": { + "name": "unpublishedImports", + "plugin": "node", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "n/no-unpublished-require", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unpublished-require.md" + } + ], + "flint": { + "name": "unpublishedRequires", + "plugin": "node", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "n/no-unsupported-features/es-builtins", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unsupported-features.md" + } + ], + "flint": { + "name": "unsupportedGlobals", + "plugin": "node", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "n/no-unsupported-features/node-builtins", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unsupported-features.md" + } + ], + "flint": { + "name": "unsupportedNodeAPIs", + "plugin": "node", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "n/no-unsupported-features/es-syntax", + "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unsupported-features.md" + } + ], + "flint": { + "name": "unsupportedSyntax", + "plugin": "node", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "nuxt/prefer-import-meta", + "url": "https://eslint.nuxt.com/packages/plugin#nuxtprefer-import-meta" + } + ], + "flint": { + "name": "importMetaProperties", + "plugin": "nuxt", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "package-json/require-author", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-author.md" + } + ], + "flint": { + "name": "authorPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-author", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-author.md" + } + ], + "flint": { + "name": "authorValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-bin", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-bin.md" + } + ], + "flint": { + "name": "binValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-bugs", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-bugs.md" + } + ], + "flint": { + "name": "bugsPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/require-bundleDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-bundleDependencies.md" + } + ], + "flint": { + "name": "bundleDependenciesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-bundleDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-bundleDependencies.md" + } + ], + "flint": { + "name": "bundleDependenciesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-config", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-config.md" + } + ], + "flint": { + "name": "configValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-cpu", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-cpu.md" + } + ], + "flint": { + "name": "cpuValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-dependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-dependencies.md" + } + ], + "flint": { + "name": "dependenciesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-dependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-dependencies.md" + } + ], + "flint": { + "name": "dependenciesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/restrict-dependency-ranges", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/restrict-dependency-ranges.md" + } + ], + "flint": { + "name": "dependencyRanges", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/unique-dependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/unique-dependencies.md" + } + ], + "flint": { + "name": "dependencyUniqueness", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-description", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-description.md" + } + ], + "flint": { + "name": "descriptionPresence", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-description", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-description.md" + } + ], + "flint": { + "name": "descriptionValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-devDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-devDependencies.md" + } + ], + "flint": { + "name": "devDependenciesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-devDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-devDependencies.md" + } + ], + "flint": { + "name": "devDependenciesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-directories", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-directories.md" + } + ], + "flint": { + "name": "directoriesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/no-empty-fields", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/no-empty-fields.md" + } + ], + "flint": { + "name": "emptyFields", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-engines", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-engines.md" + } + ], + "flint": { + "name": "enginesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-exports", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-exports.md" + } + ], + "flint": { + "name": "exportsValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-files", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-files.md" + } + ], + "flint": { + "name": "filesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/no-redundant-files", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/no-redundant-files.md" + } + ], + "flint": { + "name": "filesRedundancy", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-files", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-files.md" + } + ], + "flint": { + "name": "filesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-homepage", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-homepage.md" + } + ], + "flint": { + "name": "homepageValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-keywords", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-keywords.md" + } + ], + "flint": { + "name": "keywordsPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-keywords", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-keywords.md" + } + ], + "flint": { + "name": "keywordsValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/license-required", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/license-required.md" + } + ], + "flint": { + "name": "licenseRequired", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-license", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-license.md" + } + ], + "flint": { + "name": "licenseValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-main", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-main.md" + } + ], + "flint": { + "name": "mainValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-man", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-man.md" + } + ], + "flint": { + "name": "manValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-name", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-name.md" + } + ], + "flint": { + "name": "namePresence", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-name", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-name.md" + } + ], + "flint": { + "name": "nameValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-optionalDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-optionalDependencies.md" + } + ], + "flint": { + "name": "optionalDependenciesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-optionalDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-optionalDependencies.md" + } + ], + "flint": { + "name": "optionalDependenciesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-os", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-os.md" + } + ], + "flint": { + "name": "osValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-peerDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-peerDependencies.md" + } + ], + "flint": { + "name": "peerDependenciesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-peerDependencies", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-peerDependencies.md" + } + ], + "flint": { + "name": "peerDependenciesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-private", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-private.md" + } + ], + "flint": { + "name": "privateValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/order-properties", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/order-properties.md" + } + ], + "flint": { + "name": "propertyOrdering", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-publishConfig", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-publishConfig.md" + } + ], + "flint": { + "name": "publishConfigValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-repository-directory", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-repository-directory.md" + } + ], + "flint": { + "name": "repositoryDirectoryValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/repository-shorthand", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/repository-shorthand.md" + } + ], + "flint": { + "name": "repositoryShorthand", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-repository", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-repository.md" + } + ], + "flint": { + "name": "repositoryValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-scripts", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-scripts.md" + } + ], + "flint": { + "name": "scriptsValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-type", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-type.md" + } + ], + "flint": { + "name": "typePresence", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/type-required", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/type-required.md" + } + ], + "flint": { + "name": "typeRequired", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-types", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-types.md" + } + ], + "flint": { + "name": "typesPresence", + "plugin": "package-json" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-type", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-type.md" + } + ], + "flint": { + "name": "typeValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/require-version", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-version.md" + } + ], + "flint": { + "name": "versionPresence", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-version", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-version.md" + } + ], + "flint": { + "name": "versionValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "package-json/valid-workspaces", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-workspaces.md" + } + ], + "flint": { + "name": "workspacesValidity", + "plugin": "package-json", + "preset": "logical" + } + }, + { + "biome": [ + { + "name": "noDelete", + "url": "https://biomejs.dev/linter/rules/noDelete" + } + ], + "flint": { + "name": "deletes", + "plugin": "performance", + "preset": "logical", + "status": "implemented" + } + }, + { + "biome": [ + { + "name": "noDynamicNamespaceImportAccess", + "url": "https://biomejs.dev/linter/rules/noDynamicNamespaceImportAccess" + } + ], + "flint": { + "name": "importedNamespaceDynamicAccesses", + "plugin": "performance", + "preset": "logical", + "status": "implemented" + } + }, + { + "biome": [ + { + "name": "noAwaitInLoops", + "url": "https://biomejs.dev/linter/rules/noAwaitInLoops" + } + ], + "deno": [ + { + "name": "no-await-in-loop", + "url": "https://docs.deno.com/lint/rules/no-await-in-loop" + } + ], + "eslint": [ + { + "name": "no-await-in-loop", + "url": "https://eslint.org/docs/latest/rules/no-await-in-loop" + } + ], + "flint": { + "name": "loopAwaits", + "plugin": "performance", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/no-await-in-loop", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-await-in-loop.html" + } + ] + }, + { + "eslint": [ + { + "name": "no-loop-func", + "url": "https://eslint.org/docs/latest/rules/no-loop-func" + }, + { + "name": "@typescript-eslint/no-loop-func", + "url": "https://typescript-eslint.io/rules/no-loop-func" + } + ], + "flint": { + "name": "loopFunctions", + "plugin": "performance", + "preset": "logical", + "status": "implemented" + } + }, + { + "flint": { + "name": "mappedObjectSpreads", + "plugin": "performance", + "status": "skipped" + }, + "oxlint": [ + { + "name": "oxc/no-map-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-map-spread.html" + } + ] + }, + { + "biome": [ + { + "name": "noAccumulatingSpread", + "url": "https://biomejs.dev/linter/rules/noAccumulatingSpread" + } + ], + "flint": { + "name": "spreadAccumulators", + "plugin": "performance", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "oxc/no-accumulating-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-accumulating-spread.html" + } + ] + }, + { + "eslint": [ + { + "name": "react/no-array-index-key", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md" + } + ], + "flint": { + "name": "arrayIndexKeyes", + "plugin": "react", + "preset": "logical" + }, + "notes": "Overly opinionated." + }, + { + "eslint": [ + { + "name": "react/prefer-es6-class", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md" + } + ], + "flint": { + "name": "classComponentDefinitions", + "plugin": "react", + "status": "skipped" + }, + "notes": "create-react-class is long-outdated." + }, + { + "eslint": [ + { + "name": "react/state-property-placement", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/state-property-placement.md" + } + ], + "flint": { + "name": "classComponentStateDefinitions", + "plugin": "react", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react/state-in-constructor", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md" + } + ], + "flint": { + "name": "classComponentStateInitialization", + "plugin": "react", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react-hooks/config", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/config" + } + ], + "flint": { + "name": "compilerOptions", + "plugin": "react", + "preset": "config" + } + }, + { + "eslint": [ + { + "name": "react/prefer-read-only-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md" + } + ], + "flint": { + "name": "componentDefinitions", + "plugin": "react", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "react/no-did-mount-set-state", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md" + } + ], + "flint": { + "name": "componentDidMountSetStates", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react/no-did-update-set-state", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md" + } + ], + "flint": { + "name": "componentDidUpdateSetStates", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react/display-name", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md" + } + ], + "flint": { + "name": "componentDisplayNames", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react-hooks/component-hook-factories", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/component-hook-factories" + } + ], + "flint": { + "name": "componentHookFactories", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react/no-unstable-nested-components", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unstable-nested-components.md" + } + ], + "flint": { + "name": "componentNesting", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react/require-optimization", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/require-optimization.md" + } + ], + "flint": { + "name": "componentOptimizations", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "no-missing-space-atx", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md018.md" + "name": "react-hooks/sort-comp", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/sort-comp" } ], - "notes": "Formatting rule" + "flint": { + "name": "componentPropertySorting", + "plugin": "react", + "status": "skipped" + }, + "notes": "Handled by sorting plugin." }, { + "eslint": [ + { + "name": "react/no-multi-component", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-multi-component.md" + } + ], "flint": { - "name": "headingTrailingPunctuation", - "plugin": "md", - "preset": "Stylistic", - "strictness": "Strict" + "name": "componentsPerFile", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "no-trailing-punctuation", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md026.md" + "name": "react/no-will-update-set-state", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-will-update-set-state.md" + } + ], + "flint": { + "name": "componentWillUpdateSetStates", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react/jsx-no-constructed-context-values", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-constructed-context-values.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "contextValueReferences", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } }, { + "eslint": [ + { + "name": "react/forbid-foreign-prop-types", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md" + } + ], "flint": { - "name": "blockquoteBlankLineMultiples", - "plugin": "md", - "preset": "Stylistic", - "strictness": "Strict" + "name": "crossComponentPropTypes", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated and for the no-longer-recommended propTypes pattern" + }, + { + "eslint": [ { - "name": "no-blanks-blockquote", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md028.md" + "name": "react/no-deprecated", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "crossComponentPropTypes", + "plugin": "react", + "status": "skipped" + }, + "notes": "Superseded by deprecated." }, { + "eslint": [ + { + "name": "react/no-danger-with-children", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md" + } + ], "flint": { - "name": "olPrefixes", - "plugin": "md", - "preset": "Stylistic", - "strictness": "Strict" + "name": "dangerouslySetInnerHTMLWithChildren", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react/no-danger", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger.md" + } + ], + "flint": { + "name": "dangerousProps", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ + { + "name": "react/default-props-match-prop-types", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/default-props-match-prop-types.md" + } + ], + "flint": { + "name": "defaultPropsMatchingPropTypes", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react-hooks/sort-default-props", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/sort-default-props" + } + ], + "flint": { + "name": "defaultPropsSoring", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Handled by sorting plugin." + }, + { + "eslint": [ { - "name": "ol-prefix", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md029.md" + "name": "react/destructuring", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/destructuring.md" + } + ], + "flint": { + "name": "destructuring", + "plugin": "react", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "react-hooks/set-state-in-effect", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect" } ], - "notes": "Formatting rule" + "flint": { + "name": "effectSetStates", + "plugin": "react", + "preset": "logical" + } }, { + "eslint": [ + { + "name": "react-hooks/error-boundaries", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/error-boundaries" + } + ], "flint": { - "name": "headingEmphasisEquivalents", - "plugin": "md", - "preset": "Stylistic", - "strictness": "Strict" + "name": "errorBoundaries", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react-hooks/exhaustive-deps", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps" + } + ], + "flint": { + "name": "exhaustiveDeps", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react/no-find-dom-node", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md" + } + ], + "flint": { + "name": "findDOMNodeCalls", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Superseded by deprecated." + }, + { + "eslint": [ { - "name": "no-emphasis-as-heading", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md036.md" + "name": "react/forward-ref-uses-ref", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forward-ref-uses-ref.md" + } + ], + "flint": { + "name": "forwardRefArguments", + "plugin": "react", + "status": "skipped" + }, + "notes": "`React.forwardRef` is no longer necessary as of React 19." + }, + { + "eslint": [ + { + "name": "react/function-component-definition", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md" + } + ], + "flint": { + "name": "functionComponentDefinitions", + "plugin": "react", + "preset": "stylistic" + } + }, + { + "eslint": [ + { + "name": "react/no-this-in-sfc", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-this-in-sfc.md" + } + ], + "flint": { + "name": "functionComponentThisReferences", + "plugin": "react", + "preset": "untyped" + } + }, + { + "eslint": [ + { + "name": "react-hooks/gating", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/gating" + } + ], + "flint": { + "name": "gating", + "plugin": "react", + "preset": "config" + } + }, + { + "eslint": [ + { + "name": "react-hooks/globals", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/globals" + } + ], + "flint": { + "name": "globalMutations", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react-hooks/immutability", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability" + } + ], + "flint": { + "name": "immutability", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react-hooks/incompatible-library", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/incompatible-library" + } + ], + "flint": { + "name": "incompatibleLibraries", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "react/no-is-mounted", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md" } ], - "notes": "Overly opinionated" - }, - { "flint": { - "name": "headingClosingSpaces", - "plugin": "md", - "preset": "Not implementing" + "name": "isMounted", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "`isMounted` is no longer present in modern React." + }, + { + "eslint": [ { - "name": "no-missing-space-closed-atx", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md020.md" + "name": "react/jsx-key", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-key.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "iterableKeys", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } }, { - "flint": { - "name": "headingPresence", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "required-headings", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md043.md" + "name": "react-hooks/preserve-manual-memoization", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/preserve-manual-memoization" } ], - "notes": "Overly opinionated" + "flint": { + "name": "manualMemoizationPreservations", + "plugin": "react", + "preset": "logical" + } }, { - "flint": { - "name": "headingStyles", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "heading-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md003.md" + "name": "react/require-default-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/require-default-props.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "hrStyles", - "plugin": "md", - "preset": "Not implementing" + "name": "propDefaults", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "hr-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md035.md" + "name": "react/no-unknown-property", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "propertyValidity", + "plugin": "react", + "preset": "untyped" + } }, { - "flint": { - "name": "lineLengths", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "line-length", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md" + "name": "react/prop-types", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prop-types.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "propTypes", + "plugin": "react", + "preset": "untyped" + } }, { - "flint": { - "name": "linkImageStyles", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "link-image-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md054.md" + "name": "react/prefer-exact-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-exact-props.md" } ], - "notes": "Formatting rule" - }, - { "flint": { - "name": "linkSpaces", - "plugin": "md", - "preset": "Not implementing" + "name": "propTypesExactness", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ - { - "name": "no-space-in-links", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md039.md" - } - ] + "notes": "Handles an edge case in the no-longer-recommended propTypes package." }, { - "flint": { - "name": "linkBlankLines", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "blanks-around-lists", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md032.md" + "name": "react/prefer-read-only-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "propTypesMutability", + "plugin": "react", + "status": "skipped" + }, + "notes": "Overly opinionated." }, { + "eslint": [ + { + "name": "react-hooks/sort-prop-types", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/sort-prop-types" + } + ], "flint": { - "name": "liIndents", - "plugin": "md", - "preset": "Not implementing" + "name": "propTypesSorting", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Handled by sorting plugin." + }, + { + "eslint": [ { - "name": "list-indent", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md005.md" + "name": "react-hooks/purity", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/purity" } ], - "notes": "Formatting rule" + "flint": { + "name": "purity", + "plugin": "react", + "preset": "logical" + } }, { + "eslint": [ + { + "name": "react/react-in-jsx-scope", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md" + } + ], "flint": { - "name": "listMarkerSpaces", - "plugin": "md", - "preset": "Not implementing" + "name": "reactJsxScopes", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "Generally handled by parsers." + }, + { + "eslint": [ { - "name": "list-marker-space", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md030.md" + "name": "react-hooks/refs", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/refs" } ], - "notes": "Formatting rule" + "flint": { + "name": "refs", + "plugin": "react", + "preset": "logical" + } }, { - "flint": { - "name": "listStyles", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "ul-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md004.md" + "name": "react/no-string-refs", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "refStrings", + "plugin": "react", + "preset": "logical" + } }, { + "eslint": [ + { + "name": "react/no-render-return-value", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md" + } + ], "flint": { - "name": "properNames", - "plugin": "md", - "preset": "Not implementing" + "name": "renderReturns", + "plugin": "react", + "status": "skipped" }, - "markdownlint": [ + "notes": "`render` is no longer recommended in modern React." + }, + { + "eslint": [ { - "name": "proper-names", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md044.md" + "name": "react-hooks/set-state-in-render", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-render" } ], - "notes": "Superseded by cspell" + "flint": { + "name": "renderSetStates", + "plugin": "react", + "preset": "logical" + } }, { - "flint": { - "name": "strongStyles", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "strong-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md050.md" + "name": "react/forbid-component-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "restrictedComponentProps", + "plugin": "react" + } }, { - "flint": { - "name": "tableBlankLines", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "blanks-around-tables", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md058.md" + "name": "react/forbid-dom-props", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-dom-props.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "restrictedDomProps", + "plugin": "react" + } }, { - "flint": { - "name": "tableColumnStyles", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "table-column-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md060.md" + "name": "react/forbid-elements", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-elements.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "restrictedElements", + "plugin": "react" + } }, { - "flint": { - "name": "tablePipeStyles", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "table-pipe-style", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md055.md" + "name": "react/forbid-prop-types", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "restrictedPropTypes", + "plugin": "react" + } }, { - "flint": { - "name": "trailingSpaces", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "no-trailing-spaces", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md009.md" + "name": "react-hooks/rules-of-hooks", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/rules-of-hooks" } ], - "notes": "Formatting rule" + "flint": { + "name": "rulesOfHooks", + "plugin": "react", + "preset": "logical" + } }, { - "flint": { - "name": "ulIndents", - "plugin": "md", - "preset": "Not implementing" - }, - "markdownlint": [ + "eslint": [ { - "name": "ul-indent", - "url": "https://github.com/DavidAnson/markdownlint/blob/main/doc/md007.md" + "name": "react/no-set-state", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-set-state.md" } ], - "notes": "Formatting rule" + "flint": { + "name": "setStates", + "plugin": "react", + "status": "skipped" + }, + "notes": "Overly opinionated." }, { - "biome": [ + "eslint": [ { - "name": "useNodeAssertStrict", - "url": "https://biomejs.dev/linter/rules/useNodeAssertStrict" + "name": "react/no-direct-mutation-state", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md" } ], "flint": { - "implemented": true, - "name": "assertStrict", - "plugin": "node", - "preset": "Logical" + "name": "stateMutations", + "plugin": "react", + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/consistent-assert", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-assert.md" + "name": "react-hooks/static-components", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components" } ], "flint": { - "implemented": true, - "name": "assertStyles", - "plugin": "node", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "unicorn/consistent-assert", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-assert.html" - } - ] + "name": "staticComponents", + "plugin": "react", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/prefer-blob-reading-methods", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-blob-reading-methods.md" + "name": "react/style-prop-object", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md" } ], "flint": { - "implemented": true, - "name": "blobReadingMethods", - "plugin": "node", - "preset": "Stylistic" - }, - "oxlint": [ + "name": "stylePropObjects", + "plugin": "react", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "unicorn/prefer-blob-reading-methods", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-blob-reading-methods.html" + "name": "react/no-typos", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-typos.md" } - ] + ], + "flint": { + "name": "typos", + "plugin": "react", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/no-new-buffer", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-new-buffer.md" + "name": "react-hooks/unsupported-syntax", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/unsupported-syntax" } ], "flint": { - "implemented": true, - "name": "bufferAllocators", - "plugin": "node", - "preset": "Logical" - }, - "oxlint": [ + "name": "unsupportedSyntax", + "plugin": "react", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "unicorn/no-new-buffer", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-new-buffer.html" + "name": "react/no-unused-class-component-methods", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unused-class-component-methods.md" } - ] + ], + "flint": { + "name": "unusedClassComponentMethods", + "plugin": "react", + "preset": "logical" + } }, { "eslint": [ { - "name": "n/handle-callback-err", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/handle-callback-err.md" + "name": "react/no-unused-prop-types", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md" } ], "flint": { - "name": "callbackErrorHandling", - "plugin": "node", - "preset": "Not implementing" + "name": "unusedPropTypes", + "plugin": "react", + "preset": "logical" } }, { "eslint": [ { - "name": "n/no-callback-literal", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-callback-literal.md" + "name": "react/no-unused-state", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unused-state.md" } ], "flint": { - "name": "callbackErrorLiterals", - "plugin": "node", - "preset": "Not implementing" + "name": "unusedState", + "plugin": "react", + "preset": "logical" } }, { "eslint": [ { - "name": "n/callback-return", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/callback-return.md" + "name": "react-hooks/use-memo", + "url": "https://react.dev/reference/eslint-plugin-react-hooks/lints/use-memo" } ], "flint": { - "name": "callbackReturns", - "plugin": "node", - "preset": "Not implementing" + "name": "useMemoReturns", + "plugin": "react", + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/no-console-spaces", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-console-spaces.md" + "name": "react/jsx-uses-react", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md" } ], "flint": { - "name": "consoleSpaces", - "plugin": "node", - "preset": "Stylistic", - "strictness": "Strict" + "name": "usesReactPragmas", + "plugin": "react", + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/no-console-spaces", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-console-spaces.html" - } - ] + "notes": "Generally handled by parsers." }, { - "deno": [ - { - "name": "no-deprecated-deno-api", - "url": "https://docs.deno.com/lint/rules/no-deprecated-deno-api" - } - ], "eslint": [ { - "name": "n/no-deprecated-api", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-deprecated-api.md" + "name": "react/hook-use-state", + "url": "https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/hook-use-state.md" } ], "flint": { - "name": "deprecatedAPIs", - "plugin": "node", - "preset": "Not implementing" - }, - "notes": "Superseded by deprecated" + "name": "useStateDestructures", + "plugin": "react", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "unicorn/prefer-event-target", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-event-target.md" + "name": "solid/no-array-handlers", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-array-handlers.md" } ], "flint": { - "implemented": true, - "name": "eventClasses", - "plugin": "node", - "preset": "Logical", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/prefer-event-target", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-event-target.html" - } - ] + "name": "arrayHandlers", + "plugin": "solid" + } }, { "eslint": [ { - "name": "n/no-exports-assign", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-exports-assign.md" + "name": "solid/components-return-once", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/components-return-once.md" } ], "flint": { - "implemented": true, - "name": "exportsAssignments", - "plugin": "node", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "node/no-exports-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/node/no-exports-assign.html" - } - ] + "name": "componentConditionalReturns", + "plugin": "solid", + "preset": "logical" + } }, { "eslint": [ { - "name": "n/exports-style", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/exports-style.md" + "name": "solid/jsx-no-duplicate-props", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-duplicate-props.md" } ], "flint": { - "name": "exportsStyle", - "plugin": "node", - "preset": "Not implementing" + "name": "duplicateProps", + "plugin": "solid", + "status": "skipped" }, - "notes": "CJS-specific" + "notes": "Superseded by jsx plugin's duplicateProps rule." }, { "eslint": [ { - "name": "n/no-extraneous-import", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-extraneous-import.md" + "name": "solid/event-handlers", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/event-handlers.md" } ], "flint": { - "name": "extraneousImports", - "plugin": "node", - "preset": "Not implementing" - }, - "notes": "Superseded by Knip" + "name": "eventHandlerCasing", + "plugin": "solid", + "preset": "logical" + } }, { "eslint": [ { - "name": "n/no-extraneous-require", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-extraneous-require.md" + "name": "solid/prefer-for", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-for.md" } ], "flint": { - "name": "extraneousRequires", - "plugin": "node", - "preset": "Not implementing" - }, - "notes": "Superseded by Knip" + "name": "forMaps", + "plugin": "solid", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/prefer-import-meta-properties", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-import-meta-properties.md" + "name": "solid/no-innerhtml", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-innerhtml.md" } ], "flint": { - "name": "filePathsFromImportMeta", - "plugin": "node", - "preset": "Stylistic", - "strictness": "Strict" + "name": "innerHTMLProps", + "plugin": "solid", + "preset": "logical", + "strictness": "strict" } }, { "eslint": [ { - "name": "unicorn/prefer-json-parse-buffer", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-json-parse-buffer.md" + "name": "solid/no-unknown-namespaces", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-unknown-namespaces.md" } ], "flint": { - "name": "fileReadJSONBuffers", - "plugin": "node", - "preset": "Stylistic", - "strictness": "Strict" + "name": "namespaceValidity", + "plugin": "solid", + "preset": "untyped" } }, { "eslint": [ { - "name": "n/prefer-global/buffer", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + "name": "solid/jsx-no-script-url", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-script-url.md" } ], "flint": { - "name": "globalBuffer", - "plugin": "node", - "preset": "Not implementing" - } + "name": "noScriptUrl", + "plugin": "solid", + "status": "skipped" + }, + "notes": "Superseded by jsx plugin's duplicateProps rule." }, { "eslint": [ { - "name": "n/prefer-global/console", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + "name": "solid/no-destructure", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-destructure.md" } ], "flint": { - "name": "globalConsole", - "plugin": "node", - "preset": "Not implementing" + "name": "propDestructures", + "plugin": "solid", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noProcessGlobal", - "url": "https://biomejs.dev/linter/rules/noProcessGlobal" + "name": "solid/no-proxy-apis", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/apis.md" } ], - "deno": [ + "flint": { + "name": "proxyApis", + "plugin": "solid", + "status": "skipped" + }, + "notes": "Modern environments generally support Proxy." + }, + { + "eslint": [ { - "name": "no-process-global", - "url": "https://docs.deno.com/lint/rules/no-process-global" + "name": "solid/reactivity", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/reactivity.md" } ], + "flint": { + "name": "reactivity", + "plugin": "solid", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "n/prefer-global/process", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + "name": "solid/no-react-deps", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-deps.md" } ], "flint": { - "name": "globalProcess", - "plugin": "node", - "preset": "Not implementing" + "name": "reactLikeDeps", + "plugin": "solid", + "preset": "untyped" } }, { "eslint": [ { - "name": "n/prefer-global/text-decoder", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + "name": "solid/no-react-specific-props", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-specific-props.md" } ], "flint": { - "name": "globalTextDecoder", - "plugin": "node", - "preset": "Not implementing" + "name": "reactLikeProps", + "plugin": "solid", + "preset": "untyped" } }, { "eslint": [ { - "name": "n/prefer-global/text-encoder", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + "name": "solid/self-closing-comp", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/self-closing-comp.md" } ], "flint": { - "name": "globalTextEncoder", - "plugin": "node", - "preset": "Not implementing" - } + "name": "selfClosingTags", + "plugin": "solid", + "status": "skipped" + }, + "notes": "Superseded by js plugin's selfClosingTags rule." }, { "eslint": [ { - "name": "n/prefer-global/url-search-params", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + "name": "solid/prefer-show", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-show.md" } ], "flint": { - "name": "globalURL", - "plugin": "node", - "preset": "Not implementing" + "name": "showWhens", + "plugin": "solid", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/prefer-global/url-search-params", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-global.md" + "name": "solid/imports", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/imports.md" } ], "flint": { - "name": "globalURLSearchParams", - "plugin": "node", - "preset": "Not implementing" + "name": "solidImports", + "plugin": "solid", + "preset": "logical" } }, { "eslint": [ { - "name": "n/hashbang", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/hashbang.md" + "name": "solid/style-prop", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/style-prop.md" } ], "flint": { - "name": "hashbangs", - "plugin": "node", - "preset": "Logical" + "name": "stylePropValidity", + "plugin": "solid", + "preset": "untyped" } }, { - "biome": [ + "eslint": [ { - "name": "useImportExtensions", - "url": "https://biomejs.dev/linter/rules/useImportExtensions" + "name": "solid/jsx-no-undef", + "url": "https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-undef.md" } ], - "deno": [ + "flint": { + "name": "undefinedComponents", + "plugin": "solid", + "status": "skipped" + }, + "notes": "Handled by ts plugin's undefinedVariables rule." + }, + { + "biome": [ { - "name": "no-sloppy-imports", - "url": "https://docs.deno.com/lint/rules/no-sloppy-imports" + "name": "useSortedClasses", + "url": "https://biomejs.dev/linter/rules/useSortedClasses" } ], "eslint": [ { - "name": "n/file-extension-in-import", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/file-extension-in-import.md" + "name": "perfectionist/sort-classes", + "url": "https://perfectionist.dev/rules/sort-classes" } ], "flint": { - "name": "importFileExtensions", - "plugin": "node", - "preset": "None" - }, - "oxlint": [ - { - "name": "import/extensions", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/extensions.html" - } - ] + "name": "classes", + "plugin": "sorting", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "n/no-missing-import", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-missing-import.md" + "name": "perfectionist/sort-decorators", + "url": "https://perfectionist.dev/rules/sort-decorators" } ], "flint": { - "name": "missingImports", - "plugin": "node", - "preset": "Not implementing" + "name": "decorators", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-missing-require", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-missing-require.md" + "name": "perfectionist/sort-named-exports", + "url": "https://perfectionist.dev/rules/sort-named-exports" } ], "flint": { - "name": "missingRequires", - "plugin": "node", - "preset": "Not implementing" + "name": "exports", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-mixed-requires", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-mixed-requires.md" + "name": "perfectionist/sort-heritage-clauses", + "url": "https://perfectionist.dev/rules/sort-heritage-clauses" } ], "flint": { - "name": "mixedRequires", - "plugin": "node", - "preset": "Not implementing" - }, - "notes": "Superseded by ESM and ordering rules" + "name": "heritageClauses", + "plugin": "sorting", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "n/no-new-requires", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-new-requires.md" + "name": "perfectionist/sort-interfaces", + "url": "https://perfectionist.dev/rules/sort-interfaces" } ], "flint": { - "name": "newRequires", - "plugin": "node", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "node/no-new-require", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/node/no-new-require.html" - } - ] + "name": "interfaces", + "plugin": "sorting", + "preset": "stylistic" + } }, { - "biome": [ + "eslint": [ { - "name": "useNodejsImportProtocol", - "url": "https://biomejs.dev/linter/rules/useNodejsImportProtocol" + "name": "perfectionist/sort-intersection-types", + "url": "https://perfectionist.dev/rules/sort-intersection-types" } ], + "flint": { + "name": "intersectionTypes", + "plugin": "sorting", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "import/enforce-node-protocol-usage", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/enforce-node-protocol-usage.md" - }, - { - "name": "n/prefer-node-protocol", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-node-protocol.md" - }, - { - "name": "unicorn/prefer-node-protocol", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-node-protocol.md" + "name": "jsdoc/sort-tags", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/sort-tags.md" } ], "flint": { - "name": "nodeProtocols", - "plugin": "node", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "unicorn/prefer-node-protocol", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-node-protocol.html" - } - ] + "name": "jsdocTags", + "plugin": "sorting", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "n/no-path-concat", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-path-concat.md" + "name": "json/sort-keys", + "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/sort-keys.md" + }, + { + "name": "jsonc/sort-keys", + "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/sort-keys.html" } ], "flint": { - "name": "pathConcatenations", - "plugin": "node", - "preset": "Not implementing" + "name": "jsonKeys", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-process-env", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-process-env.md" + "name": "perfectionist/sort-jsx-props", + "url": "https://perfectionist.dev/rules/sort-jsx-props" } ], "flint": { - "name": "processEnvs", - "plugin": "node", - "preset": "Not implementing" + "name": "jsxProps", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-process-exit", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-process-exit.md" - }, - { - "name": "unicorn/no-process-exit", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-process-exit.md" + "name": "perfectionist/sort-maps", + "url": "https://perfectionist.dev/rules/sort-maps" } ], "flint": { - "name": "processExists", - "plugin": "node", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "unicorn/no-process-exit", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-process-exit.html" - } - ] + "name": "maps", + "plugin": "sorting", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "n/process-exit-as-throw", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/process-exit-as-throw.md" + "name": "perfectionist/sort-modules", + "url": "https://perfectionist.dev/rules/sort-modules" } ], "flint": { - "name": "processExitThrows", - "plugin": "node", - "preset": "Not implementing" + "name": "modules", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "promise/no-callback-in-promise", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/no-callback-in-promise.md" + "name": "sort-keys", + "url": "https://eslint.org/docs/latest/rules/sort-keys" + }, + { + "name": "perfectionist/sort-objects", + "url": "https://perfectionist.dev/rules/sort-objects" } ], "flint": { - "name": "promiseCallbackFunctions", - "plugin": "node", - "preset": "Not implementing" + "name": "objects", + "plugin": "sorting", + "preset": "stylistic" }, "oxlint": [ { - "name": "promise/no-callback-in-promise", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-callback-in-promise.html" + "name": "eslint/sort-keys", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/sort-keys.html" } ] }, { "eslint": [ { - "name": "n/prefer-promises/dns", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-promises.md" + "name": "perfectionist/sort-object-types", + "url": "https://perfectionist.dev/rules/sort-object-types" } ], "flint": { - "name": "promisesDNS", - "plugin": "node", - "preset": "Not implementing" + "name": "objectTypes", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/prefer-promises/fs", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/prefer-promises.md" + "name": "package-json/sort-collections", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/sort-collections.md" } ], "flint": { - "name": "promisesFS", - "plugin": "node", - "preset": "Not implementing" + "name": "packageCollections", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-restricted-require", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-restricted-require.md" + "name": "regexp/sort-flags", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/sort-flags.html" } ], "flint": { - "name": "restrictedRequires", - "plugin": "node", - "preset": "Not implementing" + "name": "regexFlags", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-sync", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-sync.md" + "name": "regexp/sort-alternatives", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/sort-alternatives.html" } ], "flint": { - "name": "synchronousMethods", - "plugin": "node", - "preset": "Not implementing" + "name": "regexLists", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/global-require", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/global-require.md" + "name": "perfectionist/sort-sets", + "url": "https://perfectionist.dev/rules/sort-sets" } ], "flint": { - "name": "topLevelRequires", - "plugin": "node", - "preset": "Not implementing" - }, - "notes": "CJS-specific" + "name": "sets", + "plugin": "sorting", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "n/no-unpublished-bin", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unpublished-bin.md" + "name": "perfectionist/sort-switch-case", + "url": "https://perfectionist.dev/rules/sort-switch-case" } ], "flint": { - "name": "unpublishedBins", - "plugin": "node", - "preset": "Logical" + "name": "switchCases", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-unpublished-import", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unpublished-import.md" + "name": "perfectionist/sort-union-types", + "url": "https://perfectionist.dev/rules/sort-union-types" } ], "flint": { - "name": "unpublishedImports", - "plugin": "node", - "preset": "Logical" + "name": "unionTypes", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-unpublished-require", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unpublished-require.md" + "name": "perfectionist/sort-variable-declarations", + "url": "https://perfectionist.dev/rules/sort-variable-declarations" } ], "flint": { - "name": "unpublishedRequires", - "plugin": "node", - "preset": "Not implementing" + "name": "variableDeclarations", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-unsupported-features/es-builtins", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unsupported-features.md" + "name": "yml/sort-keys", + "url": "https://ota-meshi.github.io/eslint-plugin-yml/rules/sort-keys.html" } ], "flint": { - "name": "unsupportedGlobals", - "plugin": "node", - "preset": "Logical" + "name": "yamlKeys", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-unsupported-features/node-builtins", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unsupported-features.md" + "name": "yml/sort-sequence-values", + "url": "https://ota-meshi.github.io/eslint-plugin-yml/rules/sort-sequence-values.html" } ], "flint": { - "name": "unsupportedNodeAPIs", - "plugin": "node", - "preset": "Logical" + "name": "yamlSequenceValues", + "plugin": "sorting", + "preset": "stylistic" } }, { "eslint": [ { - "name": "n/no-unsupported-features/es-syntax", - "url": "https://github.com/eslint-community/eslint-plugin-n/blob/HEAD/docs/rules/no-unsupported-features.md" + "name": "spelling/cspell", + "url": "https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell-eslint-plugin" } ], "flint": { - "name": "unsupportedSyntax", - "plugin": "node", - "preset": "Logical" + "name": "cspell", + "plugin": "spelling", + "preset": "logical", + "status": "implemented" } }, { "eslint": [ { - "name": "package-json/require-author", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-author.md" + "name": "unicorn/prevent-abbreviations", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prevent-abbreviations.md" } ], "flint": { - "name": "authorPresence", - "plugin": "packageJson", - "preset": "None" + "name": "abbreviations", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "package-json/valid-author", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-author.md" + "name": "accessor-pairs", + "url": "https://eslint.org/docs/latest/rules/accessor-pairs" } ], "flint": { - "name": "authorValidity", - "plugin": "packageJson", - "preset": "Logical" + "name": "accessorPairs", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "package-json/valid-bin", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-bin.md" + "name": "unicorn/no-accessor-recursion", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-accessor-recursion.md" } ], "flint": { - "name": "binValidity", - "plugin": "packageJson", - "preset": "Logical" - } - }, - { - "eslint": [ + "name": "accessorThisRecursion", + "plugin": "ts", + "preset": "logical", + "strictness": "strict" + }, + "oxlint": [ { - "name": "package-json/require-bugs", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-bugs.md" + "name": "unicorn/no-accessor-recursion", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-accessor-recursion.html" } - ], - "flint": { - "name": "bugsPresence", - "plugin": "packageJson", - "preset": "None" - } + ] }, { "eslint": [ { - "name": "package-json/require-bundleDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-bundleDependencies.md" + "name": "@typescript-eslint/no-unsafe-argument", + "url": "https://typescript-eslint.io/rules/no-unsafe-argument" } ], "flint": { - "name": "bundleDependenciesPresence", - "plugin": "packageJson", - "preset": "None" - } - }, - { - "eslint": [ + "name": "anyArguments", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ { - "name": "package-json/valid-bundleDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-bundleDependencies.md" + "name": "typescript/no-unsafe-argument", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-argument.html" } - ], - "flint": { - "name": "bundleDependenciesValidity", - "plugin": "packageJson", - "preset": "Logical" - } + ] }, { "eslint": [ { - "name": "package-json/valid-config", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-config.md" + "name": "@typescript-eslint/no-unsafe-assignment", + "url": "https://typescript-eslint.io/rules/no-unsafe-assignment" } ], "flint": { - "name": "configValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "anyAssignments", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unsafe-assignment", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-assignment.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-cpu", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-cpu.md" + "name": "@typescript-eslint/no-unsafe-call", + "url": "https://typescript-eslint.io/rules/no-unsafe-call" } ], "flint": { - "name": "cpuValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "anyCalls", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unsafe-call", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-call.html" + } + ] }, { "eslint": [ { - "name": "package-json/require-dependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-dependencies.md" + "name": "@typescript-eslint/no-unsafe-member-access", + "url": "https://typescript-eslint.io/rules/no-unsafe-member-access" } ], "flint": { - "name": "dependenciesPresence", - "plugin": "packageJson", - "preset": "None" - } + "name": "anyMemberAccess", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unsafe-member-access", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-member-access.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-dependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-dependencies.md" + "name": "@typescript-eslint/no-unsafe-return", + "url": "https://typescript-eslint.io/rules/no-unsafe-return" } ], "flint": { - "name": "dependenciesValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "anyReturns", + "plugin": "ts", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "typescript/no-unsafe-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-return.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "package-json/restrict-dependency-ranges", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/restrict-dependency-ranges.md" + "name": "noArguments", + "url": "https://biomejs.dev/linter/rules/noArguments" } ], - "flint": { - "name": "dependencyRanges", - "plugin": "packageJson", - "preset": "None" - } - }, - { "eslint": [ { - "name": "package-json/unique-dependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/unique-dependencies.md" + "name": "prefer-rest-params", + "url": "https://eslint.org/docs/latest/rules/prefer-rest-params" } ], "flint": { - "name": "dependencyUniqueness", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arguments", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "eslint/prefer-rest-params", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-rest-params.html" + } + ] }, { - "eslint": [ + "flint": { + "name": "argumentsArrayMethods", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ { - "name": "package-json/require-description", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-description.md" + "name": "oxc/bad-array-method-on-arguments", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-array-method-on-arguments.html" } - ], - "flint": { - "name": "descriptionPresence", - "plugin": "packageJson", - "preset": "Logical" - } + ] }, { "eslint": [ { - "name": "package-json/valid-description", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-description.md" + "name": "no-caller", + "url": "https://eslint.org/docs/latest/rules/no-caller" } ], "flint": { - "name": "descriptionValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "argumentsProperties", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-caller", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-caller.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "package-json/require-devDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-devDependencies.md" + "name": "useIterableCallbackReturn", + "url": "https://biomejs.dev/linter/rules/useIterableCallbackReturn" } ], - "flint": { - "name": "devDependenciesPresence", - "plugin": "packageJson", - "preset": "None" - } - }, - { "eslint": [ { - "name": "package-json/valid-devDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-devDependencies.md" + "name": "array-callback-return", + "url": "https://eslint.org/docs/latest/rules/array-callback-return" } ], "flint": { - "name": "devDependenciesValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayCallbackReturns", + "plugin": "ts", + "preset": "untyped" + }, + "oxlint": [ + { + "name": "eslint/array-callback-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/array-callback-return.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "package-json/valid-directories", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-directories.md" + "name": "useArrayLiterals", + "url": "https://biomejs.dev/linter/rules/useArrayLiterals" } ], - "flint": { - "name": "directoriesValidity", - "plugin": "packageJson", - "preset": "Logical" - } - }, - { - "eslint": [ + "deno": [ { - "name": "package-json/no-empty-fields", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/no-empty-fields.md" + "name": "no-array-constructor", + "url": "https://docs.deno.com/lint/rules/no-array-constructor" } ], - "flint": { - "name": "emptyFields", - "plugin": "packageJson", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "package-json/require-engines", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-engines.md" + "name": "no-array-constructor", + "url": "https://eslint.org/docs/latest/rules/no-array-constructor" + }, + { + "name": "@typescript-eslint/no-array-constructor", + "url": "https://typescript-eslint.io/rules/no-array-constructor" + }, + { + "name": "unicorn/no-new-array", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-new-array.md" } ], "flint": { - "name": "enginesPresence", - "plugin": "packageJson", - "preset": "None" - } + "name": "arrayConstructors", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "eslint/no-array-constructor", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-array-constructor.html" + }, + { + "name": "unicorn/no-new-array", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-new-array.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-exports", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-exports.md" + "name": "unicorn/no-unnecessary-array-splice-count", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-array-splice-count.md" } ], "flint": { - "name": "exportsValidity", - "plugin": "packageJson", - "preset": "Logical" + "name": "arrayDeleteUnnecessaryCounts", + "plugin": "ts", + "preset": "stylistic" } }, { "eslint": [ { - "name": "package-json/require-files", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-files.md" + "name": "unicorn/no-unreadable-array-destructuring", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unreadable-array-destructuring.md" } ], "flint": { - "name": "filesPresence", - "plugin": "packageJson", - "preset": "None" - } + "name": "arrayDestructuringSparsity", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/no-unreadable-array-destructuring", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unreadable-array-destructuring.html" + } + ] }, { "eslint": [ { - "name": "package-json/no-redundant-files", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/no-redundant-files.md" + "name": "@typescript-eslint/no-array-delete", + "url": "https://typescript-eslint.io/rules/no-array-delete" } ], "flint": { - "name": "filesRedundancy", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayElementDeletions", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-array-delete", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-array-delete.html" + } + ] }, { - "eslint": [ + "flint": { + "name": "arrayEmptyCallbackSlots", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ { - "name": "package-json/valid-files", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-files.md" + "name": "oxc/uninvoked-array-callback", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/uninvoked-array-callback.html" } - ], - "flint": { - "name": "filesValidity", - "plugin": "packageJson", - "preset": "Logical" - } + ] }, { "eslint": [ { - "name": "package-json/valid-homepage", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-homepage.md" + "name": "unicorn/consistent-existence-index-check", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-existence-index-check.md" } ], "flint": { - "name": "homepageValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayExistenceChecksConsistency", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "unicorn/consistent-existence-index-check", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-existence-index-check.html" + } + ] }, { "eslint": [ { - "name": "package-json/require-keywords", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-keywords.md" + "name": "unicorn/prefer-array-find", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-find.md" } ], "flint": { - "name": "keywordsPresence", - "plugin": "packageJson", - "preset": "None" - } + "name": "arrayFilteredFinds", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-array-find", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-find.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-keywords", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-keywords.md" + "name": "@typescript-eslint/prefer-find", + "url": "https://typescript-eslint.io/rules/prefer-find" } ], "flint": { - "name": "keywordsValidity", - "plugin": "packageJson", - "preset": "Logical" + "name": "arrayFinds", + "plugin": "ts", + "preset": "stylistic" } }, { "eslint": [ { - "name": "package-json/license-required", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/license-required.md" + "name": "unicorn/no-magic-array-flat-depth", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-magic-array-flat-depth.md" } ], "flint": { - "name": "licenseRequired", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayFlatDepthMagicNumbers", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/no-magic-array-flat-depth", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-magic-array-flat-depth.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "package-json/valid-license", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-license.md" + "name": "useFlatMap", + "url": "https://biomejs.dev/linter/rules/useFlatMap" } ], - "flint": { - "name": "licenseValidity", - "plugin": "packageJson", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "package-json/valid-main", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-main.md" + "name": "unicorn/prefer-array-flat-map", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-flat-map.md" } ], "flint": { - "name": "mainValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayFlatMapMethods", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-array-flat-map", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-flat-map.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-man", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-man.md" + "name": "unicorn/prefer-array-flat", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-flat.md" } ], "flint": { - "name": "manValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayFlatMethods", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-array-flat", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-flat.html" + } + ] }, { "eslint": [ { - "name": "package-json/require-name", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-name.md" + "name": "unicorn/no-unnecessary-array-flat-depth", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-array-flat-depth.md" } ], "flint": { - "name": "namePresence", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayFlatUnnecessaryDepths", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "unicorn/no-unnecessary-array-flat-depth", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unnecessary-array-flat-depth.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-name", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-name.md" + "name": "@typescript-eslint/prefer-includes", + "url": "https://typescript-eslint.io/rules/prefer-includes" } ], "flint": { - "name": "nameValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayIncludes", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "@typescript-eslint/prefer-includes", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/@typescript-eslint/prefer-includes.html" + } + ] }, { "eslint": [ { - "name": "package-json/require-optionalDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-optionalDependencies.md" + "name": "unicorn/prefer-includes", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-includes.md" } ], "flint": { - "name": "optionalDependenciesPresence", - "plugin": "packageJson", - "preset": "None" + "name": "arrayIncludesMethods", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" } }, { - "eslint": [ + "biome": [ { - "name": "package-json/valid-optionalDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-optionalDependencies.md" + "name": "useIndexOf", + "url": "https://biomejs.dev/linter/rules/useIndexOf" } ], - "flint": { - "name": "optionalDependenciesValidity", - "plugin": "packageJson", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "package-json/valid-os", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-os.md" + "name": "unicorn/prefer-array-index-of", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-index-of.md" } ], "flint": { - "name": "osValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayIndexOfMethods", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-array-index-of", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-index-of.html" + } + ] }, { "eslint": [ { - "name": "package-json/require-peerDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-peerDependencies.md" + "name": "unicorn/require-array-join-separator", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-array-join-separator.md" } ], "flint": { - "name": "peerDependenciesPresence", - "plugin": "packageJson", - "preset": "None" - } + "name": "arrayJoinSeparators", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/require-array-join-separator", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/require-array-join-separator.html" + } + ] }, { + "biome": [ + { + "name": "noForEach", + "url": "https://biomejs.dev/linter/rules/noForEach" + }, + { + "name": "useForOf", + "url": "https://biomejs.dev/linter/rules/useForOf" + } + ], "eslint": [ { - "name": "package-json/valid-peerDependencies", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-peerDependencies.md" + "name": "@typescript-eslint/prefer-for-of", + "url": "https://typescript-eslint.io/rules/prefer-for-of" + }, + { + "name": "unicorn/no-array-for-each", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-for-each.md" + }, + { + "name": "unicorn/no-for-loop", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-for-loop.md" } ], "flint": { - "name": "peerDependenciesValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayLoops", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "typescript/prefer-for-of", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-for-of.html" + }, + { + "name": "unicorn/no-array-for-each", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-array-for-each.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "package-json/valid-private", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-private.md" + "name": "noFlatMapIdentity", + "url": "https://biomejs.dev/linter/rules/noFlatMapIdentity" } ], "flint": { - "name": "privateValidity", - "plugin": "packageJson", - "preset": "Logical" + "name": "arrayMapIdentities", + "plugin": "ts", + "preset": "logical" } }, { "eslint": [ { - "name": "package-json/order-properties", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/order-properties.md" + "name": "unicorn/no-array-method-this-argument", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-method-this-argument.md" } ], "flint": { - "name": "propertyOrdering", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayMethodThisArguments", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/no-array-method-this-argument", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-array-method-this-argument.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-publishConfig", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-publishConfig.md" + "name": "unicorn/no-array-reverse", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-reverse.md" } ], "flint": { - "name": "publishConfigValidity", - "plugin": "packageJson", - "preset": "Logical" + "name": "arrayMutableReverses", + "plugin": "ts", + "preset": "stylistic" } }, { "eslint": [ { - "name": "package-json/valid-repository-directory", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-repository-directory.md" + "name": "unicorn/no-array-sort", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-sort.md" } ], "flint": { - "name": "repositoryDirectoryValidity", - "plugin": "packageJson", - "preset": "Logical" + "name": "arrayMutableSorts", + "plugin": "ts", + "preset": "stylistic" } }, { "eslint": [ { - "name": "package-json/repository-shorthand", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/repository-shorthand.md" + "name": "unicorn/no-array-reduce", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-reduce.md" } ], "flint": { - "name": "repositoryShorthand", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayReducers", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/no-array-reduce", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-array-reduce.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-repository", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-repository.md" + "name": "unicorn/no-unnecessary-slice-end", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-slice-end.md" } ], "flint": { - "name": "repositoryValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arraySliceUnnecessaryEnd", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "unicorn/no-length-as-slice-end", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-length-as-slice-end.html" + }, + { + "name": "unicorn/no-unnecessary-slice-end", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unnecessary-slice-end.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-scripts", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-scripts.md" + "name": "unicorn/prefer-array-some", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-some.md" } ], "flint": { - "name": "scriptsValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arraySomeMethods", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-array-some", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-some.html" + } + ] }, { "eslint": [ { - "name": "package-json/require-type", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-type.md" + "name": "@typescript-eslint/require-array-sort-compare", + "url": "https://typescript-eslint.io/rules/require-array-sort-compare" } ], "flint": { - "name": "typePresence", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arraySortCompareArgument", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "typescript/require-array-sort-compare", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/require-array-sort-compare.html" + } + ] }, { "eslint": [ { - "name": "package-json/type-required", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/type-required.md" + "name": "unicorn/consistent-empty-array-spread", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-empty-array-spread.md" } ], "flint": { - "name": "typeRequired", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayTernarySpreadingConsistency", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "unicorn/consistent-empty-array-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-empty-array-spread.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "package-json/require-types", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-types.md" + "name": "useConsistentArrayType", + "url": "https://biomejs.dev/linter/rules/useConsistentArrayType" } ], - "flint": { - "name": "typesPresence", - "plugin": "packageJson", - "preset": "None" - } - }, - { "eslint": [ { - "name": "package-json/valid-type", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-type.md" + "name": "@typescript-eslint/array-type", + "url": "https://typescript-eslint.io/rules/array-type" } ], "flint": { - "name": "typeValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayTypes", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "typescript/array-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/array-type.html" + } + ] }, { "eslint": [ { - "name": "package-json/require-version", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/require-version.md" + "name": "unicorn/no-useless-length-check", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-length-check.md" } ], "flint": { - "name": "versionPresence", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrayUnnecessaryLengthChecks", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "unicorn/no-useless-length-check", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-length-check.html" + } + ] }, { "eslint": [ { - "name": "package-json/valid-version", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-version.md" + "name": "arrow-body-style", + "url": "https://eslint.org/docs/latest/rules/arrow-body-style" } ], "flint": { - "name": "versionValidity", - "plugin": "packageJson", - "preset": "Logical" - } + "name": "arrowBodyBraces", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/arrow-body-style", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/arrow-body-style.html" + } + ] }, { + "biome": [ + { + "name": "useArrowFunction", + "url": "https://biomejs.dev/linter/rules/useArrowFunction" + } + ], "eslint": [ { - "name": "package-json/valid-workspaces", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/valid-workspaces.md" + "name": "prefer-arrow-callback", + "url": "https://eslint.org/docs/latest/rules/prefer-arrow-callback" } ], "flint": { - "name": "workspacesValidity", - "plugin": "packageJson", - "preset": "Logical" + "name": "arrowCallbacks", + "plugin": "ts", + "status": "skipped" } }, { "biome": [ { - "name": "noDelete", - "url": "https://biomejs.dev/linter/rules/noDelete" + "name": "useAsConstAssertion", + "url": "https://biomejs.dev/linter/rules/useAsConstAssertion" } ], - "flint": { - "implemented": true, - "name": "deletes", - "plugin": "performance", - "preset": "Logical" - } - }, - { - "biome": [ + "deno": [ { - "name": "noDynamicNamespaceImportAccess", - "url": "https://biomejs.dev/linter/rules/noDynamicNamespaceImportAccess" + "name": "prefer-as-const", + "url": "https://docs.deno.com/lint/rules/prefer-as-const" + } + ], + "eslint": [ + { + "name": "@typescript-eslint/prefer-as-const", + "url": "https://typescript-eslint.io/rules/prefer-as-const" } ], "flint": { - "implemented": true, - "name": "importedNamespaceDynamicAccesses", - "plugin": "performance", - "preset": "Logical" - } + "name": "asConstAssertions", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "typescript/prefer-as-const", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-as-const.html" + } + ] }, { "flint": { - "name": "mappedObjectSpreads", - "plugin": "performance", - "preset": "Not implementing" + "name": "assignmentOperationRefactors", + "plugin": "ts", + "status": "skipped" }, "oxlint": [ { - "name": "oxc/no-map-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-map-spread.html" + "name": "oxc/misrefactored-assign-op", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/misrefactored-assign-op.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "noAccumulatingSpread", - "url": "https://biomejs.dev/linter/rules/noAccumulatingSpread" + "name": "logical-assignment-operators", + "url": "https://eslint.org/docs/latest/rules/logical-assignment-operators" } ], "flint": { - "implemented": true, - "name": "spreadAccumulators", - "plugin": "performance", - "preset": "Logical" + "name": "assignmentOperatorShorthands", + "plugin": "ts", + "preset": "stylistic" + } + }, + { + "flint": { + "name": "asyncAwaitStatements", + "plugin": "ts", + "status": "skipped" }, "oxlint": [ { - "name": "oxc/no-accumulating-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-accumulating-spread.html" + "name": "oxc/no-async-await", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-async-await.html" } ] }, { "biome": [ { - "name": "useSortedClasses", - "url": "https://biomejs.dev/linter/rules/useSortedClasses" + "name": "useAwait", + "url": "https://biomejs.dev/linter/rules/useAwait" } ], - "eslint": [ + "deno": [ { - "name": "perfectionist/sort-classes", - "url": "https://perfectionist.dev/rules/sort-classes" + "name": "require-await", + "url": "https://docs.deno.com/lint/rules/require-await" } ], - "flint": { - "name": "classes", - "plugin": "sorting", - "preset": "Stylistic" - } - }, - { "eslint": [ { - "name": "perfectionist/sort-decorators", - "url": "https://perfectionist.dev/rules/sort-decorators" + "name": "require-await", + "url": "https://eslint.org/docs/latest/rules/require-await" + }, + { + "name": "@typescript-eslint/require-await", + "url": "https://typescript-eslint.io/rules/require-await" } ], "flint": { - "name": "decorators", - "plugin": "sorting", - "preset": "Stylistic" - } - }, - { - "eslint": [ + "name": "asyncFunctionAwaits", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ { - "name": "perfectionist/sort-named-exports", - "url": "https://perfectionist.dev/rules/sort-named-exports" + "name": "eslint/require-await", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/require-await.html" + }, + { + "name": "typescript/require-await", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/require-await.html" } - ], - "flint": { - "name": "exports", - "plugin": "sorting", - "preset": "Stylistic" - } + ] }, { - "eslint": [ + "biome": [ { - "name": "perfectionist/sort-heritage-clauses", - "url": "https://perfectionist.dev/rules/sort-heritage-clauses" + "name": "noAsyncPromiseExecutor", + "url": "https://biomejs.dev/linter/rules/noAsyncPromiseExecutor" } ], - "flint": { - "name": "heritageClauses", - "plugin": "sorting", - "preset": "Stylistic" - } - }, - { - "eslint": [ + "deno": [ { - "name": "perfectionist/sort-interfaces", - "url": "https://perfectionist.dev/rules/sort-interfaces" + "name": "no-async-promise-executor", + "url": "https://docs.deno.com/lint/rules/no-async-promise-executor" } ], - "flint": { - "name": "interfaces", - "plugin": "sorting", - "preset": "Stylistic" - } - }, - { "eslint": [ { - "name": "perfectionist/sort-intersection-types", - "url": "https://perfectionist.dev/rules/sort-intersection-types" + "name": "no-async-promise-executor", + "url": "https://eslint.org/docs/latest/rules/no-async-promise-executor" } ], "flint": { - "name": "intersectionTypes", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "asyncPromiseExecutors", + "plugin": "ts", + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/no-async-promise-executor", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-async-promise-executor.html" + } + ] }, { "eslint": [ { - "name": "jsdoc/sort-tags", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/sort-tags.md" + "name": "unicorn/no-useless-promise-resolve-reject", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-promise-resolve-reject.md" } ], "flint": { - "name": "jsdocTags", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "asyncUnnecessaryPromiseWrappers", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ + { + "name": "unicorn/no-useless-promise-resolve-reject", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-promise-resolve-reject.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "json/sort-keys", - "url": "https://github.com/eslint/json/blob/HEAD/docs/rules/sort-keys.md" - }, + "name": "useAtIndex", + "url": "https://biomejs.dev/linter/rules/useAtIndex" + } + ], + "eslint": [ { - "name": "jsonc/sort-keys", - "url": "https://ota-meshi.github.io/eslint-plugin-jsonc/rules/sort-keys.html" + "name": "unicorn/prefer-at", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-at.md" } ], "flint": { - "name": "jsonKeys", - "plugin": "sorting", - "preset": "Stylistic" + "name": "atAccesses", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" } }, { "eslint": [ { - "name": "perfectionist/sort-jsx-props", - "url": "https://perfectionist.dev/rules/sort-jsx-props" + "name": "require-atomic-updates", + "url": "https://eslint.org/docs/latest/rules/require-atomic-updates" } ], "flint": { - "name": "jsxProps", - "plugin": "sorting", - "preset": "Stylistic" + "name": "atomicUpdates", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "perfectionist/sort-maps", - "url": "https://perfectionist.dev/rules/sort-maps" + "name": "unicorn/no-await-in-promise-methods", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-await-in-promise-methods.md" } ], "flint": { - "name": "maps", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "awaitInsidePromiseMethods", + "plugin": "ts", + "preset": "logical", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/no-await-in-promise-methods", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-await-in-promise-methods.html" + } + ] }, { "eslint": [ { - "name": "perfectionist/sort-modules", - "url": "https://perfectionist.dev/rules/sort-modules" + "name": "unicorn/no-await-expression-member", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-await-expression-member.md" } ], "flint": { - "name": "modules", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "awaitMemberAccesses", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/no-await-expression-member", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-await-expression-member.html" + } + ] }, { "eslint": [ { - "name": "sort-keys", - "url": "https://eslint.org/docs/latest/rules/sort-keys" + "name": "@typescript-eslint/await-thenable", + "url": "https://typescript-eslint.io/rules/await-thenable" }, { - "name": "perfectionist/sort-objects", - "url": "https://perfectionist.dev/rules/sort-objects" + "name": "unicorn/no-unnecessary-await", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-await.md" } ], "flint": { - "name": "objects", - "plugin": "sorting", - "preset": "Stylistic" + "name": "awaitThenable", + "plugin": "ts", + "preset": "logical" }, "oxlint": [ { - "name": "eslint/sort-keys", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/sort-keys.html" + "name": "typescript/await-thenable", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/await-thenable.html" + }, + { + "name": "unicorn/no-unnecessary-await", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unnecessary-await.html" } ] }, { - "eslint": [ + "flint": { + "name": "barrelFiles", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ { - "name": "perfectionist/sort-object-types", - "url": "https://perfectionist.dev/rules/sort-object-types" + "name": "oxc/no-barrel-file", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-barrel-file.html" } - ], - "flint": { - "name": "objectTypes", - "plugin": "sorting", - "preset": "Stylistic" - } + ] }, { - "eslint": [ + "flint": { + "name": "bitwiseOperatorLogic", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ { - "name": "package-json/sort-collections", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/HEAD/docs/rules/sort-collections.md" + "name": "oxc/bad-bitwise-operator", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-bitwise-operator.html" } - ], - "flint": { - "name": "packageCollections", - "plugin": "sorting", - "preset": "Stylistic" - } + ] }, { - "eslint": [ + "biome": [ { - "name": "regexp/sort-flags", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/sort-flags.html" + "name": "noBitwiseOperators", + "url": "https://biomejs.dev/linter/rules/noBitwiseOperators" } ], - "flint": { - "name": "regexFlags", - "plugin": "sorting", - "preset": "Stylistic" - } - }, - { "eslint": [ { - "name": "regexp/sort-alternatives", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/sort-alternatives.html" + "name": "no-bitwise", + "url": "https://eslint.org/docs/latest/rules/no-bitwise" } ], "flint": { - "name": "regexLists", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "bitwiseOperators", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-bitwise", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-bitwise.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "perfectionist/sort-sets", - "url": "https://perfectionist.dev/rules/sort-sets" + "name": "useBlockStatements", + "url": "https://biomejs.dev/linter/rules/useBlockStatements" } ], - "flint": { - "name": "sets", - "plugin": "sorting", - "preset": "Stylistic" - } - }, - { "eslint": [ { - "name": "perfectionist/sort-switch-case", - "url": "https://perfectionist.dev/rules/sort-switch-case" + "name": "curly", + "url": "https://eslint.org/docs/latest/rules/curly" } ], "flint": { - "name": "switchCases", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "blockStatements", + "plugin": "ts", + "status": "skipped", + "strictness": "strict" + }, + "notes": "Superseded by prettier-plugin-curly", + "oxlint": [ + { + "name": "eslint/curly", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/curly.html" + } + ] }, { - "eslint": [ + "deno": [ { - "name": "perfectionist/sort-union-types", - "url": "https://perfectionist.dev/rules/sort-union-types" + "name": "no-boolean-literal-for-arguments", + "url": "https://docs.deno.com/lint/rules/no-boolean-literal-for-arguments" } ], "flint": { - "name": "unionTypes", - "plugin": "sorting", - "preset": "Stylistic" + "name": "booleanLiteralParameterComments", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "perfectionist/sort-variable-declarations", - "url": "https://perfectionist.dev/rules/sort-variable-declarations" + "name": "unicorn/prefer-native-coercion-functions", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-native-coercion-functions.md" } ], "flint": { - "name": "variableDeclarations", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "builtinCoercions", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-native-coercion-functions", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-native-coercion-functions.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "yml/sort-keys", - "url": "https://ota-meshi.github.io/eslint-plugin-yml/rules/sort-keys.html" + "name": "noInvalidBuiltinInstantiation", + "url": "https://biomejs.dev/linter/rules/noInvalidBuiltinInstantiation" } ], - "flint": { - "name": "yamlKeys", - "plugin": "sorting", - "preset": "Stylistic" - } - }, - { "eslint": [ { - "name": "yml/sort-sequence-values", - "url": "https://ota-meshi.github.io/eslint-plugin-yml/rules/sort-sequence-values.html" + "name": "unicorn/new-for-builtins", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/new-for-builtins.md" } ], "flint": { - "name": "yamlSequenceValues", - "plugin": "sorting", - "preset": "Stylistic" - } + "name": "builtinConstructorNews", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "unicorn/new-for-builtins", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/new-for-builtins.html" + } + ] }, { "eslint": [ { - "name": "cspell/spellchecker", - "url": "https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell-eslint-plugin" + "name": "unicorn/prefer-prototype-methods", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-prototype-methods.md" } ], "flint": { - "implemented": true, - "name": "spelling", - "plugin": "cspell", - "preset": "Logical" - } + "name": "builtinPrototypeMethodAccesses", + "plugin": "ts", + "status": "skipped", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-prototype-methods", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-prototype-methods.html" + } + ] }, { "eslint": [ { - "name": "unicorn/prevent-abbreviations", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prevent-abbreviations.md" + "name": "new-cap", + "url": "https://eslint.org/docs/latest/rules/new-cap" } ], "flint": { - "name": "abbreviations", + "name": "capitalizedConstructors", "plugin": "ts", - "preset": "Not implementing" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/new-cap", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/new-cap.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "accessor-pairs", - "url": "https://eslint.org/docs/latest/rules/accessor-pairs" + "name": "noSwitchDeclarations", + "url": "https://biomejs.dev/linter/rules/noSwitchDeclarations" + } + ], + "deno": [ + { + "name": "no-case-declarations", + "url": "https://docs.deno.com/lint/rules/no-case-declarations" } ], - "flint": { - "name": "accessorPairs", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "unicorn/no-accessor-recursion", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-accessor-recursion.md" + "name": "no-case-declarations", + "url": "https://eslint.org/docs/latest/rules/no-case-declarations" } ], "flint": { - "name": "accessorThisRecursion", + "name": "caseDeclarations", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/no-accessor-recursion", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-accessor-recursion.html" + "name": "eslint/no-case-declarations", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-case-declarations.html" } ] }, { + "biome": [ + { + "name": "noDuplicateCase", + "url": "https://biomejs.dev/linter/rules/noDuplicateCase" + } + ], + "deno": [ + { + "name": "no-duplicate-case", + "url": "https://docs.deno.com/lint/rules/no-duplicate-case" + } + ], "eslint": [ { - "name": "@typescript-eslint/no-unsafe-argument", - "url": "https://typescript-eslint.io/rules/no-unsafe-argument" + "name": "no-duplicate-case", + "url": "https://eslint.org/docs/latest/rules/no-duplicate-case" } ], "flint": { - "name": "anyArguments", + "name": "caseDuplicates", "plugin": "ts", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "typescript/no-unsafe-argument", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-argument.html" + "name": "eslint/no-duplicate-case", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-duplicate-case.html" } ] }, { + "biome": [ + { + "name": "noFallthroughSwitchClause", + "url": "https://biomejs.dev/linter/rules/noFallthroughSwitchClause" + } + ], + "deno": [ + { + "name": "no-fallthrough", + "url": "https://docs.deno.com/lint/rules/no-fallthrough" + } + ], "eslint": [ { - "name": "@typescript-eslint/no-unsafe-assignment", - "url": "https://typescript-eslint.io/rules/no-unsafe-assignment" + "name": "no-fallthrough", + "url": "https://eslint.org/docs/latest/rules/no-fallthrough" } ], "flint": { - "name": "anyAssignments", + "name": "caseFallthroughs", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/no-unsafe-assignment", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-assignment.html" + "name": "eslint/no-fallthrough", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-fallthrough.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/no-unsafe-call", - "url": "https://typescript-eslint.io/rules/no-unsafe-call" + "name": "@typescript-eslint/use-unknown-in-catch-callback-variable", + "url": "https://typescript-eslint.io/rules/use-unknown-in-catch-callback-variable" } ], "flint": { - "name": "anyCalls", + "name": "catchCallbackTypes", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/no-unsafe-call", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-call.html" + "name": "typescript/use-unknown-in-catch-callback-variable", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/use-unknown-in-catch-callback-variable.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/no-unsafe-member-access", - "url": "https://typescript-eslint.io/rules/no-unsafe-member-access" + "name": "preserve-caught-error", + "url": "https://eslint.org/docs/latest/rules/preserve-caught-error" } ], "flint": { - "name": "anyMemberAccess", + "name": "caughtErrorCauses", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-unsafe-member-access", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-member-access.html" - } - ] + "preset": "logical", + "strictness": "strict" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-unsafe-return", - "url": "https://typescript-eslint.io/rules/no-unsafe-return" + "name": "unicorn/catch-error-name", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/catch-error-name.md" } ], "flint": { - "implemented": true, - "name": "anyReturns", + "name": "caughtVariableNames", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "typescript/no-unsafe-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-return.html" + "name": "unicorn/catch-error-name", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/catch-error-name.html" } ] }, { - "biome": [ - { - "name": "noArguments", - "url": "https://biomejs.dev/linter/rules/noArguments" - } - ], "eslint": [ { - "name": "prefer-rest-params", - "url": "https://eslint.org/docs/latest/rules/prefer-rest-params" + "name": "no-multi-assign", + "url": "https://eslint.org/docs/latest/rules/no-multi-assign" } ], "flint": { - "name": "arguments", + "name": "chainedAssignments", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/prefer-rest-params", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-rest-params.html" + "name": "eslint/no-multi-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-multi-assign.html" } ] }, { "flint": { - "name": "argumentsArrayMethods", + "name": "charAtComparisons", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "oxc/bad-array-method-on-arguments", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-array-method-on-arguments.html" + "name": "oxc/bad-char-at-comparison", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-char-at-comparison.html" } ] }, { + "biome": [ + { + "name": "noClassAssign", + "url": "https://biomejs.dev/linter/rules/noClassAssign" + } + ], + "deno": [ + { + "name": "no-case-assign", + "url": "https://docs.deno.com/lint/rules/no-case-assign" + } + ], "eslint": [ { - "name": "no-caller", - "url": "https://eslint.org/docs/latest/rules/no-caller" + "name": "no-class-assign", + "url": "https://eslint.org/docs/latest/rules/no-class-assign" } ], "flint": { - "name": "argumentsProperties", + "name": "classAssignments", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/no-caller", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-caller.html" + "name": "eslint/no-class-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-class-assign.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "useIterableCallbackReturn", - "url": "https://biomejs.dev/linter/rules/useIterableCallbackReturn" + "name": "unicorn/prefer-class-fields", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-class-fields.md" } ], + "flint": { + "name": "classFieldDeclarations", + "plugin": "ts", + "preset": "untyped" + } + }, + { "eslint": [ { - "name": "array-callback-return", - "url": "https://eslint.org/docs/latest/rules/array-callback-return" + "name": "@typescript-eslint/class-literal-property-style", + "url": "https://typescript-eslint.io/rules/class-literal-property-style" } ], "flint": { - "name": "arrayCallbackReturns", + "name": "classLiteralProperties", "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ - { - "name": "eslint/array-callback-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/array-callback-return.html" - } - ] + "preset": "stylistic" + } }, { "biome": [ { - "name": "useArrayLiterals", - "url": "https://biomejs.dev/linter/rules/useArrayLiterals" + "name": "noDuplicateClassMembers", + "url": "https://biomejs.dev/linter/rules/noDuplicateClassMembers" } ], "deno": [ { - "name": "no-array-constructor", - "url": "https://docs.deno.com/lint/rules/no-array-constructor" + "name": "no-dupe-class-members", + "url": "https://docs.deno.com/lint/rules/no-dupe-class-members" } ], "eslint": [ { - "name": "no-array-constructor", - "url": "https://eslint.org/docs/latest/rules/no-array-constructor" - }, - { - "name": "@typescript-eslint/no-array-constructor", - "url": "https://typescript-eslint.io/rules/no-array-constructor" + "name": "no-dupe-class-members", + "url": "https://eslint.org/docs/latest/rules/no-dupe-class-members" }, { - "name": "unicorn/no-new-array", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-new-array.md" + "name": "@typescript-eslint/no-dupe-class-members", + "url": "https://typescript-eslint.io/rules/no-dupe-class-members" } ], "flint": { - "name": "arrayConstructors", + "name": "classMemberDuplicates", "plugin": "ts", - "preset": "Logical" + "preset": "untyped" }, "oxlint": [ { - "name": "eslint/no-array-constructor", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-array-constructor.html" - }, - { - "name": "unicorn/no-new-array", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-new-array.html" + "name": "eslint/no-dupe-class-members", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-dupe-class-members.html" } ] }, { "eslint": [ { - "name": "unicorn/no-unnecessary-array-splice-count", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-array-splice-count.md" + "name": "class-methods-use-this", + "url": "https://eslint.org/docs/latest/rules/class-methods-use-this" + }, + { + "name": "@typescript-eslint/class-methods-use-this", + "url": "https://typescript-eslint.io/rules/class-methods-use-this" } ], "flint": { - "name": "arrayDeleteUnnecessaryCounts", + "name": "classMethodsThis", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic", + "strictness": "strict" } }, { "eslint": [ { - "name": "unicorn/no-unreadable-array-destructuring", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unreadable-array-destructuring.md" + "name": "unicorn/prefer-single-call", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-single-call.md" } ], "flint": { - "name": "arrayDestructuringSparsity", + "name": "combinedPushes", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, - "oxlint": [ - { - "name": "unicorn/no-unreadable-array-destructuring", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unreadable-array-destructuring.html" - } - ] + "notes": "Just for Array#push(); the others would be their own rules." }, { "eslint": [ { - "name": "@typescript-eslint/no-array-delete", - "url": "https://typescript-eslint.io/rules/no-array-delete" + "name": "capitalized-comments", + "url": "https://eslint.org/docs/latest/rules/capitalized-comments" } ], "flint": { - "name": "arrayElementDeletions", + "name": "commentCapitalization", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "status": "skipped" + } + }, + { + "eslint": [ { - "name": "typescript/no-array-delete", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-array-delete.html" + "name": "no-warning-comments", + "url": "https://eslint.org/docs/latest/rules/no-warning-comments" } - ] + ], + "flint": { + "name": "commentWarnings", + "plugin": "ts", + "status": "skipped" + } }, { "flint": { - "name": "arrayEmptyCallbackSlots", + "name": "comparisonSequences", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, - "oxlint": [ + "notes": "Handled by TypeScript / otherwise is stylistic." + }, + { + "biome": [ + { + "name": "noAssignInExpressions", + "url": "https://biomejs.dev/linter/rules/noAssignInExpressions" + } + ], + "deno": [ { - "name": "oxc/uninvoked-array-callback", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/uninvoked-array-callback.html" + "name": "no-cond-assign", + "url": "https://docs.deno.com/lint/rules/no-cond-assign" } - ] - }, - { + ], "eslint": [ { - "name": "unicorn/consistent-existence-index-check", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-existence-index-check.md" + "name": "no-cond-assign", + "url": "https://eslint.org/docs/latest/rules/no-cond-assign" } ], "flint": { - "name": "arrayExistenceChecksConsistency", + "name": "conditionalAssignments", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" }, + "notes": "Superseded by unnecessaryConditions.", "oxlint": [ { - "name": "unicorn/consistent-existence-index-check", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-existence-index-check.html" + "name": "eslint/no-cond-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-cond-assign.html" } ] }, { + "biome": [ + { + "name": "noNegationElse", + "url": "https://biomejs.dev/linter/rules/noNegationElse" + } + ], "eslint": [ { - "name": "unicorn/prefer-array-find", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-find.md" + "name": "no-negated-condition", + "url": "https://eslint.org/docs/latest/rules/no-negated-condition" + }, + { + "name": "unicorn/no-negated-condition", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-negated-condition.md" } ], "flint": { - "name": "arrayFilteredFinds", + "name": "conditionNegations", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/prefer-array-find", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-find.html" + "name": "eslint/no-negated-condition", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-negated-condition.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "@typescript-eslint/prefer-find", - "url": "https://typescript-eslint.io/rules/prefer-find" + "name": "noYodaExpression", + "url": "https://biomejs.dev/linter/rules/noYodaExpression" } ], - "flint": { - "name": "arrayFinds", - "plugin": "ts", - "preset": "Stylistic" - } - }, - { "eslint": [ { - "name": "unicorn/no-magic-array-flat-depth", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-magic-array-flat-depth.md" + "name": "yoda", + "url": "https://eslint.org/docs/latest/rules/yoda" } ], "flint": { - "name": "arrayFlatDepthMagicNumbers", + "name": "conditionOrdering", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-magic-array-flat-depth", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-magic-array-flat-depth.html" + "name": "eslint/yoda", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/yoda.html" } ] }, { "biome": [ { - "name": "useFlatMap", - "url": "https://biomejs.dev/linter/rules/useFlatMap" + "name": "noExtraNonNullAssertion", + "url": "https://biomejs.dev/linter/rules/noExtraNonNullAssertion" + } + ], + "deno": [ + { + "name": "no-extra-non-null-assertion", + "url": "https://docs.deno.com/lint/rules/no-extra-non-null-assertion" } ], "eslint": [ { - "name": "unicorn/prefer-array-flat-map", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-flat-map.md" + "name": "@typescript-eslint/no-extra-non-null-assertion", + "url": "https://typescript-eslint.io/rules/no-extra-non-null-assertion" } ], "flint": { - "name": "arrayFlatMapMethods", + "name": "consecutiveNonNullAssertions", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/prefer-array-flat-map", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-flat-map.html" + "name": "typescript/no-extra-non-null-assertion", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-extra-non-null-assertion.html" } ] }, { "eslint": [ { - "name": "unicorn/prefer-array-flat", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-flat.md" + "name": "consistent-return", + "url": "https://eslint.org/docs/latest/rules/consistent-return" + }, + { + "name": "@typescript-eslint/consistent-return", + "url": "https://typescript-eslint.io/rules/consistent-return" } ], "flint": { - "name": "arrayFlatMethods", + "name": "consistentReturns", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/prefer-array-flat", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-flat.html" - } - ] + "status": "skipped" + } }, { - "eslint": [ + "biome": [ { - "name": "unicorn/no-unnecessary-array-flat-depth", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-array-flat-depth.md" + "name": "noConsole", + "url": "https://biomejs.dev/linter/rules/noConsole" } ], - "flint": { - "name": "arrayFlatUnnecessaryDepths", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ + "deno": [ { - "name": "unicorn/no-unnecessary-array-flat-depth", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unnecessary-array-flat-depth.html" + "name": "no-console", + "url": "https://docs.deno.com/lint/rules/no-console" } - ] - }, - { + ], "eslint": [ { - "name": "@typescript-eslint/prefer-includes", - "url": "https://typescript-eslint.io/rules/prefer-includes" + "name": "no-console", + "url": "https://eslint.org/docs/latest/rules/no-console" } ], "flint": { - "name": "arrayIncludes", - "plugin": "ts", - "preset": "Stylistic" + "name": "consoleCalls", + "plugin": "ts" }, "oxlint": [ { - "name": "@typescript-eslint/prefer-includes", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/@typescript-eslint/prefer-includes.html" + "name": "eslint/no-console", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-console.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "unicorn/prefer-includes", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-includes.md" + "name": "noConstAssign", + "url": "https://biomejs.dev/linter/rules/noConstAssign" } ], - "flint": { - "name": "arrayIncludesMethods", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { - "biome": [ + "deno": [ { - "name": "useIndexOf", - "url": "https://biomejs.dev/linter/rules/useIndexOf" + "name": "no-const-assign", + "url": "https://docs.deno.com/lint/rules/no-const-assign" } ], "eslint": [ { - "name": "unicorn/prefer-array-index-of", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-index-of.md" + "name": "no-const-assign", + "url": "https://eslint.org/docs/latest/rules/no-const-assign" } ], "flint": { - "name": "arrayIndexOfMethods", + "name": "constantAssignments", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/prefer-array-index-of", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-index-of.html" + "name": "eslint/no-const-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-const-assign.html" } ] }, { + "biome": [ + { + "name": "noConstantBinaryExpressions", + "url": "https://biomejs.dev/linter/rules/noConstantBinaryExpressions" + } + ], "eslint": [ { - "name": "unicorn/require-array-join-separator", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-array-join-separator.md" + "name": "no-constant-binary-expression", + "url": "https://eslint.org/docs/latest/rules/no-constant-binary-expression" } ], "flint": { - "name": "arrayJoinSeparators", + "name": "constantBinaryExpressions", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, + "notes": "Superseded by unnecessaryConditions.", "oxlint": [ { - "name": "unicorn/require-array-join-separator", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/require-array-join-separator.html" + "name": "eslint/no-constant-binary-expression", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-constant-binary-expression.html" } ] }, { "biome": [ { - "name": "noForEach", - "url": "https://biomejs.dev/linter/rules/noForEach" - }, + "name": "noConstantCondition", + "url": "https://biomejs.dev/linter/rules/noConstantCondition" + } + ], + "deno": [ { - "name": "useForOf", - "url": "https://biomejs.dev/linter/rules/useForOf" + "name": "no-constant-condition", + "url": "https://docs.deno.com/lint/rules/no-constant-condition" } ], "eslint": [ { - "name": "@typescript-eslint/prefer-for-of", - "url": "https://typescript-eslint.io/rules/prefer-for-of" - }, - { - "name": "unicorn/no-array-for-each", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-for-each.md" - }, - { - "name": "unicorn/no-for-loop", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-for-loop.md" + "name": "no-constant-condition", + "url": "https://eslint.org/docs/latest/rules/no-constant-condition" } ], "flint": { - "name": "arrayLoops", + "name": "constantConditions", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" }, + "notes": "Superseded by unnecessaryConditions.", "oxlint": [ { - "name": "typescript/prefer-for-of", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-for-of.html" - }, - { - "name": "unicorn/no-array-for-each", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-array-for-each.html" + "name": "eslint/no-constant-condition", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-constant-condition.html" } ] }, { "biome": [ { - "name": "noFlatMapIdentity", - "url": "https://biomejs.dev/linter/rules/noFlatMapIdentity" + "name": "noConstEnum", + "url": "https://biomejs.dev/linter/rules/noConstEnum" } ], "flint": { - "name": "arrayMapIdentities", + "name": "constEnums", "plugin": "ts", - "preset": "Logical" + "status": "skipped" } }, { + "biome": [ + { + "name": "noConstructorReturn", + "url": "https://biomejs.dev/linter/rules/noConstructorReturn" + } + ], "eslint": [ { - "name": "unicorn/no-array-method-this-argument", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-method-this-argument.md" + "name": "no-constructor-return", + "url": "https://eslint.org/docs/latest/rules/no-constructor-return" } ], "flint": { - "name": "arrayMethodThisArguments", + "name": "constructorReturns", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/no-array-method-this-argument", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-array-method-this-argument.html" + "name": "eslint/no-constructor-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-constructor-return.html" } ] }, { + "biome": [ + { + "name": "noInvalidConstructorSuper", + "url": "https://biomejs.dev/linter/rules/noInvalidConstructorSuper" + } + ], + "deno": [ + { + "name": "constructor-super", + "url": "https://docs.deno.com/lint/rules/constructor-super" + } + ], "eslint": [ { - "name": "unicorn/no-array-reverse", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-reverse.md" + "name": "constructor-super", + "url": "https://eslint.org/docs/latest/rules/constructor-super" } ], "flint": { - "name": "arrayMutableReverses", + "name": "constructorSupers", "plugin": "ts", - "preset": "Stylistic" + "preset": "untyped" } }, { + "biome": [ + { + "name": "useConst", + "url": "https://biomejs.dev/linter/rules/useConst" + } + ], + "deno": [ + { + "name": "prefer-const", + "url": "https://docs.deno.com/lint/rules/prefer-const" + } + ], "eslint": [ { - "name": "unicorn/no-array-sort", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-sort.md" + "name": "prefer-const", + "url": "https://eslint.org/docs/latest/rules/prefer-const" } ], "flint": { - "name": "arrayMutableSorts", + "name": "constVariables", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/no-array-reduce", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-reduce.md" + "name": "no-continue", + "url": "https://eslint.org/docs/latest/rules/no-continue" } ], "flint": { - "name": "arrayReducers", + "name": "continues", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-array-reduce", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-array-reduce.html" + "name": "eslint/no-continue", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-continue.html" } ] }, { "eslint": [ { - "name": "unicorn/no-unnecessary-slice-end", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-slice-end.md" + "name": "unicorn/consistent-date-clone", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-date-clone.md" } ], "flint": { - "name": "arraySliceUnnecessaryEnd", + "name": "dateConstructorClones", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" }, - "oxlint": [ - { - "name": "unicorn/no-length-as-slice-end", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-length-as-slice-end.html" - }, - { - "name": "unicorn/no-unnecessary-slice-end", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unnecessary-slice-end.html" - } - ] + "notes": "unicorn/consistent-date-clone" }, { + "biome": [ + { + "name": "useDateNow", + "url": "https://biomejs.dev/linter/rules/useDateNow" + } + ], "eslint": [ { - "name": "unicorn/prefer-array-some", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-array-some.md" + "name": "unicorn/prefer-date-now", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-date-now.md" } ], "flint": { - "name": "arraySomeMethods", + "name": "dateNowTimestamps", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical", + "strictness": "strict" }, "oxlint": [ { - "name": "unicorn/prefer-array-some", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-array-some.html" + "name": "unicorn/prefer-date-now", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-date-now.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "@typescript-eslint/require-array-sort-compare", - "url": "https://typescript-eslint.io/rules/require-array-sort-compare" + "name": "noDebugger", + "url": "https://biomejs.dev/linter/rules/noDebugger" } ], - "flint": { - "name": "arraySortCompareArgument", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "deno": [ { - "name": "typescript/require-array-sort-compare", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/require-array-sort-compare.html" + "name": "no-debugger", + "url": "https://docs.deno.com/lint/rules/no-debugger" } - ] - }, - { + ], "eslint": [ { - "name": "unicorn/consistent-empty-array-spread", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-empty-array-spread.md" + "name": "no-debugger", + "url": "https://eslint.org/docs/latest/rules/no-debugger" } ], "flint": { - "name": "arrayTernarySpreadingConsistency", + "name": "debuggerStatements", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/consistent-empty-array-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-empty-array-spread.html" + "name": "eslint/no-debugger", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-debugger.html" } ] }, { "biome": [ { - "name": "useConsistentArrayType", - "url": "https://biomejs.dev/linter/rules/useConsistentArrayType" + "name": "useDefaultSwitchClauseLast", + "url": "https://biomejs.dev/linter/rules/useDefaultSwitchClauseLast" } ], "eslint": [ { - "name": "@typescript-eslint/array-type", - "url": "https://typescript-eslint.io/rules/array-type" + "name": "default-case-last", + "url": "https://eslint.org/docs/latest/rules/default-case-last" } ], "flint": { - "name": "arrayTypes", + "name": "defaultCaseLast", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "typescript/array-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/array-type.html" + "name": "eslint/default-case-last", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default-case-last.html" } ] }, { + "biome": [ + { + "name": "useDefaultSwitchClause", + "url": "https://biomejs.dev/linter/rules/useDefaultSwitchClause" + } + ], "eslint": [ { - "name": "unicorn/no-useless-length-check", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-length-check.md" + "name": "default-case", + "url": "https://eslint.org/docs/latest/rules/default-case" } ], "flint": { - "name": "arrayUnnecessaryLengthChecks", + "name": "defaultCases", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-useless-length-check", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-length-check.html" + "name": "eslint/default-case", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default-case.html" } ] }, { "eslint": [ { - "name": "arrow-body-style", - "url": "https://eslint.org/docs/latest/rules/arrow-body-style" + "name": "unicorn/no-named-default", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-named-default.md" } ], "flint": { - "name": "arrowBodyBraces", + "name": "defaultImportRenames", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/arrow-body-style", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/arrow-body-style.html" - } - ] - }, - { - "biome": [ + "name": "import/no-named-default", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-named-default.html" + }, { - "name": "useArrowFunction", - "url": "https://biomejs.dev/linter/rules/useArrowFunction" - } - ], - "eslint": [ + "name": "import/no-named-as-default", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-named-as-default.html" + }, { - "name": "prefer-arrow-callback", - "url": "https://eslint.org/docs/latest/rules/prefer-arrow-callback" + "name": "import/no-named-as-default-member", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-named-as-default-member.html" } - ], - "flint": { - "name": "arrowCallbacks", - "plugin": "ts", - "preset": "Not implementing" - } + ] }, { "biome": [ { - "name": "useAsConstAssertion", - "url": "https://biomejs.dev/linter/rules/useAsConstAssertion" + "name": "useDefaultParameterLast", + "url": "https://biomejs.dev/linter/rules/useDefaultParameterLast" } ], "deno": [ { - "name": "prefer-as-const", - "url": "https://docs.deno.com/lint/rules/prefer-as-const" + "name": "default-param-last", + "url": "https://docs.deno.com/lint/rules/default-param-last" } ], "eslint": [ { - "name": "@typescript-eslint/prefer-as-const", - "url": "https://typescript-eslint.io/rules/prefer-as-const" - } - ], - "flint": { - "name": "asConstAssertions", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ + "name": "default-param-last", + "url": "https://eslint.org/docs/latest/rules/default-param-last" + }, { - "name": "typescript/prefer-as-const", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-as-const.html" + "name": "@typescript-eslint/default-param-last", + "url": "https://typescript-eslint.io/rules/default-param-last" } - ] - }, - { + ], "flint": { - "name": "assignmentOperationRefactors", + "name": "defaultParameterLast", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped" }, "oxlint": [ { - "name": "oxc/misrefactored-assign-op", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/misrefactored-assign-op.html" + "name": "eslint/default-param-last", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default-param-last.html" } ] }, { "eslint": [ { - "name": "logical-assignment-operators", - "url": "https://eslint.org/docs/latest/rules/logical-assignment-operators" + "name": "unicorn/prefer-default-parameters", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-default-parameters.md" } ], "flint": { - "name": "assignmentOperatorShorthands", + "name": "defaultParameterReassignments", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" } }, { - "flint": { - "name": "asyncAwaitStatements", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "eslint": [ { - "name": "oxc/no-async-await", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-async-await.html" + "name": "@typescript-eslint/no-deprecated", + "url": "https://typescript-eslint.io/rules/no-deprecated" } - ] + ], + "flint": { + "name": "deprecated", + "plugin": "ts", + "preset": "logical" + } }, { - "biome": [ - { - "name": "useAwait", - "url": "https://biomejs.dev/linter/rules/useAwait" - } - ], - "deno": [ - { - "name": "require-await", - "url": "https://docs.deno.com/lint/rules/require-await" - } - ], "eslint": [ { - "name": "require-await", - "url": "https://eslint.org/docs/latest/rules/require-await" + "name": "prefer-destructuring", + "url": "https://eslint.org/docs/latest/rules/prefer-destructuring" }, { - "name": "@typescript-eslint/require-await", - "url": "https://typescript-eslint.io/rules/require-await" + "name": "@typescript-eslint/prefer-destructuring", + "url": "https://typescript-eslint.io/rules/prefer-destructuring" } ], "flint": { - "name": "asyncFunctionAwaits", + "name": "destructuring", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/require-await", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/require-await.html" - }, - { - "name": "typescript/require-await", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/require-await.html" + "name": "eslint/prefer-destructuring", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-destructuring.html" } ] }, { - "biome": [ - { - "name": "noAsyncPromiseExecutor", - "url": "https://biomejs.dev/linter/rules/noAsyncPromiseExecutor" - } - ], - "deno": [ + "eslint": [ { - "name": "no-async-promise-executor", - "url": "https://docs.deno.com/lint/rules/no-async-promise-executor" + "name": "unicorn/consistent-destructuring", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-destructuring.md" } ], + "flint": { + "name": "destructuringConsistency", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-async-promise-executor", - "url": "https://eslint.org/docs/latest/rules/no-async-promise-executor" + "name": "unicorn/no-abusive-eslint-disable", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-abusive-eslint-disable.md" } ], "flint": { - "implemented": true, - "name": "asyncPromiseExecutors", + "name": "directiveDisableSelectors", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, + "notes": "Core requires explicit disables", "oxlint": [ { - "name": "eslint/no-async-promise-executor", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-async-promise-executor.html" + "name": "unicorn/no-abusive-eslint-disable", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-abusive-eslint-disable.html" } ] }, { "eslint": [ { - "name": "unicorn/no-useless-promise-resolve-reject", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-promise-resolve-reject.md" + "name": "@eslint-community/eslint-comments/no-duplicate-disable", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], "flint": { - "name": "asyncUnnecessaryPromiseWrappers", + "name": "directiveDuplicateDisables", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/no-useless-promise-resolve-reject", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-promise-resolve-reject.html" - } - ] + "notes": "Core detects duplicate disables" }, { - "biome": [ + "eslint": [ { - "name": "useAtIndex", - "url": "https://biomejs.dev/linter/rules/useAtIndex" + "name": "@eslint-community/eslint-comments/no-aggregating-enable", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], + "flint": { + "name": "directiveMisleadingEnables", + "plugin": "ts", + "status": "skipped" + }, + "notes": "Core requires explicit enables" + }, + { "eslint": [ { - "name": "unicorn/prefer-at", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-at.md" + "name": "@eslint-community/eslint-comments/disable-enable-pair", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], "flint": { - "name": "atAccesses", + "name": "directivePairs", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical", + "strictness": "strict" } }, { "eslint": [ { - "name": "require-atomic-updates", - "url": "https://eslint.org/docs/latest/rules/require-atomic-updates" + "name": "@eslint-community/eslint-comments/require-description", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], "flint": { - "name": "atomicUpdates", + "name": "directiveRequireDescriptions", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" } }, { "eslint": [ { - "name": "unicorn/no-await-in-promise-methods", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-await-in-promise-methods.md" + "name": "@eslint-community/eslint-comments/no-restricted-disable", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], "flint": { - "name": "awaitInsidePromiseMethods", + "name": "directiveRestrictedDisables", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/no-await-in-promise-methods", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-await-in-promise-methods.html" - } - ] + "status": "skipped" + } }, { - "eslint": [ + "deno": [ { - "name": "unicorn/no-await-expression-member", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-await-expression-member.md" + "name": "ban-untagged-ignore", + "url": "https://docs.deno.com/lint/rules/ban-untagged-ignore" } ], "flint": { - "name": "awaitMemberAccesses", + "name": "directiveSelectors", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/no-await-expression-member", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-await-expression-member.html" - } - ] + "notes": "Handled by Flint core" }, { - "eslint": [ - { - "name": "@typescript-eslint/await-thenable", - "url": "https://typescript-eslint.io/rules/await-thenable" - }, + "deno": [ { - "name": "unicorn/no-unnecessary-await", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-await.md" + "name": "ban-unknown-rule-code", + "url": "https://docs.deno.com/lint/rules/ban-unknown-rule-code" } ], "flint": { - "name": "awaitThenable", + "name": "directiveUnknownRules", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/await-thenable", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/await-thenable.html" - }, - { - "name": "unicorn/no-unnecessary-await", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unnecessary-await.html" - } - ] + "notes": "Handled by Flint core" }, { - "flint": { - "name": "barrelFiles", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "eslint": [ { - "name": "oxc/no-barrel-file", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-barrel-file.html" + "name": "@eslint-community/eslint-comments/no-unlimited-disable", + "url": "https://eslint-community.github.io/eslint-comments.html" } - ] - }, - { + ], "flint": { - "name": "bitwiseOperatorLogic", + "name": "directiveUnlimitedDisables", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "oxlint": [ - { - "name": "oxc/bad-bitwise-operator", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-bitwise-operator.html" - } - ] + "notes": "Core requires explicit disables" }, { - "biome": [ + "deno": [ { - "name": "noBitwiseOperators", - "url": "https://biomejs.dev/linter/rules/noBitwiseOperators" + "name": "ban-unused-ignore", + "url": "https://docs.deno.com/lint/rules/ban-unused-ignore" } ], + "flint": { + "name": "directiveUnused", + "plugin": "ts", + "status": "skipped" + }, + "notes": "Handled by Flint core" + }, + { "eslint": [ { - "name": "no-bitwise", - "url": "https://eslint.org/docs/latest/rules/no-bitwise" + "name": "@eslint-community/eslint-comments/no-unused-disable", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], "flint": { - "name": "bitwiseOperators", + "name": "directiveUnusedDisables", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-bitwise", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-bitwise.html" - } - ] + "notes": "Core detects unused disables" }, { - "biome": [ - { - "name": "useBlockStatements", - "url": "https://biomejs.dev/linter/rules/useBlockStatements" - } - ], "eslint": [ { - "name": "curly", - "url": "https://eslint.org/docs/latest/rules/curly" + "name": "@eslint-community/eslint-comments/no-unused-enable", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], "flint": { - "name": "blockStatements", + "name": "directiveUnusedEnables", "plugin": "ts", - "preset": "Not implementing", - "strictness": "Strict" + "status": "skipped" }, - "notes": "Superseded by prettier-plugin-curly", - "oxlint": [ - { - "name": "eslint/curly", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/curly.html" - } - ] + "notes": "Core detects unused enables" }, { + "biome": [ + { + "name": "noDuplicateParameters", + "url": "https://biomejs.dev/linter/rules/noDuplicateParameters" + } + ], "deno": [ { - "name": "no-boolean-literal-for-arguments", - "url": "https://docs.deno.com/lint/rules/no-boolean-literal-for-arguments" + "name": "no-dupe-args", + "url": "https://docs.deno.com/lint/rules/no-dupe-args" + } + ], + "eslint": [ + { + "name": "no-dupe-args", + "url": "https://eslint.org/docs/latest/rules/no-dupe-args" } ], "flint": { - "name": "booleanLiteralParameterComments", + "name": "duplicateArguments", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped", + "status": "implemented" } }, { "eslint": [ { - "name": "unicorn/prefer-native-coercion-functions", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-native-coercion-functions.md" + "name": "@typescript-eslint/no-dynamic-delete", + "url": "https://typescript-eslint.io/rules/no-dynamic-delete" } ], "flint": { - "name": "builtinCoercions", + "name": "dynamicDeletes", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical" }, "oxlint": [ { - "name": "unicorn/prefer-native-coercion-functions", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-native-coercion-functions.html" + "name": "typescript/no-dynamic-delete", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-dynamic-delete.html" } ] }, { "biome": [ { - "name": "noInvalidBuiltinInstantiation", - "url": "https://biomejs.dev/linter/rules/noInvalidBuiltinInstantiation" + "name": "noDuplicateElseIf", + "url": "https://biomejs.dev/linter/rules/noDuplicateElseIf" } ], "eslint": [ { - "name": "unicorn/new-for-builtins", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/new-for-builtins.md" + "name": "no-dupe-else-if", + "url": "https://eslint.org/docs/latest/rules/no-dupe-else-if" } ], "flint": { - "name": "builtinConstructorNews", + "name": "elseIfDuplicates", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/new-for-builtins", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/new-for-builtins.html" + "name": "eslint/no-dupe-else-if", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-dupe-else-if.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "unicorn/prefer-prototype-methods", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-prototype-methods.md" + "name": "noUselessElse", + "url": "https://biomejs.dev/linter/rules/noUselessElse" } ], - "flint": { - "name": "builtinPrototypeMethodAccesses", - "plugin": "ts", - "preset": "Not implementing", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/prefer-prototype-methods", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-prototype-methods.html" - } - ] - }, - { "eslint": [ { - "name": "new-cap", - "url": "https://eslint.org/docs/latest/rules/new-cap" + "name": "no-else-return", + "url": "https://eslint.org/docs/latest/rules/no-else-return" } ], "flint": { - "name": "capitalizedConstructors", + "name": "elseReturns", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "eslint/new-cap", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/new-cap.html" + "name": "eslint/no-else-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-else-return.html" } ] }, { "biome": [ { - "name": "noSwitchDeclarations", - "url": "https://biomejs.dev/linter/rules/noSwitchDeclarations" + "name": "noEmptyBlockStatements", + "url": "https://biomejs.dev/linter/rules/noEmptyBlockStatements" } ], "deno": [ { - "name": "no-case-declarations", - "url": "https://docs.deno.com/lint/rules/no-case-declarations" + "name": "no-empty", + "url": "https://docs.deno.com/lint/rules/no-empty" } ], "eslint": [ { - "name": "no-case-declarations", - "url": "https://eslint.org/docs/latest/rules/no-case-declarations" + "name": "no-empty", + "url": "https://eslint.org/docs/latest/rules/no-empty" } ], "flint": { - "implemented": true, - "name": "caseDeclarations", + "name": "emptyBlocks", "plugin": "ts", - "preset": "Untyped" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/no-case-declarations", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-case-declarations.html" + "name": "eslint/no-empty", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty.html" } ] }, { "biome": [ { - "name": "noDuplicateCase", - "url": "https://biomejs.dev/linter/rules/noDuplicateCase" + "name": "noEmptyPattern", + "url": "https://biomejs.dev/linter/rules/noEmptyPattern" } ], "deno": [ { - "name": "no-duplicate-case", - "url": "https://docs.deno.com/lint/rules/no-duplicate-case" + "name": "no-empty-pattern", + "url": "https://docs.deno.com/lint/rules/no-empty-pattern" } ], "eslint": [ { - "name": "no-duplicate-case", - "url": "https://eslint.org/docs/latest/rules/no-duplicate-case" + "name": "no-empty-pattern", + "url": "https://eslint.org/docs/latest/rules/no-empty-pattern" } ], "flint": { - "implemented": true, - "name": "caseDuplicates", + "name": "emptyDestructures", "plugin": "ts", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/no-duplicate-case", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-duplicate-case.html" + "name": "eslint/no-empty-pattern", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty-pattern.html" } ] }, { - "biome": [ + "deno": [ { - "name": "noFallthroughSwitchClause", - "url": "https://biomejs.dev/linter/rules/noFallthroughSwitchClause" + "name": "no-empty-enum", + "url": "https://docs.deno.com/lint/rules/no-empty-enum" } ], - "deno": [ + "flint": { + "name": "emptyEnums", + "plugin": "ts", + "preset": "logical" + } + }, + { + "biome": [ { - "name": "no-fallthrough", - "url": "https://docs.deno.com/lint/rules/no-fallthrough" + "name": "noUselessEmptyExport", + "url": "https://biomejs.dev/linter/rules/noUselessEmptyExport" } ], "eslint": [ { - "name": "no-fallthrough", - "url": "https://eslint.org/docs/latest/rules/no-fallthrough" + "name": "@typescript-eslint/no-useless-empty-export", + "url": "https://typescript-eslint.io/rules/no-useless-empty-export" } ], "flint": { - "name": "caseFallthroughs", + "name": "emptyExports", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-fallthrough", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-fallthrough.html" + "name": "typescript/no-useless-empty-export", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-useless-empty-export.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/use-unknown-in-catch-callback-variable", - "url": "https://typescript-eslint.io/rules/use-unknown-in-catch-callback-variable" + "name": "unicorn/no-empty-file", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-empty-file.md" } ], "flint": { - "name": "catchCallbackTypes", + "name": "emptyFiles", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "typescript/use-unknown-in-catch-callback-variable", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/use-unknown-in-catch-callback-variable.html" + "name": "unicorn/no-empty-file", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-empty-file.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "preserve-caught-error", - "url": "https://eslint.org/docs/latest/rules/preserve-caught-error" + "name": "noEmptyBlockStatements", + "url": "https://biomejs.dev/linter/rules/noEmptyBlockStatements" } ], - "flint": { - "name": "caughtErrorCauses", - "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "unicorn/catch-error-name", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/catch-error-name.md" + "name": "no-empty-function", + "url": "https://eslint.org/docs/latest/rules/no-empty-function" + }, + { + "name": "@typescript-eslint/no-empty-function", + "url": "https://typescript-eslint.io/rules/no-empty-function" } ], "flint": { - "name": "caughtVariableNames", + "name": "emptyFunctions", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "unicorn/catch-error-name", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/catch-error-name.html" + "name": "eslint/no-empty-function", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty-function.html" } ] }, { "eslint": [ { - "name": "no-multi-assign", - "url": "https://eslint.org/docs/latest/rules/no-multi-assign" + "name": "unicorn/require-module-attributes", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-module-attributes.md" } ], "flint": { - "implemented": true, - "name": "chainedAssignments", + "name": "emptyModuleAttributes", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/no-multi-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-multi-assign.html" - } - ] + "preset": "stylistic" + } }, { + "biome": [ + { + "name": "noBannedTypes", + "url": "https://biomejs.dev/linter/rules/noBannedTypes" + } + ], + "deno": [ + { + "name": "ban-types", + "url": "https://docs.deno.com/lint/rules/ban-types" + }, + { + "name": "no-empty-interface", + "url": "https://docs.deno.com/lint/rules/no-empty-interface" + } + ], + "eslint": [ + { + "name": "@typescript-eslint/no-empty-object-type", + "url": "https://typescript-eslint.io/rules/no-empty-object-type" + } + ], "flint": { - "name": "charAtComparisons", + "name": "emptyObjectTypes", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "oxc/bad-char-at-comparison", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-char-at-comparison.html" + "name": "typescript/ban-types", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/ban-types.html" + }, + { + "name": "typescript/no-empty-object-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-empty-object-type.html" + }, + { + "name": "typescript/no-empty-interface", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-empty-interface.html" } ] }, { "biome": [ { - "name": "noClassAssign", - "url": "https://biomejs.dev/linter/rules/noClassAssign" - } - ], - "deno": [ - { - "name": "no-case-assign", - "url": "https://docs.deno.com/lint/rules/no-case-assign" + "name": "noEmptyBlockStatements", + "url": "https://biomejs.dev/linter/rules/noEmptyBlockStatements" } ], "eslint": [ { - "name": "no-class-assign", - "url": "https://eslint.org/docs/latest/rules/no-class-assign" + "name": "no-empty-static-block", + "url": "https://eslint.org/docs/latest/rules/no-empty-static-block" } ], "flint": { - "implemented": true, - "name": "classAssignments", + "name": "emptyStaticBlocks", "plugin": "ts", - "preset": "Untyped" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/no-class-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-class-assign.html" + "name": "eslint/no-empty-static-block", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty-static-block.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "unicorn/prefer-class-fields", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-class-fields.md" + "name": "noEmptyTypeParameters", + "url": "https://biomejs.dev/linter/rules/noEmptyTypeParameters" } ], "flint": { - "name": "classFieldDeclarations", + "name": "emptyTypeParameterLists", "plugin": "ts", - "preset": "Untyped" + "preset": "stylistic" } }, { "eslint": [ { - "name": "@typescript-eslint/class-literal-property-style", - "url": "https://typescript-eslint.io/rules/class-literal-property-style" + "name": "unicorn/prefer-ternary", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-ternary.md" } ], "flint": { - "name": "classLiteralProperties", + "name": "endingTernaryIfElses", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" } }, { "biome": [ { - "name": "noDuplicateClassMembers", - "url": "https://biomejs.dev/linter/rules/noDuplicateClassMembers" - } - ], - "deno": [ - { - "name": "no-dupe-class-members", - "url": "https://docs.deno.com/lint/rules/no-dupe-class-members" + "name": "useEnumInitializers", + "url": "https://biomejs.dev/linter/rules/useEnumInitializers" } ], "eslint": [ { - "name": "no-dupe-class-members", - "url": "https://eslint.org/docs/latest/rules/no-dupe-class-members" - }, - { - "name": "@typescript-eslint/no-dupe-class-members", - "url": "https://typescript-eslint.io/rules/no-dupe-class-members" + "name": "@typescript-eslint/prefer-enum-initializers", + "url": "https://typescript-eslint.io/rules/prefer-enum-initializers" } ], "flint": { - "name": "classMemberDuplicates", + "name": "enumInitializers", "plugin": "ts", - "preset": "Untyped" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-dupe-class-members", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-dupe-class-members.html" + "name": "typescript/prefer-enum-initializers", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-enum-initializers.html" } ] }, { - "eslint": [ - { - "name": "class-methods-use-this", - "url": "https://eslint.org/docs/latest/rules/class-methods-use-this" - }, + "biome": [ { - "name": "@typescript-eslint/class-methods-use-this", - "url": "https://typescript-eslint.io/rules/class-methods-use-this" + "name": "useLiteralEnumMembers", + "url": "https://biomejs.dev/linter/rules/useLiteralEnumMembers" } ], - "flint": { - "name": "classMethodsThis", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "unicorn/prefer-single-call", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-single-call.md" + "name": "@typescript-eslint/prefer-literal-enum-member", + "url": "https://typescript-eslint.io/rules/prefer-literal-enum-member" } ], "flint": { - "name": "combinedPushes", + "name": "enumMemberLiterals", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical" }, - "notes": "Just for Array#push(); the others would be their own rules" - }, - { - "eslint": [ + "oxlint": [ { - "name": "capitalized-comments", - "url": "https://eslint.org/docs/latest/rules/capitalized-comments" + "name": "typescript/prefer-literal-enum-member", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-literal-enum-member.html" } - ], - "flint": { - "name": "commentCapitalization", - "plugin": "ts", - "preset": "Not implementing" - } + ] }, { "eslint": [ { - "name": "no-warning-comments", - "url": "https://eslint.org/docs/latest/rules/no-warning-comments" + "name": "@typescript-eslint/no-misused-spread", + "url": "https://typescript-eslint.io/rules/no-misused-spread" } ], "flint": { - "name": "commentWarnings", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { - "flint": { - "name": "comparisonSequences", + "name": "enumMixedValues", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, - "notes": "Handled by TypeScript / otherwise is stylistic" - }, - { - "biome": [ - { - "name": "noAssignInExpressions", - "url": "https://biomejs.dev/linter/rules/noAssignInExpressions" - } - ], - "deno": [ + "oxlint": [ { - "name": "no-cond-assign", - "url": "https://docs.deno.com/lint/rules/no-cond-assign" + "name": "typescript/no-misused-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-misused-spread.html" } - ], + ] + }, + { "eslint": [ { - "name": "no-cond-assign", - "url": "https://eslint.org/docs/latest/rules/no-cond-assign" + "name": "@typescript-eslint/no-mixed-enums", + "url": "https://typescript-eslint.io/rules/no-mixed-enums" } ], "flint": { - "name": "conditionalAssignments", + "name": "enumValueConsistency", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, - "notes": "Superseded by unnecessaryConditions", "oxlint": [ { - "name": "eslint/no-cond-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-cond-assign.html" + "name": "typescript/no-mixed-enums", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-mixed-enums.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "noNegationElse", - "url": "https://biomejs.dev/linter/rules/noNegationElse" + "name": "@typescript-eslint/no-duplicate-enum-values", + "url": "https://typescript-eslint.io/rules/no-duplicate-enum-values" } ], - "eslint": [ + "flint": { + "name": "enumValueDuplicates", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ { - "name": "no-negated-condition", - "url": "https://eslint.org/docs/latest/rules/no-negated-condition" - }, + "name": "typescript/no-duplicate-enum-values", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-duplicate-enum-values.html" + } + ] + }, + { + "eslint": [ { - "name": "unicorn/no-negated-condition", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-negated-condition.md" + "name": "unicorn/no-negation-in-equality-check", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-negation-in-equality-check.md" } ], "flint": { - "name": "conditionNegations", + "name": "equalityOperatorNegations", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-negated-condition", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-negated-condition.html" + "name": "unicorn/no-negation-in-equality-check", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-negation-in-equality-check.html" } ] }, { "biome": [ { - "name": "noYodaExpression", - "url": "https://biomejs.dev/linter/rules/noYodaExpression" + "name": "noDoubleEquals", + "url": "https://biomejs.dev/linter/rules/noDoubleEquals" + } + ], + "deno": [ + { + "name": "eqeqeq", + "url": "https://docs.deno.com/lint/rules/eqeqeq" } ], "eslint": [ { - "name": "yoda", - "url": "https://eslint.org/docs/latest/rules/yoda" + "name": "eqeqeq", + "url": "https://eslint.org/docs/latest/rules/eqeqeq" } ], "flint": { - "name": "conditionOrdering", + "name": "equalityOperators", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, + "notes": "Default ESLint's \"smart\" to true", "oxlint": [ { - "name": "eslint/yoda", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/yoda.html" + "name": "eslint/eqeqeq", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/eqeqeq.html" } ] }, { "biome": [ { - "name": "noExtraNonNullAssertion", - "url": "https://biomejs.dev/linter/rules/noExtraNonNullAssertion" - } - ], - "deno": [ - { - "name": "no-extra-non-null-assertion", - "url": "https://docs.deno.com/lint/rules/no-extra-non-null-assertion" + "name": "useErrorMessage", + "url": "https://biomejs.dev/linter/rules/useErrorMessage" } ], "eslint": [ { - "name": "@typescript-eslint/no-extra-non-null-assertion", - "url": "https://typescript-eslint.io/rules/no-extra-non-null-assertion" + "name": "unicorn/error-message", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/error-message.md" } ], "flint": { - "implemented": true, - "name": "consecutiveNonNullAssertions", + "name": "errorMessages", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical", + "strictness": "strict" }, "oxlint": [ { - "name": "typescript/no-extra-non-null-assertion", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-extra-non-null-assertion.html" + "name": "unicorn/error-message", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/error-message.html" } ] }, { "eslint": [ { - "name": "consistent-return", - "url": "https://eslint.org/docs/latest/rules/consistent-return" - }, - { - "name": "@typescript-eslint/consistent-return", - "url": "https://typescript-eslint.io/rules/consistent-return" + "name": "unicorn/custom-error-definition", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/custom-error-definition.md" } ], "flint": { - "name": "consistentReturns", + "name": "errorSubclassProperties", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "strictness": "strict" } }, { - "biome": [ - { - "name": "noConsole", - "url": "https://biomejs.dev/linter/rules/noConsole" - } - ], - "deno": [ + "eslint": [ { - "name": "no-console", - "url": "https://docs.deno.com/lint/rules/no-console" + "name": "unicorn/no-useless-error-capture-stack-trace", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-error-capture-stack-trace.md" } ], + "flint": { + "name": "errorUnnecessaryCaptureStackTraces", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-console", - "url": "https://eslint.org/docs/latest/rules/no-console" + "name": "unicorn/escape-case", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/escape-case.md" } ], "flint": { - "name": "consoleCalls", + "name": "escapeSequenceCasing", "plugin": "ts", - "preset": "None" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "eslint/no-console", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-console.html" + "name": "unicorn/escape-case", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/escape-case.html" } ] }, { "biome": [ { - "name": "noConstAssign", - "url": "https://biomejs.dev/linter/rules/noConstAssign" + "name": "noGlobalEval", + "url": "https://biomejs.dev/linter/rules/noGlobalEval" } ], "deno": [ { - "name": "no-const-assign", - "url": "https://docs.deno.com/lint/rules/no-const-assign" + "name": "no-eval", + "url": "https://docs.deno.com/lint/rules/no-eval" } ], "eslint": [ { - "name": "no-const-assign", - "url": "https://eslint.org/docs/latest/rules/no-const-assign" + "name": "no-eval", + "url": "https://eslint.org/docs/latest/rules/no-eval" } ], "flint": { - "implemented": true, - "name": "constantAssignments", + "name": "evals", "plugin": "ts", - "preset": "Untyped" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-const-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-const-assign.html" + "name": "eslint/no-eval", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-eval.html" } ] }, { "biome": [ { - "name": "noConstantBinaryExpressions", - "url": "https://biomejs.dev/linter/rules/noConstantBinaryExpressions" - } - ], - "eslint": [ - { - "name": "no-constant-binary-expression", - "url": "https://eslint.org/docs/latest/rules/no-constant-binary-expression" + "name": "noImplicitAnyLet", + "url": "https://biomejs.dev/linter/rules/noImplicitAnyLet" } ], "flint": { - "name": "constantBinaryExpressions", + "name": "evolvingVariableTypes", "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Superseded by unnecessaryConditions", - "oxlint": [ - { - "name": "eslint/no-constant-binary-expression", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-constant-binary-expression.html" - } - ] + "status": "skipped" + } }, { "biome": [ { - "name": "noConstantCondition", - "url": "https://biomejs.dev/linter/rules/noConstantCondition" + "name": "noCatchAssign", + "url": "https://biomejs.dev/linter/rules/noCatchAssign" } ], "deno": [ { - "name": "no-constant-condition", - "url": "https://docs.deno.com/lint/rules/no-constant-condition" + "name": "no-ex-assign", + "url": "https://docs.deno.com/lint/rules/no-ex-assign" } ], "eslint": [ { - "name": "no-constant-condition", - "url": "https://eslint.org/docs/latest/rules/no-constant-condition" + "name": "no-ex-assign", + "url": "https://eslint.org/docs/latest/rules/no-ex-assign" } ], "flint": { - "name": "constantConditions", + "name": "exceptionAssignments", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "status": "implemented" }, - "notes": "Superseded by unnecessaryConditions", "oxlint": [ { - "name": "eslint/no-constant-condition", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-constant-condition.html" + "name": "eslint/no-ex-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-ex-assign.html" } ] }, { "biome": [ { - "name": "noConstEnum", - "url": "https://biomejs.dev/linter/rules/noConstEnum" + "name": "noExplicitAny", + "url": "https://biomejs.dev/linter/rules/noExplicitAny" } ], - "flint": { - "name": "constEnums", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { - "biome": [ + "deno": [ { - "name": "noConstructorReturn", - "url": "https://biomejs.dev/linter/rules/noConstructorReturn" + "name": "no-explicit-any", + "url": "https://docs.deno.com/lint/rules/no-explicit-any" } ], "eslint": [ { - "name": "no-constructor-return", - "url": "https://eslint.org/docs/latest/rules/no-constructor-return" + "name": "@typescript-eslint/no-explicit-any", + "url": "https://typescript-eslint.io/rules/no-explicit-any" } ], "flint": { - "implemented": true, - "name": "constructorReturns", + "name": "explicitAnys", "plugin": "ts", - "preset": "Untyped" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-constructor-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-constructor-return.html" + "name": "typescript/no-explicit-any", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-explicit-any.html" } ] }, { "biome": [ { - "name": "noInvalidConstructorSuper", - "url": "https://biomejs.dev/linter/rules/noInvalidConstructorSuper" + "name": "useExponentiationOperator", + "url": "https://biomejs.dev/linter/rules/useExponentiationOperator" } ], - "deno": [ + "eslint": [ { - "name": "constructor-super", - "url": "https://docs.deno.com/lint/rules/constructor-super" + "name": "prefer-exponentiation-operator", + "url": "https://eslint.org/docs/latest/rules/prefer-exponentiation-operator" } ], + "flint": { + "name": "exponentiationOperators", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "eslint/prefer-exponentiation-operator", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-exponentiation-operator.html" + } + ] + }, + { "eslint": [ { - "name": "constructor-super", - "url": "https://eslint.org/docs/latest/rules/constructor-super" + "name": "import/prefer-default-export", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/prefer-default-export.md" } ], "flint": { - "name": "constructorSupers", + "name": "exportDefault", "plugin": "ts", - "preset": "Untyped" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "import/prefer-default-export", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/prefer-default-export.html" + } + ] }, { "biome": [ { - "name": "useConst", - "url": "https://biomejs.dev/linter/rules/useConst" - } - ], - "deno": [ - { - "name": "prefer-const", - "url": "https://docs.deno.com/lint/rules/prefer-const" + "name": "noExportedImports", + "url": "https://biomejs.dev/linter/rules/noExportedImports" } ], "eslint": [ { - "name": "prefer-const", - "url": "https://eslint.org/docs/latest/rules/prefer-const" + "name": "unicorn/prefer-export-from", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-export-from.md" } ], "flint": { - "name": "constVariables", + "name": "exportFromImports", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { "eslint": [ { - "name": "no-continue", - "url": "https://eslint.org/docs/latest/rules/no-continue" + "name": "import/group-exports", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/group-exports.md" } ], "flint": { - "name": "continues", + "name": "exportGroups", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-continue", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-continue.html" + "name": "import/group-exports", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/group-exports.html" } ] }, { "eslint": [ { - "name": "unicorn/consistent-date-clone", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-date-clone.md" + "name": "import/exports-last", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/exports-last.md" } ], "flint": { - "name": "dateConstructorClones", + "name": "exportLast", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, - "notes": "unicorn/consistent-date-clone" - }, - { - "biome": [ + "oxlint": [ { - "name": "useDateNow", - "url": "https://biomejs.dev/linter/rules/useDateNow" + "name": "import/exports-last", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/exports-last.html" } - ], + ] + }, + { "eslint": [ { - "name": "unicorn/prefer-date-now", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-date-now.md" + "name": "import/no-mutable-exports", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-mutable-exports.md" } ], "flint": { - "name": "dateNowTimestamps", + "name": "exportMutables", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical" }, "oxlint": [ { - "name": "unicorn/prefer-date-now", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-date-now.html" + "name": "import/no-mutable-exports", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-mutable-exports.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "noDebugger", - "url": "https://biomejs.dev/linter/rules/noDebugger" + "name": "import/exports", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/exports.md" } ], + "flint": { + "name": "exportUniqueNames", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "import/exports", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/exports.html" + } + ] + }, + { "deno": [ { - "name": "no-debugger", - "url": "https://docs.deno.com/lint/rules/no-debugger" + "name": "no-external-import", + "url": "https://docs.deno.com/lint/rules/no-external-import" } ], + "flint": { + "name": "externalHttpImports", + "plugin": "ts", + "status": "skipped" + } + }, + { "eslint": [ { - "name": "no-debugger", - "url": "https://eslint.org/docs/latest/rules/no-debugger" + "name": "@typescript-eslint/no-extraneous-class", + "url": "https://typescript-eslint.io/rules/no-extraneous-class" } ], "flint": { - "implemented": true, - "name": "debuggerStatements", + "name": "extraneousClasses", "plugin": "ts", - "preset": "Logical" + "preset": "logical", + "strictness": "strict" }, "oxlint": [ { - "name": "eslint/no-debugger", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-debugger.html" + "name": "typescript/no-extraneous-class", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-extraneous-class.html" } ] }, { - "biome": [ - { - "name": "useDefaultSwitchClauseLast", - "url": "https://biomejs.dev/linter/rules/useDefaultSwitchClauseLast" - } - ], "eslint": [ { - "name": "default-case-last", - "url": "https://eslint.org/docs/latest/rules/default-case-last" + "name": "unicorn/no-invalid-fetch-options", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-invalid-fetch-options.md" } ], "flint": { - "implemented": true, - "name": "defaultCaseLast", + "name": "fetchMethodBodies", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/default-case-last", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default-case-last.html" + "name": "unicorn/no-invalid-fetch-options", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-invalid-fetch-options.html" } ] }, { "biome": [ { - "name": "useDefaultSwitchClause", - "url": "https://biomejs.dev/linter/rules/useDefaultSwitchClause" + "name": "useFilenamingConvention", + "url": "https://biomejs.dev/linter/rules/useFilenamingConvention" } ], "eslint": [ { - "name": "default-case", - "url": "https://eslint.org/docs/latest/rules/default-case" + "name": "unicorn/filename-case", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/filename-case.md" } ], "flint": { - "name": "defaultCases", + "name": "filenameCasing", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/default-case", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default-case.html" + "name": "unicorn/filename-case", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/filename-case.html" } ] }, { + "biome": [ + { + "name": "noFloatingPromises", + "url": "https://biomejs.dev/linter/rules/noFloatingPromises" + } + ], "eslint": [ { - "name": "unicorn/no-named-default", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-named-default.md" + "name": "@typescript-eslint/noFloatingPromises", + "url": "https://typescript-eslint.io/rules/noFloatingPromises" } ], "flint": { - "name": "defaultImportRenames", + "name": "floatingPromises", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "import/no-named-default", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-named-default.html" - }, - { - "name": "import/no-named-as-default", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-named-as-default.html" - }, - { - "name": "import/no-named-as-default-member", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-named-as-default-member.html" + "name": "typescript/noFloatingPromises", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/noFloatingPromises.html" } ] }, { "biome": [ { - "name": "useDefaultParameterLast", - "url": "https://biomejs.dev/linter/rules/useDefaultParameterLast" + "name": "useValidForDirection", + "url": "https://biomejs.dev/linter/rules/useValidForDirection" } ], "deno": [ { - "name": "default-param-last", - "url": "https://docs.deno.com/lint/rules/default-param-last" + "name": "for-direction", + "url": "https://docs.deno.com/lint/rules/for-direction" } ], "eslint": [ { - "name": "default-param-last", - "url": "https://eslint.org/docs/latest/rules/default-param-last" - }, - { - "name": "@typescript-eslint/default-param-last", - "url": "https://typescript-eslint.io/rules/default-param-last" + "name": "for-direction", + "url": "https://eslint.org/docs/latest/rules/for-direction" } ], "flint": { - "name": "defaultParameterLast", + "name": "forDirections", "plugin": "ts", - "preset": "Untyped" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/default-param-last", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default-param-last.html" + "name": "eslint/for-direction", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/for-direction.html" } ] }, { "eslint": [ { - "name": "unicorn/prefer-default-parameters", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-default-parameters.md" + "name": "@typescript-eslint/no-for-in-array", + "url": "https://typescript-eslint.io/rules/no-for-in-array" } ], "flint": { - "name": "defaultParameterReassignments", + "name": "forInArrays", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "typescript/no-for-in-array", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-for-in-array.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "@typescript-eslint/no-deprecated", - "url": "https://typescript-eslint.io/rules/no-deprecated" + "name": "useGuardForIn", + "url": "https://biomejs.dev/linter/rules/useGuardForIn" } ], - "flint": { - "name": "deprecated", - "plugin": "ts", - "preset": "Logical" - } - }, - { - "eslint": [ + "deno": [ { - "name": "prefer-destructuring", - "url": "https://eslint.org/docs/latest/rules/prefer-destructuring" - }, + "name": "guard-for-in", + "url": "https://docs.deno.com/lint/rules/guard-for-in" + } + ], + "eslint": [ { - "name": "@typescript-eslint/prefer-destructuring", - "url": "https://typescript-eslint.io/rules/prefer-destructuring" + "name": "guard-for-in", + "url": "https://eslint.org/docs/latest/rules/guard-for-in" } ], "flint": { - "name": "destructuring", + "name": "forInGuards", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/prefer-destructuring", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-destructuring.html" + "name": "eslint/guard-for-in", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/guard-for-in.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "unicorn/consistent-destructuring", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-destructuring.md" + "name": "noFunctionAssign", + "url": "https://biomejs.dev/linter/rules/noFunctionAssign" + } + ], + "deno": [ + { + "name": "no-func-assign", + "url": "https://docs.deno.com/lint/rules/no-func-assign" } ], - "flint": { - "name": "destructuringConsistency", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "unicorn/no-abusive-eslint-disable", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-abusive-eslint-disable.md" + "name": "no-func-assign", + "url": "https://eslint.org/docs/latest/rules/no-func-assign" } ], "flint": { - "name": "directiveDisableSelectors", + "name": "functionAssignments", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped", + "status": "implemented" }, - "notes": "Core requires explicit disables", "oxlint": [ { - "name": "unicorn/no-abusive-eslint-disable", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-abusive-eslint-disable.html" + "name": "eslint/no-func-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-func-assign.html" } ] }, { "eslint": [ { - "name": "@eslint-community/eslint-comments/no-duplicate-disable", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "prefer-spread", + "url": "https://eslint.org/docs/latest/rules/prefer-spread" + }, + { + "name": "unicorn/prefer-spread", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-spread.md" } ], "flint": { - "name": "directiveDuplicateDisables", + "name": "functionCallSpreads", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" }, - "notes": "Core detects duplicate disables" + "oxlint": [ + { + "name": "eslint/prefer-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-spread.html" + }, + { + "name": "unicorn/prefer-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-spread.html" + } + ] }, { "eslint": [ { - "name": "@eslint-community/eslint-comments/no-aggregating-enable", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "func-style", + "url": "https://eslint.org/docs/latest/rules/func-style" } ], "flint": { - "name": "directiveMisleadingEnables", + "name": "functionDeclarationStyles", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "notes": "Core requires explicit enables" - }, - { - "eslint": [ + "oxlint": [ { - "name": "@eslint-community/eslint-comments/disable-enable-pair", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "eslint/func-style", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/func-style.html" } - ], - "flint": { - "name": "directivePairs", - "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" - } + ] }, { "eslint": [ { - "name": "@eslint-community/eslint-comments/require-description", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "unicorn/consistent-function-scoping", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-function-scoping.md" } ], "flint": { - "name": "directiveRequireDescriptions", + "name": "functionDefinitionScopeConsistency", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/consistent-function-scoping", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-function-scoping.html" + } + ] }, { "eslint": [ { - "name": "@eslint-community/eslint-comments/no-restricted-disable", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "func-name-matching", + "url": "https://eslint.org/docs/latest/rules/func-name-matching" } ], "flint": { - "name": "directiveRestrictedDisables", + "name": "functionNameMatches", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { - "deno": [ + "eslint": [ { - "name": "ban-untagged-ignore", - "url": "https://docs.deno.com/lint/rules/ban-untagged-ignore" + "name": "func-names", + "url": "https://eslint.org/docs/latest/rules/func-names" } ], "flint": { - "name": "directiveSelectors", + "name": "functionNames", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "notes": "Handled by Flint core" - }, - { - "deno": [ + "oxlint": [ { - "name": "ban-unknown-rule-code", - "url": "https://docs.deno.com/lint/rules/ban-unknown-rule-code" + "name": "eslint/func-names", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/func-names.html" } - ], - "flint": { - "name": "directiveUnknownRules", - "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Handled by Flint core" + ] }, { "eslint": [ { - "name": "@eslint-community/eslint-comments/no-unlimited-disable", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "no-new-func", + "url": "https://eslint.org/docs/latest/rules/no-new-func" } ], "flint": { - "name": "directiveUnlimitedDisables", + "name": "functionNewCalls", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "status": "implemented" }, - "notes": "Core requires explicit disables" + "oxlint": [ + { + "name": "eslint/no-new-func", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-new-func.html" + } + ] }, { + "biome": [ + { + "name": "useExplicitType", + "url": "https://biomejs.dev/linter/rules/useExplicitType" + } + ], "deno": [ { - "name": "ban-unused-ignore", - "url": "https://docs.deno.com/lint/rules/ban-unused-ignore" + "name": "explicit-function-return-type", + "url": "https://docs.deno.com/lint/rules/explicit-function-return-type" } ], - "flint": { - "name": "directiveUnused", - "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Handled by Flint core" - }, - { "eslint": [ { - "name": "@eslint-community/eslint-comments/no-unused-disable", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "@typescript-eslint/explicit-function-return-type", + "url": "https://typescript-eslint.io/rules/explicit-function-return-type" } ], "flint": { - "name": "directiveUnusedDisables", + "name": "functionReturnTypes", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "notes": "Core detects unused disables" + "oxlint": [ + { + "name": "typescript/explicit-function-return-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/explicit-function-return-type.html" + } + ] }, { + "biome": [ + { + "name": "useShorthandFunctionType", + "url": "https://biomejs.dev/linter/rules/useShorthandFunctionType" + } + ], "eslint": [ { - "name": "@eslint-community/eslint-comments/no-unused-enable", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "@typescript-eslint/prefer-function-type", + "url": "https://typescript-eslint.io/rules/prefer-function-type" } ], "flint": { - "name": "directiveUnusedEnables", + "name": "functionTypeDeclarations", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" }, - "notes": "Core detects unused enables" + "oxlint": [ + { + "name": "typescript/prefer-function-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-function-type.html" + } + ] }, { "biome": [ { - "name": "noDuplicateParameters", - "url": "https://biomejs.dev/linter/rules/noDuplicateParameters" + "name": "useYield", + "url": "https://biomejs.dev/linter/rules/useYield" } ], "deno": [ { - "name": "no-dupe-args", - "url": "https://docs.deno.com/lint/rules/no-dupe-args" + "name": "require-yield", + "url": "https://docs.deno.com/lint/rules/require-yield" } ], "eslint": [ { - "name": "no-dupe-args", - "url": "https://eslint.org/docs/latest/rules/no-dupe-args" + "name": "require-yield", + "url": "https://eslint.org/docs/latest/rules/require-yield" } ], "flint": { - "implemented": true, - "name": "duplicateArguments", + "name": "generatorFunctionYields", "plugin": "ts", - "preset": "Untyped" - } + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/require-yield", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/require-yield.html" + } + ] }, { "eslint": [ { - "name": "@typescript-eslint/no-dynamic-delete", - "url": "https://typescript-eslint.io/rules/no-dynamic-delete" + "name": "@typescript-eslint/consistent-generic-constructors", + "url": "https://typescript-eslint.io/rules/consistent-generic-constructors" } ], "flint": { - "name": "dynamicDeletes", + "name": "genericConstructorCalls", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" }, "oxlint": [ { - "name": "typescript/no-dynamic-delete", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-dynamic-delete.html" + "name": "typescript/consistent-generic-constructors", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-generic-constructors.html" } ] }, { "biome": [ { - "name": "noDuplicateElseIf", - "url": "https://biomejs.dev/linter/rules/noDuplicateElseIf" + "name": "useGetterReturn", + "url": "https://biomejs.dev/linter/rules/useGetterReturn" + } + ], + "deno": [ + { + "name": "getter-return", + "url": "https://docs.deno.com/lint/rules/getter-return" } ], "eslint": [ { - "name": "no-dupe-else-if", - "url": "https://eslint.org/docs/latest/rules/no-dupe-else-if" + "name": "getter-return", + "url": "https://eslint.org/docs/latest/rules/getter-return" } ], "flint": { - "implemented": true, - "name": "elseIfDuplicates", + "name": "getterReturns", "plugin": "ts", - "preset": "Logical" + "preset": "untyped" }, "oxlint": [ { - "name": "eslint/no-dupe-else-if", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-dupe-else-if.html" + "name": "eslint/getter-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/getter-return.html" } ] }, { - "biome": [ - { - "name": "noUselessElse", - "url": "https://biomejs.dev/linter/rules/noUselessElse" - } - ], "eslint": [ { - "name": "no-else-return", - "url": "https://eslint.org/docs/latest/rules/no-else-return" + "name": "@typescript-eslint/related-getter-setter-pairs", + "url": "https://typescript-eslint.io/rules/related-getter-setter-pairs" } ], "flint": { - "name": "elseReturns", + "name": "getterSetterPairedTypes", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-else-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-else-return.html" + "name": "typescript/related-getter-setter-pairs", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/related-getter-setter-pairs.html" } ] }, { "biome": [ { - "name": "noEmptyBlockStatements", - "url": "https://biomejs.dev/linter/rules/noEmptyBlockStatements" + "name": "noGlobalAssign", + "url": "https://biomejs.dev/linter/rules/noGlobalAssign" } ], "deno": [ { - "name": "no-empty", - "url": "https://docs.deno.com/lint/rules/no-empty" + "name": "no-global-assign", + "url": "https://docs.deno.com/lint/rules/no-global-assign" } ], "eslint": [ { - "name": "no-empty", - "url": "https://eslint.org/docs/latest/rules/no-empty" + "name": "no-global-assign", + "url": "https://eslint.org/docs/latest/rules/no-global-assign" } ], "flint": { - "implemented": true, - "name": "emptyBlocks", + "name": "globalAssignments", "plugin": "ts", - "preset": "Stylistic" + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/no-empty", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty.html" + "name": "eslint/no-global-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-global-assign.html" } ] }, { "biome": [ { - "name": "noEmptyPattern", - "url": "https://biomejs.dev/linter/rules/noEmptyPattern" + "name": "noGlobalObjectCalls", + "url": "https://biomejs.dev/linter/rules/noGlobalObjectCalls" } ], "deno": [ { - "name": "no-empty-pattern", - "url": "https://docs.deno.com/lint/rules/no-empty-pattern" + "name": "no-obj-calls", + "url": "https://docs.deno.com/lint/rules/no-obj-calls" } ], "eslint": [ { - "name": "no-empty-pattern", - "url": "https://eslint.org/docs/latest/rules/no-empty-pattern" + "name": "no-obj-calls", + "url": "https://eslint.org/docs/latest/rules/no-obj-calls" } ], "flint": { - "name": "emptyDestructures", + "name": "globalObjectCalls", "plugin": "ts", - "preset": "Logical", - "implemented": true + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/no-empty-pattern", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty-pattern.html" + "name": "eslint/no-obj-calls", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-obj-calls.html" } ] }, { "deno": [ { - "name": "no-empty-enum", - "url": "https://docs.deno.com/lint/rules/no-empty-enum" + "name": "no-window", + "url": "https://docs.deno.com/lint/rules/no-window" + }, + { + "name": "no-window-prefix", + "url": "https://docs.deno.com/lint/rules/no-window-prefix" + } + ], + "eslint": [ + { + "name": "unicorn/prefer-global-this", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-global-this.md" } ], "flint": { - "name": "emptyEnums", + "name": "globalThisAliases", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-global-this", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-global-this.html" + } + ] }, { "biome": [ { - "name": "noUselessEmptyExport", - "url": "https://biomejs.dev/linter/rules/noUselessEmptyExport" + "name": "useGroupedAccessorPairs", + "url": "https://biomejs.dev/linter/rules/useGroupedAccessorPairs" } ], "eslint": [ { - "name": "@typescript-eslint/no-useless-empty-export", - "url": "https://typescript-eslint.io/rules/no-useless-empty-export" + "name": "grouped-accessor-pairs", + "url": "https://eslint.org/docs/latest/rules/grouped-accessor-pairs" } ], "flint": { - "name": "emptyExports", + "name": "groupedAccessorPairs", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" }, "oxlint": [ { - "name": "typescript/no-useless-empty-export", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-useless-empty-export.html" + "name": "eslint/grouped-accessor-pairs", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/grouped-accessor-pairs.html" } ] }, { "eslint": [ { - "name": "unicorn/no-empty-file", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-empty-file.md" + "name": "unicorn/no-hex-escape", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-hex-escape.md" } ], "flint": { - "name": "emptyFiles", + "name": "hexEscapes", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-empty-file", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-empty-file.html" + "name": "unicorn/no-hex-escape", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-hex-escape.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "noEmptyBlockStatements", - "url": "https://biomejs.dev/linter/rules/noEmptyBlockStatements" + "name": "id-match", + "url": "https://eslint.org/docs/latest/rules/id-match" } ], + "flint": { + "name": "identifierMatches", + "plugin": "ts", + "status": "skipped" + } + }, + { "eslint": [ { - "name": "no-empty-function", - "url": "https://eslint.org/docs/latest/rules/no-empty-function" - }, - { - "name": "@typescript-eslint/no-empty-function", - "url": "https://typescript-eslint.io/rules/no-empty-function" + "name": "unicorn/no-unreadable-iife", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unreadable-iife.md" } ], "flint": { - "name": "emptyFunctions", + "name": "iifeReadability", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-empty-function", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty-function.html" + "name": "unicorn/no-unreadable-iife", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unreadable-iife.html" } ] }, { + "biome": [ + { + "name": "noImplicitCoercions", + "url": "https://biomejs.dev/linter/rules/noImplicitCoercions" + } + ], "eslint": [ { - "name": "unicorn/require-module-attributes", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-module-attributes.md" + "name": "no-implicit-coercion", + "url": "https://eslint.org/docs/latest/rules/no-implicit-coercion" } ], "flint": { - "name": "emptyModuleAttributes", + "name": "implicitCoercions", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" } }, { - "biome": [ - { - "name": "noBannedTypes", - "url": "https://biomejs.dev/linter/rules/noBannedTypes" - } - ], - "deno": [ + "eslint": [ { - "name": "ban-types", - "url": "https://docs.deno.com/lint/rules/ban-types" + "name": "no-implied-eval", + "url": "https://eslint.org/docs/latest/rules/no-implied-eval" }, { - "name": "no-empty-interface", - "url": "https://docs.deno.com/lint/rules/no-empty-interface" - } - ], - "eslint": [ - { - "name": "@typescript-eslint/no-empty-object-type", - "url": "https://typescript-eslint.io/rules/no-empty-object-type" + "name": "@typescript-eslint/no-implied-eval", + "url": "https://typescript-eslint.io/rules/no-implied-eval" } ], "flint": { - "name": "emptyObjectTypes", + "name": "impliedEvals", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/ban-types", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/ban-types.html" - }, - { - "name": "typescript/no-empty-object-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-empty-object-type.html" - }, - { - "name": "typescript/no-empty-interface", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-empty-interface.html" + "name": "typescript/no-implied-eval", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-implied-eval.html" } ] }, { - "biome": [ - { - "name": "noEmptyBlockStatements", - "url": "https://biomejs.dev/linter/rules/noEmptyBlockStatements" - } - ], "eslint": [ { - "name": "no-empty-static-block", - "url": "https://eslint.org/docs/latest/rules/no-empty-static-block" + "name": "import/no-absolute-path", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-absolute-path.md" } ], "flint": { - "implemented": true, - "name": "emptyStaticBlocks", + "name": "importAbsolutePaths", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-empty-static-block", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-empty-static-block.html" + "name": "import/no-absolute-path", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-absolute-path.html" } ] }, { - "biome": [ + "deno": [ { - "name": "noEmptyTypeParameters", - "url": "https://biomejs.dev/linter/rules/noEmptyTypeParameters" + "name": "no-import-assertions", + "url": "https://docs.deno.com/lint/rules/no-import-assertions" } ], "flint": { - "name": "emptyTypeParameterLists", + "name": "importAssertions", "plugin": "ts", - "preset": "Stylistic" - } + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { + "biome": [ + { + "name": "noImportAssign", + "url": "https://biomejs.dev/linter/rules/noImportAssign" + } + ], + "deno": [ + { + "name": "no-import-assign", + "url": "https://docs.deno.com/lint/rules/no-import-assign" + } + ], "eslint": [ { - "name": "unicorn/prefer-ternary", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-ternary.md" + "name": "no-import-assign", + "url": "https://eslint.org/docs/latest/rules/no-import-assign" } ], "flint": { - "name": "endingTernaryIfElses", + "name": "importAssignments", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped" } }, { "biome": [ { - "name": "useEnumInitializers", - "url": "https://biomejs.dev/linter/rules/useEnumInitializers" + "name": "noImportCycles", + "url": "https://biomejs.dev/linter/rules/noImportCycles" } ], "eslint": [ { - "name": "@typescript-eslint/prefer-enum-initializers", - "url": "https://typescript-eslint.io/rules/prefer-enum-initializers" + "name": "import/no-cycle", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-cycle.md" } ], "flint": { - "name": "enumInitializers", + "name": "importCycles", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" }, "oxlint": [ { - "name": "typescript/prefer-enum-initializers", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-enum-initializers.html" + "name": "import/no-cycle", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-cycle.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "useLiteralEnumMembers", - "url": "https://biomejs.dev/linter/rules/useLiteralEnumMembers" + "name": "import/default", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/default.md" } ], + "flint": { + "name": "importDefaults", + "plugin": "ts", + "status": "skipped" + }, + "notes": "Handled by TypeScript", + "oxlint": [ + { + "name": "eslint/default", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default.html" + } + ] + }, + { "eslint": [ { - "name": "@typescript-eslint/prefer-literal-enum-member", - "url": "https://typescript-eslint.io/rules/prefer-literal-enum-member" + "name": "import/no-duplicates", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-duplicates.md" } ], "flint": { - "name": "enumMemberLiterals", + "name": "importDuplicates", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/prefer-literal-enum-member", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-literal-enum-member.html" + "name": "import/no-duplicates", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-duplicates.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/no-misused-spread", - "url": "https://typescript-eslint.io/rules/no-misused-spread" + "name": "import/no-empty-named-blocks", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-empty-named-blocks.md" } ], "flint": { - "name": "enumMixedValues", + "name": "importEmptyBlocks", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/no-misused-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-misused-spread.html" + "name": "import/no-empty-named-blocks", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-empty-named-blocks.html" } ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/fixer-return", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/fixer-return" + "name": "import/no-extraneous-dependencies", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-extraneous-dependencies.md" } ], "flint": { - "name": "fixerReturns", - "plugin": "flint", - "preset": "Not implementing" + "name": "importExtraneousDependencies", + "plugin": "ts", + "preset": "logical", + "strictness": "strict" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/meta-property-ordering", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/meta-property-ordering" + "name": "import/first", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/first.md" } ], "flint": { - "name": "propertyOrdering", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "importFirst", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "import/first", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/first.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-deprecated-context-methods", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-deprecated-context-methods" + "name": "import/max-dependencies", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/max-dependencies.md" } ], "flint": { - "name": "deprecatedContextMethods", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "importMaximumDependencies", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "import/max-dependencies", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/max-dependencies.html" + } + ] + }, + { + "eslint": [ + { + "name": "import/named", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/named.md" + } + ], + "flint": { + "name": "importNameMatches", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "import/named", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/named.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-deprecated-report-api", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-deprecated-report-api" + "name": "import/namespace", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/namespace.md" } ], "flint": { - "name": "deprecatedReportAPIs", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "importNamespaceProperties", + "plugin": "ts", + "status": "skipped" + }, + "notes": "Handled by TypeScript", + "oxlint": [ + { + "name": "eslint/namespace", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/namespace.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-meta-replaced-by", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-meta-replaced-by" + "name": "import/no-namespace", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-namespace.md" } ], "flint": { - "name": "deprecatedReplacedBy", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "importNamespaces", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "import/no-namespace", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-namespace.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-meta-schema-default", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-meta-schema-default" + "name": "import/no-self-import", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-self-import.md" } ], "flint": { - "name": "deprecatedSchemaDefaults", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "importSelf", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "import/no-self-import", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-self-import.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-missing-message-ids", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-missing-message-ids" + "name": "sort-imports", + "url": "https://eslint.org/docs/latest/rules/sort-imports" } ], "flint": { - "name": "messageIdMismatches", - "plugin": "flint", - "preset": "Not implementing" + "name": "importsSorting", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-missing-placeholders", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-missing-placeholders" + "name": "@typescript-eslint/no-import-type-side-effects", + "url": "https://typescript-eslint.io/rules/no-import-type-side-effects" } ], "flint": { - "name": "missingPlaceholders", - "plugin": "flint", - "preset": "Logical" - } + "name": "importTypeSideEffects", + "plugin": "ts" + }, + "oxlint": [ + { + "name": "typescript/no-import-type-side-effects", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-import-type-side-effects.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-property-in-node", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-property-in-node" + "name": "import/no-useless-path-segments", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-useless-path-segments.md" } ], "flint": { - "name": "nodePropertyInChecks", - "plugin": "flint", - "preset": "Logical" - } + "name": "importUnnecessaryPathSegments", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "import/no-useless-path-segments", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-useless-path-segments.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-unused-message-ids", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-unused-message-ids" + "name": "@typescript-eslint/consistent-indexed-object-style", + "url": "https://typescript-eslint.io/rules/consistent-indexed-object-style" } ], "flint": { - "name": "unusedMessageIds", - "plugin": "flint", - "preset": "Logical" - } + "name": "indexedObjectTypes", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "typescript/consistent-indexed-object-style", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-indexed-object-style.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-unused-placeholders", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-unused-placeholders" + "name": "no-inline-comments", + "url": "https://eslint.org/docs/latest/rules/no-inline-comments" } ], "flint": { - "name": "unusedPlaceholders", - "plugin": "flint", - "preset": "Logical" + "name": "inlineComments", + "plugin": "ts", + "status": "skipped" } }, { - "eslint": [ + "biome": [ { - "name": "eslint-plugin-eslint-plugin/no-useless-token-range", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-useless-token-range" + "name": "noInnerDeclarations", + "url": "https://biomejs.dev/linter/rules/noInnerDeclarations" } ], - "flint": { - "name": "unnecessaryTokenRanges", - "plugin": "flint", - "preset": "Not implementing" - } - }, - { - "eslint": [ + "deno": [ { - "name": "eslint-plugin-eslint-plugin/prefer-message-ids", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-message-ids" + "name": "no-inner-declarations", + "url": "https://docs.deno.com/lint/rules/no-inner-declarations" } ], - "flint": { - "name": "deprecatedMessageStrings", - "plugin": "flint", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/prefer-object-rule", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-object-rule" + "name": "no-inner-declarations", + "url": "https://eslint.org/docs/latest/rules/no-inner-declarations" } ], "flint": { - "name": "deprecatedRuleFunctions", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "innerDeclarations", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-inner-declarations", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-inner-declarations.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "eslint-plugin-eslint-plugin/prefer-placeholders", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-placeholders" + "name": "useIsArray", + "url": "https://biomejs.dev/linter/rules/useIsArray" } ], - "flint": { - "name": "deprecatedMessagePlaceholders", - "plugin": "flint", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/prefer-replace-text", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-replace-text" + "name": "unicorn/no-instanceof-builtins", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-instanceof-builtins.md" } ], "flint": { - "name": "deprecatedTextReplacements", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "instanceOfArrays", + "plugin": "ts", + "preset": "logical" + }, + "notes": "Only for built-ins with a static .is* (Array).", + "oxlint": [ + { + "name": "unicorn/no-instanceof-array", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-instanceof-array.html" + }, + { + "name": "unicorn/no-instanceof-builtins", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-instanceof-builtins.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/report-message-format", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/report-message-format" + "name": "no-invalid-this", + "url": "https://eslint.org/docs/latest/rules/no-invalid-this" + }, + { + "name": "@typescript-eslint/no-invalid-this", + "url": "https://typescript-eslint.io/rules/no-invalid-this" } ], "flint": { - "name": "messagePhrases", - "plugin": "flint", - "preset": "Logical", - "strictness": "Strict" + "name": "invalidThis", + "plugin": "ts", + "preset": "untyped" } }, { - "eslint": [ + "biome": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-default-options", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-default-options" + "name": "noConfusingVoidType", + "url": "https://biomejs.dev/linter/rules/noConfusingVoidType" } ], - "flint": { - "name": "optionDefaults", - "plugin": "flint", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-docs-description", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-docs-description" + "name": "@typescript-eslint/no-invalid-void-type", + "url": "https://typescript-eslint.io/rules/no-invalid-void-type" } ], "flint": { - "name": "ruleDescriptions", - "plugin": "flint", - "preset": "Logical" + "name": "invalidVoidTypes", + "plugin": "ts", + "preset": "logical", + "strictness": "strict" } }, { - "eslint": [ + "biome": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-docs-recommended", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-docs-recommended" + "name": "useIsNan", + "url": "https://biomejs.dev/linter/rules/useIsNan" } ], - "flint": { - "name": "rulePresets", - "plugin": "flint", - "preset": "Logical" - } - }, - { - "eslint": [ + "deno": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-docs-url", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-docs-url" + "name": "use-isnan", + "url": "https://docs.deno.com/lint/rules/use-isnan" } ], - "flint": { - "name": "ruleURLs", - "plugin": "flint", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-fixable", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-fixable" + "name": "use-isnan", + "url": "https://eslint.org/docs/latest/rules/use-isnan" } ], "flint": { - "name": "ruleAboutChangers", - "plugin": "flint", - "preset": "Not implementing" - } - }, - { - "eslint": [ + "name": "isNaNComparisons", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-has-suggestions", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-has-suggestions" + "name": "eslint/use-isnan", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/use-isnan.html" } - ], - "flint": { - "name": "aboutSuggestions", - "plugin": "flint", - "preset": "Not implementing" - } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-schema", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-schema" + "name": "unicorn/no-array-callback-reference", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-callback-reference.md" } ], "flint": { - "name": "aboutSchemas", - "plugin": "flint", - "preset": "Not implementing" + "name": "iteratorMethodFunctionReferences", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-schema-description", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-schema-description" + "name": "jsdoc/check-access", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-access.md" } ], "flint": { - "name": "aboutSchemaDescriptions", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "jsdocAccessTags", + "plugin": "ts", + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "jsdoc/check-ass", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/check-ass.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/require-meta-type", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-meta-type" + "name": "jsdoc/check-alignment", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-alignment.md" } ], "flint": { - "name": "aboutTypes", - "plugin": "flint", - "preset": "Not implementing" - } - }, - { - "flint": { - "implemented": true, - "name": "invalidCodeLines", - "plugin": "flint", - "preset": "Logical" - } + "name": "jsdocAlignment", + "plugin": "ts", + "status": "skipped" + }, + "notes": "I intend to write a Prettier plugin." }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/consistent-output", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/consistent-output" + "name": "jsdoc/no-multi-asterisks", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-multi-asterisks.md" + }, + { + "name": "jsdoc/require-asterisk-prefix", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-asterisk-prefix.md" } ], "flint": { - "name": "testOutputs", - "plugin": "flint", - "preset": "Not implementing" + "name": "jsdocAsterisks", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-identical-tests", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-identical-tests" + "name": "jsdoc/no-blank-block-descriptions", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-blank-block-descriptions.md" } ], "flint": { - "implemented": true, - "name": "testCaseDuplicates", - "plugin": "flint", - "preset": "Logical" + "name": "jsdocBlankBlockDescriptions", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/no-only-tests", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/no-only-tests" + "name": "jsdoc/convert-to-jsdoc-comments", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/convert-to-jsdoc-comments.md" } ], "flint": { - "name": "testCaseOnlies", - "plugin": "flint", - "preset": "Logical" + "name": "jsdocConvertToJSDocComments", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/prefer-output-null", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/prefer-output-null" + "name": "jsdoc/no-defaults", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-defaults.md" } ], "flint": { - "name": "testOutputNulls", - "plugin": "flint", - "preset": "Not implementing" - } + "name": "jsdocDefaults", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "jsdoc/no-defaults", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/no-defaults.html" + } + ] }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/require-test-case-name", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/require-test-case-name" + "name": "jsdoc/no-undefined-types", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-undefined-types.md" } ], "flint": { - "name": "testNames", - "plugin": "flint", - "preset": "Not implementing" + "name": "jsdocDefinedTypes", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/test-case-property-ordering", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/test-case-property-ordering" + "name": "jsdoc/require-description-complete-sentence", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-description-complete-sentence.md" } ], "flint": { - "name": "testPropertyOrders", - "plugin": "flint", - "preset": "Not implementing" + "name": "jsdocDescriptionCompleteSentences", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "eslint-plugin-eslint-plugin/test-case-shorthand-strings", - "url": "https://github.com/eslint-community/eslint-plugin-eslint-plugin/blob/main/docs/rules/test-case-shorthand-strings" + "name": "jsdoc/require-description", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-description.md" } ], "flint": { - "name": "testShorthands", - "plugin": "flint", - "preset": "Stylistic" + "name": "jsdocDescriptions", + "plugin": "ts", + "status": "skipped" } }, { "eslint": [ { - "name": "@typescript-eslint/no-mixed-enums", - "url": "https://typescript-eslint.io/rules/no-mixed-enums" + "name": "jsdoc/no-blank-blocks", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-blank-blocks.md" } ], "flint": { - "name": "enumValueConsistency", + "name": "jsdocEmptyBlocks", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-mixed-enums", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-mixed-enums.html" - } - ] + "preset": "stylistic" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-duplicate-enum-values", - "url": "https://typescript-eslint.io/rules/no-duplicate-enum-values" + "name": "jsdoc/empty-tags", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/empty-tags.md" } ], "flint": { - "name": "enumValueDuplicates", + "name": "jsdocEmptyTags", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" }, "oxlint": [ { - "name": "typescript/no-duplicate-enum-values", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-duplicate-enum-values.html" + "name": "jsdoc/empty-tags", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/empty-tags.html" } ] }, { "eslint": [ { - "name": "unicorn/no-negation-in-equality-check", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-negation-in-equality-check.md" + "name": "jsdoc/require-example", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-example.md" } ], "flint": { - "name": "equalityOperatorNegations", + "name": "jsdocExamples", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "unicorn/no-negation-in-equality-check", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-negation-in-equality-check.html" - } - ] + "status": "skipped" + } }, { - "biome": [ - { - "name": "noDoubleEquals", - "url": "https://biomejs.dev/linter/rules/noDoubleEquals" - } - ], - "deno": [ - { - "name": "eqeqeq", - "url": "https://docs.deno.com/lint/rules/eqeqeq" - } - ], "eslint": [ { - "name": "eqeqeq", - "url": "https://eslint.org/docs/latest/rules/eqeqeq" + "name": "jsdoc/require-file-overview", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-file-overview.md" } ], "flint": { - "name": "equalityOperators", + "name": "jsdocFileOverviews", "plugin": "ts", - "preset": "Logical" - }, - "notes": "Default ESLint's \"smart\" to true", - "oxlint": [ - { - "name": "eslint/eqeqeq", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/eqeqeq.html" - } - ] + "status": "skipped" + } }, { - "biome": [ - { - "name": "useErrorMessage", - "url": "https://biomejs.dev/linter/rules/useErrorMessage" - } - ], "eslint": [ { - "name": "unicorn/error-message", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/error-message.md" + "name": "jsdoc/implements-on-classes", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/implements-on-classes.md" } ], "flint": { - "name": "errorMessages", + "name": "jsdocImplementsTags", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "preset": "stylistic" }, "oxlint": [ { - "name": "unicorn/error-message", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/error-message.html" + "name": "jsdoc/implements-on-classes", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/implements-on-classes.html" } ] }, { "eslint": [ { - "name": "unicorn/custom-error-definition", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/custom-error-definition.md" + "name": "jsdoc/imports-as-dependencies", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/imports-as-dependencies.md" } ], "flint": { - "name": "errorSubclassProperties", + "name": "jsdocImportsAsDependencies", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "status": "skipped" } }, { "eslint": [ { - "name": "unicorn/no-useless-error-capture-stack-trace", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-error-capture-stack-trace.md" + "name": "jsdoc/check-indentation", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-indentation.md" } ], "flint": { - "name": "errorUnnecessaryCaptureStackTraces", + "name": "jsdocIndentation", "plugin": "ts", - "preset": "Logical" - } + "status": "skipped" + }, + "notes": "I intend to write a Prettier plugin." }, { "eslint": [ { - "name": "unicorn/escape-case", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/escape-case.md" + "name": "jsdoc/informative-docs", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/informative-docs.md" } ], "flint": { - "name": "escapeSequenceCasing", + "name": "jsdocInformativeDocs", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/escape-case", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/escape-case.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { - "biome": [ - { - "name": "noGlobalEval", - "url": "https://biomejs.dev/linter/rules/noGlobalEval" - } - ], - "deno": [ - { - "name": "no-eval", - "url": "https://docs.deno.com/lint/rules/no-eval" - } - ], "eslint": [ { - "name": "no-eval", - "url": "https://eslint.org/docs/latest/rules/no-eval" + "name": "jsdoc/check-line-alignment", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-line-alignment.md" } ], "flint": { - "name": "evals", + "name": "jsdocLineAlignment", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-eval", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-eval.html" - } - ] + "notes": "I intend to write a Prettier plugin." }, { - "biome": [ + "eslint": [ { - "name": "noImplicitAnyLet", - "url": "https://biomejs.dev/linter/rules/noImplicitAnyLet" + "name": "jsdoc/match-description", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/match-description.md" } ], "flint": { - "name": "evolvingVariableTypes", + "name": "jsdocMatchDescriptions", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { - "biome": [ + "eslint": [ { - "name": "noCatchAssign", - "url": "https://biomejs.dev/linter/rules/noCatchAssign" + "name": "jsdoc/match-names", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/match-names.md" } ], - "deno": [ + "flint": { + "name": "jsdocMatchNames", + "plugin": "ts", + "status": "skipped" + } + }, + { + "eslint": [ { - "name": "no-ex-assign", - "url": "https://docs.deno.com/lint/rules/no-ex-assign" + "name": "jsdoc/no-bad-blocks", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-bad-blocks.md" } ], + "flint": { + "name": "jsdocMisleadingBlocks", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-ex-assign", - "url": "https://eslint.org/docs/latest/rules/no-ex-assign" + "name": "jsdoc/no-missing-syntax", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-missing-syntax.md" } ], "flint": { - "implemented": true, - "name": "exceptionAssignments", + "name": "jsdocMissingSyntax", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "eslint/no-ex-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-ex-assign.html" - } - ] + "status": "skipped" + } }, { - "biome": [ + "eslint": [ { - "name": "noExplicitAny", - "url": "https://biomejs.dev/linter/rules/noExplicitAny" + "name": "jsdoc/multiline-blocks", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/multiline-blocks.md" } ], - "deno": [ + "flint": { + "name": "jsdocMultilineBlocks", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "no-explicit-any", - "url": "https://docs.deno.com/lint/rules/no-explicit-any" + "name": "jsdoc/require-hyphen-before-param-description", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-hyphen-before-param-description.md" } ], + "flint": { + "name": "jsdocParameterDescriptionHyphens", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/no-explicit-any", - "url": "https://typescript-eslint.io/rules/no-explicit-any" + "name": "jsdoc/require-param-description", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-param-description.md" } ], "flint": { - "name": "explicitAnys", + "name": "jsdocParameterDescriptions", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/no-explicit-any", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-explicit-any.html" + "name": "jsdoc/require-param-description", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-param-description.html" } ] }, { - "biome": [ - { - "name": "useExponentiationOperator", - "url": "https://biomejs.dev/linter/rules/useExponentiationOperator" - } - ], "eslint": [ { - "name": "prefer-exponentiation-operator", - "url": "https://eslint.org/docs/latest/rules/prefer-exponentiation-operator" + "name": "jsdoc/check-param-names", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-param-names.md" } ], "flint": { - "name": "exponentiationOperators", + "name": "jsdocParameterNames", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/prefer-exponentiation-operator", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-exponentiation-operator.html" - } - ] + "preset": "stylistic" + } }, { "eslint": [ { - "name": "import/prefer-default-export", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/prefer-default-export.md" + "name": "jsdoc/require-param", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-param.md" } ], "flint": { - "name": "exportDefault", + "name": "jsdocParameters", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "import/prefer-default-export", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/prefer-default-export.html" + "name": "jsdoc/require-param", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-param.html" } ] }, { - "biome": [ - { - "name": "noExportedImports", - "url": "https://biomejs.dev/linter/rules/noExportedImports" - } - ], "eslint": [ { - "name": "unicorn/prefer-export-from", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-export-from.md" + "name": "jsdoc/require-param-type", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-param-type.md" } ], "flint": { - "name": "exportFromImports", + "name": "jsdocParameterTypes", "plugin": "ts", - "preset": "Stylistic" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "jsdoc/require-param-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-param-type.html" + } + ] }, { "eslint": [ { - "name": "import/group-exports", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/group-exports.md" + "name": "jsdoc/require-property", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-property.md" } ], "flint": { - "name": "exportGroups", + "name": "jsdocProperties", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "import/group-exports", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/group-exports.html" + "name": "jsdoc/require-property", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-property.html" } ] }, { "eslint": [ { - "name": "import/exports-last", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/exports-last.md" + "name": "jsdoc/require-property-description", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-property-description.md" } ], "flint": { - "name": "exportLast", + "name": "jsdocPropertyDescriptions", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "import/exports-last", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/exports-last.html" + "name": "jsdoc/require-property-description", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-property-description.html" } ] }, { "eslint": [ { - "name": "import/no-mutable-exports", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-mutable-exports.md" + "name": "jsdoc/check-property-names", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-property-names.md" } ], "flint": { - "name": "exportMutables", + "name": "jsdocPropertyNames", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" }, "oxlint": [ { - "name": "import/no-mutable-exports", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-mutable-exports.html" + "name": "jsdoc/check-property-names", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/check-property-names.html" } ] }, { "eslint": [ { - "name": "import/exports", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/exports.md" + "name": "jsdoc/require-property-type", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-property-type.md" } ], "flint": { - "name": "exportUniqueNames", + "name": "jsdocPropertyTypes", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "import/exports", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/exports.html" + "name": "jsdoc/require-property-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-property-type.html" } ] }, { - "deno": [ + "eslint": [ { - "name": "no-external-import", - "url": "https://docs.deno.com/lint/rules/no-external-import" + "name": "jsdoc/no-types", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-types.md" } ], "flint": { - "name": "externalHttpImports", + "name": "jsdocRedundantTypes", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" } }, { "eslint": [ { - "name": "@typescript-eslint/no-extraneous-class", - "url": "https://typescript-eslint.io/rules/no-extraneous-class" + "name": "jsdoc/require-jsdoc", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-jsdoc.md" } ], "flint": { - "name": "extraneousClasses", + "name": "jsdocRequired", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "typescript/no-extraneous-class", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-extraneous-class.html" - } - ] + "status": "skipped" + } }, { "eslint": [ { - "name": "unicorn/no-invalid-fetch-options", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-invalid-fetch-options.md" + "name": "jsdoc/require-returns-description", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns-description.md" } ], "flint": { - "name": "fetchMethodBodies", + "name": "jsdocReturnDescriptions", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-invalid-fetch-options", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-invalid-fetch-options.html" + "name": "jsdoc/require-returns-description", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-returns-description.html" } ] }, { - "biome": [ - { - "name": "useFilenamingConvention", - "url": "https://biomejs.dev/linter/rules/useFilenamingConvention" - } - ], "eslint": [ { - "name": "unicorn/filename-case", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/filename-case.md" + "name": "jsdoc/require-returns", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns.md" } ], "flint": { - "name": "filenameCasing", + "name": "jsdocReturns", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/filename-case", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/filename-case.html" + "name": "jsdoc/require-returns", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-returns.html" } ] }, { - "biome": [ - { - "name": "noFloatingPromises", - "url": "https://biomejs.dev/linter/rules/noFloatingPromises" - } - ], "eslint": [ { - "name": "@typescript-eslint/no-floating-promises", - "url": "https://typescript-eslint.io/rules/no-floating-promises" + "name": "jsdoc/require-returns-type", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns-type.md" } ], "flint": { - "name": "floatingPromises", + "name": "jsdocReturnTypes", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/no-floating-promises", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-floating-promises.html" + "name": "jsdoc/require-returns-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-returns-type.html" } ] }, { - "biome": [ - { - "name": "useValidForDirection", - "url": "https://biomejs.dev/linter/rules/useValidForDirection" - } - ], - "deno": [ - { - "name": "for-direction", - "url": "https://docs.deno.com/lint/rules/for-direction" - } - ], "eslint": [ { - "name": "for-direction", - "url": "https://eslint.org/docs/latest/rules/for-direction" + "name": "jsdoc/tag-lines", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/tag-lines.md" } ], "flint": { - "implemented": true, - "name": "forDirections", + "name": "jsdocTagLines", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/for-direction", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/for-direction.html" - } - ] + "status": "skipped" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-for-in-array", - "url": "https://typescript-eslint.io/rules/no-for-in-array" + "name": "jsdoc/check-tag-names", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-tag-names.md" } ], "flint": { - "implemented": true, - "name": "forInArrays", + "name": "jsdocTagNames", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "typescript/no-for-in-array", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-for-in-array.html" + "name": "jsdoc/check-tag-names", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/check-tag-names.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "noFunctionAssign", - "url": "https://biomejs.dev/linter/rules/noFunctionAssign" + "name": "jsdoc/check-template-names", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-template-names.md" } ], - "deno": [ + "flint": { + "name": "jsdocTemplateNames", + "plugin": "ts", + "preset": "stylistic" + } + }, + { + "eslint": [ { - "name": "no-func-assign", - "url": "https://docs.deno.com/lint/rules/no-func-assign" + "name": "jsdoc/require-template", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-template.md" } ], + "flint": { + "name": "jsdocTemplates", + "plugin": "ts", + "status": "skipped" + } + }, + { "eslint": [ { - "name": "no-func-assign", - "url": "https://eslint.org/docs/latest/rules/no-func-assign" + "name": "jsdoc/text-escaping", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/text-escaping.md" } ], "flint": { - "implemented": true, - "name": "functionAssignments", + "name": "jsdocTextEscaping", "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ - { - "name": "eslint/no-func-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-func-assign.html" - } - ] + "status": "skipped" + } }, { "eslint": [ { - "name": "prefer-spread", - "url": "https://eslint.org/docs/latest/rules/prefer-spread" - }, - { - "name": "unicorn/prefer-spread", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-spread.md" + "name": "jsdoc/require-throws", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-throws.md" } ], "flint": { - "name": "functionCallSpreads", + "name": "jsdocThrows", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/prefer-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-spread.html" - }, - { - "name": "unicorn/prefer-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-spread.html" - } - ] + "status": "skipped" + } }, { "eslint": [ { - "name": "func-style", - "url": "https://eslint.org/docs/latest/rules/func-style" + "name": "jsdoc/check-syntax, jsdoc/check-types", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-syntax, jsdoc.md" } ], "flint": { - "name": "functionDeclarationStyles", + "name": "jsdocTypesSyntax", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/func-style", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/func-style.html" - } - ] + "preset": "stylistic" + } }, { "eslint": [ { - "name": "unicorn/consistent-function-scoping", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/consistent-function-scoping.md" + "name": "jsdoc/require-returns-check", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns-check.md" } ], "flint": { - "name": "functionDefinitionScopeConsistency", + "name": "jsdocUnnecessaryReturns", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/consistent-function-scoping", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/consistent-function-scoping.html" - } - ] + "preset": "stylistic" + } }, { "eslint": [ { - "name": "func-name-matching", - "url": "https://eslint.org/docs/latest/rules/func-name-matching" + "name": "jsdoc/require-yields-check", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-yields-check.md" } ], "flint": { - "name": "functionNameMatches", + "name": "jsdocUnnecessaryYields", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" } }, { "eslint": [ { - "name": "func-names", - "url": "https://eslint.org/docs/latest/rules/func-names" + "name": "jsdoc/valid-types", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/valid-types.md" } ], "flint": { - "name": "functionNames", + "name": "jsdocValidTypes", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "preset": "stylistic" + } + }, + { + "eslint": [ { - "name": "eslint/func-names", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/func-names.html" + "name": "jsdoc/check-values", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-values.md" } - ] + ], + "flint": { + "name": "jsdocValues", + "plugin": "ts", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "no-new-func", - "url": "https://eslint.org/docs/latest/rules/no-new-func" + "name": "jsdoc/require-yields", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-yields.md" } ], "flint": { - "implemented": true, - "name": "functionNewCalls", + "name": "jsdocYields", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" }, "oxlint": [ { - "name": "eslint/no-new-func", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-new-func.html" + "name": "jsdoc/require-yields", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-yields.html" } ] }, { "biome": [ { - "name": "useExplicitType", - "url": "https://biomejs.dev/linter/rules/useExplicitType" + "name": "useJsonImportAttributes", + "url": "https://biomejs.dev/linter/rules/useJsonImportAttributes" } ], - "deno": [ + "flint": { + "name": "jsonImportAttributes", + "plugin": "ts", + "status": "skipped" + } + }, + { + "biome": [ { - "name": "explicit-function-return-type", - "url": "https://docs.deno.com/lint/rules/explicit-function-return-type" + "name": "noConfusingLabels", + "url": "https://biomejs.dev/linter/rules/noConfusingLabels" } ], "eslint": [ { - "name": "@typescript-eslint/explicit-function-return-type", - "url": "https://typescript-eslint.io/rules/explicit-function-return-type" + "name": "no-labels", + "url": "https://eslint.org/docs/latest/rules/no-labels" } ], "flint": { - "name": "functionReturnTypes", + "name": "labels", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/explicit-function-return-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/explicit-function-return-type.html" + "name": "eslint/no-labels", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-labels.html" } ] }, { "biome": [ { - "name": "useShorthandFunctionType", - "url": "https://biomejs.dev/linter/rules/useShorthandFunctionType" + "name": "noLabelVar", + "url": "https://biomejs.dev/linter/rules/noLabelVar" } ], "eslint": [ { - "name": "@typescript-eslint/prefer-function-type", - "url": "https://typescript-eslint.io/rules/prefer-function-type" + "name": "no-label-var", + "url": "https://eslint.org/docs/latest/rules/no-label-var" } ], "flint": { - "name": "functionTypeDeclarations", + "name": "labelVariableNames", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/prefer-function-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-function-type.html" + "name": "eslint/no-label-var", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-label-var.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "useYield", - "url": "https://biomejs.dev/linter/rules/useYield" + "name": "unicorn/prefer-bigint-literals", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-bigint-literals.md" } ], - "deno": [ + "flint": { + "name": "literalConstructorWrappers", + "plugin": "ts", + "preset": "stylistic" + }, + "notes": "Will apply to all literals, not just bigint" + }, + { + "eslint": [ { - "name": "require-yield", - "url": "https://docs.deno.com/lint/rules/require-yield" + "name": "no-unmodified-loop-condition", + "url": "https://eslint.org/docs/latest/rules/no-unmodified-loop-condition" + } + ], + "flint": { + "name": "loopConditionConstants", + "plugin": "ts", + "status": "skipped" + } + }, + { + "biome": [ + { + "name": "noMagicNumbers", + "url": "https://biomejs.dev/linter/rules/noMagicNumbers" } ], "eslint": [ { - "name": "require-yield", - "url": "https://eslint.org/docs/latest/rules/require-yield" + "name": "no-magic-numbers", + "url": "https://eslint.org/docs/latest/rules/no-magic-numbers" + }, + { + "name": "@typescript-eslint/no-magic-numbers", + "url": "https://typescript-eslint.io/rules/no-magic-numbers" } ], "flint": { - "name": "generatorFunctionYields", + "name": "magicNumbers", "plugin": "ts", - "preset": "Logical", - "implemented": true + "status": "skipped" }, "oxlint": [ { - "name": "eslint/require-yield", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/require-yield.html" + "name": "eslint/no-magic-numbers", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-magic-numbers.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/consistent-generic-constructors", - "url": "https://typescript-eslint.io/rules/consistent-generic-constructors" + "name": "unicorn/prefer-modern-math-apis", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-modern-math-apis.md" } ], "flint": { - "name": "genericConstructorCalls", + "name": "mathMethods", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "typescript/consistent-generic-constructors", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-generic-constructors.html" + "name": "unicorn/prefer-modern-math-apis", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-modern-math-apis.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "useGetterReturn", - "url": "https://biomejs.dev/linter/rules/useGetterReturn" + "name": "unicorn/prefer-math-min-max", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-math-min-max.md" } ], - "deno": [ + "flint": { + "name": "mathRangeTernaries", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ { - "name": "getter-return", - "url": "https://docs.deno.com/lint/rules/getter-return" + "name": "unicorn/prefer-math-min-max", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-math-min-max.html" } - ], + ] + }, + { "eslint": [ { - "name": "getter-return", - "url": "https://eslint.org/docs/latest/rules/getter-return" + "name": "unicorn/prefer-math-trunc", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-math-trunc.md" } ], "flint": { - "name": "getterReturns", + "name": "mathTruncationOperators", "plugin": "ts", - "preset": "Untyped" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/getter-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/getter-return.html" + "name": "unicorn/prefer-math-trunc", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-math-trunc.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/related-getter-setter-pairs", - "url": "https://typescript-eslint.io/rules/related-getter-setter-pairs" + "name": "max-classes-per-file", + "url": "https://eslint.org/docs/latest/rules/max-classes-per-file" } ], "flint": { - "name": "getterSetterPairedTypes", + "name": "maximumClassesPerFile", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/related-getter-setter-pairs", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/related-getter-setter-pairs.html" + "name": "eslint/max-classes-per-file", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-classes-per-file.html" } ] }, { - "biome": [ - { - "name": "noGlobalAssign", - "url": "https://biomejs.dev/linter/rules/noGlobalAssign" - } - ], - "deno": [ + "eslint": [ { - "name": "no-global-assign", - "url": "https://docs.deno.com/lint/rules/no-global-assign" + "name": "complexity", + "url": "https://eslint.org/docs/latest/rules/complexity" } ], + "flint": { + "name": "maximumComplexity", + "plugin": "ts", + "status": "skipped" + } + }, + { "eslint": [ { - "name": "no-global-assign", - "url": "https://eslint.org/docs/latest/rules/no-global-assign" + "name": "max-depth", + "url": "https://eslint.org/docs/latest/rules/max-depth" } ], "flint": { - "implemented": true, - "name": "globalAssignments", + "name": "maximumDepth", "plugin": "ts", - "preset": "Untyped" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-global-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-global-assign.html" + "name": "eslint/max-depth", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-depth.html" } ] }, { - "biome": [ - { - "name": "noGlobalObjectCalls", - "url": "https://biomejs.dev/linter/rules/noGlobalObjectCalls" - } - ], - "deno": [ - { - "name": "no-obj-calls", - "url": "https://docs.deno.com/lint/rules/no-obj-calls" - } - ], "eslint": [ { - "name": "no-obj-calls", - "url": "https://eslint.org/docs/latest/rules/no-obj-calls" + "name": "id-length", + "url": "https://eslint.org/docs/latest/rules/id-length" } ], "flint": { - "implemented": true, - "name": "globalObjectCalls", + "name": "maximumIdentifierLengths", "plugin": "ts", - "preset": "Untyped" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-obj-calls", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-obj-calls.html" + "name": "eslint/id-length", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/id-length.html" } ] }, { - "deno": [ - { - "name": "no-window", - "url": "https://docs.deno.com/lint/rules/no-window" - }, - { - "name": "no-window-prefix", - "url": "https://docs.deno.com/lint/rules/no-window-prefix" - } - ], "eslint": [ { - "name": "unicorn/prefer-global-this", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-global-this.md" + "name": "max-lines", + "url": "https://eslint.org/docs/latest/rules/max-lines" } ], "flint": { - "name": "globalThisAliases", + "name": "maximumLinesPerFile", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/prefer-global-this", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-global-this.html" + "name": "eslint/max-lines", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-lines.html" } ] }, { "biome": [ { - "name": "useGroupedAccessorPairs", - "url": "https://biomejs.dev/linter/rules/useGroupedAccessorPairs" + "name": "noExcessiveLinesPerFunction", + "url": "https://biomejs.dev/linter/rules/noExcessiveLinesPerFunction" } ], "eslint": [ { - "name": "grouped-accessor-pairs", - "url": "https://eslint.org/docs/latest/rules/grouped-accessor-pairs" + "name": "max-lines-per-function", + "url": "https://eslint.org/docs/latest/rules/max-lines-per-function" } ], "flint": { - "name": "groupedAccessorPairs", + "name": "maximumLinesPerFunction", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/grouped-accessor-pairs", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/grouped-accessor-pairs.html" + "name": "eslint/max-lines-per-function", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-lines-per-function.html" } ] }, { - "biome": [ - { - "name": "useGuardForIn", - "url": "https://biomejs.dev/linter/rules/useGuardForIn" - } - ], - "deno": [ - { - "name": "guard-for-in", - "url": "https://docs.deno.com/lint/rules/guard-for-in" - } - ], "eslint": [ { - "name": "guard-for-in", - "url": "https://eslint.org/docs/latest/rules/guard-for-in" + "name": "max-nested-callbacks", + "url": "https://eslint.org/docs/latest/rules/max-nested-callbacks" } ], "flint": { - "name": "forInGuards", + "name": "maximumNestedCallbacks", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/guard-for-in", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/guard-for-in.html" + "name": "eslint/max-nested-callbacks", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-nested-callbacks.html" } ] }, { + "biome": [ + { + "name": "useMaxParams", + "url": "https://biomejs.dev/linter/rules/useMaxParams" + } + ], "eslint": [ { - "name": "unicorn/no-hex-escape", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-hex-escape.md" + "name": "max-params", + "url": "https://eslint.org/docs/latest/rules/max-params" + }, + { + "name": "@typescript-eslint/max-params", + "url": "https://typescript-eslint.io/rules/max-params" } ], "flint": { - "name": "hexEscapes", + "name": "maximumParameters", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-hex-escape", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-hex-escape.html" + "name": "eslint/max-params", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-params.html" } ] }, { "eslint": [ { - "name": "id-match", - "url": "https://eslint.org/docs/latest/rules/id-match" + "name": "max-statements", + "url": "https://eslint.org/docs/latest/rules/max-statements" } ], "flint": { - "name": "identifierMatches", + "name": "maximumStatements", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { "eslint": [ { - "name": "unicorn/no-unreadable-iife", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unreadable-iife.md" + "name": "@typescript-eslint/no-meaningless-void-operator", + "url": "https://typescript-eslint.io/rules/no-meaningless-void-operator" } ], "flint": { - "name": "iifeReadability", + "name": "meaninglessVoidOperators", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "unicorn/no-unreadable-iife", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-unreadable-iife.html" + "name": "typescript/no-meaningless-void-operator", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-meaningless-void-operator.html" } ] }, { "biome": [ { - "name": "noImplicitCoercions", - "url": "https://biomejs.dev/linter/rules/noImplicitCoercions" + "name": "useConsistentMemberAccessibility", + "url": "https://biomejs.dev/linter/rules/useConsistentMemberAccessibility" } ], "eslint": [ { - "name": "no-implicit-coercion", - "url": "https://eslint.org/docs/latest/rules/no-implicit-coercion" + "name": "@typescript-eslint/explicit-member-accessibility", + "url": "https://typescript-eslint.io/rules/explicit-member-accessibility" } ], "flint": { - "name": "implicitCoercions", + "name": "memberAccessibility", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { + "flint": { + "name": "misleadingShorthandAssignments", + "plugin": "ts", + "status": "skipped" + } + }, + { + "biome": [ + { + "name": "noThenProperty", + "url": "https://biomejs.dev/linter/rules/noThenProperty" + } + ], "eslint": [ { - "name": "no-implied-eval", - "url": "https://eslint.org/docs/latest/rules/no-implied-eval" - }, + "name": "unicorn/no-thenable", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-thenable.md" + } + ], + "flint": { + "name": "misleadingThenProperties", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ { - "name": "@typescript-eslint/no-implied-eval", - "url": "https://typescript-eslint.io/rules/no-implied-eval" + "name": "unicorn/no-thenable", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-thenable.html" + } + ] + }, + { + "biome": [ + { + "name": "noVoidTypeReturn", + "url": "https://biomejs.dev/linter/rules/noVoidTypeReturn" + } + ], + "eslint": [ + { + "name": "@typescript-eslint/no-confusing-void-expression", + "url": "https://typescript-eslint.io/rules/no-confusing-void-expression" } ], "flint": { - "name": "impliedEvals", + "name": "misleadingVoidExpressions", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/no-implied-eval", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-implied-eval.html" + "name": "typescript/no-confusing-void-expression", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-confusing-void-expression.html" } ] }, { + "biome": [ + { + "name": "noMisusedPromises", + "url": "https://biomejs.dev/linter/rules/noMisusedPromises" + } + ], "eslint": [ { - "name": "import/no-absolute-path", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-absolute-path.md" + "name": "@typescript-eslint/no-misused-promises", + "url": "https://typescript-eslint.io/rules/no-misused-promises" } ], "flint": { - "name": "importAbsolutePaths", + "name": "misusedPromises", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "import/no-absolute-path", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-absolute-path.html" + "name": "typescript/no-misused-promises", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-misused-promises.html" } ] }, { + "biome": [ + { + "name": "useExplicitType", + "url": "https://biomejs.dev/linter/rules/useExplicitType" + } + ], "deno": [ { - "name": "no-import-assertions", - "url": "https://docs.deno.com/lint/rules/no-import-assertions" + "name": "explicit-module-boundary-types", + "url": "https://docs.deno.com/lint/rules/explicit-module-boundary-types" + } + ], + "eslint": [ + { + "name": "@typescript-eslint/explicit-module-boundary-types", + "url": "https://typescript-eslint.io/rules/explicit-module-boundary-types" } ], "flint": { - "name": "importAssertions", + "name": "moduleBoundaryTypes", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "notes": "Generally handled by parsers." + "oxlint": [ + { + "name": "typescript/explicit-module-boundary-types", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/explicit-module-boundary-types.html" + } + ] }, { "biome": [ { - "name": "noImportAssign", - "url": "https://biomejs.dev/linter/rules/noImportAssign" + "name": "noGlobalDirnameFilename", + "url": "https://biomejs.dev/linter/rules/noGlobalDirnameFilename" } ], - "deno": [ + "eslint": [ { - "name": "no-import-assign", - "url": "https://docs.deno.com/lint/rules/no-import-assign" + "name": "unicorn/prefer-module", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-module.md" } ], + "flint": { + "name": "moduleFormats", + "plugin": "ts", + "status": "skipped" + } + }, + { "eslint": [ { - "name": "no-import-assign", - "url": "https://eslint.org/docs/latest/rules/no-import-assign" + "name": "unicorn/import-style", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/import-style.md" } ], "flint": { - "name": "importAssignments", + "name": "moduleImportStyles", "plugin": "ts", - "preset": "Untyped" + "status": "skipped" } }, { - "biome": [ + "eslint": [ { - "name": "noImportCycles", - "url": "https://biomejs.dev/linter/rules/noImportCycles" + "name": "unicorn/require-module-specifiers", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-module-specifiers.md" } ], + "flint": { + "name": "moduleSpecifierLists", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "import/no-cycle", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-cycle.md" + "name": "no-unexpected-multiline", + "url": "https://eslint.org/docs/latest/rules/no-unexpected-multiline" } ], "flint": { - "name": "importCycles", + "name": "multilineAmbiguities", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic" }, "oxlint": [ { - "name": "import/no-cycle", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-cycle.html" + "name": "eslint/no-unexpected-multiline", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unexpected-multiline.html" } ] }, { "eslint": [ { - "name": "import/default", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/default.md" + "name": "no-multi-str", + "url": "https://eslint.org/docs/latest/rules/no-multi-str" } ], "flint": { - "name": "importDefaults", + "name": "multilineStrings", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "notes": "Handled by TypeScript", "oxlint": [ { - "name": "eslint/default", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/default.html" + "name": "eslint/no-multi-str", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-multi-str.html" } ] }, { "eslint": [ { - "name": "import/no-duplicates", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-duplicates.md" + "name": "unicorn/prefer-switch", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-switch.md" } ], "flint": { - "name": "importDuplicates", + "name": "multipleElseIfSwitches", + "plugin": "ts", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "unicorn/no-anonymous-default-export", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-anonymous-default-export.md" + } + ], + "flint": { + "name": "namedDefaultExports", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "import/no-duplicates", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-duplicates.html" + "name": "import/no-anonymous-default-export", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-anonymous-default-export.html" + }, + { + "name": "unicorn/no-anonymous-default-export", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-anonymous-default-export.html" } ] }, { + "biome": [ + { + "name": "noNamespace", + "url": "https://biomejs.dev/linter/rules/noNamespace" + } + ], + "deno": [ + { + "name": "no-namespace", + "url": "https://docs.deno.com/lint/rules/no-namespace" + } + ], "eslint": [ { - "name": "import/no-empty-named-blocks", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-empty-named-blocks.md" + "name": "@typescript-eslint/no-namespace", + "url": "https://typescript-eslint.io/rules/no-namespace" } ], "flint": { - "name": "importEmptyBlocks", + "name": "namespaceDeclarations", "plugin": "ts", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "import/no-empty-named-blocks", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-empty-named-blocks.html" + "name": "typescript/no-namespace", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-namespace.html" } ] }, { - "eslint": [ + "deno": [ { - "name": "import/no-extraneous-dependencies", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-extraneous-dependencies.md" + "name": "no-implicit-declare-namespace-export", + "url": "https://docs.deno.com/lint/rules/no-implicit-declare-namespace-export" } ], "flint": { - "name": "importExtraneousDependencies", + "name": "namespaceImplicitAmbientImports", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "preset": "stylistic", + "strictness": "strict" } }, { + "biome": [ + { + "name": "useNamespaceKeyword", + "url": "https://biomejs.dev/linter/rules/useNamespaceKeyword" + } + ], + "deno": [ + { + "name": "prefer-namespace-keyword", + "url": "https://docs.deno.com/lint/rules/prefer-namespace-keyword" + } + ], "eslint": [ { - "name": "import/first", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/first.md" + "name": "@typescript-eslint/prefer-namespace-keyword", + "url": "https://typescript-eslint.io/rules/prefer-namespace-keyword" } ], "flint": { - "name": "importFirst", + "name": "namespaceKeywords", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" }, "oxlint": [ { - "name": "import/first", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/first.html" + "name": "typescript/prefer-namespace-keyword", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-namespace-keyword.html" } ] }, { + "biome": [ + { + "name": "useNamingConvention", + "url": "https://biomejs.dev/linter/rules/useNamingConvention" + } + ], + "deno": [ + { + "name": "camelcase", + "url": "https://docs.deno.com/lint/rules/camelcase" + } + ], "eslint": [ { - "name": "import/max-dependencies", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/max-dependencies.md" + "name": "camelcase", + "url": "https://eslint.org/docs/latest/rules/camelcase" + }, + { + "name": "@typescript-eslint/naming-conventions", + "url": "https://typescript-eslint.io/rules/naming-conventions" } ], "flint": { - "name": "importMaximumDependencies", + "name": "namingConventions", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "import/max-dependencies", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/max-dependencies.html" - } - ] + "status": "skipped" + } }, { "eslint": [ { - "name": "import/named", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/named.md" + "name": "no-extend-native", + "url": "https://eslint.org/docs/latest/rules/no-extend-native" } ], "flint": { - "name": "importNameMatches", + "name": "nativeObjectExtensions", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped" }, "oxlint": [ { - "name": "import/named", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/named.html" + "name": "eslint/no-extend-native", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extend-native.html" } ] }, { "eslint": [ { - "name": "import/namespace", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/namespace.md" + "name": "unicorn/prefer-negative-index", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-negative-index.md" } ], "flint": { - "name": "importNamespaceProperties", + "name": "negativeIndexLengthMethods", "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Handled by TypeScript", - "oxlint": [ - { - "name": "eslint/namespace", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/namespace.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { + "biome": [ + { + "name": "noCompareNegZero", + "url": "https://biomejs.dev/linter/rules/noCompareNegZero" + } + ], + "deno": [ + { + "name": "no-compare-neg-zero", + "url": "https://docs.deno.com/lint/rules/no-compare-neg-zero" + } + ], "eslint": [ { - "name": "import/no-namespace", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-namespace.md" + "name": "no-compare-neg-zero", + "url": "https://eslint.org/docs/latest/rules/no-compare-neg-zero" } ], "flint": { - "name": "importNamespaces", + "name": "negativeZeroComparisons", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "import/no-namespace", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-namespace.html" + "name": "eslint/no-compare-neg-zero", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-compare-neg-zero.html" } ] }, { + "biome": [ + { + "name": "useCollapsedElseIf", + "url": "https://biomejs.dev/linter/rules/useCollapsedElseIf" + }, + { + "name": "useCollapsedIf", + "url": "https://biomejs.dev/linter/rules/useCollapsedIf" + } + ], "eslint": [ { - "name": "import/no-self-import", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-self-import.md" + "name": "no-lonely-if", + "url": "https://eslint.org/docs/latest/rules/no-lonely-if" + }, + { + "name": "unicorn/no-lonely-if", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-lonely-if.md" } ], "flint": { - "name": "importSelf", + "name": "nestedStandaloneIfs", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic" }, "oxlint": [ { - "name": "import/no-self-import", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-self-import.html" + "name": "eslint/no-lonely-if", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-lonely-if.html" + }, + { + "name": "unicorn/no-lonely-if", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-lonely-if.html" } ] }, { + "biome": [ + { + "name": "noMisleadingInstantiator", + "url": "https://biomejs.dev/linter/rules/noMisleadingInstantiator" + } + ], + "deno": [ + { + "name": "no-misused-new", + "url": "https://docs.deno.com/lint/rules/no-misused-new" + } + ], "eslint": [ { - "name": "sort-imports", - "url": "https://eslint.org/docs/latest/rules/sort-imports" + "name": "@typescript-eslint/no-misused-new", + "url": "https://typescript-eslint.io/rules/no-misused-new" } ], "flint": { - "name": "importsSorting", + "name": "newDefinitions", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-misused-new", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-misused-new.html" + } + ] }, { "eslint": [ { - "name": "@typescript-eslint/no-import-type-side-effects", - "url": "https://typescript-eslint.io/rules/no-import-type-side-effects" + "name": "no-new", + "url": "https://eslint.org/docs/latest/rules/no-new" } ], "flint": { - "name": "importTypeSideEffects", + "name": "newExpressions", "plugin": "ts", - "preset": "None" + "preset": "logical", + "status": "implemented" }, + "notes": "oxc/missing-throw is a subset", "oxlint": [ { - "name": "typescript/no-import-type-side-effects", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-import-type-side-effects.html" + "name": "eslint/no-new", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-new.html" + }, + { + "name": "oxc/missing-throw", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/missing-throw.html" } ] }, { + "biome": [ + { + "name": "noInvalidBuiltinInstantiation", + "url": "https://biomejs.dev/linter/rules/noInvalidBuiltinInstantiation" + } + ], + "deno": [ + { + "name": "no-new-symbol", + "url": "https://docs.deno.com/lint/rules/no-new-symbol" + } + ], "eslint": [ { - "name": "import/no-useless-path-segments", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-useless-path-segments.md" + "name": "no-new-native-nonconstructor", + "url": "https://eslint.org/docs/latest/rules/no-new-native-nonconstructor" } ], "flint": { - "name": "importUnnecessaryPathSegments", + "name": "newNativeNonConstructors", "plugin": "ts", - "preset": "Stylistic" + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "import/no-useless-path-segments", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-useless-path-segments.html" + "name": "eslint/no-new-native-nonconstructor", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-new-native-nonconstructor.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/consistent-indexed-object-style", - "url": "https://typescript-eslint.io/rules/consistent-indexed-object-style" + "name": "@typescript-eslint/non-nullable-type-assertion-style", + "url": "https://typescript-eslint.io/rules/non-nullable-type-assertion-style" } ], "flint": { - "name": "indexedObjectTypes", + "name": "nonNullableTypeAssertions", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic" }, "oxlint": [ { - "name": "typescript/consistent-indexed-object-style", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-indexed-object-style.html" + "name": "typescript/non-nullable-type-assertion-style", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/non-nullable-type-assertion-style.html" } ] }, { "eslint": [ { - "name": "no-inline-comments", - "url": "https://eslint.org/docs/latest/rules/no-inline-comments" + "name": "@typescript-eslint/no-non-null-asserted-nullish-coalescing", + "url": "https://typescript-eslint.io/rules/no-non-null-asserted-nullish-coalescing" } ], "flint": { - "name": "inlineComments", + "name": "nonNullAssertedNullishCoalesces", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "typescript/no-non-null-asserted-nullish-coalescing", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-non-null-asserted-nullish-coalescing.html" + } + ] }, { "biome": [ { - "name": "noInnerDeclarations", - "url": "https://biomejs.dev/linter/rules/noInnerDeclarations" + "name": "noNonNullAssertedOptionalChain", + "url": "https://biomejs.dev/linter/rules/noNonNullAssertedOptionalChain" } ], "deno": [ { - "name": "no-inner-declarations", - "url": "https://docs.deno.com/lint/rules/no-inner-declarations" + "name": "no-non-null-asserted-optional-chain", + "url": "https://docs.deno.com/lint/rules/no-non-null-asserted-optional-chain" } ], "eslint": [ { - "name": "no-inner-declarations", - "url": "https://eslint.org/docs/latest/rules/no-inner-declarations" + "name": "@typescript-eslint/no-non-null-asserted-optional-chain", + "url": "https://typescript-eslint.io/rules/no-non-null-asserted-optional-chain" } ], "flint": { - "name": "innerDeclarations", + "name": "nonNullAssertedOptionalChains", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-inner-declarations", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-inner-declarations.html" + "name": "typescript/no-non-null-asserted-optional-chain", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-non-null-asserted-optional-chain.html" } ] }, { - "biome": [ - { - "name": "useIsArray", - "url": "https://biomejs.dev/linter/rules/useIsArray" - } - ], "eslint": [ { - "name": "unicorn/no-instanceof-builtins", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-instanceof-builtins.md" + "name": "@typescript-eslint/no-confusing-non-null-assertion", + "url": "https://typescript-eslint.io/rules/no-confusing-non-null-assertion" } ], "flint": { - "name": "instanceOfArrays", + "name": "nonNullAssertionPlacement", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "strictness": "strict" }, - "notes": "Only for built-ins with a static .is* (Array)", "oxlint": [ { - "name": "unicorn/no-instanceof-array", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-instanceof-array.html" - }, - { - "name": "unicorn/no-instanceof-builtins", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-instanceof-builtins.html" + "name": "typescript/no-confusing-non-null-assertion", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-confusing-non-null-assertion.html" } ] }, { - "eslint": [ - { - "name": "no-invalid-this", - "url": "https://eslint.org/docs/latest/rules/no-invalid-this" - }, + "biome": [ { - "name": "@typescript-eslint/no-invalid-this", - "url": "https://typescript-eslint.io/rules/no-invalid-this" + "name": "noNonNullAssertion", + "url": "https://biomejs.dev/linter/rules/noNonNullAssertion" } ], - "flint": { - "name": "invalidThis", - "plugin": "ts", - "preset": "Untyped" - } - }, - { - "biome": [ + "deno": [ { - "name": "noConfusingVoidType", - "url": "https://biomejs.dev/linter/rules/noConfusingVoidType" + "name": "no-non-null-assertion", + "url": "https://docs.deno.com/lint/rules/no-non-null-assertion" } ], "eslint": [ { - "name": "@typescript-eslint/no-invalid-void-type", - "url": "https://typescript-eslint.io/rules/no-invalid-void-type" + "name": "@typescript-eslint/no-non-null-assertion", + "url": "https://typescript-eslint.io/rules/no-non-null-assertion" } ], "flint": { - "name": "invalidVoidTypes", + "name": "nonNullAssertions", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" - } + "preset": "logical", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "typescript/no-non-null-assertion", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-non-null-assertion.html" + } + ] }, { "biome": [ { - "name": "useIsNan", - "url": "https://biomejs.dev/linter/rules/useIsNan" - } - ], - "deno": [ - { - "name": "use-isnan", - "url": "https://docs.deno.com/lint/rules/use-isnan" + "name": "noNonoctalDecimalEscape", + "url": "https://biomejs.dev/linter/rules/noNonoctalDecimalEscape" } ], "eslint": [ { - "name": "use-isnan", - "url": "https://eslint.org/docs/latest/rules/use-isnan" + "name": "no-nonoctal-decimal-escape", + "url": "https://eslint.org/docs/latest/rules/no-nonoctal-decimal-escape" } ], "flint": { - "name": "isNaNComparisons", + "name": "nonOctalDecimalEscapes", "plugin": "ts", - "preset": "Logical" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/use-isnan", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/use-isnan.html" + "name": "eslint/no-nonoctal-decimal-escape", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-nonoctal-decimal-escape.html" } ] }, { "eslint": [ { - "name": "unicorn/no-array-callback-reference", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-array-callback-reference.md" - } - ], - "flint": { - "name": "iteratorMethodFunctionReferences", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { - "eslint": [ - { - "name": "jsdoc/check-access", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-access.md" + "name": "no-eq-null", + "url": "https://eslint.org/docs/latest/rules/no-eq-null" } ], "flint": { - "name": "jsdocAccessTags", + "name": "nullComparisons", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" }, "oxlint": [ { - "name": "jsdoc/check-ass", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/check-ass.html" + "name": "eslint/no-eql-null", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-eql-null.html" } ] }, { "eslint": [ { - "name": "jsdoc/check-alignment", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-alignment.md" + "name": "@typescript-eslint/prefer-nullish-coalescing", + "url": "https://typescript-eslint.io/rules/prefer-nullish-coalescing" } ], "flint": { - "name": "jsdocAlignment", + "name": "nullishCoalescingOperators", "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "I intend to write a Prettier plugin." + "preset": "stylistic" + } }, { "eslint": [ { - "name": "jsdoc/no-multi-asterisks", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-multi-asterisks.md" - }, - { - "name": "jsdoc/require-asterisk-prefix", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-asterisk-prefix.md" + "name": "unicorn/no-null", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-null.md" } ], "flint": { - "name": "jsdocAsterisks", + "name": "nulls", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/no-null", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-null.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/no-blank-block-descriptions", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-blank-block-descriptions.md" + "name": "useSimpleNumberKeys", + "url": "https://biomejs.dev/linter/rules/useSimpleNumberKeys" } ], "flint": { - "name": "jsdocBlankBlockDescriptions", + "name": "numberKeyLiterals", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { - "eslint": [ - { - "name": "jsdoc/convert-to-jsdoc-comments", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/convert-to-jsdoc-comments.md" - } - ], "flint": { - "name": "jsdocConvertToJSDocComments", + "name": "numberMethodRanges", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "oxc/number-arg-out-of-range", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/number-arg-out-of-range.html" + } + ] }, { + "biome": [ + { + "name": "noGlobalIsFinite", + "url": "https://biomejs.dev/linter/rules/noGlobalIsFinite" + }, + { + "name": "noGlobalIsNan", + "url": "https://biomejs.dev/linter/rules/noGlobalIsNan" + } + ], "eslint": [ { - "name": "jsdoc/no-defaults", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-defaults.md" + "name": "unicorn/prefer-number-properties", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-number-properties.md" } ], "flint": { - "name": "jsdocDefaults", + "name": "numberStaticMethods", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "jsdoc/no-defaults", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/no-defaults.html" + "name": "unicorn/prefer-number-properties", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-number-properties.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/no-undefined-types", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-undefined-types.md" + "name": "useNumberToFixedDigitsArgument", + "url": "https://biomejs.dev/linter/rules/useNumberToFixedDigitsArgument" } ], - "flint": { - "name": "jsdocDefinedTypes", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "jsdoc/require-description-complete-sentence", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-description-complete-sentence.md" + "name": "unicorn/require-number-to-fixed-digits-argument", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-number-to-fixed-digits-argument.md" } ], "flint": { - "name": "jsdocDescriptionCompleteSentences", + "name": "numberToFixedDigits", "plugin": "ts", - "preset": "Not implementing" - } - }, - { - "eslint": [ + "status": "skipped" + }, + "oxlint": [ { - "name": "jsdoc/require-description", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-description.md" + "name": "unicorn/require-number-to-fixed-digits-argument", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/require-number-to-fixed-digits-argument.html" } - ], - "flint": { - "name": "jsdocDescriptions", - "plugin": "ts", - "preset": "Not implementing" - } + ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/no-blank-blocks", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-blank-blocks.md" + "name": "noApproximativeNumericConstant", + "url": "https://biomejs.dev/linter/rules/noApproximativeNumericConstant" } ], "flint": { - "name": "jsdocEmptyBlocks", + "name": "numericConstantApproximations", "plugin": "ts", - "preset": "Stylistic" - } - }, - { - "eslint": [ + "status": "skipped" + }, + "oxlint": [ { - "name": "jsdoc/empty-tags", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/empty-tags.md" + "name": "oxc/approx-constant", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/approx-constant.html" } - ], + ] + }, + { "flint": { - "name": "jsdocEmptyTags", + "name": "numericErasingOperations", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" }, "oxlint": [ { - "name": "jsdoc/empty-tags", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/empty-tags.html" + "name": "oxc/erasing-op", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/erasing-op.html" } ] }, { "eslint": [ { - "name": "jsdoc/require-example", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-example.md" + "name": "unicorn/number-literal-case", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/number-literal-case.md" } ], "flint": { - "name": "jsdocExamples", + "name": "numericLiteralCasing", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/number-literal-case", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/number-literal-case.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/require-file-overview", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-file-overview.md" + "name": "useNumericLiterals", + "url": "https://biomejs.dev/linter/rules/useNumericLiterals" } ], - "flint": { - "name": "jsdocFileOverviews", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "jsdoc/implements-on-classes", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/implements-on-classes.md" + "name": "prefer-numeric-literals", + "url": "https://eslint.org/docs/latest/rules/prefer-numeric-literals" } ], "flint": { - "name": "jsdocImplementsTags", + "name": "numericLiteralParsing", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "jsdoc/implements-on-classes", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/implements-on-classes.html" + "name": "eslint/prefer-numeric-literals", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-numeric-literals.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/imports-as-dependencies", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/imports-as-dependencies.md" + "name": "noPrecisionLoss", + "url": "https://biomejs.dev/linter/rules/noPrecisionLoss" } ], - "flint": { - "name": "jsdocImportsAsDependencies", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "jsdoc/check-indentation", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-indentation.md" + "name": "no-loss-of-precision", + "url": "https://eslint.org/docs/latest/rules/no-loss-of-precision" + }, + { + "name": "@typescript-eslint/no-loss-of-precision", + "url": "https://typescript-eslint.io/rules/no-loss-of-precision" } ], "flint": { - "name": "jsdocIndentation", + "name": "numericPrecision", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, - "notes": "I intend to write a Prettier plugin." + "oxlint": [ + { + "name": "eslint/no-loss-of-precision", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-loss-of-precision.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/informative-docs", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/informative-docs.md" + "name": "useNumericSeparators", + "url": "https://biomejs.dev/linter/rules/useNumericSeparators" } ], - "flint": { - "name": "jsdocInformativeDocs", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "jsdoc/check-line-alignment", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-line-alignment.md" + "name": "unicorn/numeric-separators-style", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/numeric-separators-style.md" } ], "flint": { - "name": "jsdocLineAlignment", + "name": "numericSeparatorGroups", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, - "notes": "I intend to write a Prettier plugin." + "oxlint": [ + { + "name": "unicorn/numeric-separators-style", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/numeric-separators-style.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/match-description", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/match-description.md" + "name": "useObjectSpread", + "url": "https://biomejs.dev/linter/rules/useObjectSpread" } ], - "flint": { - "name": "jsdocMatchDescriptions", - "plugin": "ts", - "preset": "Not implementing" - } - }, - { "eslint": [ { - "name": "jsdoc/match-names", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/match-names.md" + "name": "prefer-object-spread", + "url": "https://eslint.org/docs/latest/rules/prefer-object-spread" } ], "flint": { - "name": "jsdocMatchNames", + "name": "objectAssignSpreads", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "eslint/prefer-object-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-object-spread.html" + } + ] }, { "eslint": [ { - "name": "jsdoc/no-bad-blocks", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-bad-blocks.md" + "name": "no-object-constructor", + "url": "https://eslint.org/docs/latest/rules/no-object-constructor" } ], "flint": { - "name": "jsdocMisleadingBlocks", + "name": "objectCalls", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "eslint/no-object-constructor", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-object-constructor.html" + } + ] }, { "eslint": [ { - "name": "jsdoc/no-missing-syntax", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-missing-syntax.md" + "name": "unicorn/no-object-as-default-parameter", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-object-as-default-parameter.md" } ], "flint": { - "name": "jsdocMissingSyntax", + "name": "objectDefaultParameters", "plugin": "ts", - "preset": "Not implementing" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/no-object-as-default-parameter", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-object-as-default-parameter.html" + } + ] }, { "eslint": [ { - "name": "jsdoc/multiline-blocks", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/multiline-blocks.md" + "name": "unicorn/prefer-object-from-entries", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-object-from-entries.md" } ], "flint": { - "name": "jsdocMultilineBlocks", + "name": "objectEntriesMethods", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-object-from-entries", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-object-from-entries.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/require-hyphen-before-param-description", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-hyphen-before-param-description.md" + "name": "noPrototypeBuiltins", + "url": "https://biomejs.dev/linter/rules/noPrototypeBuiltins" } ], - "flint": { - "name": "jsdocParameterDescriptionHyphens", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "jsdoc/require-param-description", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-param-description.md" + "name": "prefer-object-has-own", + "url": "https://eslint.org/docs/latest/rules/prefer-object-has-own" } ], "flint": { - "name": "jsdocParameterDescriptions", + "name": "objectHasOwns", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" }, "oxlint": [ { - "name": "jsdoc/require-param-description", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-param-description.html" + "name": "eslint/prefer-object-has-own", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-object-has-own.html" } ] }, { + "biome": [ + { + "name": "noDuplicateObjectKeys", + "url": "https://biomejs.dev/linter/rules/noDuplicateObjectKeys" + } + ], "eslint": [ { - "name": "jsdoc/check-param-names", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-param-names.md" + "name": "no-dupe-keys", + "url": "https://eslint.org/docs/latest/rules/no-dupe-keys" } ], "flint": { - "name": "jsdocParameterNames", + "name": "objectKeyDuplicates", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" } }, { - "eslint": [ - { - "name": "jsdoc/require-param", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-param.md" - } - ], "flint": { - "name": "jsdocParameters", + "name": "objectLiteralComparisons", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "jsdoc/require-param", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-param.html" + "name": "oxc/bad-object-literal-comparison", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-object-literal-comparison.html" } ] }, { "eslint": [ { - "name": "jsdoc/require-param-type", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-param-type.md" + "name": "no-proto", + "url": "https://eslint.org/docs/latest/rules/no-proto" } ], "flint": { - "name": "jsdocParameterTypes", + "name": "objectProto", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped", + "status": "implemented" }, "oxlint": [ { - "name": "jsdoc/require-param-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-param-type.html" + "name": "eslint/no-proto", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-proto.html" } ] }, { + "biome": [ + { + "name": "noPrototypeBuiltins", + "url": "https://biomejs.dev/linter/rules/noPrototypeBuiltins" + } + ], + "deno": [ + { + "name": "no-prototype-builtins", + "url": "https://docs.deno.com/lint/rules/no-prototype-builtins" + } + ], "eslint": [ { - "name": "jsdoc/require-property", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-property.md" + "name": "no-prototype-builtins", + "url": "https://eslint.org/docs/latest/rules/no-prototype-builtins" } ], "flint": { - "name": "jsdocProperties", + "name": "objectPrototypeBuiltIns", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "jsdoc/require-property", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-property.html" + "name": "eslint/no-prototype-builtins", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-prototype-builtins.html" } ] }, { + "biome": [ + { + "name": "useConsistentObjectDefinitions", + "url": "https://biomejs.dev/linter/rules/useConsistentObjectDefinitions" + } + ], "eslint": [ { - "name": "jsdoc/require-property-description", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-property-description.md" + "name": "object-shorthand", + "url": "https://eslint.org/docs/latest/rules/object-shorthand" } ], "flint": { - "name": "jsdocPropertyDescriptions", + "name": "objectShorthand", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "jsdoc/require-property-description", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-property-description.html" - } - ] + "preset": "stylistic" + } }, { "eslint": [ { - "name": "jsdoc/check-property-names", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-property-names.md" + "name": "unicorn/no-useless-fallback-in-spread", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-fallback-in-spread.md" } ], "flint": { - "name": "jsdocPropertyNames", + "name": "objectSpreadUnnecessaryFallbacks", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" }, "oxlint": [ { - "name": "jsdoc/check-property-names", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/check-property-names.html" + "name": "unicorn/no-useless-fallback-in-spread", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-fallback-in-spread.html" } ] }, { + "biome": [ + { + "name": "useConsistentTypeDefinitions", + "url": "https://biomejs.dev/linter/rules/useConsistentTypeDefinitions" + } + ], "eslint": [ { - "name": "jsdoc/require-property-type", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-property-type.md" + "name": "@typescript-eslint/consistent-type-definitions", + "url": "https://typescript-eslint.io/rules/consistent-type-definitions" } ], "flint": { - "name": "jsdocPropertyTypes", + "name": "objectTypeDefinitions", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" }, "oxlint": [ { - "name": "jsdoc/require-property-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-property-type.html" + "name": "typescript/consistent-type-definitions", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-type-definitions.html" } ] }, { + "biome": [ + { + "name": "noOctalEscape", + "url": "https://biomejs.dev/linter/rules/noOctalEscape" + } + ], "eslint": [ { - "name": "jsdoc/no-types", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-types.md" + "name": "no-octal-escape", + "url": "https://eslint.org/docs/latest/rules/no-octal-escape" } ], "flint": { - "name": "jsdocRedundantTypes", + "name": "octalEscapes", "plugin": "ts", - "preset": "Stylistic" + "preset": "untyped", + "status": "implemented" } }, { "eslint": [ { - "name": "jsdoc/require-jsdoc", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-jsdoc.md" + "name": "no-octal", + "url": "https://eslint.org/docs/latest/rules/no-octal" } ], "flint": { - "name": "jsdocRequired", + "name": "octalNumbers", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped", + "status": "implemented" } }, { - "eslint": [ + "biome": [ { - "name": "jsdoc/require-returns-description", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns-description.md" + "name": "useShorthandAssign", + "url": "https://biomejs.dev/linter/rules/useShorthandAssign" } ], - "flint": { - "name": "jsdocReturnDescriptions", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "jsdoc/require-returns-description", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-returns-description.html" - } - ] - }, - { "eslint": [ { - "name": "jsdoc/require-returns", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns.md" + "name": "operator-assignment", + "url": "https://eslint.org/docs/latest/rules/operator-assignment" } ], "flint": { - "name": "jsdocReturns", + "name": "operatorAssignmentShorthand", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" }, "oxlint": [ { - "name": "jsdoc/require-returns", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-returns.html" + "name": "eslint/operator-assignment", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/operator-assignment.html" } ] }, { - "eslint": [ - { - "name": "jsdoc/require-returns-type", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns-type.md" - } - ], "flint": { - "name": "jsdocReturnTypes", + "name": "optionalChainExpressions", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "jsdoc/require-returns-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-returns-type.html" + "name": "oxc/no-optional-chaining", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-optional-chaining.html" } ] }, { + "biome": [ + { + "name": "useOptionalChain", + "url": "https://biomejs.dev/linter/rules/useOptionalChain" + } + ], "eslint": [ { - "name": "jsdoc/tag-lines", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/tag-lines.md" + "name": "@typescript-eslint/prefer-optional-chain", + "url": "https://typescript-eslint.io/rules/prefer-optional-chain" } ], "flint": { - "name": "jsdocTagLines", + "name": "optionalChainOperators", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" } }, { + "biome": [ + { + "name": "useAdjacentOverloadSignatures", + "url": "https://biomejs.dev/linter/rules/useAdjacentOverloadSignatures" + } + ], + "deno": [ + { + "name": "adjacent-overload-signatures", + "url": "https://docs.deno.com/lint/rules/adjacent-overload-signatures" + } + ], "eslint": [ { - "name": "jsdoc/check-tag-names", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-tag-names.md" + "name": "@typescript-eslint/adjacent-overload-signatures", + "url": "https://typescript-eslint.io/rules/adjacent-overload-signatures" } ], "flint": { - "name": "jsdocTagNames", + "name": "overloadSignaturesAdjacent", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic" }, "oxlint": [ { - "name": "jsdoc/check-tag-names", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/check-tag-names.html" + "name": "typescript/adjacent-overload-signatures", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/adjacent-overload-signatures.html" } ] }, { + "biome": [ + { + "name": "noParameterProperties", + "url": "https://biomejs.dev/linter/rules/noParameterProperties" + } + ], "eslint": [ { - "name": "jsdoc/check-template-names", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-template-names.md" + "name": "@typescript-eslint/parameter-properties", + "url": "https://typescript-eslint.io/rules/parameter-properties" + }, + { + "name": "erasable-syntax-only/parameter-properties", + "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-erasable-syntax-only/blob/HEAD/docs/rules/parameter-properties.md" } ], "flint": { - "name": "jsdocTemplateNames", + "name": "parameterProperties", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" } }, { "eslint": [ { - "name": "jsdoc/require-template", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-template.md" + "name": "@typescript-eslint/no-unnecessary-parameter-property-assignment", + "url": "https://typescript-eslint.io/rules/no-unnecessary-parameter-property-assignment" } ], "flint": { - "name": "jsdocTemplates", + "name": "parameterPropertyAssignment", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unnecessary-parameter-property-assignment", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-parameter-property-assignment.html" + } + ] }, { + "biome": [ + { + "name": "noParameterAssign", + "url": "https://biomejs.dev/linter/rules/noParameterAssign" + } + ], "eslint": [ { - "name": "jsdoc/text-escaping", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/text-escaping.md" + "name": "no-param-reassign", + "url": "https://eslint.org/docs/latest/rules/no-param-reassign" } ], "flint": { - "name": "jsdocTextEscaping", + "name": "parameterReassignments", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" } }, { + "biome": [ + { + "name": "useParseIntRadix", + "url": "https://biomejs.dev/linter/rules/useParseIntRadix" + } + ], "eslint": [ { - "name": "jsdoc/require-throws", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-throws.md" + "name": "radix", + "url": "https://eslint.org/docs/latest/rules/radix" } ], "flint": { - "name": "jsdocThrows", + "name": "parseIntRadixes", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "eslint/radix", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/radix.html" + } + ] }, { "eslint": [ { - "name": "jsdoc/check-syntax, jsdoc/check-types", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-syntax, jsdoc.md" + "name": "@typescript-eslint/restrict-plus-operands", + "url": "https://typescript-eslint.io/rules/restrict-plus-operands" } ], "flint": { - "name": "jsdocTypesSyntax", + "name": "plusOperands", "plugin": "ts", - "preset": "Stylistic" - } - }, - { - "eslint": [ + "preset": "logical" + }, + "oxlint": [ { - "name": "jsdoc/require-returns-check", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-returns-check.md" + "name": "typescript/restrict-plus-operands", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/restrict-plus-operands.html" } - ], - "flint": { - "name": "jsdocUnnecessaryReturns", - "plugin": "ts", - "preset": "Stylistic" - } + ] }, { "eslint": [ { - "name": "jsdoc/require-yields-check", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-yields-check.md" + "name": "no-plusplus", + "url": "https://eslint.org/docs/latest/rules/no-plusplus" } ], "flint": { - "name": "jsdocUnnecessaryYields", + "name": "plusPlusOperators", "plugin": "ts", - "preset": "Stylistic" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-plusplus", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-plusplus.html" + } + ] }, { "eslint": [ { - "name": "jsdoc/valid-types", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/valid-types.md" + "name": "unicorn/no-keyword-prefix", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-keyword-prefix.md" } ], "flint": { - "name": "jsdocValidTypes", + "name": "prefixedClassLikes", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" } }, { - "eslint": [ + "flint": { + "name": "promiseAlwaysReturn", + "plugin": "ts", + "status": "skipped" + }, + "notes": "Superseded by noFloatingPromises.", + "oxlint": [ { - "name": "jsdoc/check-values", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/check-values.md" + "name": "promise/always-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/always-return.html" } - ], + ] + }, + { "flint": { - "name": "jsdocValues", + "name": "promiseArgumentCounts", "plugin": "ts", - "preset": "Stylistic" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "promise/valid-params", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/valid-params.html" + } + ] }, { "eslint": [ { - "name": "jsdoc/require-yields", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/require-yields.md" + "name": "promise/prefer-await-to-callbacks", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/prefer-await-to-callbacks.md" } ], "flint": { - "name": "jsdocYields", + "name": "promiseAwaitableCallbacks", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" }, "oxlint": [ { - "name": "jsdoc/require-yields", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/jsdoc/require-yields.html" + "name": "promise/prefer-await-to-callbacks", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/prefer-await-to-callbacks.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "useJsonImportAttributes", - "url": "https://biomejs.dev/linter/rules/useJsonImportAttributes" + "name": "promise/prefer-await-to-then", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/prefer-await-to-then.md" } ], "flint": { - "name": "jsonImportAttributes", + "name": "promiseAwaitableThens", "plugin": "ts", - "preset": "Not implementing" - } - }, - { - "biome": [ + "status": "skipped" + }, + "oxlint": [ { - "name": "noConfusingLabels", - "url": "https://biomejs.dev/linter/rules/noConfusingLabels" + "name": "promise/prefer-await-to-then", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/prefer-await-to-then.html" } - ], + ] + }, + { "eslint": [ { - "name": "no-labels", - "url": "https://eslint.org/docs/latest/rules/no-labels" + "name": "promise/prefer-catch", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/prefer-catch.md" } ], "flint": { - "name": "labels", + "name": "promiseCatchableThens", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-labels", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-labels.html" + "name": "promise/prefer-catch", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/prefer-catch.html" } ] }, { - "biome": [ - { - "name": "noLabelVar", - "url": "https://biomejs.dev/linter/rules/noLabelVar" - } - ], - "eslint": [ + "flint": { + "name": "promiseCatchOrReturn", + "plugin": "ts", + "status": "skipped" + }, + "notes": "Superseded by noFloatingPromises.", + "oxlint": [ { - "name": "no-label-var", - "url": "https://eslint.org/docs/latest/rules/no-label-var" + "name": "promise/catch-or-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/catch-or-return.html" } - ], + ] + }, + { "flint": { - "name": "labelVariableNames", + "name": "promiseErrorFirstCallbacks", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, + "notes": "Superseded by noFloatingPromises.", "oxlint": [ { - "name": "eslint/no-label-var", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-label-var.html" + "name": "promise/no-promise-in-callback", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-promise-in-callback.html" } ] }, { "eslint": [ { - "name": "unicorn/prefer-bigint-literals", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-bigint-literals.md" + "name": "no-promise-executor-return", + "url": "https://eslint.org/docs/latest/rules/no-promise-executor-return" } ], "flint": { - "name": "literalConstructorWrappers", + "name": "promiseExecutorReturns", "plugin": "ts", - "preset": "Stylistic" - }, - "notes": "Will apply to all literals, not just bigint" + "preset": "logical" + } }, { - "biome": [ - { - "name": "noAwaitInLoops", - "url": "https://biomejs.dev/linter/rules/noAwaitInLoops" - } - ], - "deno": [ - { - "name": "no-await-in-loop", - "url": "https://docs.deno.com/lint/rules/no-await-in-loop" - } - ], "eslint": [ { - "name": "no-await-in-loop", - "url": "https://eslint.org/docs/latest/rules/no-await-in-loop" + "name": "promise/no-return-in-finally", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/no-return-in-finally.md" } ], "flint": { - "implemented": true, - "name": "loopAwaits", - "plugin": "performance", - "preset": "Logical" + "name": "promiseFinallyReturns", + "plugin": "ts", + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-await-in-loop", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-await-in-loop.html" + "name": "promise/no-return-in-finally", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-return-in-finally.html" } ] }, { "eslint": [ { - "name": "no-unmodified-loop-condition", - "url": "https://eslint.org/docs/latest/rules/no-unmodified-loop-condition" + "name": "@typescript-eslint/promise-function-async", + "url": "https://typescript-eslint.io/rules/promise-function-async" } ], "flint": { - "name": "loopConditionConstants", + "name": "promiseFunctionAsync", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "typescript/promise-function-async", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/promise-function-async.html" + } + ] }, { "eslint": [ { - "name": "no-loop-func", - "url": "https://eslint.org/docs/latest/rules/no-loop-func" - }, - { - "name": "@typescript-eslint/no-loop-func", - "url": "https://typescript-eslint.io/rules/no-loop-func" + "name": "unicorn/no-single-promise-in-promise-methods", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-single-promise-in-promise-methods.md" } ], "flint": { - "implemented": true, - "name": "loopFunctions", - "plugin": "performance", - "preset": "Logical" - } - }, - { - "biome": [ + "name": "promiseMethodSingleArrayArguments", + "plugin": "ts", + "preset": "logical" + }, + "oxlint": [ { - "name": "noMagicNumbers", - "url": "https://biomejs.dev/linter/rules/noMagicNumbers" + "name": "unicorn/no-single-promise-in-promise-methods", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-single-promise-in-promise-methods.html" } - ], + ] + }, + { "eslint": [ { - "name": "no-magic-numbers", - "url": "https://eslint.org/docs/latest/rules/no-magic-numbers" - }, - { - "name": "@typescript-eslint/no-magic-numbers", - "url": "https://typescript-eslint.io/rules/no-magic-numbers" + "name": "promise/no-nesting", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/no-nesting.md" } ], "flint": { - "name": "magicNumbers", + "name": "promiseNesting", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-magic-numbers", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-magic-numbers.html" + "name": "promise/no-nesting", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-nesting.html" } ] }, { "eslint": [ { - "name": "unicorn/prefer-modern-math-apis", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-modern-math-apis.md" + "name": "promise/avoid-new", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/avoid-new.md" } ], "flint": { - "name": "mathMethods", + "name": "promiseNews", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/prefer-modern-math-apis", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-modern-math-apis.html" + "name": "promise/avoid-new", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/avoid-new.html" } ] }, { - "eslint": [ + "flint": { + "name": "promiseNewStatics", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ { - "name": "unicorn/prefer-math-min-max", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-math-min-max.md" + "name": "promise/no-new-statics", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-new-statics.html" } - ], + ] + }, + { "flint": { - "name": "mathRangeTernaries", + "name": "promiseNonSpecMethods", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, + "notes": "Superseded by noFloatingPromises.", "oxlint": [ { - "name": "unicorn/prefer-math-min-max", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-math-min-max.html" + "name": "promise/spec-only", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/spec-only.html" } ] }, { "eslint": [ { - "name": "unicorn/prefer-math-trunc", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-math-trunc.md" + "name": "promise/param-names", + "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/param-names.md" } ], "flint": { - "name": "mathTruncationOperators", + "name": "promiseParameterNames", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/prefer-math-trunc", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-math-trunc.html" + "name": "promise/param-names", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/param-names.html" } ] }, { "eslint": [ { - "name": "max-classes-per-file", - "url": "https://eslint.org/docs/latest/rules/max-classes-per-file" + "name": "prefer-promise-reject-errors", + "url": "https://eslint.org/docs/latest/rules/prefer-promise-reject-errors" + }, + { + "name": "@typescript-eslint/prefer-promise-reject-errors", + "url": "https://typescript-eslint.io/rules/prefer-promise-reject-errors" } ], "flint": { - "name": "maximumClassesPerFile", + "name": "promiseRejectErrors", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/max-classes-per-file", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-classes-per-file.html" + "name": "eslint/prefer-promise-reject-errors", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-promise-reject-errors.html" + }, + { + "name": "typescript/prefer-promise-reject-errors", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-promise-reject-errors.html" } ] }, { + "biome": [ + { + "name": "useLiteralKeys", + "url": "https://biomejs.dev/linter/rules/useLiteralKeys" + } + ], "eslint": [ { - "name": "complexity", - "url": "https://eslint.org/docs/latest/rules/complexity" + "name": "dot-notation", + "url": "https://eslint.org/docs/latest/rules/dot-notation" + }, + { + "name": "@typescript-eslint/dot-notation", + "url": "https://typescript-eslint.io/rules/dot-notation" } ], "flint": { - "name": "maximumComplexity", + "name": "propertyAccessNotation", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" } }, { "eslint": [ { - "name": "max-depth", - "url": "https://eslint.org/docs/latest/rules/max-depth" + "name": "no-iterator", + "url": "https://eslint.org/docs/latest/rules/no-iterator" } ], "flint": { - "name": "maximumDepth", + "name": "prototypeIterators", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/max-depth", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-depth.html" + "name": "eslint/no-iterator", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-iterator.html" } ] }, { + "biome": [ + { + "name": "useReadonlyClassProperties", + "url": "https://biomejs.dev/linter/rules/useReadonlyClassProperties" + } + ], "eslint": [ { - "name": "id-length", - "url": "https://eslint.org/docs/latest/rules/id-length" + "name": "@typescript-eslint/prefer-readonly", + "url": "https://typescript-eslint.io/rules/prefer-readonly" } ], "flint": { - "name": "maximumIdentifierLengths", + "name": "readonlyClassProperties", + "plugin": "ts", + "status": "skipped", + "strictness": "strict" + } + }, + { + "flint": { + "name": "recursionOnlyArguments", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/id-length", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/id-length.html" + "name": "oxc/only-used-in-recursion", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/only-used-in-recursion.html" } ] }, { "eslint": [ { - "name": "max-lines", - "url": "https://eslint.org/docs/latest/rules/max-lines" + "name": "@typescript-eslint/prefer-reduce-type-parameter", + "url": "https://typescript-eslint.io/rules/prefer-reduce-type-parameter" } ], "flint": { - "name": "maximumLinesPerFile", + "name": "reduceTypeParameters", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "strictness": "strict" }, "oxlint": [ { - "name": "eslint/max-lines", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-lines.html" + "name": "typescript/prefer-reduce-type-parameter", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-reduce-type-parameter.html" } ] }, { - "biome": [ - { - "name": "noExcessiveLinesPerFunction", - "url": "https://biomejs.dev/linter/rules/noExcessiveLinesPerFunction" - } - ], "eslint": [ { - "name": "max-lines-per-function", - "url": "https://eslint.org/docs/latest/rules/max-lines-per-function" + "name": "@typescript-eslint/no-redundant-type-constituents", + "url": "https://typescript-eslint.io/rules/no-redundant-type-constituents" } ], "flint": { - "name": "maximumLinesPerFunction", + "name": "redundantTypeConstituents", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/max-lines-per-function", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-lines-per-function.html" + "name": "typescript/no-redundant-type-constituents", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-redundant-type-constituents.html" } ] }, { "eslint": [ { - "name": "max-nested-callbacks", - "url": "https://eslint.org/docs/latest/rules/max-nested-callbacks" + "name": "unicorn/prefer-reflect-apply", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-reflect-apply.md" } ], "flint": { - "name": "maximumNestedCallbacks", + "name": "reflectApplies", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/max-nested-callbacks", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-nested-callbacks.html" + "name": "unicorn/prefer-reflect-apply", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-reflect-apply.html" } ] }, { - "biome": [ - { - "name": "useMaxParams", - "url": "https://biomejs.dev/linter/rules/useMaxParams" - } - ], "eslint": [ { - "name": "max-params", - "url": "https://eslint.org/docs/latest/rules/max-params" - }, - { - "name": "@typescript-eslint/max-params", - "url": "https://typescript-eslint.io/rules/max-params" + "name": "regexp/no-missing-g-flag", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-missing-g-flag.html" } ], "flint": { - "name": "maximumParameters", + "name": "regexAllGlobalFlags", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/max-params", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/max-params.html" + "name": "oxc/bad-replace-all-arg", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-replace-all-arg.html" } ] }, { "eslint": [ { - "name": "max-statements", - "url": "https://eslint.org/docs/latest/rules/max-statements" + "name": "regexp/strict", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/strict.html" } ], "flint": { - "name": "maximumStatements", + "name": "regexAmbiguousInvalidity", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { "eslint": [ { - "name": "@typescript-eslint/no-meaningless-void-operator", - "url": "https://typescript-eslint.io/rules/no-meaningless-void-operator" + "name": "regexp/prefer-character-class", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-character-class.html" } ], "flint": { - "name": "meaninglessVoidOperators", + "name": "regexCharacterClasses", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "typescript/no-meaningless-void-operator", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-meaningless-void-operator.html" + "name": "regexp/prefer-range", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-range.html" } - ] + ], + "flint": { + "name": "regexCharacterClassRanges", + "plugin": "ts", + "preset": "stylistic" + } }, { - "biome": [ + "eslint": [ { - "name": "useConsistentMemberAccessibility", - "url": "https://biomejs.dev/linter/rules/useConsistentMemberAccessibility" + "name": "regexp/prefer-set-operation", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-set-operation.html" } ], + "flint": { + "name": "regexCharacterClassSetOperations", + "plugin": "ts", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/explicit-member-accessibility", - "url": "https://typescript-eslint.io/rules/explicit-member-accessibility" + "name": "regexp/negation", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/negation.html" } ], "flint": { - "name": "memberAccessibility", + "name": "regexConciseCharacterClassNegations", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic" } }, { + "eslint": [ + { + "name": "unicorn/better-regex", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/better-regex.md" + } + ], "flint": { - "name": "misleadingShorthandAssignments", + "name": "regexConciseness", "plugin": "ts", - "preset": "Not implementing" - } + "status": "skipped" + }, + "notes": "Superseded by other regex cleanliness rules" }, { "biome": [ { - "name": "noThenProperty", - "url": "https://biomejs.dev/linter/rules/noThenProperty" + "name": "noAdjacentSpacesInRegex", + "url": "https://biomejs.dev/linter/rules/noAdjacentSpacesInRegex" + } + ], + "deno": [ + { + "name": "no-regex-spaces", + "url": "https://docs.deno.com/lint/rules/no-regex-spaces" } ], "eslint": [ { - "name": "unicorn/no-thenable", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-thenable.md" + "name": "no-regex-spaces", + "url": "https://eslint.org/docs/latest/rules/no-regex-spaces" } ], "flint": { - "name": "misleadingThenProperties", + "name": "regexConsecutiveSpaces", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-thenable", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-thenable.html" + "name": "eslint/no-regex-spaces", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-regex-spaces.html" } ] }, + { + "eslint": [ + { + "name": "regexp/no-contradiction-with-assertion", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-contradiction-with-assertion.html" + } + ], + "flint": { + "name": "regexContradictoryAssertions", + "plugin": "ts", + "preset": "logical" + } + }, + { + "eslint": [ + { + "name": "regexp/control-character-escape", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/control-character-escape.html" + } + ], + "flint": { + "name": "regexControlCharacterEscapes", + "plugin": "ts", + "preset": "logical" + } + }, { "biome": [ { - "name": "noVoidTypeReturn", - "url": "https://biomejs.dev/linter/rules/noVoidTypeReturn" + "name": "noControlCharactersInRegex", + "url": "https://biomejs.dev/linter/rules/noControlCharactersInRegex" + } + ], + "deno": [ + { + "name": "no-control-regex", + "url": "https://docs.deno.com/lint/rules/no-control-regex" } ], "eslint": [ { - "name": "@typescript-eslint/no-confusing-void-expression", - "url": "https://typescript-eslint.io/rules/no-confusing-void-expression" + "name": "no-control-regex", + "url": "https://eslint.org/docs/latest/rules/no-control-regex" + }, + { + "name": "regexp/no-control-character", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-control-character.html" } ], "flint": { - "name": "misleadingVoidExpressions", + "name": "regexControlCharacters", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/no-confusing-void-expression", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-confusing-void-expression.html" + "name": "eslint/no-control-regex", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-control-regex.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "noMisusedPromises", - "url": "https://biomejs.dev/linter/rules/noMisusedPromises" + "name": "regexp/prefer-d", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-d.html" } ], + "flint": { + "name": "regexDigitMatchers", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/no-misused-promises", - "url": "https://typescript-eslint.io/rules/no-misused-promises" + "name": "no-div-regex", + "url": "https://eslint.org/docs/latest/rules/no-div-regex" } ], "flint": { - "name": "misusedPromises", + "name": "regexDivisionStarts", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/no-misused-promises", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-misused-promises.html" + "name": "eslint/no-div-regex", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-div-regex.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "useExplicitType", - "url": "https://biomejs.dev/linter/rules/useExplicitType" + "name": "regexp/prefer-escape-replacement-dollar-char", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-escape-replacement-dollar-char.html" } ], - "deno": [ + "flint": { + "name": "regexDollarEscapes", + "plugin": "ts", + "preset": "stylistic" + } + }, + { + "eslint": [ { - "name": "explicit-module-boundary-types", - "url": "https://docs.deno.com/lint/rules/explicit-module-boundary-types" + "name": "regexp/no-dupe-characters-character-class", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-dupe-characters-character-class.html" } ], + "flint": { + "name": "regexDuplicateCharacterClassCharacters", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/explicit-module-boundary-types", - "url": "https://typescript-eslint.io/rules/explicit-module-boundary-types" + "name": "regexp/no-dupe-disjunctions", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-dupe-disjunctions.html" } ], "flint": { - "name": "moduleBoundaryTypes", + "name": "regexDuplicateDisjunctions", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "typescript/explicit-module-boundary-types", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/explicit-module-boundary-types.html" - } - ] + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noGlobalDirnameFilename", - "url": "https://biomejs.dev/linter/rules/noGlobalDirnameFilename" + "name": "regexp/no-empty-alternative", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-alternative.html" } ], + "flint": { + "name": "regexEmptyAlternatives", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "unicorn/prefer-module", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-module.md" + "name": "regexp/no-empty-capturing-group", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-capturing-group.html" } ], "flint": { - "name": "moduleFormats", + "name": "regexEmptyCapturingGroups", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/import-style", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/import-style.md" + "name": "regexp/no-empty-character-class", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-character-class.html" } ], "flint": { - "name": "moduleImportStyles", + "name": "regexEmptyCharacterClasses", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/require-module-specifiers", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-module-specifiers.md" + "name": "regexp/no-empty-group", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-group.html" } ], "flint": { - "name": "moduleSpecifierLists", + "name": "regexEmptyGroups", "plugin": "ts", - "preset": "Logical" + "preset": "logical" } }, { "eslint": [ { - "name": "no-unexpected-multiline", - "url": "https://eslint.org/docs/latest/rules/no-unexpected-multiline" + "name": "regexp/no-lazy-ends", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-lazy-ends.html" } ], "flint": { - "name": "multilineAmbiguities", + "name": "regexEmptyLazyQuantifiers", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/no-unexpected-multiline", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unexpected-multiline.html" - } - ] + "preset": "logical" + } }, { "eslint": [ { - "name": "no-multi-str", - "url": "https://eslint.org/docs/latest/rules/no-multi-str" + "name": "regexp/no-empty-lookarounds-assertion", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-lookarounds-assertion.html" } ], "flint": { - "name": "multilineStrings", + "name": "regexEmptyLookaroundsAssertions", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/no-multi-str", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-multi-str.html" - } - ] + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/prefer-switch", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-switch.md" + "name": "regexp/no-empty-string-literal", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-string-literal.html" } ], "flint": { - "name": "multipleElseIfSwitches", + "name": "regexEmptyStringLiterals", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/no-anonymous-default-export", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-anonymous-default-export.md" + "name": "regexp/no-escape-backspace", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-escape-backspace.html" } ], "flint": { - "name": "namedDefaultExports", + "name": "regexEscapeBackspaces", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "import/no-anonymous-default-export", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-anonymous-default-export.html" - }, - { - "name": "unicorn/no-anonymous-default-export", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-anonymous-default-export.html" - } - ] + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noNamespace", - "url": "https://biomejs.dev/linter/rules/noNamespace" - } - ], - "deno": [ + "name": "@typescript-eslint/prefer-regexp-exec", + "url": "https://typescript-eslint.io/rules/prefer-regexp-exec" + }, { - "name": "no-namespace", - "url": "https://docs.deno.com/lint/rules/no-namespace" + "name": "regexp/prefer-regexp-exec", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-regexp-exec.html" } ], + "flint": { + "name": "regexExecutors", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/no-namespace", - "url": "https://typescript-eslint.io/rules/no-namespace" + "name": "regexp/grapheme-string-literal", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/grapheme-string-literal.html" } ], "flint": { - "implemented": true, - "name": "namespaceDeclarations", + "name": "regexGraphemeStringLiterals", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-namespace", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-namespace.html" - } - ] + "preset": "logical", + "strictness": "strict" + } }, { - "deno": [ + "eslint": [ { - "name": "no-implicit-declare-namespace-export", - "url": "https://docs.deno.com/lint/rules/no-implicit-declare-namespace-export" + "name": "regexp/hexadecimal-escape", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/hexadecimal-escape.html" } ], "flint": { - "name": "namespaceImplicitAmbientImports", + "name": "regexHexadecimalEscapes", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic", + "strictness": "strict" } }, { - "biome": [ + "eslint": [ { - "name": "useNamespaceKeyword", - "url": "https://biomejs.dev/linter/rules/useNamespaceKeyword" + "name": "regexp/use-ignore-case", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/use-ignore-case.html" } ], - "deno": [ + "flint": { + "name": "regexIgnoreCaseFlags", + "plugin": "ts", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "prefer-namespace-keyword", - "url": "https://docs.deno.com/lint/rules/prefer-namespace-keyword" + "name": "regexp/no-invisible-character", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-invisible-character.html" } ], + "flint": { + "name": "regexInvisibleCharacters", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/prefer-namespace-keyword", - "url": "https://typescript-eslint.io/rules/prefer-namespace-keyword" + "name": "regexp/no-legacy-features", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-legacy-features.html" } ], "flint": { - "name": "namespaceKeywords", + "name": "regexLegacyFeatures", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "typescript/prefer-namespace-keyword", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-namespace-keyword.html" - } - ] + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "useNamingConvention", - "url": "https://biomejs.dev/linter/rules/useNamingConvention" + "name": "regexp/letter-case", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/letter-case.html" } ], - "deno": [ + "flint": { + "name": "regexLetterCasing", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "biome": [ { - "name": "camelcase", - "url": "https://docs.deno.com/lint/rules/camelcase" + "name": "useRegexLiterals", + "url": "https://biomejs.dev/linter/rules/useRegexLiterals" } ], "eslint": [ { - "name": "camelcase", - "url": "https://eslint.org/docs/latest/rules/camelcase" - }, - { - "name": "@typescript-eslint/naming-conventions", - "url": "https://typescript-eslint.io/rules/naming-conventions" + "name": "prefer-regex-literals", + "url": "https://eslint.org/docs/latest/rules/prefer-regex-literals" } ], "flint": { - "name": "namingConventions", + "name": "regexLiterals", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { "eslint": [ { - "name": "no-extend-native", - "url": "https://eslint.org/docs/latest/rules/no-extend-native" + "name": "regexp/prefer-lookaround", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-lookaround.html" } ], "flint": { - "name": "nativeObjectExtensions", + "name": "regexLookaroundAssertions", "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ - { - "name": "eslint/no-extend-native", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extend-native.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { "eslint": [ { - "name": "unicorn/prefer-negative-index", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-negative-index.md" + "name": "regexp/optimal-lookaround-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/optimal-lookaround-quantifier.html" } ], "flint": { - "name": "negativeIndexLengthMethods", + "name": "regexLookaroundQuantifierOptimizations", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noCompareNegZero", - "url": "https://biomejs.dev/linter/rules/noCompareNegZero" + "name": "regexp/match-any", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/match-any.html" } ], - "deno": [ + "flint": { + "name": "regexMatchNotation", + "plugin": "ts", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "no-compare-neg-zero", - "url": "https://docs.deno.com/lint/rules/no-compare-neg-zero" + "name": "regexp/no-misleading-capturing-group", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-misleading-capturing-group.html" } ], + "flint": { + "name": "regexMisleadingCapturingGroups", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-compare-neg-zero", - "url": "https://eslint.org/docs/latest/rules/no-compare-neg-zero" + "name": "regexp/confusing-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/confusing-quantifier.html" } ], "flint": { - "implemented": true, - "name": "negativeZeroComparisons", + "name": "regexMisleadingQuantifiers", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "eslint/no-compare-neg-zero", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-compare-neg-zero.html" - } - ] + "preset": "logical" + } }, { "biome": [ { - "name": "useCollapsedElseIf", - "url": "https://biomejs.dev/linter/rules/useCollapsedElseIf" - }, - { - "name": "useCollapsedIf", - "url": "https://biomejs.dev/linter/rules/useCollapsedIf" + "name": "noMisleadingCharacterClass", + "url": "https://biomejs.dev/linter/rules/noMisleadingCharacterClass" } ], "eslint": [ { - "name": "no-lonely-if", - "url": "https://eslint.org/docs/latest/rules/no-lonely-if" + "name": "no-misleading-character-class", + "url": "https://eslint.org/docs/latest/rules/no-misleading-character-class" }, { - "name": "unicorn/no-lonely-if", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-lonely-if.md" + "name": "regexp/no-misleading-unicode-character", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-misleading-unicode-character.html" } ], "flint": { - "name": "nestedStandaloneIfs", + "name": "regexMisleadingUnicodeCharacters", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/no-lonely-if", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-lonely-if.html" - }, - { - "name": "unicorn/no-lonely-if", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-lonely-if.html" - } - ] + "preset": "logical" + } }, { - "biome": [ - { - "name": "noMisleadingInstantiator", - "url": "https://biomejs.dev/linter/rules/noMisleadingInstantiator" - } - ], - "deno": [ - { - "name": "no-misused-new", - "url": "https://docs.deno.com/lint/rules/no-misused-new" - } - ], "eslint": [ { - "name": "@typescript-eslint/no-misused-new", - "url": "https://typescript-eslint.io/rules/no-misused-new" + "name": "regexp/prefer-named-backreference", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-named-backreference.html" } ], "flint": { - "name": "newDefinitions", + "name": "regexNamedBackreferences", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-misused-new", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-misused-new.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { "eslint": [ { - "name": "no-new", - "url": "https://eslint.org/docs/latest/rules/no-new" + "name": "prefer-named-capture-group", + "url": "https://eslint.org/docs/latest/rules/prefer-named-capture-group" + }, + { + "name": "regexp/prefer-named-capture-group", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-named-capture-group.html" } ], "flint": { - "implemented": true, - "name": "newExpressions", + "name": "regexNamedCaptureGroups", "plugin": "ts", - "preset": "Logical" - }, - "notes": "oxc/missing-throw is a subset", - "oxlint": [ - { - "name": "eslint/no-new", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-new.html" - }, - { - "name": "oxc/missing-throw", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/missing-throw.html" - } - ] + "preset": "logical" + } }, { - "biome": [ - { - "name": "noInvalidBuiltinInstantiation", - "url": "https://biomejs.dev/linter/rules/noInvalidBuiltinInstantiation" - } - ], - "deno": [ - { - "name": "no-new-symbol", - "url": "https://docs.deno.com/lint/rules/no-new-symbol" - } - ], "eslint": [ { - "name": "no-new-native-nonconstructor", - "url": "https://eslint.org/docs/latest/rules/no-new-native-nonconstructor" + "name": "regexp/prefer-named-replacement", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-named-replacement.html" } ], "flint": { - "implemented": true, - "name": "newNativeNonConstructors", + "name": "regexNamedReplacements", "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ - { - "name": "eslint/no-new-native-nonconstructor", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-new-native-nonconstructor.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { "eslint": [ { - "name": "@typescript-eslint/non-nullable-type-assertion-style", - "url": "https://typescript-eslint.io/rules/non-nullable-type-assertion-style" + "name": "regexp/no-non-standard-flag", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-non-standard-flag.html" } ], "flint": { - "name": "nonNullableTypeAssertions", + "name": "regexNonStandardFlags", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "typescript/non-nullable-type-assertion-style", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/non-nullable-type-assertion-style.html" - } - ] + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-non-null-asserted-nullish-coalescing", - "url": "https://typescript-eslint.io/rules/no-non-null-asserted-nullish-coalescing" + "name": "regexp/no-obscure-range", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-obscure-range.html" } ], "flint": { - "name": "nonNullAssertedNullishCoalesces", + "name": "regexObscureRanges", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "typescript/no-non-null-asserted-nullish-coalescing", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-non-null-asserted-nullish-coalescing.html" - } - ] + "preset": "logical" + } }, { - "biome": [ - { - "name": "noNonNullAssertedOptionalChain", - "url": "https://biomejs.dev/linter/rules/noNonNullAssertedOptionalChain" - } - ], - "deno": [ - { - "name": "no-non-null-asserted-optional-chain", - "url": "https://docs.deno.com/lint/rules/no-non-null-asserted-optional-chain" - } - ], "eslint": [ { - "name": "@typescript-eslint/no-non-null-asserted-optional-chain", - "url": "https://typescript-eslint.io/rules/no-non-null-asserted-optional-chain" + "name": "regexp/no-octal", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-octal.html" } ], "flint": { - "name": "nonNullAssertedOptionalChains", + "name": "regexOctalEscapes", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-non-null-asserted-optional-chain", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-non-null-asserted-optional-chain.html" - } - ] + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-confusing-non-null-assertion", - "url": "https://typescript-eslint.io/rules/no-confusing-non-null-assertion" + "name": "regexp/prefer-plus-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-plus-quantifier.html" } ], "flint": { - "name": "nonNullAssertionPlacement", + "name": "regexPlusQuantifiers", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "typescript/no-confusing-non-null-assertion", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-confusing-non-null-assertion.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { - "biome": [ + "eslint": [ { - "name": "noNonNullAssertion", - "url": "https://biomejs.dev/linter/rules/noNonNullAssertion" + "name": "regexp/prefer-predefined-assertion", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-predefined-assertion.html" } ], - "deno": [ + "flint": { + "name": "regexPredefinedAssertions", + "plugin": "ts", + "preset": "stylistic" + } + }, + { + "eslint": [ { - "name": "no-non-null-assertion", - "url": "https://docs.deno.com/lint/rules/no-non-null-assertion" + "name": "regexp/optimal-quantifier-concatenation", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/optimal-quantifier-concatenation.html" } ], + "flint": { + "name": "regexQuantifierOptimizations", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/no-non-null-assertion", - "url": "https://typescript-eslint.io/rules/no-non-null-assertion" + "name": "regexp/prefer-question-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-question-quantifier.html" } ], "flint": { - "name": "nonNullAssertions", + "name": "regexQuestionQuantifiers", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "typescript/no-non-null-assertion", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-non-null-assertion.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { - "biome": [ + "eslint": [ { - "name": "noNonoctalDecimalEscape", - "url": "https://biomejs.dev/linter/rules/noNonoctalDecimalEscape" + "name": "regexp/prefer-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-quantifier.html" } ], + "flint": { + "name": "regexRepeatQuantifiers", + "plugin": "ts", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "no-nonoctal-decimal-escape", - "url": "https://eslint.org/docs/latest/rules/no-nonoctal-decimal-escape" + "name": "regexp/prefer-result-array-groups", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-result-array-groups.html" } ], "flint": { - "implemented": true, - "name": "nonOctalDecimalEscapes", + "name": "regexResultArrayGroups", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "eslint/no-nonoctal-decimal-escape", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-nonoctal-decimal-escape.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { "eslint": [ { - "name": "no-eq-null", - "url": "https://eslint.org/docs/latest/rules/no-eq-null" + "name": "regexp/simplify-set-operations", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/simplify-set-operations.html" } ], "flint": { - "name": "nullComparisons", + "name": "regexSetOperationOptimizations", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/no-eql-null", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-eql-null.html" - } - ] + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/prefer-nullish-coalescing", - "url": "https://typescript-eslint.io/rules/prefer-nullish-coalescing" + "name": "regexp/no-standalone-backslash", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-standalone-backslash.html" } ], "flint": { - "name": "nullishCoalescingOperators", + "name": "regexStandaloneBackslashes", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/no-null", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-null.md" + "name": "regexp/prefer-star-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-star-quantifier.html" } ], "flint": { - "name": "nulls", + "name": "regexStarQuantifiers", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "unicorn/no-null", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-null.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { - "biome": [ + "eslint": [ { - "name": "useSimpleNumberKeys", - "url": "https://biomejs.dev/linter/rules/useSimpleNumberKeys" + "name": "regexp/no-super-linear-backtracking", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-super-linear-backtracking.html" } ], "flint": { - "name": "numberKeyLiterals", + "name": "regexSuperLinearBacktracking", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { - "flint": { - "name": "numberMethodRanges", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "eslint": [ { - "name": "oxc/number-arg-out-of-range", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/number-arg-out-of-range.html" + "name": "regexp/no-super-linear-move", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-super-linear-move.html" } - ] + ], + "flint": { + "name": "regexSuperLinearMoves", + "plugin": "ts", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noGlobalIsFinite", - "url": "https://biomejs.dev/linter/rules/noGlobalIsFinite" + "name": "regexp/prefer-regexp-test", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-regexp-test.html" }, { - "name": "noGlobalIsNan", - "url": "https://biomejs.dev/linter/rules/noGlobalIsNan" - } - ], - "eslint": [ - { - "name": "unicorn/prefer-number-properties", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-number-properties.md" + "name": "unicorn/prefer-regexp-test", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-regexp-test.md" } ], "flint": { - "name": "numberStaticMethods", + "name": "regexTestMethods", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic" }, "oxlint": [ { - "name": "unicorn/prefer-number-properties", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-number-properties.html" + "name": "unicorn/prefer-regexp-test", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-regexp-test.html" } ] }, { "biome": [ { - "name": "useNumberToFixedDigitsArgument", - "url": "https://biomejs.dev/linter/rules/useNumberToFixedDigitsArgument" + "name": "useTopLevelRegex", + "url": "https://biomejs.dev/linter/rules/useTopLevelRegex" } ], + "flint": { + "name": "regexTopLevelDeclarations", + "plugin": "ts", + "status": "skipped" + } + }, + { "eslint": [ { - "name": "unicorn/require-number-to-fixed-digits-argument", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/require-number-to-fixed-digits-argument.md" + "name": "regexp/prefer-unicode-codepoint-escapes", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-unicode-codepoint-escapes.html" } ], "flint": { - "name": "numberToFixedDigits", + "name": "regexUnicodeCodepointEscapes", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "unicorn/require-number-to-fixed-digits-argument", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/require-number-to-fixed-digits-argument.html" - } - ] + "preset": "stylistic", + "strictness": "strict" + } }, { - "biome": [ + "eslint": [ { - "name": "noApproximativeNumericConstant", - "url": "https://biomejs.dev/linter/rules/noApproximativeNumericConstant" + "name": "regexp/unicode-escape", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/unicode-escape.html" } ], "flint": { - "name": "numericConstantApproximations", + "name": "regexUnicodeEscapes", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "oxc/approx-constant", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/approx-constant.html" - } - ] + "preset": "stylistic" + } }, { - "flint": { - "name": "numericErasingOperations", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "eslint": [ { - "name": "oxc/erasing-op", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/erasing-op.html" + "name": "require-unicode-regexp", + "url": "https://eslint.org/docs/latest/rules/require-unicode-regexp" + }, + { + "name": "regexp/require-unicode-regexp", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-regexp.html" } - ] + ], + "flint": { + "name": "regexUnicodeFlag", + "plugin": "ts" + } }, { "eslint": [ { - "name": "unicorn/number-literal-case", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/number-literal-case.md" + "name": "regexp/unicode-property", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/unicode-property.html" } ], "flint": { - "name": "numericLiteralCasing", + "name": "regexUnicodeProperties", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/number-literal-case", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/number-literal-case.html" - } - ] + "preset": "stylistic" + } }, { - "biome": [ + "eslint": [ { - "name": "useNumericLiterals", - "url": "https://biomejs.dev/linter/rules/useNumericLiterals" + "name": "regexp/require-unicode-sets-regexp", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-sets-regexp.html" } ], + "flint": { + "name": "regexUnicodeSetsFlag", + "plugin": "ts", + "status": "skipped" + } + }, + { "eslint": [ { - "name": "prefer-numeric-literals", - "url": "https://eslint.org/docs/latest/rules/prefer-numeric-literals" + "name": "regexp/no-useless-assertions", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-assertions.html" } ], "flint": { - "implemented": true, - "name": "numericLiteralParsing", + "name": "regexUnnecessaryAssertions", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/prefer-numeric-literals", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-numeric-literals.html" - } - ] + "preset": "logical" + } }, { "biome": [ { - "name": "noPrecisionLoss", - "url": "https://biomejs.dev/linter/rules/noPrecisionLoss" + "name": "noUselessRegexBackrefs", + "url": "https://biomejs.dev/linter/rules/noUselessRegexBackrefs" } ], "eslint": [ { - "name": "no-loss-of-precision", - "url": "https://eslint.org/docs/latest/rules/no-loss-of-precision" + "name": "no-useless-backreference", + "url": "https://eslint.org/docs/latest/rules/no-useless-backreference" }, { - "name": "@typescript-eslint/no-loss-of-precision", - "url": "https://typescript-eslint.io/rules/no-loss-of-precision" + "name": "regexp/no-useless-backreference", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-backreference.html" } ], "flint": { - "name": "numericPrecision", + "name": "regexUnnecessaryBackreferences", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-loss-of-precision", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-loss-of-precision.html" + "name": "eslint/no-useless-backreference", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-backreference.html" } ] }, { - "biome": [ + "eslint": [ { - "name": "useNumericSeparators", - "url": "https://biomejs.dev/linter/rules/useNumericSeparators" + "name": "regexp/no-useless-character-class", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-character-class.html" } ], + "flint": { + "name": "regexUnnecessaryCharacterClasses", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "unicorn/numeric-separators-style", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/numeric-separators-style.md" + "name": "regexp/no-useless-range", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-range.html" } ], "flint": { - "name": "numericSeparatorGroups", + "name": "regexUnnecessaryCharacterRanges", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/numeric-separators-style", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/numeric-separators-style.html" - } - ] + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "useObjectSpread", - "url": "https://biomejs.dev/linter/rules/useObjectSpread" + "name": "regexp/no-useless-string-literal", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-string-literal.html" } ], + "flint": { + "name": "regexUnnecessaryDisjunctions", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "prefer-object-spread", - "url": "https://eslint.org/docs/latest/rules/prefer-object-spread" + "name": "regexp/no-useless-dollar-replacements", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-dollar-replacements.html" } ], "flint": { - "name": "objectAssignSpreads", + "name": "regexUnnecessaryDollarReplacements", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/prefer-object-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-object-spread.html" - } - ] + "preset": "logical" + } }, { "eslint": [ { - "name": "no-object-constructor", - "url": "https://eslint.org/docs/latest/rules/no-object-constructor" + "name": "regexp/no-useless-escape", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-escape.html" } ], "flint": { - "name": "objectCalls", + "name": "regexUnnecessaryEscapes", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" }, "oxlint": [ { - "name": "eslint/no-object-constructor", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-object-constructor.html" + "name": "eslint/no-useless-escape", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-escape.html" } ] }, { "eslint": [ { - "name": "unicorn/no-object-as-default-parameter", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-object-as-default-parameter.md" + "name": "regexp/no-extra-lookaround-assertions", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-extra-lookaround-assertions.html" } ], "flint": { - "name": "objectDefaultParameters", + "name": "regexUnnecessaryLookaroundAssertions", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "unicorn/no-object-as-default-parameter", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-object-as-default-parameter.html" - } - ] + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/prefer-object-from-entries", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-object-from-entries.md" + "name": "regexp/no-trivially-nested-assertion", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-trivially-nested-assertion.html" } ], "flint": { - "name": "objectEntriesMethods", + "name": "regexUnnecessaryNestedAssertions", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/prefer-object-from-entries", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-object-from-entries.html" - } - ] + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noPrototypeBuiltins", - "url": "https://biomejs.dev/linter/rules/noPrototypeBuiltins" + "name": "regexp/no-trivially-nested-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-trivially-nested-quantifier.html" } ], + "flint": { + "name": "regexUnnecessaryNestedQuantifiers", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "prefer-object-has-own", - "url": "https://eslint.org/docs/latest/rules/prefer-object-has-own" + "name": "regexp/no-useless-non-capturing-group", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-non-capturing-group.html" } ], "flint": { - "name": "objectHasOwns", + "name": "regexUnnecessaryNonCapturingGroups", "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "eslint/prefer-object-has-own", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-object-has-own.html" + "name": "regexp/no-useless-two-nums-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-two-nums-quantifier.html" } - ] + ], + "flint": { + "name": "regexUnnecessaryNumericQuantifiers", + "plugin": "ts", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noDuplicateObjectKeys", - "url": "https://biomejs.dev/linter/rules/noDuplicateObjectKeys" + "name": "regexp/no-optional-assertion", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-optional-assertion.html" } ], + "flint": { + "name": "regexUnnecessaryOptionalAssertions", + "plugin": "ts", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-dupe-keys", - "url": "https://eslint.org/docs/latest/rules/no-dupe-keys" + "name": "regexp/no-potentially-useless-backreference", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-potentially-useless-backreference.html" } ], "flint": { - "name": "objectKeyDuplicates", + "name": "regexUnnecessaryReferentialBackreferences", "plugin": "ts", - "preset": "Logical" + "preset": "logical" } }, { + "eslint": [ + { + "name": "regexp/no-useless-set-operand", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-set-operand.html" + } + ], "flint": { - "name": "objectLiteralComparisons", + "name": "regexUnnecessarySetOperands", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "oxc/bad-object-literal-comparison", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-object-literal-comparison.html" + "name": "regexp/no-unused-capturing-group", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-unused-capturing-group.html" } - ] + ], + "flint": { + "name": "regexUnusedCapturingGroups", + "plugin": "ts", + "preset": "logical" + } }, { "eslint": [ { - "name": "no-proto", - "url": "https://eslint.org/docs/latest/rules/no-proto" + "name": "regexp/no-useless-flag", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-flag.html" } ], "flint": { - "implemented": true, - "name": "objectProto", + "name": "regexUnusedFlags", "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/no-proto", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-proto.html" + "name": "regexp/no-useless-lazy", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-lazy.html" } - ] + ], + "flint": { + "name": "regexUnusedLazyQuantifiers", + "plugin": "ts", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noPrototypeBuiltins", - "url": "https://biomejs.dev/linter/rules/noPrototypeBuiltins" + "name": "regexp/no-useless-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-quantifier.html" } ], + "flint": { + "name": "regexUnusedQuantifiers", + "plugin": "ts", + "preset": "logical" + } + }, + { "deno": [ { - "name": "no-prototype-builtins", - "url": "https://docs.deno.com/lint/rules/no-prototype-builtins" + "name": "no-invalid-regexp", + "url": "https://docs.deno.com/lint/rules/no-invalid-regexp" } ], "eslint": [ { - "name": "no-prototype-builtins", - "url": "https://eslint.org/docs/latest/rules/no-prototype-builtins" + "name": "no-invalid-regexp", + "url": "https://eslint.org/docs/latest/rules/no-invalid-regexp" + }, + { + "name": "regexp/no-invalid-regexp", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-invalid-regexp.html" } ], "flint": { - "name": "objectPrototypeBuiltIns", + "name": "regexValidity", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-prototype-builtins", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-prototype-builtins.html" + "name": "eslint/no-invalid-regexp", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-invalid-regexp.html" } ] }, { - "biome": [ - { - "name": "useConsistentObjectDefinitions", - "url": "https://biomejs.dev/linter/rules/useConsistentObjectDefinitions" - } - ], "eslint": [ { - "name": "object-shorthand", - "url": "https://eslint.org/docs/latest/rules/object-shorthand" + "name": "regexp/prefer-w", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-w.html" } ], "flint": { - "name": "objectShorthand", + "name": "regexWordMatchers", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic", + "strictness": "strict" } }, { "eslint": [ { - "name": "unicorn/no-useless-fallback-in-spread", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-fallback-in-spread.md" + "name": "regexp/no-zero-quantifier", + "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-zero-quantifier.html" } ], "flint": { - "name": "objectSpreadUnnecessaryFallbacks", + "name": "regexZeroQuantifiers", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "unicorn/no-useless-fallback-in-spread", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-fallback-in-spread.html" - } - ] + "preset": "logical" + } }, { "biome": [ { - "name": "useConsistentTypeDefinitions", - "url": "https://biomejs.dev/linter/rules/useConsistentTypeDefinitions" + "name": "noCommonJs", + "url": "https://biomejs.dev/linter/rules/noCommonJs" } ], "eslint": [ { - "name": "@typescript-eslint/consistent-type-definitions", - "url": "https://typescript-eslint.io/rules/consistent-type-definitions" + "name": "@typescript-eslint/no-require-imports", + "url": "https://typescript-eslint.io/rules/no-require-imports" } ], "flint": { - "name": "objectTypeDefinitions", + "name": "requireImports", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/consistent-type-definitions", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-type-definitions.html" + "name": "typescript/no-require-imports", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-require-imports.html" } ] }, { "biome": [ { - "name": "noOctalEscape", - "url": "https://biomejs.dev/linter/rules/noOctalEscape" + "name": "useStaticResponseMethods", + "url": "https://biomejs.dev/linter/rules/useStaticResponseMethods" } ], + "flint": { + "name": "responseMethods", + "plugin": "ts", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "no-octal-escape", - "url": "https://eslint.org/docs/latest/rules/no-octal-escape" + "name": "@eslint-community/eslint-comments/no-use", + "url": "https://eslint-community.github.io/eslint-comments.html" } ], "flint": { - "name": "octalEscapes", + "name": "restrictedDirectives", "plugin": "ts", - "preset": "Untyped", - "implemented": true + "status": "skipped" } }, { "eslint": [ { - "name": "no-octal", - "url": "https://eslint.org/docs/latest/rules/no-octal" + "name": "no-restricted-exports", + "url": "https://eslint.org/docs/latest/rules/no-restricted-exports" } ], "flint": { - "implemented": true, - "name": "octalNumbers", + "name": "restrictedExports", "plugin": "ts", - "preset": "Untyped" + "status": "skipped" } }, { "biome": [ { - "name": "useShorthandAssign", - "url": "https://biomejs.dev/linter/rules/useShorthandAssign" + "name": "noRestrictedGlobals", + "url": "https://biomejs.dev/linter/rules/noRestrictedGlobals" } ], "eslint": [ { - "name": "operator-assignment", - "url": "https://eslint.org/docs/latest/rules/operator-assignment" + "name": "no-restricted-globals", + "url": "https://eslint.org/docs/latest/rules/no-restricted-globals" } ], "flint": { - "name": "operatorAssignmentShorthand", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/operator-assignment", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/operator-assignment.html" - } - ] - }, - { - "flint": { - "name": "optionalChainExpressions", - "plugin": "ts", - "preset": "Not implementing" + "name": "restrictedGlobals", + "plugin": "ts" }, "oxlint": [ { - "name": "oxc/no-optional-chaining", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-optional-chaining.html" + "name": "eslint/no-restricted-globals", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-restricted-globals.html" } ] }, { - "biome": [ - { - "name": "useOptionalChain", - "url": "https://biomejs.dev/linter/rules/useOptionalChain" - } - ], "eslint": [ { - "name": "@typescript-eslint/prefer-optional-chain", - "url": "https://typescript-eslint.io/rules/prefer-optional-chain" + "name": "id-denylist", + "url": "https://eslint.org/docs/latest/rules/id-denylist" } ], "flint": { - "name": "optionalChainOperators", - "plugin": "ts", - "preset": "Stylistic" + "name": "restrictedIdentifiers", + "plugin": "ts" } }, { "biome": [ { - "name": "useAdjacentOverloadSignatures", - "url": "https://biomejs.dev/linter/rules/useAdjacentOverloadSignatures" - } - ], - "deno": [ - { - "name": "adjacent-overload-signatures", - "url": "https://docs.deno.com/lint/rules/adjacent-overload-signatures" + "name": "noRestrictedImports", + "url": "https://biomejs.dev/linter/rules/noRestrictedImports" } ], "eslint": [ { - "name": "@typescript-eslint/adjacent-overload-signatures", - "url": "https://typescript-eslint.io/rules/adjacent-overload-signatures" + "name": "no-restricted-imports", + "url": "https://eslint.org/docs/latest/rules/no-restricted-imports" + }, + { + "name": "@typescript-eslint/no-restricted-imports", + "url": "https://typescript-eslint.io/rules/no-restricted-imports" } ], "flint": { - "name": "overloadSignaturesAdjacent", - "plugin": "ts", - "preset": "Stylistic" + "name": "restrictedImports", + "plugin": "ts" }, "oxlint": [ { - "name": "typescript/adjacent-overload-signatures", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/adjacent-overload-signatures.html" + "name": "eslint/no-restricted-imports", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-restricted-imports.html" } ] }, { - "biome": [ - { - "name": "noParameterProperties", - "url": "https://biomejs.dev/linter/rules/noParameterProperties" - } - ], "eslint": [ { - "name": "@typescript-eslint/parameter-properties", - "url": "https://typescript-eslint.io/rules/parameter-properties" - }, - { - "name": "erasable-syntax-only/parameter-properties", - "url": "https://github.com/JoshuaKGoldberg/eslint-plugin-erasable-syntax-only/blob/HEAD/docs/rules/parameter-properties.md" + "name": "jsdoc/no-restricted-syntax", + "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-restricted-syntax.md" } ], "flint": { - "name": "parameterProperties", + "name": "restrictedJSDocs", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-parameter-property-assignment", - "url": "https://typescript-eslint.io/rules/no-unnecessary-parameter-property-assignment" + "name": "no-restricted-properties", + "url": "https://eslint.org/docs/latest/rules/no-restricted-properties" } ], "flint": { - "name": "parameterPropertyAssignment", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-unnecessary-parameter-property-assignment", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-parameter-property-assignment.html" - } - ] + "name": "restrictedProperties", + "plugin": "ts" + } }, { - "biome": [ - { - "name": "noParameterAssign", - "url": "https://biomejs.dev/linter/rules/noParameterAssign" - } - ], "eslint": [ { - "name": "no-param-reassign", - "url": "https://eslint.org/docs/latest/rules/no-param-reassign" + "name": "no-restricted-syntax", + "url": "https://eslint.org/docs/latest/rules/no-restricted-syntax" } ], "flint": { - "name": "parameterReassignments", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "name": "restrictedSyntax", + "plugin": "ts" } }, { "biome": [ { - "name": "useParseIntRadix", - "url": "https://biomejs.dev/linter/rules/useParseIntRadix" + "name": "noBannedTypes", + "url": "https://biomejs.dev/linter/rules/noBannedTypes" } ], "eslint": [ { - "name": "radix", - "url": "https://eslint.org/docs/latest/rules/radix" + "name": "@typescript-eslint/no-restricted-types", + "url": "https://typescript-eslint.io/rules/no-restricted-types" } ], "flint": { - "name": "parseIntRadixes", + "name": "restrictedTypes", + "plugin": "ts" + } + }, + { + "flint": { + "name": "restSpreadProperties", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/radix", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/radix.html" + "name": "oxc/no-rest-spread-properties", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-rest-spread-properties.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/restrict-plus-operands", - "url": "https://typescript-eslint.io/rules/restrict-plus-operands" + "name": "no-return-assign", + "url": "https://eslint.org/docs/latest/rules/no-return-assign" } ], "flint": { - "name": "plusOperands", + "name": "returnAssignments", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "typescript/restrict-plus-operands", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/restrict-plus-operands.html" + "name": "eslint/no-return-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-return-assign.html" } ] }, { "eslint": [ { - "name": "no-plusplus", - "url": "https://eslint.org/docs/latest/rules/no-plusplus" + "name": "@typescript-eslint/return-await", + "url": "https://typescript-eslint.io/rules/return-await" } ], "flint": { - "name": "plusPlusOperators", + "name": "returnAwaitPromises", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-plusplus", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-plusplus.html" + "name": "typescript/return-await", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/return-await.html" } ] }, { "eslint": [ { - "name": "unicorn/no-keyword-prefix", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-keyword-prefix.md" + "name": "@typescript-eslint/prefer-return-this-type", + "url": "https://typescript-eslint.io/rules/prefer-return-this-type" } ], "flint": { - "name": "prefixedClassLikes", + "name": "returnThisTypes", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "typescript/prefer-return-this-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-return-this-type.html" + } + ] }, { + "biome": [ + { + "name": "noSelfAssign", + "url": "https://biomejs.dev/linter/rules/noSelfAssign" + } + ], + "deno": [ + { + "name": "no-self-assign", + "url": "https://docs.deno.com/lint/rules/no-self-assign" + } + ], + "eslint": [ + { + "name": "no-self-assign", + "url": "https://eslint.org/docs/latest/rules/no-self-assign" + } + ], "flint": { - "name": "promiseAlwaysReturn", + "name": "selfAssignments", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "status": "implemented" }, - "notes": "Superseded by no-floating-promises", "oxlint": [ { - "name": "promise/always-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/always-return.html" + "name": "eslint/no-self-assign", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-self-assign.html" } ] }, { + "biome": [ + { + "name": "noSelfCompare", + "url": "https://biomejs.dev/linter/rules/noSelfCompare" + } + ], + "deno": [ + { + "name": "no-self-compare", + "url": "https://docs.deno.com/lint/rules/no-self-compare" + } + ], + "eslint": [ + { + "name": "no-self-compare", + "url": "https://eslint.org/docs/latest/rules/no-self-compare" + } + ], "flint": { - "name": "promiseArgumentCounts", + "name": "selfComparisons", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "status": "implemented", + "strictness": "strict" }, + "notes": "Superseded by unnecessaryConditions.", "oxlint": [ { - "name": "promise/valid-params", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/valid-params.html" + "name": "eslint/no-self-compare", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-self-compare.html" } ] }, { + "biome": [ + { + "name": "noCommaOperator", + "url": "https://biomejs.dev/linter/rules/noCommaOperator" + } + ], "eslint": [ { - "name": "promise/prefer-await-to-callbacks", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/prefer-await-to-callbacks.md" + "name": "no-sequences", + "url": "https://eslint.org/docs/latest/rules/no-sequences" } ], "flint": { - "name": "promiseAwaitableCallbacks", + "name": "sequences", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "promise/prefer-await-to-callbacks", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/prefer-await-to-callbacks.html" - } - ] + "preset": "untyped", + "status": "implemented" + } }, { "eslint": [ { - "name": "promise/prefer-await-to-then", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/prefer-await-to-then.md" + "name": "unicorn/prefer-set-has", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-set-has.md" } ], "flint": { - "name": "promiseAwaitableThens", + "name": "setHasExistenceChecks", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "promise/prefer-await-to-then", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/prefer-await-to-then.html" + "name": "unicorn/prefer-set-has", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-set-has.html" } ] }, { "eslint": [ { - "name": "promise/prefer-catch", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/prefer-catch.md" + "name": "unicorn/prefer-set-size", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-set-size.md" } ], "flint": { - "name": "promiseCatchableThens", + "name": "setSizeLengthChecks", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "promise/prefer-catch", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/prefer-catch.html" + "name": "unicorn/prefer-set-size", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-set-size.html" } ] }, { + "biome": [ + { + "name": "noSetterReturn", + "url": "https://biomejs.dev/linter/rules/noSetterReturn" + } + ], + "deno": [ + { + "name": "no-setter-return", + "url": "https://docs.deno.com/lint/rules/no-setter-return" + } + ], + "eslint": [ + { + "name": "no-setter-return", + "url": "https://eslint.org/docs/latest/rules/no-setter-return" + } + ], "flint": { - "name": "promiseCatchOrReturn", + "name": "setterReturns", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped" }, - "notes": "Superseded by no-floating-promises", "oxlint": [ { - "name": "promise/catch-or-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/catch-or-return.html" + "name": "eslint/no-setter-return", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-setter-return.html" } ] }, { + "biome": [ + { + "name": "noShadowRestrictedNames", + "url": "https://biomejs.dev/linter/rules/noShadowRestrictedNames" + } + ], + "deno": [ + { + "name": "no-shadow-restricted-names", + "url": "https://docs.deno.com/lint/rules/no-shadow-restricted-names" + } + ], + "eslint": [ + { + "name": "no-shadow-restricted-names", + "url": "https://eslint.org/docs/latest/rules/no-shadow-restricted-names" + } + ], "flint": { - "name": "promiseErrorFirstCallbacks", + "name": "shadowedRestrictedNames", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped", + "status": "implemented" }, - "notes": "Superseded by no-floating-promises", "oxlint": [ { - "name": "promise/no-promise-in-callback", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-promise-in-callback.html" + "name": "eslint/no-shadow-restricted-names", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-shadow-restricted-names.html" } ] }, { + "biome": [ + { + "name": "noShadow", + "url": "https://biomejs.dev/linter/rules/noShadow" + } + ], "eslint": [ { - "name": "no-promise-executor-return", - "url": "https://eslint.org/docs/latest/rules/no-promise-executor-return" + "name": "no-shadow", + "url": "https://eslint.org/docs/latest/rules/no-shadow" + }, + { + "name": "@typescript-eslint/no-shadow", + "url": "https://typescript-eslint.io/rules/no-shadow" } ], "flint": { - "name": "promiseExecutorReturns", + "name": "shadows", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { - "eslint": [ + "biome": [ { - "name": "promise/no-return-in-finally", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/no-return-in-finally.md" + "name": "noShoutyConstants", + "url": "https://biomejs.dev/linter/rules/noShoutyConstants" } ], "flint": { - "name": "promiseFinallyReturns", + "name": "shoutyConstants", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "promise/no-return-in-finally", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-return-in-finally.html" - } - ] + "status": "skipped" + } }, { - "eslint": [ + "biome": [ { - "name": "@typescript-eslint/promise-function-async", - "url": "https://typescript-eslint.io/rules/promise-function-async" + "name": "useSingleVarDeclarator", + "url": "https://biomejs.dev/linter/rules/useSingleVarDeclarator" } ], - "flint": { - "name": "promiseFunctionAsync", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ + "deno": [ { - "name": "typescript/promise-function-async", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/promise-function-async.html" + "name": "single-var-declarator", + "url": "https://docs.deno.com/lint/rules/single-var-declarator" } - ] - }, - { + ], "eslint": [ { - "name": "unicorn/no-single-promise-in-promise-methods", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-single-promise-in-promise-methods.md" + "name": "one-var", + "url": "https://eslint.org/docs/latest/rules/one-var" } ], "flint": { - "name": "promiseMethodSingleArrayArguments", + "name": "singleVariableDeclarations", "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "unicorn/no-single-promise-in-promise-methods", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-single-promise-in-promise-methods.html" - } - ] + "preset": "logical" + } }, { + "biome": [ + { + "name": "useExplicitLengthCheck", + "url": "https://biomejs.dev/linter/rules/useExplicitLengthCheck" + } + ], "eslint": [ { - "name": "promise/no-nesting", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/no-nesting.md" + "name": "unicorn/explicit-length-check", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/explicit-length-check.md" } ], "flint": { - "name": "promiseNesting", + "name": "sizeComparisonOperators", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "promise/no-nesting", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-nesting.html" + "name": "unicorn/explicit-length-check", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/explicit-length-check.html" } ] }, { - "eslint": [ + "deno": [ { - "name": "promise/avoid-new", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/avoid-new.md" + "name": "no-slow-types", + "url": "https://docs.deno.com/lint/rules/no-slow-types" } ], "flint": { - "name": "promiseNews", + "name": "slowTypes", "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "promise/avoid-new", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/avoid-new.html" - } - ] + "status": "skipped" + } }, { - "flint": { - "name": "promiseNewStatics", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "biome": [ { - "name": "promise/no-new-statics", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/no-new-statics.html" + "name": "noSparseArray", + "url": "https://biomejs.dev/linter/rules/noSparseArray" } - ] - }, - { - "flint": { - "name": "promiseNonSpecMethods", - "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Superseded by no-floating-promises", - "oxlint": [ + ], + "deno": [ { - "name": "promise/spec-only", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/spec-only.html" + "name": "no-sparse-arrays", + "url": "https://docs.deno.com/lint/rules/no-sparse-arrays" } - ] - }, - { + ], "eslint": [ { - "name": "promise/param-names", - "url": "https://github.com/eslint-community/eslint-plugin-promise/blob/HEAD/docs/rules/param-names.md" + "name": "no-sparse-arrays", + "url": "https://eslint.org/docs/latest/rules/no-sparse-arrays" } ], "flint": { - "name": "promiseParameterNames", + "name": "sparseArrays", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "status": "implemented" }, "oxlint": [ { - "name": "promise/param-names", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/promise/param-names.html" + "name": "eslint/no-sparse-arrays", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-sparse-arrays.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "prefer-promise-reject-errors", - "url": "https://eslint.org/docs/latest/rules/prefer-promise-reject-errors" - }, + "name": "noStaticOnlyClass", + "url": "https://biomejs.dev/linter/rules/noStaticOnlyClass" + } + ], + "eslint": [ { - "name": "@typescript-eslint/prefer-promise-reject-errors", - "url": "https://typescript-eslint.io/rules/prefer-promise-reject-errors" + "name": "unicorn/no-static-only-class", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-static-only-class.md" } ], "flint": { - "name": "promiseRejectErrors", + "name": "staticMemberOnlyClasses", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "eslint/prefer-promise-reject-errors", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-promise-reject-errors.html" - }, - { - "name": "typescript/prefer-promise-reject-errors", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-promise-reject-errors.html" + "name": "unicorn/no-static-only-class", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-static-only-class.html" } ] }, { "biome": [ { - "name": "useLiteralKeys", - "url": "https://biomejs.dev/linter/rules/useLiteralKeys" + "name": "useStrictMode", + "url": "https://biomejs.dev/linter/rules/useStrictMode" } ], - "eslint": [ - { - "name": "dot-notation", - "url": "https://eslint.org/docs/latest/rules/dot-notation" - }, + "flint": { + "name": "strictMode", + "plugin": "ts", + "status": "skipped" + } + }, + { + "biome": [ { - "name": "@typescript-eslint/dot-notation", - "url": "https://typescript-eslint.io/rules/dot-notation" + "name": "noStringCaseMismatch", + "url": "https://biomejs.dev/linter/rules/noStringCaseMismatch" } ], "flint": { - "name": "propertyAccessNotation", + "name": "stringCaseMismatches", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" } }, { "eslint": [ { - "name": "no-iterator", - "url": "https://eslint.org/docs/latest/rules/no-iterator" + "name": "unicorn/prefer-code-point", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-code-point.md" } ], "flint": { - "name": "prototypeIterators", + "name": "stringCodePoints", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical", + "strictness": "strict" }, "oxlint": [ { - "name": "eslint/no-iterator", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-iterator.html" + "name": "unicorn/prefer-code-point", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-code-point.html" } ] }, { "biome": [ { - "name": "useReadonlyClassProperties", - "url": "https://biomejs.dev/linter/rules/useReadonlyClassProperties" + "name": "useTemplate", + "url": "https://biomejs.dev/linter/rules/useTemplate" } ], "eslint": [ { - "name": "@typescript-eslint/prefer-readonly", - "url": "https://typescript-eslint.io/rules/prefer-readonly" + "name": "prefer-template", + "url": "https://eslint.org/docs/latest/rules/prefer-template" } ], "flint": { - "name": "readonlyClassProperties", - "plugin": "ts", - "preset": "Not implementing", - "strictness": "Strict" - } - }, - { - "flint": { - "name": "recursionOnlyArguments", + "name": "stringConcatenationTemplates", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "oxc/only-used-in-recursion", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/only-used-in-recursion.html" + "name": "eslint/prefer-template", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-template.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/prefer-reduce-type-parameter", - "url": "https://typescript-eslint.io/rules/prefer-reduce-type-parameter" + "name": "unicorn/string-content", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/string-content.md" } ], "flint": { - "name": "reduceTypeParameters", + "name": "stringContents", + "plugin": "ts", + "status": "skipped" + } + }, + { + "eslint": [ + { + "name": "unicorn/prefer-string-raw", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-raw.md" + } + ], + "flint": { + "name": "stringRawEscapes", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/prefer-reduce-type-parameter", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-reduce-type-parameter.html" + "name": "unicorn/prefer-string-raw", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-raw.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/no-redundant-type-constituents", - "url": "https://typescript-eslint.io/rules/no-redundant-type-constituents" + "name": "unicorn/prefer-string-replace-all", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-replace-all.md" } ], "flint": { - "name": "redundantTypeConstituents", + "name": "stringReplaceAllRegexSearches", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "typescript/no-redundant-type-constituents", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-redundant-type-constituents.html" + "name": "unicorn/prefer-string-replace-all", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-replace-all.html" } ] }, { + "biome": [ + { + "name": "noSubstr", + "url": "https://biomejs.dev/linter/rules/noSubstr" + } + ], "eslint": [ { - "name": "unicorn/prefer-reflect-apply", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-reflect-apply.md" + "name": "unicorn/prefer-string-slice", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-slice.md" } ], "flint": { - "name": "reflectApplies", + "name": "stringSliceMethods", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "strictness": "strict" }, "oxlint": [ { - "name": "unicorn/prefer-reflect-apply", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-reflect-apply.html" + "name": "unicorn/prefer-string-slice", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-slice.html" } ] }, { "eslint": [ { - "name": "regexp/no-missing-g-flag", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-missing-g-flag.html" + "name": "@typescript-eslint/prefer-string-starts-ends-with", + "url": "https://typescript-eslint.io/rules/prefer-string-starts-ends-with" } ], "flint": { - "name": "regexAllGlobalFlags", + "name": "stringStartsEndsWith", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" }, "oxlint": [ { - "name": "oxc/bad-replace-all-arg", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-replace-all-arg.html" + "name": "unicorn/prefer-string-starts-ends-with", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-starts-ends-with.html" } ] }, { "eslint": [ { - "name": "regexp/strict", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/strict.html" + "name": "unicorn/prefer-string-starts-ends-with", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-starts-ends-with.md" } ], "flint": { - "name": "regexAmbiguousInvalidity", + "name": "stringStartsEndsWithMethods", "plugin": "ts", - "preset": "Logical" + "status": "skipped" } }, { + "biome": [ + { + "name": "noTemplateCurlyInString", + "url": "https://biomejs.dev/linter/rules/noTemplateCurlyInString" + } + ], "eslint": [ { - "name": "regexp/prefer-character-class", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-character-class.html" + "name": "no-template-curly-in-string", + "url": "https://eslint.org/docs/latest/rules/no-template-curly-in-string" } ], "flint": { - "name": "regexCharacterClasses", + "name": "stringTemplateCurlies", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-template-curly-in-string", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-template-curly-in-string.html" + } + ] }, { + "biome": [ + { + "name": "useTrimStartEnd", + "url": "https://biomejs.dev/linter/rules/useTrimStartEnd" + } + ], "eslint": [ { - "name": "regexp/prefer-range", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-range.html" + "name": "unicorn/prefer-string-trim-start-end", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-trim-start-end.md" } ], "flint": { - "name": "regexCharacterClassRanges", + "name": "stringTrimMethods", "plugin": "ts", - "preset": "Stylistic" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-string-trim-start-end", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-trim-start-end.html" + } + ] }, { "eslint": [ { - "name": "regexp/prefer-set-operation", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-set-operation.html" + "name": "unicorn/prefer-structured-clone", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-structured-clone.md" } ], "flint": { - "name": "regexCharacterClassSetOperations", + "name": "structuredCloneMethods", "plugin": "ts", - "preset": "Stylistic" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-structured-clone", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-structured-clone.html" + } + ] }, { "eslint": [ { - "name": "regexp/negation", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/negation.html" + "name": "unicorn/switch-case-braces", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/switch-case-braces.md" } ], "flint": { - "name": "regexConciseCharacterClassNegations", + "name": "switchCaseBraces", "plugin": "ts", - "preset": "Stylistic" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/switch-case-braces", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/switch-case-braces.html" + } + ] }, { + "biome": [ + { + "name": "useExhaustiveSwitchCases", + "url": "https://biomejs.dev/linter/rules/useExhaustiveSwitchCases" + } + ], "eslint": [ { - "name": "unicorn/better-regex", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/better-regex.md" + "name": "@typescript-eslint/switch-exhaustiveness-check", + "url": "https://typescript-eslint.io/rules/switch-exhaustiveness-check" } ], "flint": { - "name": "regexConciseness", + "name": "switchExhaustiveness", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, - "notes": "Superseded by other regex cleanliness rules" + "oxlint": [ + { + "name": "typescript/switch-exhaustiveness-check", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/switch-exhaustiveness-check.html" + } + ] }, { "biome": [ { - "name": "noAdjacentSpacesInRegex", - "url": "https://biomejs.dev/linter/rules/noAdjacentSpacesInRegex" - } - ], - "deno": [ - { - "name": "no-regex-spaces", - "url": "https://docs.deno.com/lint/rules/no-regex-spaces" + "name": "useSymbolDescription", + "url": "https://biomejs.dev/linter/rules/useSymbolDescription" } ], "eslint": [ { - "name": "no-regex-spaces", - "url": "https://eslint.org/docs/latest/rules/no-regex-spaces" + "name": "symbol-description", + "url": "https://eslint.org/docs/latest/rules/symbol-description" } ], "flint": { - "name": "regexConsecutiveSpaces", + "name": "symbolDescriptions", "plugin": "ts", - "preset": "Not implementing" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "eslint/no-regex-spaces", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-regex-spaces.html" + "name": "eslint/symbol-description", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/symbol-description.html" } ] }, + { + "deno": [ + { + "name": "no-await-in-sync-fun", + "url": "https://docs.deno.com/lint/rules/no-await-in-sync-fun" + } + ], + "flint": { + "name": "syncFunctionAwaits", + "plugin": "ts", + "status": "skipped" + }, + "notes": "Generally handled by parsers." + }, { "eslint": [ { - "name": "regexp/no-contradiction-with-assertion", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-contradiction-with-assertion.html" + "name": "@typescript-eslint/restrict-template-expressions", + "url": "https://typescript-eslint.io/rules/restrict-template-expressions" } ], "flint": { - "name": "regexContradictoryAssertions", + "name": "templateExpressionValues", "plugin": "ts", - "preset": "Logical" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/restrict-template-expressions", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/restrict-template-expressions.html" + } + ] }, { "eslint": [ { - "name": "regexp/control-character-escape", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/control-character-escape.html" + "name": "unicorn/template-indent", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/template-indent.md" } ], "flint": { - "name": "regexControlCharacterEscapes", + "name": "templateIndents", "plugin": "ts", - "preset": "Logical" + "status": "skipped" } }, { "biome": [ { - "name": "noControlCharactersInRegex", - "url": "https://biomejs.dev/linter/rules/noControlCharactersInRegex" - } - ], - "deno": [ - { - "name": "no-control-regex", - "url": "https://docs.deno.com/lint/rules/no-control-regex" + "name": "noNestedTernary", + "url": "https://biomejs.dev/linter/rules/noNestedTernary" } ], "eslint": [ { - "name": "no-control-regex", - "url": "https://eslint.org/docs/latest/rules/no-control-regex" + "name": "no-nested-ternary", + "url": "https://eslint.org/docs/latest/rules/no-nested-ternary" }, { - "name": "regexp/no-control-character", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-control-character.html" + "name": "unicorn/no-nested-ternary", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-nested-ternary.md" } ], "flint": { - "name": "regexControlCharacters", + "name": "ternaryNesting", "plugin": "ts", - "preset": "Logical" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-control-regex", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-control-regex.html" + "name": "eslint/no-nested-ternary", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-nested-ternary.html" + }, + { + "name": "unicorn/no-nested-ternary", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-nested-ternary.html" } ] }, { "eslint": [ { - "name": "regexp/prefer-d", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-d.html" + "name": "no-ternary", + "url": "https://eslint.org/docs/latest/rules/no-ternary" } ], "flint": { - "name": "regexDigitMatchers", + "name": "ternaryOperators", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-ternary", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-ternary.html" + } + ] }, { "eslint": [ { - "name": "no-div-regex", - "url": "https://eslint.org/docs/latest/rules/no-div-regex" + "name": "unicorn/text-encoding-identifier-case", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/text-encoding-identifier-case.md" } ], "flint": { - "name": "regexDivisionStarts", + "name": "textEncodingCases", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" }, "oxlint": [ { - "name": "eslint/no-div-regex", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-div-regex.html" + "name": "unicorn/text-encoding-identifier-case", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/text-encoding-identifier-case.html" } ] }, { "eslint": [ { - "name": "regexp/prefer-escape-replacement-dollar-char", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-escape-replacement-dollar-char.html" + "name": "consistent-this", + "url": "https://eslint.org/docs/latest/rules/consistent-this" } ], "flint": { - "name": "regexDollarEscapes", + "name": "thisAliases", "plugin": "ts", - "preset": "Stylistic" + "status": "skipped" } }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-dupe-characters-character-class", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-dupe-characters-character-class.html" + "name": "noUnreachableSuper", + "url": "https://biomejs.dev/linter/rules/noUnreachableSuper" } ], - "flint": { - "name": "regexDuplicateCharacterClassCharacters", - "plugin": "ts", - "preset": "Logical" - } - }, - { - "eslint": [ + "deno": [ { - "name": "regexp/no-dupe-disjunctions", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-dupe-disjunctions.html" + "name": "no-this-before-super", + "url": "https://docs.deno.com/lint/rules/no-this-before-super" } ], - "flint": { - "name": "regexDuplicateDisjunctions", - "plugin": "ts", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "regexp/no-empty-alternative", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-alternative.html" + "name": "no-this-before-super", + "url": "https://eslint.org/docs/latest/rules/no-this-before-super" } ], "flint": { - "name": "regexEmptyAlternatives", + "name": "thisBeforeSuper", "plugin": "ts", - "preset": "Logical" - } + "preset": "untyped" + }, + "oxlint": [ + { + "name": "eslint/no-this-before-super", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-this-before-super.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-empty-capturing-group", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-capturing-group.html" + "name": "noThisInStatic", + "url": "https://biomejs.dev/linter/rules/noThisInStatic" } ], "flint": { - "name": "regexEmptyCapturingGroups", + "name": "thisInStatic", "plugin": "ts", - "preset": "Logical" + "status": "skipped" } }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-empty-character-class", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-character-class.html" + "name": "useThrowOnlyError", + "url": "https://biomejs.dev/linter/rules/useThrowOnlyError" } ], - "flint": { - "name": "regexEmptyCharacterClasses", - "plugin": "ts", - "preset": "Logical" - } - }, - { - "eslint": [ + "deno": [ { - "name": "regexp/no-empty-group", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-group.html" + "name": "no-throw-literal", + "url": "https://docs.deno.com/lint/rules/no-throw-literal" } ], - "flint": { - "name": "regexEmptyGroups", - "plugin": "ts", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "regexp/no-lazy-ends", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-lazy-ends.html" + "name": "no-throw-literal", + "url": "https://eslint.org/docs/latest/rules/no-throw-literal" + }, + { + "name": "@typescript-eslint/only-throw-errors", + "url": "https://typescript-eslint.io/rules/only-throw-errors" + }, + { + "name": "unicorn/throw-new-error", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/throw-new-error.md" } ], "flint": { - "name": "regexEmptyLazyQuantifiers", + "name": "throwErrors", "plugin": "ts", - "preset": "Logical" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "eslint/no-throw-literal", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-throw-literal.html" + }, + { + "name": "typescript/only-throw-error", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/only-throw-error.html" + }, + { + "name": "unicorn/throw-new-error", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/throw-new-error.html" + } + ] }, { - "eslint": [ + "deno": [ { - "name": "regexp/no-empty-lookarounds-assertion", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-lookarounds-assertion.html" + "name": "ban-untagged-todo", + "url": "https://docs.deno.com/lint/rules/ban-untagged-todo" } ], - "flint": { - "name": "regexEmptyLookaroundsAssertions", - "plugin": "ts", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "regexp/no-empty-string-literal", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-empty-string-literal.html" + "name": "unicorn/expiring-todo-comments", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/expiring-todo-comments.md" } ], "flint": { - "name": "regexEmptyStringLiterals", + "name": "todoExpirations", "plugin": "ts", - "preset": "Logical" + "status": "skipped" } }, { "eslint": [ { - "name": "regexp/no-escape-backspace", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-escape-backspace.html" + "name": "unicorn/prefer-top-level-await", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-top-level-await.md" } ], "flint": { - "name": "regexEscapeBackspaces", + "name": "topLevelAwaits", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic", + "strictness": "strict" } }, { - "eslint": [ + "deno": [ { - "name": "@typescript-eslint/prefer-regexp-exec", - "url": "https://typescript-eslint.io/rules/prefer-regexp-exec" - }, + "name": "triple-slash-reference", + "url": "https://docs.deno.com/lint/rules/triple-slash-reference" + } + ], + "eslint": [ { - "name": "regexp/prefer-regexp-exec", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-regexp-exec.html" + "name": "@typescript-eslint/triple-slash-reference", + "url": "https://typescript-eslint.io/rules/triple-slash-reference" } ], "flint": { - "name": "regexExecutors", + "name": "tripleSlashReferences", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/triple-slash-reference", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/triple-slash-reference.html" + } + ] }, { - "eslint": [ + "deno": [ { - "name": "regexp/grapheme-string-literal", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/grapheme-string-literal.html" + "name": "no-invalid-triple-slash-references", + "url": "https://docs.deno.com/lint/rules/no-invalid-triple-slash-references" } ], "flint": { - "name": "regexGraphemeStringLiterals", + "name": "tripleSlashReferenceValidity", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical" } }, { + "biome": [ + { + "name": "noTsIgnore", + "url": "https://biomejs.dev/linter/rules/noTsIgnore" + } + ], + "deno": [ + { + "name": "ban-ts-comment", + "url": "https://docs.deno.com/lint/rules/ban-ts-comment" + } + ], "eslint": [ { - "name": "regexp/hexadecimal-escape", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/hexadecimal-escape.html" + "name": "@typescript-eslint/ban-ts-comment", + "url": "https://typescript-eslint.io/rules/ban-ts-comment" } ], "flint": { - "name": "regexHexadecimalEscapes", + "name": "tsComments", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/ban-ts-comment", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/ban-ts-comment.html" + }, + { + "name": "typescript/prefer-ts-expect-error", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-ts-expect-error.html" + } + ] }, { "eslint": [ { - "name": "regexp/use-ignore-case", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/use-ignore-case.html" + "name": "@typescript-eslint/ban-tslint-comment", + "url": "https://typescript-eslint.io/rules/ban-tslint-comment" } ], "flint": { - "name": "regexIgnoreCaseFlags", + "name": "tslintComments", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "typescript/ban-tslint-comment", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/ban-tslint-comment.html" + } + ] }, { "eslint": [ { - "name": "regexp/no-invisible-character", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-invisible-character.html" + "name": "@typescript-eslint/consistent-type-assertions", + "url": "https://typescript-eslint.io/rules/consistent-type-assertions" } ], "flint": { - "name": "regexInvisibleCharacters", + "name": "typeAssertions", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { "eslint": [ { - "name": "regexp/no-legacy-features", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-legacy-features.html" + "name": "unicorn/prefer-type-error", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-type-error.md" } ], "flint": { - "name": "regexLegacyFeatures", + "name": "typeChecksTypeErrors", "plugin": "ts", - "preset": "Logical" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "unicorn/prefer-type-error", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-type-error.html" + } + ] }, { "eslint": [ { - "name": "regexp/letter-case", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/letter-case.html" + "name": "@typescript-eslint/no-duplicate-type-constituents", + "url": "https://typescript-eslint.io/rules/no-duplicate-type-constituents" } ], "flint": { - "name": "regexLetterCasing", + "name": "typeConstituentDuplicates", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-duplicate-type-constituents", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-duplicate-type-constituents.html" + } + ] }, { "biome": [ { - "name": "useRegexLiterals", - "url": "https://biomejs.dev/linter/rules/useRegexLiterals" + "name": "consistentTypeExports", + "url": "https://biomejs.dev/linter/rules/consistentTypeExports" } ], "eslint": [ { - "name": "prefer-regex-literals", - "url": "https://eslint.org/docs/latest/rules/prefer-regex-literals" + "name": "@typescript-eslint/consistent-type-exports", + "url": "https://typescript-eslint.io/rules/consistent-type-exports" } ], "flint": { - "name": "regexLiterals", + "name": "typeExports", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { - "eslint": [ + "biome": [ { - "name": "regexp/prefer-lookaround", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-lookaround.html" + "name": "consistentTypeImports", + "url": "https://biomejs.dev/linter/rules/consistentTypeImports" } ], - "flint": { - "name": "regexLookaroundAssertions", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "regexp/optimal-lookaround-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/optimal-lookaround-quantifier.html" + "name": "@typescript-eslint/consistent-type-imports", + "url": "https://typescript-eslint.io/rules/consistent-type-imports" + }, + { + "name": "import/consistent-type-specifier-style", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/consistent-type-specifier-style.md" } ], "flint": { - "name": "regexLookaroundQuantifierOptimizations", + "name": "typeImports", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "import/consistent-type-specifier-style", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/consistent-type-specifier-style.html" + }, + { + "name": "typescript/consistent-type-imports", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-type-imports.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "regexp/match-any", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/match-any.html" + "name": "useValidTypeof", + "url": "https://biomejs.dev/linter/rules/useValidTypeof" + } + ], + "deno": [ + { + "name": "valid-typeof", + "url": "https://docs.deno.com/lint/rules/valid-typeof" } ], - "flint": { - "name": "regexMatchNotation", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "regexp/no-misleading-capturing-group", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-misleading-capturing-group.html" + "name": "valid-typeof", + "url": "https://eslint.org/docs/latest/rules/valid-typeof" } ], "flint": { - "name": "regexMisleadingCapturingGroups", + "name": "typeofComparisons", "plugin": "ts", - "preset": "Logical" - } + "preset": "untyped", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/valid-typeof", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/valid-typeof.html" + } + ] }, { "eslint": [ { - "name": "regexp/confusing-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/confusing-quantifier.html" + "name": "import/no-unassigned-import", + "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-unassigned-import.md" } ], "flint": { - "name": "regexMisleadingQuantifiers", + "name": "unassignedImports", "plugin": "ts", - "preset": "Logical" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "import/no-unassigned-import", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-unassigned-import.html" + } + ] }, { "biome": [ { - "name": "noMisleadingCharacterClass", - "url": "https://biomejs.dev/linter/rules/noMisleadingCharacterClass" + "name": "noUnassignedVariables", + "url": "https://biomejs.dev/linter/rules/noUnassignedVariables" } ], "eslint": [ { - "name": "no-misleading-character-class", - "url": "https://eslint.org/docs/latest/rules/no-misleading-character-class" - }, - { - "name": "regexp/no-misleading-unicode-character", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-misleading-unicode-character.html" + "name": "no-unassigned-vars", + "url": "https://eslint.org/docs/latest/rules/no-unassigned-vars" } ], "flint": { - "name": "regexMisleadingUnicodeCharacters", + "name": "unassignedVariables", "plugin": "ts", - "preset": "Logical" - } + "preset": "untyped", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/no-unassigned-vars", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unassigned-vars.html" + } + ] }, { "eslint": [ { - "name": "regexp/prefer-named-backreference", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-named-backreference.html" + "name": "@typescript-eslint/unbound-method", + "url": "https://typescript-eslint.io/rules/unbound-method" } ], "flint": { - "name": "regexNamedBackreferences", + "name": "unboundMethods", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/unbound-method", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/unbound-method.html" + } + ] }, { - "eslint": [ - { - "name": "prefer-named-capture-group", - "url": "https://eslint.org/docs/latest/rules/prefer-named-capture-group" - }, + "biome": [ { - "name": "regexp/prefer-named-capture-group", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-named-capture-group.html" + "name": "noUselessUndefinedInitialization", + "url": "https://biomejs.dev/linter/rules/noUselessUndefinedInitialization" } ], - "flint": { - "name": "regexNamedCaptureGroups", - "plugin": "ts", - "preset": "Logical" - } - }, - { - "eslint": [ + "deno": [ { - "name": "regexp/prefer-named-replacement", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-named-replacement.html" + "name": "no-undef", + "url": "https://docs.deno.com/lint/rules/no-undef" } ], - "flint": { - "name": "regexNamedReplacements", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "regexp/no-non-standard-flag", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-non-standard-flag.html" + "name": "no-undef-init", + "url": "https://eslint.org/docs/latest/rules/no-undef-init" } ], "flint": { - "name": "regexNonStandardFlags", + "name": "undefinedInitialValues", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { "eslint": [ { - "name": "regexp/no-obscure-range", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-obscure-range.html" + "name": "no-undefined", + "url": "https://eslint.org/docs/latest/rules/no-undefined" } ], "flint": { - "name": "regexObscureRanges", + "name": "undefinedNames", "plugin": "ts", - "preset": "Logical" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-undefined", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-undefined.html" + } + ] }, { "eslint": [ { - "name": "regexp/no-octal", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-octal.html" + "name": "unicorn/no-typeof-undefined", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-typeof-undefined.md" } ], "flint": { - "name": "regexOctalEscapes", + "name": "undefinedTypeofChecks", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/no-typeof-undefined", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-typeof-undefined.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "regexp/prefer-plus-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-plus-quantifier.html" + "name": "noUndeclaredVariables", + "url": "https://biomejs.dev/linter/rules/noUndeclaredVariables" } ], - "flint": { - "name": "regexPlusQuantifiers", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "regexp/prefer-predefined-assertion", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-predefined-assertion.html" + "name": "no-undef", + "url": "https://eslint.org/docs/latest/rules/no-undef" } ], "flint": { - "name": "regexPredefinedAssertions", + "name": "undefinedVariables", "plugin": "ts", - "preset": "Stylistic" - } + "preset": "untyped", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/no-undef", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-undef.html" + } + ] }, { "eslint": [ { - "name": "regexp/optimal-quantifier-concatenation", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/optimal-quantifier-concatenation.html" + "name": "no-underscore-dangle", + "url": "https://eslint.org/docs/latest/rules/no-underscore-dangle" } ], "flint": { - "name": "regexQuantifierOptimizations", + "name": "underscoreNames", "plugin": "ts", - "preset": "Logical" + "status": "skipped" } }, { "eslint": [ { - "name": "regexp/prefer-question-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-question-quantifier.html" + "name": "unicode-bom", + "url": "https://eslint.org/docs/latest/rules/unicode-bom" } ], "flint": { - "name": "regexQuestionQuantifiers", + "name": "unicodeBOMs", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "stylistic", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/unicode-bom", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/unicode-bom.html" + } + ] }, { + "biome": [ + { + "name": "useUnifiedTypeSignatures", + "url": "https://biomejs.dev/linter/rules/useUnifiedTypeSignatures" + } + ], "eslint": [ { - "name": "regexp/prefer-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-quantifier.html" + "name": "@typescript-eslint/unified-signatures", + "url": "https://typescript-eslint.io/rules/unified-signatures" } ], "flint": { - "name": "regexRepeatQuantifiers", + "name": "unifiedSignatures", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical", + "strictness": "strict" } }, { "eslint": [ { - "name": "regexp/prefer-result-array-groups", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-result-array-groups.html" + "name": "no-extra-bind", + "url": "https://eslint.org/docs/latest/rules/no-extra-bind" } ], "flint": { - "name": "regexResultArrayGroups", + "name": "unnecessaryBind", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "eslint/no-extra-bind", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extra-bind.html" + } + ] }, { + "biome": [ + { + "name": "noUselessLoneBlockStatements", + "url": "https://biomejs.dev/linter/rules/noUselessLoneBlockStatements" + } + ], "eslint": [ { - "name": "regexp/simplify-set-operations", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/simplify-set-operations.html" + "name": "no-lone-blocks", + "url": "https://eslint.org/docs/latest/rules/no-lone-blocks" } ], "flint": { - "name": "regexSetOperationOptimizations", + "name": "unnecessaryBlocks", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/no-lone-blocks", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-lone-blocks.html" + } + ] }, { + "biome": [ + { + "name": "noExtraBooleanCast", + "url": "https://biomejs.dev/linter/rules/noExtraBooleanCast" + } + ], + "deno": [ + { + "name": "no-extra-boolean-cast", + "url": "https://docs.deno.com/lint/rules/no-extra-boolean-cast" + } + ], "eslint": [ { - "name": "regexp/no-standalone-backslash", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-standalone-backslash.html" + "name": "no-extra-boolean-cast", + "url": "https://eslint.org/docs/latest/rules/no-extra-boolean-cast" } ], "flint": { - "name": "regexStandaloneBackslashes", + "name": "unnecessaryBooleanCasts", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "eslint/no-extra-boolean-cast", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extra-boolean-cast.html" + } + ] }, { + "biome": [ + { + "name": "noUselessCatch", + "url": "https://biomejs.dev/linter/rules/noUselessCatch" + } + ], "eslint": [ { - "name": "regexp/prefer-star-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-star-quantifier.html" + "name": "no-useless-catch", + "url": "https://eslint.org/docs/latest/rules/no-useless-catch" } ], "flint": { - "name": "regexStarQuantifiers", + "name": "unnecessaryCatches", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { - "eslint": [ + "preset": "logical", + "status": "implemented" + }, + "oxlint": [ { - "name": "regexp/no-super-linear-backtracking", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-super-linear-backtracking.html" + "name": "eslint/no-useless-catch", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-catch.html" } - ], + ] + }, + { "flint": { - "name": "regexSuperLinearBacktracking", + "name": "unnecessaryComparisons", "plugin": "ts", - "preset": "Logical" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "oxc/const-comparisons", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/const-comparisons.html" + }, + { + "name": "oxc/double-comparisons", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/double-comparisons.html" + } + ] }, { + "biome": [ + { + "name": "useLiteralKeys", + "url": "https://biomejs.dev/linter/rules/useLiteralKeys" + } + ], "eslint": [ { - "name": "regexp/no-super-linear-move", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-super-linear-move.html" + "name": "no-useless-computed-key", + "url": "https://eslint.org/docs/latest/rules/no-useless-computed-key" } ], "flint": { - "name": "regexSuperLinearMoves", + "name": "unnecessaryComputedKeys", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { - "eslint": [ + "biome": [ { - "name": "regexp/prefer-regexp-test", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-regexp-test.html" - }, + "name": "noUselessStringConcat", + "url": "https://biomejs.dev/linter/rules/noUselessStringConcat" + } + ], + "eslint": [ { - "name": "unicorn/prefer-regexp-test", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-regexp-test.md" + "name": "no-useless-concat", + "url": "https://eslint.org/docs/latest/rules/no-useless-concat" } ], "flint": { - "name": "regexTestMethods", + "name": "unnecessaryConcatenation", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/prefer-regexp-test", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-regexp-test.html" + "name": "eslint/no-useless-concat", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-concat.html" } ] }, { "biome": [ { - "name": "useTopLevelRegex", - "url": "https://biomejs.dev/linter/rules/useTopLevelRegex" + "name": "noUnnecessaryConditions", + "url": "https://biomejs.dev/linter/rules/noUnnecessaryConditions" + } + ], + "eslint": [ + { + "name": "@typescript-eslint/no-unnecessary-condition", + "url": "https://typescript-eslint.io/rules/no-unnecessary-condition" } ], "flint": { - "name": "regexTopLevelDeclarations", + "name": "unnecessaryConditions", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { + "biome": [ + { + "name": "noUselessConstructor", + "url": "https://biomejs.dev/linter/rules/noUselessConstructor" + } + ], "eslint": [ { - "name": "regexp/prefer-unicode-codepoint-escapes", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-unicode-codepoint-escapes.html" + "name": "no-useless-constructor", + "url": "https://eslint.org/docs/latest/rules/no-useless-constructor" + }, + { + "name": "@typescript-eslint/no-useless-constructor", + "url": "https://typescript-eslint.io/rules/no-useless-constructor" } ], "flint": { - "name": "regexUnicodeCodepointEscapes", + "name": "unnecessaryConstructors", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "eslint/no-useless-constructor", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-constructor.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "regexp/unicode-escape", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/unicode-escape.html" + "name": "noUselessContinue", + "url": "https://biomejs.dev/linter/rules/noUselessContinue" } ], "flint": { - "name": "regexUnicodeEscapes", + "name": "unnecessaryContinues", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" } }, { - "eslint": [ + "biome": [ { - "name": "require-unicode-regexp", - "url": "https://eslint.org/docs/latest/rules/require-unicode-regexp" + "name": "noUselessEscapeInRegex", + "url": "https://biomejs.dev/linter/rules/noUselessEscapeInRegex" }, { - "name": "regexp/require-unicode-regexp", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-regexp.html" + "name": "noUselessEscapeInString", + "url": "https://biomejs.dev/linter/rules/noUselessEscapeInString" } ], - "flint": { - "name": "regexUnicodeFlag", - "plugin": "ts", - "preset": "None" - } - }, - { "eslint": [ { - "name": "regexp/unicode-property", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/unicode-property.html" + "name": "no-useless-escape", + "url": "https://eslint.org/docs/latest/rules/no-useless-escape" } ], "flint": { - "name": "regexUnicodeProperties", + "name": "unnecessaryEscapes", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic" } }, { "eslint": [ { - "name": "regexp/require-unicode-sets-regexp", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/require-unicode-sets-regexp.html" + "name": "no-useless-call", + "url": "https://eslint.org/docs/latest/rules/no-useless-call" } ], "flint": { - "name": "regexUnicodeSetsFlag", + "name": "unnecessaryFunctionCurries", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "eslint/no-useless-call", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-call.html" + } + ] }, { + "biome": [ + { + "name": "noUselessLabel", + "url": "https://biomejs.dev/linter/rules/noUselessLabel" + } + ], "eslint": [ { - "name": "regexp/no-useless-assertions", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-assertions.html" + "name": "no-extra-label", + "url": "https://eslint.org/docs/latest/rules/no-extra-label" } ], "flint": { - "name": "regexUnnecessaryAssertions", + "name": "unnecessaryLabels", "plugin": "ts", - "preset": "Logical" - } + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/no-extra-label", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extra-label.html" + } + ] }, { "biome": [ { - "name": "noUselessRegexBackrefs", - "url": "https://biomejs.dev/linter/rules/noUselessRegexBackrefs" + "name": "useSimplifiedLogicExpression", + "url": "https://biomejs.dev/linter/rules/useSimplifiedLogicExpression" } ], "eslint": [ { - "name": "no-useless-backreference", - "url": "https://eslint.org/docs/latest/rules/no-useless-backreference" - }, - { - "name": "regexp/no-useless-backreference", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-backreference.html" + "name": "@typescript-eslint/no-unnecessary-boolean-literal-compare", + "url": "https://typescript-eslint.io/rules/no-unnecessary-boolean-literal-compare" } ], "flint": { - "name": "regexUnnecessaryBackreferences", + "name": "unnecessaryLogicalComparisons", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-useless-backreference", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-backreference.html" + "name": "typescript/no-unnecessary-boolean-literal-compare", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-boolean-literal-compare.html" } ] }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-useless-character-class", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-character-class.html" + "name": "noConstantMathMinMaxClamp", + "url": "https://biomejs.dev/linter/rules/noConstantMathMinMaxClamp" } ], "flint": { - "name": "regexUnnecessaryCharacterClasses", + "name": "unnecessaryMathClamps", "plugin": "ts", - "preset": "Logical" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "oxc/bad-min-max-func", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-min-max-func.html" + } + ] }, { "eslint": [ { - "name": "regexp/no-useless-range", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-range.html" + "name": "unicorn/no-zero-fractions", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-zero-fractions.md" } ], "flint": { - "name": "regexUnnecessaryCharacterRanges", + "name": "unnecessaryNumericFractions", "plugin": "ts", - "preset": "Logical" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "unicorn/no-zero-fractions", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-zero-fractions.html" + } + ] }, { "eslint": [ { - "name": "regexp/no-useless-string-literal", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-string-literal.html" + "name": "unicorn/no-unnecessary-polyfills", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-polyfills.md" } ], "flint": { - "name": "regexUnnecessaryDisjunctions", + "name": "unnecessaryPolyfills", "plugin": "ts", - "preset": "Logical" - } + "status": "skipped" + }, + "notes": "Superseded by the e18e initiative" }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-useless-dollar-replacements", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-dollar-replacements.html" + "name": "noUselessRename", + "url": "https://biomejs.dev/linter/rules/noUselessRename" + } + ], + "deno": [ + { + "name": "no-useless-rename", + "url": "https://docs.deno.com/lint/rules/no-useless-rename" } ], - "flint": { - "name": "regexUnnecessaryDollarReplacements", - "plugin": "ts", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "regexp/no-useless-escape", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-escape.html" + "name": "no-useless-rename", + "url": "https://eslint.org/docs/latest/rules/no-useless-rename" } ], "flint": { - "name": "regexUnnecessaryEscapes", + "name": "unnecessaryRenames", "plugin": "ts", - "preset": "Stylistic" + "preset": "stylistic" }, "oxlint": [ { - "name": "eslint/no-useless-escape", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-escape.html" + "name": "eslint/no-useless-rename", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-rename.html" } ] }, { "eslint": [ { - "name": "regexp/no-extra-lookaround-assertions", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-extra-lookaround-assertions.html" + "name": "no-useless-return", + "url": "https://eslint.org/docs/latest/rules/no-useless-return" } ], "flint": { - "name": "regexUnnecessaryLookaroundAssertions", + "name": "unnecessaryReturns", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { "eslint": [ { - "name": "regexp/no-trivially-nested-assertion", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-trivially-nested-assertion.html" + "name": "unicorn/no-useless-spread", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-spread.md" } ], "flint": { - "name": "regexUnnecessaryNestedAssertions", + "name": "unnecessarySpreads", "plugin": "ts", - "preset": "Logical" + "preset": "logical" } }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-trivially-nested-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-trivially-nested-quantifier.html" + "name": "noUselessStringRaw", + "url": "https://biomejs.dev/linter/rules/noUselessStringRaw" } ], "flint": { - "name": "regexUnnecessaryNestedQuantifiers", + "name": "unnecessaryStringRaws", "plugin": "ts", - "preset": "Logical" + "status": "skipped" } }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-useless-non-capturing-group", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-non-capturing-group.html" + "name": "noUnusedTemplateLiteral", + "url": "https://biomejs.dev/linter/rules/noUnusedTemplateLiteral" } ], - "flint": { - "name": "regexUnnecessaryNonCapturingGroups", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - } - }, - { "eslint": [ { - "name": "regexp/no-useless-two-nums-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-two-nums-quantifier.html" + "name": "@typescript-eslint/no-unnecessary-template-expression", + "url": "https://typescript-eslint.io/rules/no-unnecessary-template-expression" } ], "flint": { - "name": "regexUnnecessaryNumericQuantifiers", + "name": "unnecessaryTemplateExpressions", "plugin": "ts", - "preset": "Logical" - } - }, - { - "eslint": [ + "preset": "logical" + }, + "oxlint": [ { - "name": "regexp/no-optional-assertion", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-optional-assertion.html" + "name": "typescript/no-unnecessary-template-expression", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-template-expression.html" } - ], - "flint": { - "name": "regexUnnecessaryOptionalAssertions", - "plugin": "ts", - "preset": "Logical" - } + ] }, { "eslint": [ { - "name": "regexp/no-potentially-useless-backreference", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-potentially-useless-backreference.html" + "name": "unicorn/prefer-logical-operator-over-ternary", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-logical-operator-over-ternary.md" } ], "flint": { - "name": "regexUnnecessaryReferentialBackreferences", + "name": "unnecessaryTernaries", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic", + "strictness": "strict" + }, + "oxlint": [ + { + "name": "unicorn/prefer-logical-operator-over-ternary", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-logical-operator-over-ternary.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "regexp/no-useless-set-operand", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-set-operand.html" + "name": "noInferrableTypes", + "url": "https://biomejs.dev/linter/rules/noInferrableTypes" } ], - "flint": { - "name": "regexUnnecessarySetOperands", - "plugin": "ts", - "preset": "Logical" - } - }, - { - "eslint": [ + "deno": [ { - "name": "regexp/no-unused-capturing-group", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-unused-capturing-group.html" + "name": "no-inferrable-types", + "url": "https://docs.deno.com/lint/rules/no-inferrable-types" } ], - "flint": { - "name": "regexUnusedCapturingGroups", - "plugin": "ts", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "regexp/no-useless-flag", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-flag.html" + "name": "@typescript-eslint/no-inferrable-types", + "url": "https://typescript-eslint.io/rules/no-inferrable-types" } ], "flint": { - "name": "regexUnusedFlags", + "name": "unnecessaryTypeAnnotations", "plugin": "ts", - "preset": "Logical" - } + "preset": "stylistic" + }, + "oxlint": [ + { + "name": "typescript/no-inferrable-types", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-inferrable-types.html" + } + ] }, { "eslint": [ { - "name": "regexp/no-useless-lazy", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-lazy.html" + "name": "@typescript-eslint/no-unnecessary-type-arguments", + "url": "https://typescript-eslint.io/rules/no-unnecessary-type-arguments" } ], "flint": { - "name": "regexUnusedLazyQuantifiers", + "name": "unnecessaryTypeArguments", "plugin": "ts", - "preset": "Logical" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unnecessary-type-arguments", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-type-arguments.html" + } + ] }, { "eslint": [ { - "name": "regexp/no-useless-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-useless-quantifier.html" + "name": "@typescript-eslint/no-unnecessary-type-assertion", + "url": "https://typescript-eslint.io/rules/no-unnecessary-type-assertion" } ], "flint": { - "name": "regexUnusedQuantifiers", + "name": "unnecessaryTypeAssertions", "plugin": "ts", - "preset": "Logical" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unnecessary-type-assertion", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-type-assertion.html" + } + ] }, { - "deno": [ + "biome": [ { - "name": "no-invalid-regexp", - "url": "https://docs.deno.com/lint/rules/no-invalid-regexp" + "name": "noUselessTypeConstraint", + "url": "https://biomejs.dev/linter/rules/noUselessTypeConstraint" } ], "eslint": [ { - "name": "no-invalid-regexp", - "url": "https://eslint.org/docs/latest/rules/no-invalid-regexp" - }, - { - "name": "regexp/no-invalid-regexp", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-invalid-regexp.html" + "name": "@typescript-eslint/no-unnecessary-type-constraint", + "url": "https://typescript-eslint.io/rules/no-unnecessary-type-constraint" } ], "flint": { - "name": "regexValidity", + "name": "unnecessaryTypeConstraints", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-invalid-regexp", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-invalid-regexp.html" + "name": "typescript/no-unnecessary-type-constraint", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-type-constraint.html" } ] }, { "eslint": [ { - "name": "regexp/prefer-w", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/prefer-w.html" + "name": "@typescript-eslint/no-unnecessary-type-conversion", + "url": "https://typescript-eslint.io/rules/no-unnecessary-type-conversion" } ], "flint": { - "name": "regexWordMatchers", + "name": "unnecessaryTypeConversions", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical" } }, { "eslint": [ { - "name": "regexp/no-zero-quantifier", - "url": "https://ota-meshi.github.io/eslint-plugin-regexp/rules/no-zero-quantifier.html" + "name": "@typescript-eslint/no-unnecessary-type-parameters", + "url": "https://typescript-eslint.io/rules/no-unnecessary-type-parameters" } ], "flint": { - "name": "regexZeroQuantifiers", + "name": "unnecessaryTypeParameters", "plugin": "ts", - "preset": "Logical" + "preset": "logical" } }, { "biome": [ { - "name": "noCommonJs", - "url": "https://biomejs.dev/linter/rules/noCommonJs" + "name": "noUselessUndefined", + "url": "https://biomejs.dev/linter/rules/noUselessUndefined" } ], "eslint": [ { - "name": "@typescript-eslint/no-require-imports", - "url": "https://typescript-eslint.io/rules/no-require-imports" + "name": "unicorn/no-useless-undefined", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-undefined.md" } ], "flint": { - "name": "requireImports", + "name": "unnecessaryUndefinedDefaults", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/no-require-imports", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-require-imports.html" + "name": "unicorn/no-useless-undefined", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-undefined.html" } ] }, { "biome": [ { - "name": "useStaticResponseMethods", - "url": "https://biomejs.dev/linter/rules/useStaticResponseMethods" + "name": "noRedundantUseStrict", + "url": "https://biomejs.dev/linter/rules/noRedundantUseStrict" } ], "flint": { - "name": "responseMethods", + "name": "unnecessaryUseStricts", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" } }, { "eslint": [ { - "name": "@eslint-community/eslint-comments/no-use", - "url": "https://eslint-community.github.io/eslint-comments.html" + "name": "no-unreachable-loop", + "url": "https://eslint.org/docs/latest/rules/no-unreachable-loop" } ], "flint": { - "name": "restrictedDirectives", + "name": "unreachableLoops", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { + "biome": [ + { + "name": "noUnreachable", + "url": "https://biomejs.dev/linter/rules/noUnreachable" + } + ], + "deno": [ + { + "name": "no-unreachable", + "url": "https://docs.deno.com/lint/rules/no-unreachable" + } + ], "eslint": [ { - "name": "no-restricted-exports", - "url": "https://eslint.org/docs/latest/rules/no-restricted-exports" + "name": "no-unreachable", + "url": "https://eslint.org/docs/latest/rules/no-unreachable" } ], "flint": { - "name": "restrictedExports", + "name": "unreachableStatements", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "untyped" + }, + "oxlint": [ + { + "name": "eslint/no-unreachable", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unreachable.html" + } + ] }, { "biome": [ { - "name": "noRestrictedGlobals", - "url": "https://biomejs.dev/linter/rules/noRestrictedGlobals" + "name": "noUnsafeDeclarationMerging", + "url": "https://biomejs.dev/linter/rules/noUnsafeDeclarationMerging" } ], "eslint": [ { - "name": "no-restricted-globals", - "url": "https://eslint.org/docs/latest/rules/no-restricted-globals" + "name": "@typescript-eslint/no-unsafe-declaration-merging", + "url": "https://typescript-eslint.io/rules/no-unsafe-declaration-merging" } ], "flint": { - "name": "restrictedGlobals", + "name": "unsafeDeclarationmerging", "plugin": "ts", - "preset": "None" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-restricted-globals", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-restricted-globals.html" + "name": "typescript/no-unsafe-declaration-merging", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-declaration-merging.html" } ] }, { "eslint": [ { - "name": "id-denylist", - "url": "https://eslint.org/docs/latest/rules/id-denylist" + "name": "@typescript-eslint/no-unsafe-enum-comparison", + "url": "https://typescript-eslint.io/rules/no-unsafe-enum-comparison" } ], "flint": { - "name": "restrictedIdentifiers", + "name": "unsafeEnumComparisons", "plugin": "ts", - "preset": "None" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unsafe-enum-comparison", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-enum-comparison.html" + } + ] }, { "biome": [ { - "name": "noRestrictedImports", - "url": "https://biomejs.dev/linter/rules/noRestrictedImports" + "name": "noUnsafeFinally", + "url": "https://biomejs.dev/linter/rules/noUnsafeFinally" } ], - "eslint": [ + "deno": [ { - "name": "no-restricted-imports", - "url": "https://eslint.org/docs/latest/rules/no-restricted-imports" - }, + "name": "no-unsafe-finally", + "url": "https://docs.deno.com/lint/rules/no-unsafe-finally" + } + ], + "eslint": [ { - "name": "@typescript-eslint/no-restricted-imports", - "url": "https://typescript-eslint.io/rules/no-restricted-imports" + "name": "no-unsafe-finally", + "url": "https://eslint.org/docs/latest/rules/no-unsafe-finally" } ], "flint": { - "name": "restrictedImports", + "name": "unsafeFinallyStatements", "plugin": "ts", - "preset": "None" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-restricted-imports", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-restricted-imports.html" + "name": "eslint/no-unsafe-finally", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unsafe-finally.html" } ] }, { "eslint": [ { - "name": "jsdoc/no-restricted-syntax", - "url": "https://github.com/gajus/eslint-plugin-jsdoc/blob/HEAD/docs/rules/no-restricted-syntax.md" + "name": "@typescript-eslint/no-unsafe-function-type", + "url": "https://typescript-eslint.io/rules/no-unsafe-function-type" } ], "flint": { - "name": "restrictedJSDocs", + "name": "unsafeFunctionTypes", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "logical" + }, + "oxlint": [ + { + "name": "typescript/no-unsafe-function-type", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-function-type.html" + } + ] }, { - "eslint": [ + "biome": [ { - "name": "no-restricted-properties", - "url": "https://eslint.org/docs/latest/rules/no-restricted-properties" + "name": "noUnsafeNegation", + "url": "https://biomejs.dev/linter/rules/noUnsafeNegation" + } + ], + "deno": [ + { + "name": "no-unsafe-negation", + "url": "https://docs.deno.com/lint/rules/no-unsafe-negation" } ], - "flint": { - "name": "restrictedProperties", - "plugin": "ts", - "preset": "None" - } - }, - { "eslint": [ { - "name": "no-restricted-syntax", - "url": "https://eslint.org/docs/latest/rules/no-restricted-syntax" + "name": "no-unsafe-negation", + "url": "https://eslint.org/docs/latest/rules/no-unsafe-negation" } ], "flint": { - "name": "restrictedSyntax", + "name": "unsafeNegations", "plugin": "ts", - "preset": "None" - } + "preset": "untyped", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/no-unsafe-negation", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unsafe-negation.html" + } + ] }, { "biome": [ { - "name": "noBannedTypes", - "url": "https://biomejs.dev/linter/rules/noBannedTypes" + "name": "noUnsafeOptionalChaining", + "url": "https://biomejs.dev/linter/rules/noUnsafeOptionalChaining" } ], "eslint": [ { - "name": "@typescript-eslint/no-restricted-types", - "url": "https://typescript-eslint.io/rules/no-restricted-types" + "name": "no-unsafe-optional-chaining", + "url": "https://eslint.org/docs/latest/rules/no-unsafe-optional-chaining" } ], "flint": { - "name": "restrictedTypes", - "plugin": "ts", - "preset": "None" - } - }, - { - "flint": { - "name": "restSpreadProperties", + "name": "unsafeOptionalChains", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped" }, "oxlint": [ { - "name": "oxc/no-rest-spread-properties", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/no-rest-spread-properties.html" + "name": "eslint/no-unsafe-optional-chaining", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unsafe-optional-chaining.html" } ] }, { "eslint": [ { - "name": "no-return-assign", - "url": "https://eslint.org/docs/latest/rules/no-return-assign" + "name": "@typescript-eslint/no-base-to-string", + "url": "https://typescript-eslint.io/rules/no-base-to-string" } ], "flint": { - "implemented": true, - "name": "returnAssignments", + "name": "unsafeToString", "plugin": "ts", - "preset": "Stylistic" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-return-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-return-assign.html" + "name": "typescript/no-base-to-string", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-base-to-string.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/return-await", - "url": "https://typescript-eslint.io/rules/return-await" + "name": "@typescript-eslint/no-unsafe-unary-minus", + "url": "https://typescript-eslint.io/rules/no-unsafe-unary-minus" } ], "flint": { - "name": "returnAwaitPromises", + "name": "unsafeUnaryNegations", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "typescript/return-await", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/return-await.html" + "name": "typescript/no-unsafe-unary-minus", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-unary-minus.html" } ] }, { "eslint": [ { - "name": "@typescript-eslint/prefer-return-this-type", - "url": "https://typescript-eslint.io/rules/prefer-return-this-type" + "name": "unicorn/prefer-optional-catch-binding", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-optional-catch-binding.md" } ], "flint": { - "name": "returnThisTypes", + "name": "unusedCatchBindings", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "status": "skipped" }, + "notes": "Superseded by unusedVariables", "oxlint": [ { - "name": "typescript/prefer-return-this-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-return-this-type.html" + "name": "unicorn/prefer-optional-catch-binding", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-optional-catch-binding.html" } ] }, { - "biome": [ - { - "name": "noSelfAssign", - "url": "https://biomejs.dev/linter/rules/noSelfAssign" - } - ], - "deno": [ - { - "name": "no-self-assign", - "url": "https://docs.deno.com/lint/rules/no-self-assign" - } - ], "eslint": [ { - "name": "no-self-assign", - "url": "https://eslint.org/docs/latest/rules/no-self-assign" + "name": "no-unused-expressions", + "url": "https://eslint.org/docs/latest/rules/no-unused-expressions" + }, + { + "name": "@typescript-eslint/no-unused-expressions", + "url": "https://typescript-eslint.io/rules/no-unused-expressions" } ], "flint": { - "implemented": true, - "name": "selfAssignments", + "name": "unusedExpressions", "plugin": "ts", - "preset": "Logical" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-self-assign", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-self-assign.html" + "name": "eslint/no-unused-expressions", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-expressions.html" } ] }, { "biome": [ { - "name": "noSelfCompare", - "url": "https://biomejs.dev/linter/rules/noSelfCompare" + "name": "noUnusedLabels", + "url": "https://biomejs.dev/linter/rules/noUnusedLabels" } ], "deno": [ { - "name": "no-self-compare", - "url": "https://docs.deno.com/lint/rules/no-self-compare" + "name": "no-unused-labels", + "url": "https://docs.deno.com/lint/rules/no-unused-labels" } ], "eslint": [ { - "name": "no-self-compare", - "url": "https://eslint.org/docs/latest/rules/no-self-compare" + "name": "no-unused-labels", + "url": "https://eslint.org/docs/latest/rules/no-unused-labels" } ], "flint": { - "implemented": true, - "name": "selfComparisons", + "name": "unusedLabels", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "preset": "stylistic" }, - "notes": "Superseded by unnecessaryConditions", "oxlint": [ { - "name": "eslint/no-self-compare", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-self-compare.html" + "name": "eslint/no-unused-labels", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-labels.html" } ] }, { - "biome": [ - { - "name": "noCommaOperator", - "url": "https://biomejs.dev/linter/rules/noCommaOperator" - } - ], "eslint": [ { - "name": "no-sequences", - "url": "https://eslint.org/docs/latest/rules/no-sequences" + "name": "unicorn/no-unused-properties", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unused-properties.md" } ], "flint": { - "implemented": true, - "name": "sequences", + "name": "unusedObjectProperties", "plugin": "ts", - "preset": "Untyped" + "status": "skipped" } }, { + "biome": [ + { + "name": "noUnusedPrivateClassMembers", + "url": "https://biomejs.dev/linter/rules/noUnusedPrivateClassMembers" + } + ], "eslint": [ { - "name": "unicorn/prefer-set-has", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-set-has.md" + "name": "no-unused-private-class-members", + "url": "https://eslint.org/docs/latest/rules/no-unused-private-class-members" } ], "flint": { - "name": "setHasExistenceChecks", + "name": "unusedPrivateClassMembers", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical" }, "oxlint": [ { - "name": "unicorn/prefer-set-has", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-set-has.html" + "name": "eslint/no-unused-private-class-members", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-private-class-members.html" } ] }, { + "biome": [ + { + "name": "noUselessSwitchCase", + "url": "https://biomejs.dev/linter/rules/noUselessSwitchCase" + } + ], "eslint": [ { - "name": "unicorn/prefer-set-size", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-set-size.md" + "name": "unicorn/no-useless-switch-case", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-switch-case.md" } ], "flint": { - "name": "setSizeLengthChecks", + "name": "unusedSwitchStatements", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "logical" }, "oxlint": [ { - "name": "unicorn/prefer-set-size", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-set-size.html" + "name": "unicorn/no-useless-switch-case", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-switch-case.html" } ] }, { - "biome": [ - { - "name": "noSetterReturn", - "url": "https://biomejs.dev/linter/rules/noSetterReturn" - } - ], - "deno": [ - { - "name": "no-setter-return", - "url": "https://docs.deno.com/lint/rules/no-setter-return" - } - ], "eslint": [ { - "name": "no-setter-return", - "url": "https://eslint.org/docs/latest/rules/no-setter-return" + "name": "no-useless-assignment", + "url": "https://eslint.org/docs/latest/rules/no-useless-assignment" } ], "flint": { - "name": "setterReturns", + "name": "unusedValues", "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ - { - "name": "eslint/no-setter-return", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-setter-return.html" - } - ] + "preset": "logical" + } }, { "biome": [ { - "name": "noShadowRestrictedNames", - "url": "https://biomejs.dev/linter/rules/noShadowRestrictedNames" + "name": "noUnusedFunctionParameters", + "url": "https://biomejs.dev/linter/rules/noUnusedFunctionParameters" + }, + { + "name": "noUnusedVariables", + "url": "https://biomejs.dev/linter/rules/noUnusedVariables" } ], "deno": [ { - "name": "no-shadow-restricted-names", - "url": "https://docs.deno.com/lint/rules/no-shadow-restricted-names" + "name": "no-unused-vars", + "url": "https://docs.deno.com/lint/rules/no-unused-vars" } ], "eslint": [ { - "name": "no-shadow-restricted-names", - "url": "https://eslint.org/docs/latest/rules/no-shadow-restricted-names" + "name": "no-unused-vars", + "url": "https://eslint.org/docs/latest/rules/no-unused-vars" + }, + { + "name": "@typescript-eslint/no-unused-vars", + "url": "https://typescript-eslint.io/rules/no-unused-vars" } ], "flint": { - "implemented": true, - "name": "shadowedRestrictedNames", + "name": "unusedVariables", "plugin": "ts", - "preset": "Untyped" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/no-shadow-restricted-names", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-shadow-restricted-names.html" + "name": "eslint/no-unused-vars", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-vars.html" } ] }, + { + "eslint": [ + { + "name": "unicorn/relative-url-style", + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/relative-url-style.md" + } + ], + "flint": { + "name": "urlRelativity", + "plugin": "ts", + "status": "skipped" + } + }, { "biome": [ { - "name": "noShadow", - "url": "https://biomejs.dev/linter/rules/noShadow" + "name": "noInvalidUseBeforeDeclaration", + "url": "https://biomejs.dev/linter/rules/noInvalidUseBeforeDeclaration" } ], "eslint": [ { - "name": "no-shadow", - "url": "https://eslint.org/docs/latest/rules/no-shadow" + "name": "no-use-before-define", + "url": "https://eslint.org/docs/latest/rules/no-use-before-define" }, { - "name": "@typescript-eslint/no-shadow", - "url": "https://typescript-eslint.io/rules/no-shadow" + "name": "@typescript-eslint/no-use-before-define", + "url": "https://typescript-eslint.io/rules/no-use-before-define" } ], "flint": { - "name": "shadows", + "name": "usageBeforeDefinition", "plugin": "ts", - "preset": "Stylistic" + "preset": "untyped" } }, { - "biome": [ + "eslint": [ { - "name": "noShoutyConstants", - "url": "https://biomejs.dev/linter/rules/noShoutyConstants" + "name": "strict", + "url": "https://eslint.org/docs/latest/rules/strict" } ], "flint": { - "name": "shoutyConstants", + "name": "useStrictDirectives", "plugin": "ts", - "preset": "Not implementing" + "preset": "untyped" } }, { "biome": [ { - "name": "useSingleVarDeclarator", - "url": "https://biomejs.dev/linter/rules/useSingleVarDeclarator" + "name": "noVar", + "url": "https://biomejs.dev/linter/rules/noVar" } ], "deno": [ { - "name": "single-var-declarator", - "url": "https://docs.deno.com/lint/rules/single-var-declarator" + "name": "no-var", + "url": "https://docs.deno.com/lint/rules/no-var" } ], "eslint": [ { - "name": "one-var", - "url": "https://eslint.org/docs/latest/rules/one-var" + "name": "no-var", + "url": "https://eslint.org/docs/latest/rules/no-var" } ], "flint": { - "name": "singleVariableDeclarations", + "name": "varDeclarations", "plugin": "ts", - "preset": "Logical" + "preset": "stylistic" } }, { - "biome": [ + "eslint": [ { - "name": "useExplicitLengthCheck", - "url": "https://biomejs.dev/linter/rules/useExplicitLengthCheck" + "name": "block-scoped-var", + "url": "https://eslint.org/docs/latest/rules/block-scoped-var" } ], + "flint": { + "name": "variableBlockScopeUsage", + "plugin": "ts", + "preset": "untyped" + }, + "oxlint": [ + { + "name": "eslint/block-scoped-var", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/block-scoped-var.html" + } + ] + }, + { "eslint": [ { - "name": "unicorn/explicit-length-check", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/explicit-length-check.md" + "name": "init-declarations", + "url": "https://eslint.org/docs/latest/rules/init-declarations" + }, + { + "name": "@typescript-eslint/init-declarations", + "url": "https://typescript-eslint.io/rules/init-declarations" } ], "flint": { - "name": "sizeComparisonOperators", + "name": "variableDeclarationInitializations", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/explicit-length-check", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/explicit-length-check.html" + "name": "eslint/init-declarations", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/init-declarations.html" + } + ] + }, + { + "eslint": [ + { + "name": "sort-vars", + "url": "https://eslint.org/docs/latest/rules/sort-vars" + } + ], + "flint": { + "name": "variableDeclarationSorting", + "plugin": "ts", + "status": "skipped" + }, + "oxlint": [ + { + "name": "eslint/sort-vars", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/sort-vars.html" } ] }, { "deno": [ { - "name": "no-slow-types", - "url": "https://docs.deno.com/lint/rules/no-slow-types" + "name": "no-delete-var", + "url": "https://docs.deno.com/lint/rules/no-delete-var" + } + ], + "eslint": [ + { + "name": "no-delete-var", + "url": "https://eslint.org/docs/latest/rules/no-delete-var" } ], "flint": { - "name": "slowTypes", + "name": "variableDeletions", "plugin": "ts", - "preset": "Not implementing" - } + "preset": "untyped", + "status": "implemented" + }, + "oxlint": [ + { + "name": "eslint/no-delete-var", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-delete-var.html" + } + ] }, { "biome": [ { - "name": "noSparseArray", - "url": "https://biomejs.dev/linter/rules/noSparseArray" + "name": "noRedeclare", + "url": "https://biomejs.dev/linter/rules/noRedeclare" } ], "deno": [ { - "name": "no-sparse-arrays", - "url": "https://docs.deno.com/lint/rules/no-sparse-arrays" + "name": "no-redeclare", + "url": "https://docs.deno.com/lint/rules/no-redeclare" } ], "eslint": [ { - "name": "no-sparse-arrays", - "url": "https://eslint.org/docs/latest/rules/no-sparse-arrays" + "name": "no-redeclare", + "url": "https://eslint.org/docs/latest/rules/no-redeclare" + }, + { + "name": "@typescript-eslint/no-redeclare", + "url": "https://typescript-eslint.io/rules/no-redeclare" } ], "flint": { - "implemented": true, - "name": "sparseArrays", + "name": "variableRedeclarations", "plugin": "ts", - "preset": "Logical" + "preset": "untyped" }, "oxlint": [ { - "name": "eslint/no-sparse-arrays", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-sparse-arrays.html" + "name": "eslint/no-redeclare", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-redeclare.html" } ] }, { - "biome": [ - { - "name": "noStaticOnlyClass", - "url": "https://biomejs.dev/linter/rules/noStaticOnlyClass" - } - ], "eslint": [ { - "name": "unicorn/no-static-only-class", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-static-only-class.md" + "name": "vars-on-top", + "url": "https://eslint.org/docs/latest/rules/vars-on-top" } ], "flint": { - "name": "staticMemberOnlyClasses", + "name": "variablesOnTop", "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "status": "skipped" }, "oxlint": [ { - "name": "unicorn/no-static-only-class", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-static-only-class.html" + "name": "eslint/vars-on-top", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/vars-on-top.html" } ] }, { - "biome": [ + "deno": [ { - "name": "useStrictMode", - "url": "https://biomejs.dev/linter/rules/useStrictMode" + "name": "verbatim-module-syntax", + "url": "https://docs.deno.com/lint/rules/verbatim-module-syntax" } ], "flint": { - "name": "strictMode", + "name": "verbatimModuleSyntax", "plugin": "ts", - "preset": "Not implementing" + "status": "skipped" } }, { "biome": [ { - "name": "noStringCaseMismatch", - "url": "https://biomejs.dev/linter/rules/noStringCaseMismatch" + "name": "noVoid", + "url": "https://biomejs.dev/linter/rules/noVoid" } ], - "flint": { - "name": "stringCaseMismatches", - "plugin": "ts", - "preset": "Logical" - } - }, - { "eslint": [ { - "name": "unicorn/prefer-code-point", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-code-point.md" + "name": "no-void", + "url": "https://eslint.org/docs/latest/rules/no-void" } ], "flint": { - "name": "stringCodePoints", + "name": "voidOperator", "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "preset": "stylistic", + "status": "implemented" }, "oxlint": [ { - "name": "unicorn/prefer-code-point", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-code-point.html" + "name": "eslint/no-void", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-void.html" } ] }, { "biome": [ { - "name": "useTemplate", - "url": "https://biomejs.dev/linter/rules/useTemplate" + "name": "noWith", + "url": "https://biomejs.dev/linter/rules/noWith" + } + ], + "deno": [ + { + "name": "no-with", + "url": "https://docs.deno.com/lint/rules/no-with" } ], "eslint": [ { - "name": "prefer-template", - "url": "https://eslint.org/docs/latest/rules/prefer-template" + "name": "no-with", + "url": "https://eslint.org/docs/latest/rules/no-with" } ], "flint": { - "name": "stringConcatenationTemplates", + "name": "withStatements", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" }, "oxlint": [ { - "name": "eslint/prefer-template", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/prefer-template.html" + "name": "eslint/no-with", + "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-with.html" } ] }, { "eslint": [ { - "name": "unicorn/string-content", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/string-content.md" + "name": "@typescript-eslint/no-wrapper-object-types", + "url": "https://typescript-eslint.io/rules/no-wrapper-object-types" } ], "flint": { - "name": "stringContents", + "name": "wrapperObjectTypes", "plugin": "ts", - "preset": "Not implementing" + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/prefer-string-raw", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-raw.md" + "name": "padding-around-after-all-blocks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-after-all-blocks.md" } ], "flint": { - "name": "stringRawEscapes", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "unicorn/prefer-string-raw", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-raw.html" - } - ] + "name": "afterAllPaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } }, { "eslint": [ { - "name": "unicorn/prefer-string-replace-all", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-replace-all.md" + "name": "padding-around-after-each-blocks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-after-each-blocks.md" } ], "flint": { - "name": "stringReplaceAllRegexSearches", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "name": "afterEachPaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "unicorn/prefer-string-replace-all", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-replace-all.html" + "name": "no-alias-methods", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-alias-methods.md" } - ] + ], + "flint": { + "name": "aliasMethods", + "plugin": "vitest", + "preset": "stylistic" + } }, { - "biome": [ + "eslint": [ { - "name": "noSubstr", - "url": "https://biomejs.dev/linter/rules/noSubstr" + "name": "padding-around-all", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-all.md" } ], + "flint": { + "name": "allPaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "unicorn/prefer-string-slice", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-slice.md" + "name": "padding-around-before-all-blocks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-before-all-blocks.md" } ], "flint": { - "name": "stringSliceMethods", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ + "name": "beforeAllPaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "unicorn/prefer-string-slice", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-slice.html" + "name": "padding-around-before-each-blocks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-before-each-blocks.md" } - ] + ], + "flint": { + "name": "beforeEachPaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } }, { "eslint": [ { - "name": "@typescript-eslint/prefer-string-starts-ends-with", - "url": "https://typescript-eslint.io/rules/prefer-string-starts-ends-with" + "name": "prefer-strict-boolean-matchers", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-strict-boolean-matchers.md" } ], "flint": { - "name": "stringStartsEndsWith", - "plugin": "ts", - "preset": "Stylistic" + "name": "booleanCoercionMatchers", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/prefer-string-starts-ends-with", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-starts-ends-with.html" - } - ] + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "unicorn/prefer-string-starts-ends-with", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-starts-ends-with.md" + "name": "prefer-called-exactly-once-with", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-exactly-once-with.md" } ], "flint": { - "name": "stringStartsEndsWithMethods", - "plugin": "ts", - "preset": "Not implementing" + "name": "calledOnceWithAssertions", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" } }, { - "biome": [ + "eslint": [ { - "name": "noTemplateCurlyInString", - "url": "https://biomejs.dev/linter/rules/noTemplateCurlyInString" + "name": "prefer-called-times", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-times.md" } ], + "flint": { + "name": "calledTimesAssertions", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-template-curly-in-string", - "url": "https://eslint.org/docs/latest/rules/no-template-curly-in-string" + "name": "prefer-called-with", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-with.md" } ], "flint": { - "name": "stringTemplateCurlies", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/no-template-curly-in-string", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-template-curly-in-string.html" - } - ] + "name": "calledWithAssertions", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } }, { - "biome": [ + "eslint": [ { - "name": "useTrimStartEnd", - "url": "https://biomejs.dev/linter/rules/useTrimStartEnd" + "name": "no-commented-out-tests", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-commented-out-tests.md" } ], + "flint": { + "name": "commentedOutTests", + "plugin": "vitest", + "preset": "logical", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "unicorn/prefer-string-trim-start-end", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-string-trim-start-end.md" + "name": "prefer-comparison-matcher", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-comparison-matcher.md" } ], "flint": { - "name": "stringTrimMethods", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ - { - "name": "unicorn/prefer-string-trim-start-end", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-string-trim-start-end.html" - } - ] + "name": "comparisonMatcherAssertions", + "plugin": "vitest", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "unicorn/prefer-structured-clone", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-structured-clone.md" + "name": "no-conditional-expect", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-expect.md" } ], "flint": { - "name": "structuredCloneMethods", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" - }, - "oxlint": [ + "name": "conditionalExpects", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "unicorn/prefer-structured-clone", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-structured-clone.html" + "name": "valid-describe-callback", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-describe-callback.md" } - ] + ], + "flint": { + "name": "describeCallbackValidity", + "plugin": "vitest", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/switch-case-braces", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/switch-case-braces.md" + "name": "padding-around-describe-blocks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-describe-blocks.md" } ], "flint": { - "name": "switchCaseBraces", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "name": "describePaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "unicorn/switch-case-braces", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/switch-case-braces.html" + "name": "prefer-describe-function-title", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-describe-function-title.md" } - ] + ], + "flint": { + "name": "describeTitleReferences", + "plugin": "vitest", + "preset": "stylistic" + } }, { - "biome": [ + "eslint": [ { - "name": "useExhaustiveSwitchCases", - "url": "https://biomejs.dev/linter/rules/useExhaustiveSwitchCases" + "name": "prefer-each", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-each.md" } ], + "flint": { + "name": "eachLoops", + "plugin": "vitest", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/switch-exhaustiveness-check", - "url": "https://typescript-eslint.io/rules/switch-exhaustiveness-check" + "name": "prefer-todo", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-todo.md" } ], "flint": { - "name": "switchExhaustiveness", - "plugin": "ts", - "preset": "Not implementing" + "name": "emptyTestTodos", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/switch-exhaustiveness-check", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/switch-exhaustiveness-check.html" - } - ] + "notes": "Overly opinionated." }, { - "biome": [ + "eslint": [ { - "name": "useSymbolDescription", - "url": "https://biomejs.dev/linter/rules/useSymbolDescription" + "name": "prefer-to-be", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be.md" } ], + "flint": { + "name": "equalityMatchers", + "plugin": "vitest", + "status": "skipped" + }, + "notes": "Overly opinionated." + }, + { "eslint": [ { - "name": "symbol-description", - "url": "https://eslint.org/docs/latest/rules/symbol-description" + "name": "prefer-equality-matcher", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-equality-matcher.md" } ], "flint": { - "implemented": true, - "name": "symbolDescriptions", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ + "name": "equalityMatchers", + "plugin": "vitest", + "preset": "stylistic" + } + }, + { + "eslint": [ { - "name": "eslint/symbol-description", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/symbol-description.html" + "name": "padding-around-expect-groups", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-expect-groups.md" } - ] + ], + "flint": { + "name": "expectGroupPaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } }, { - "deno": [ + "eslint": [ { - "name": "no-await-in-sync-fun", - "url": "https://docs.deno.com/lint/rules/no-await-in-sync-fun" + "name": "prefer-expect-resolves", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-resolves.md" } ], "flint": { - "name": "syncFunctionAwaits", - "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Generally handled by parsers." + "name": "expectResolves", + "plugin": "vitest", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "@typescript-eslint/restrict-template-expressions", - "url": "https://typescript-eslint.io/rules/restrict-template-expressions" + "name": "no-standalone-expect", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-standalone-expect.md" } ], "flint": { - "name": "templateExpressionValues", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/restrict-template-expressions", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/restrict-template-expressions.html" - } - ] + "name": "expectsOutsideTests", + "plugin": "vitest", + "preset": "logical", + "strictness": "strict" + } }, { "eslint": [ { - "name": "unicorn/template-indent", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/template-indent.md" + "name": "prefer-expect-type-of", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-type-of.md" } ], "flint": { - "name": "templateIndents", - "plugin": "ts", - "preset": "Not implementing" + "name": "expectTypeOfs", + "plugin": "vitest", + "preset": "stylistic" } }, { - "biome": [ + "eslint": [ { - "name": "noNestedTernary", - "url": "https://biomejs.dev/linter/rules/noNestedTernary" + "name": "valid-expect", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-expect.md" } ], + "flint": { + "name": "expectValidity", + "plugin": "vitest", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-nested-ternary", - "url": "https://eslint.org/docs/latest/rules/no-nested-ternary" - }, - { - "name": "unicorn/no-nested-ternary", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-nested-ternary.md" + "name": "consistent-test-filename", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-filename.md" } ], "flint": { - "name": "ternaryNesting", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/no-nested-ternary", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-nested-ternary.html" - }, - { - "name": "unicorn/no-nested-ternary", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-nested-ternary.html" - } - ] + "name": "filenames", + "plugin": "vitest" + } }, { "eslint": [ { - "name": "no-ternary", - "url": "https://eslint.org/docs/latest/rules/no-ternary" + "name": "hoisted-apis-on-top", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/hoisted-apis-on-top.md" } ], "flint": { - "name": "ternaryOperators", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/no-ternary", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-ternary.html" - } - ] + "name": "hoistedApiPositions", + "plugin": "vitest", + "preset": "logical", + "strictness": "strict" + } }, { "eslint": [ { - "name": "unicorn/text-encoding-identifier-case", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/text-encoding-identifier-case.md" + "name": "require-hook", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-hook.md" } ], "flint": { - "name": "textEncodingCases", - "plugin": "ts", - "preset": "Not implementing" + "name": "hookContents", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/text-encoding-identifier-case", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/text-encoding-identifier-case.html" - } - ] + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "consistent-this", - "url": "https://eslint.org/docs/latest/rules/consistent-this" + "name": "no-duplicate-hooks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-duplicate-hooks.md" } ], "flint": { - "name": "thisAliases", - "plugin": "ts", - "preset": "Not implementing" + "name": "hookDuplicates", + "plugin": "vitest", + "preset": "logical", + "strictness": "strict" } }, { - "biome": [ - { - "name": "noUnreachableSuper", - "url": "https://biomejs.dev/linter/rules/noUnreachableSuper" - } - ], - "deno": [ + "eslint": [ { - "name": "no-this-before-super", - "url": "https://docs.deno.com/lint/rules/no-this-before-super" + "name": "prefer-hooks-in-order", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-in-order.md" } ], + "flint": { + "name": "hookOrders", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-this-before-super", - "url": "https://eslint.org/docs/latest/rules/no-this-before-super" + "name": "no-hooks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-hooks.md" } ], "flint": { - "name": "thisBeforeSuper", - "plugin": "ts", - "preset": "Untyped" + "name": "hooks", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-this-before-super", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-this-before-super.html" - } - ] + "notes": "Overly opinionated." }, { - "biome": [ + "eslint": [ { - "name": "noThisInStatic", - "url": "https://biomejs.dev/linter/rules/noThisInStatic" + "name": "prefer-hooks-on-top", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-on-top.md" } ], "flint": { - "name": "thisInStatic", - "plugin": "ts", - "preset": "Not implementing" + "name": "hooksBeforeTestCases", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" } }, { - "biome": [ + "eslint": [ { - "name": "useThrowOnlyError", - "url": "https://biomejs.dev/linter/rules/useThrowOnlyError" + "name": "prefer-import-in-mock", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-import-in-mock.md" } ], - "deno": [ + "flint": { + "name": "importsInMocks", + "plugin": "vitest" + }, + "notes": "Further investigation required: is this a beneficial practice?" + }, + { + "eslint": [ { - "name": "no-throw-literal", - "url": "https://docs.deno.com/lint/rules/no-throw-literal" + "name": "max-expects", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/max-expects.md" } ], + "flint": { + "name": "maximumExpects", + "plugin": "vitest", + "status": "skipped" + }, + "notes": "Overly opinionated." + }, + { "eslint": [ { - "name": "no-throw-literal", - "url": "https://eslint.org/docs/latest/rules/no-throw-literal" - }, - { - "name": "@typescript-eslint/only-throw-errors", - "url": "https://typescript-eslint.io/rules/only-throw-errors" - }, - { - "name": "unicorn/throw-new-error", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/throw-new-error.md" + "name": "max-nested-describe", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/max-nested-describe.md" } ], "flint": { - "name": "throwErrors", - "plugin": "ts", - "preset": "Logical" + "name": "maximumNestedDescribes", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-throw-literal", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-throw-literal.html" - }, - { - "name": "typescript/only-throw-error", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/only-throw-error.html" - }, + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "unicorn/throw-new-error", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/throw-new-error.html" + "name": "prefer-vi-mocked", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-vi-mocked.md" } - ] + ], + "flint": { + "name": "mockedFunctionInstances", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } }, { - "deno": [ + "eslint": [ { - "name": "ban-untagged-todo", - "url": "https://docs.deno.com/lint/rules/ban-untagged-todo" + "name": "no-mocks-import", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-mocks-import.md" } ], + "flint": { + "name": "mocksDirectoryImports", + "plugin": "vitest", + "status": "skipped" + }, + "notes": "Overly opinionated." + }, + { "eslint": [ { - "name": "unicorn/expiring-todo-comments", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/expiring-todo-comments.md" + "name": "require-mock-type-parameters", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-mock-type-parameters.md" } ], "flint": { - "name": "todoExpirations", - "plugin": "ts", - "preset": "Not implementing" + "name": "mockTypeParameters", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" } }, { "eslint": [ { - "name": "unicorn/prefer-top-level-await", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-top-level-await.md" + "name": "no-import-node-test", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-import-node-test.md" } ], "flint": { - "name": "topLevelAwaits", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "name": "nodeTestImports", + "plugin": "vitest", + "preset": "logical" } }, { - "deno": [ + "eslint": [ { - "name": "triple-slash-reference", - "url": "https://docs.deno.com/lint/rules/triple-slash-reference" + "name": "require-awaited-expect-poll", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-awaited-expect-poll.md" } ], + "flint": { + "name": "pollingAwaits", + "plugin": "vitest", + "status": "skipped" + }, + "notes": "Superseded by noFloatingPromises." + }, + { "eslint": [ { - "name": "@typescript-eslint/triple-slash-reference", - "url": "https://typescript-eslint.io/rules/triple-slash-reference" + "name": "valid-expect-in-promise", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-expect-in-promise.md" } ], "flint": { - "name": "tripleSlashReferences", - "plugin": "ts", - "preset": "Logical" + "name": "promiseExpectChains", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/triple-slash-reference", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/triple-slash-reference.html" - } - ] + "notes": "Superseded by noFloatingPromises." }, { - "deno": [ + "eslint": [ { - "name": "no-invalid-triple-slash-references", - "url": "https://docs.deno.com/lint/rules/no-invalid-triple-slash-references" + "name": "prefer-mock-promise-shorthand", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-mock-promise-shorthand.md" } ], "flint": { - "name": "tripleSlashReferenceValidity", - "plugin": "ts", - "preset": "Logical" + "name": "promiseSettleAssertions", + "plugin": "vitest", + "preset": "stylistic" } }, { - "biome": [ + "eslint": [ { - "name": "noTsIgnore", - "url": "https://biomejs.dev/linter/rules/noTsIgnore" + "name": "no-restricted-matchers", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-matchers.md" } ], - "deno": [ + "flint": { + "name": "restrictedMatchers", + "plugin": "vitest" + } + }, + { + "eslint": [ { - "name": "ban-ts-comment", - "url": "https://docs.deno.com/lint/rules/ban-ts-comment" + "name": "no-restricted-vi-methods", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-vi-methods.md" } ], + "flint": { + "name": "restrictedViMethods", + "plugin": "vitest" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/ban-ts-comment", - "url": "https://typescript-eslint.io/rules/ban-ts-comment" + "name": "prefer-snapshot-hint", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-snapshot-hint.md" } ], "flint": { - "name": "tsComments", - "plugin": "ts", - "preset": "Logical" + "name": "snapshotHints", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/ban-ts-comment", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/ban-ts-comment.html" - }, - { - "name": "typescript/prefer-ts-expect-error", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/prefer-ts-expect-error.html" - } - ] + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "@typescript-eslint/ban-tslint-comment", - "url": "https://typescript-eslint.io/rules/ban-tslint-comment" + "name": "no-interpolation-in-snapshots", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-interpolation-in-snapshots.md" } ], "flint": { - "name": "tslintComments", - "plugin": "ts", - "preset": "Stylistic" + "name": "snapshotInterpolations", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/ban-tslint-comment", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/ban-tslint-comment.html" - } - ] + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "@typescript-eslint/consistent-type-assertions", - "url": "https://typescript-eslint.io/rules/consistent-type-assertions" + "name": "require-local-test-context-for-concurrent-snapshots", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-local-test-context-for-concurrent-snapshots.md" } ], "flint": { - "name": "typeAssertions", - "plugin": "ts", - "preset": "Stylistic" + "name": "snapshotLocalTextContexts", + "plugin": "vitest", + "preset": "logical" } }, { "eslint": [ { - "name": "unicorn/prefer-type-error", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-type-error.md" + "name": "no-large-snapshots", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-large-snapshots.md" } ], "flint": { - "name": "typeChecksTypeErrors", - "plugin": "ts", - "preset": "Not implementing" + "name": "snapshotSizes", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ + "notes": "Overly opinionated." + }, + { + "eslint": [ { - "name": "unicorn/prefer-type-error", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-type-error.html" + "name": "prefer-spy-on", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-spy-on.md" } - ] + ], + "flint": { + "name": "spyOnMocks", + "plugin": "vitest", + "status": "skipped" + }, + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "@typescript-eslint/no-duplicate-type-constituents", - "url": "https://typescript-eslint.io/rules/no-duplicate-type-constituents" + "name": "prefer-strict-equal", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-strict-equal.md" } ], "flint": { - "name": "typeConstituentDuplicates", - "plugin": "ts", - "preset": "Logical" + "name": "strictEqualityMatchers", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/no-duplicate-type-constituents", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-duplicate-type-constituents.html" - } - ] + "notes": "Overly opinionated." }, { - "biome": [ - { - "name": "consistentTypeExports", - "url": "https://biomejs.dev/linter/rules/consistentTypeExports" - } - ], "eslint": [ { - "name": "@typescript-eslint/consistent-type-exports", - "url": "https://typescript-eslint.io/rules/consistent-type-exports" + "name": "expect-expect", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/expect-expect.md" } ], "flint": { - "name": "typeExports", - "plugin": "ts", - "preset": "Stylistic" + "name": "testBodyExpectations", + "plugin": "vitest", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "consistentTypeImports", - "url": "https://biomejs.dev/linter/rules/consistentTypeImports" + "name": "prefer-expect-assertions", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-assertions.md" } ], + "flint": { + "name": "testCaseAssertions", + "plugin": "vitest", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/consistent-type-imports", - "url": "https://typescript-eslint.io/rules/consistent-type-imports" - }, - { - "name": "import/consistent-type-specifier-style", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/consistent-type-specifier-style.md" + "name": "no-focused-tests", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-focused-tests.md" } ], "flint": { - "name": "typeImports", - "plugin": "ts", - "preset": "Stylistic" + "name": "testCaseOnlies", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "import/consistent-type-specifier-style", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/consistent-type-specifier-style.html" - }, - { - "name": "typescript/consistent-type-imports", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/consistent-type-imports.html" - } - ] + "notes": "Handled by Vitest in CI mode." }, { - "biome": [ + "eslint": [ { - "name": "useValidTypeof", - "url": "https://biomejs.dev/linter/rules/useValidTypeof" + "name": "padding-around-test-blocks", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/padding-around-test-blocks.md" } ], - "deno": [ + "flint": { + "name": "testCasePaddingLines", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "valid-typeof", - "url": "https://docs.deno.com/lint/rules/valid-typeof" + "name": "require-top-level-describe", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-top-level-describe.md" } ], + "flint": { + "name": "testCasesWithinDescribes", + "plugin": "vitest", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "valid-typeof", - "url": "https://eslint.org/docs/latest/rules/valid-typeof" + "name": "prefer-lowercase-title", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-lowercase-title.md" } ], "flint": { - "implemented": true, - "name": "typeofComparisons", - "plugin": "ts", - "preset": "Untyped" + "name": "testCaseTitles", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/valid-typeof", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/valid-typeof.html" - } - ] + "notes": "Overly opinionated." }, { "eslint": [ { - "name": "import/no-unassigned-import", - "url": "https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-unassigned-import.md" + "name": "no-conditional-tests", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-tests.md" } ], "flint": { - "name": "unassignedImports", - "plugin": "ts", - "preset": "Not implementing" + "name": "testConditionalDefinitions", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "import/no-unassigned-import", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/import/no-unassigned-import.html" - } - ] + "notes": "Overly opinionated." }, { - "biome": [ + "eslint": [ { - "name": "noUnassignedVariables", - "url": "https://biomejs.dev/linter/rules/noUnassignedVariables" + "name": "no-conditional-in-test", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-in-test.md" } ], + "flint": { + "name": "testConditionals", + "plugin": "vitest", + "preset": "logical", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-unassigned-vars", - "url": "https://eslint.org/docs/latest/rules/no-unassigned-vars" + "name": "consistent-test-it", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-it.md" } ], "flint": { - "implemented": true, - "name": "unassignedVariables", - "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ - { - "name": "eslint/no-unassigned-vars", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unassigned-vars.html" - } - ] + "name": "testDefinitionFunctions", + "plugin": "vitest" + } }, { "eslint": [ { - "name": "@typescript-eslint/unbound-method", - "url": "https://typescript-eslint.io/rules/unbound-method" + "name": "no-disabled-tests", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-disabled-tests.md" } ], "flint": { - "name": "unboundMethods", - "plugin": "ts", - "preset": "Logical" + "name": "testDisables", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/unbound-method", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/unbound-method.html" - } - ] + "notes": "Handled by Vitest in CI mode." }, { - "biome": [ + "eslint": [ { - "name": "noUselessUndefinedInitialization", - "url": "https://biomejs.dev/linter/rules/noUselessUndefinedInitialization" + "name": "no-test-prefixes", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-test-prefixes.md" } ], - "deno": [ + "flint": { + "name": "testPrefixes", + "plugin": "vitest", + "preset": "stylistic" + } + }, + { + "eslint": [ { - "name": "no-undef", - "url": "https://docs.deno.com/lint/rules/no-undef" + "name": "no-test-return-statement", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-test-return-statement.md" } ], + "flint": { + "name": "testReturnStatements", + "plugin": "vitest", + "status": "skipped" + }, + "notes": "Overly opinionated, and largely handled by TypeScript." + }, + { "eslint": [ { - "name": "no-undef-init", - "url": "https://eslint.org/docs/latest/rules/no-undef-init" + "name": "no-identical-title", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-identical-title.md" } ], "flint": { - "name": "undefinedInitialValues", - "plugin": "ts", - "preset": "Stylistic" + "name": "titleRepeats", + "plugin": "vitest", + "preset": "logical" } }, { "eslint": [ { - "name": "no-undefined", - "url": "https://eslint.org/docs/latest/rules/no-undefined" + "name": "valid-title", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/valid-title.md" } ], "flint": { - "name": "undefinedNames", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/no-undefined", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-undefined.html" - } - ] + "name": "titleValidity", + "plugin": "vitest", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/no-typeof-undefined", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-typeof-undefined.md" + "name": "prefer-to-be-object", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-object.md" } ], "flint": { - "name": "undefinedTypeofChecks", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "name": "toBeObjectMatchers", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/no-typeof-undefined", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-typeof-undefined.html" - } - ] + "notes": "Overly opinionated." }, { - "biome": [ + "eslint": [ { - "name": "noUndeclaredVariables", - "url": "https://biomejs.dev/linter/rules/noUndeclaredVariables" + "name": "prefer-to-contain", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-contain.md" } ], + "flint": { + "name": "toContainMatchers", + "plugin": "vitest", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "no-undef", - "url": "https://eslint.org/docs/latest/rules/no-undef" + "name": "warn-todo", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/warn-todo.md" } ], "flint": { - "implemented": true, - "name": "undefinedVariables", - "plugin": "ts", - "preset": "Untyped" + "name": "todoTestSkips", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-undef", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-undef.html" - } - ] + "notes": "Handled by Vitest in CI mode." }, { "eslint": [ { - "name": "no-underscore-dangle", - "url": "https://eslint.org/docs/latest/rules/no-underscore-dangle" + "name": "prefer-to-have-length", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-have-length.md" } ], "flint": { - "name": "underscoreNames", - "plugin": "ts", - "preset": "Not implementing" + "name": "toHaveLengthMatchers", + "plugin": "vitest", + "preset": "stylistic" } }, { "eslint": [ { - "name": "unicode-bom", - "url": "https://eslint.org/docs/latest/rules/unicode-bom" + "name": "require-to-throw-message", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/require-to-throw-message.md" } ], "flint": { - "implemented": true, - "name": "unicodeBOMs", - "plugin": "ts", - "preset": "Stylistic" + "name": "toThrowMessages", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/unicode-bom", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/unicode-bom.html" - } - ] + "notes": "Overly opinionated." }, { - "biome": [ + "eslint": [ { - "name": "useUnifiedTypeSignatures", - "url": "https://biomejs.dev/linter/rules/useUnifiedTypeSignatures" + "name": "consistent-vitest-vi", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/consistent-vitest-vi.md" } ], + "flint": { + "name": "viNamespaceNames", + "plugin": "vitest" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/unified-signatures", - "url": "https://typescript-eslint.io/rules/unified-signatures" + "name": "prefer-importing-vitest-globals", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/prefer-importing-vitest-globals.md" } ], "flint": { - "name": "unifiedSignatures", - "plugin": "ts", - "preset": "Logical", - "strictness": "Strict" + "name": "vitestGlobalImports", + "plugin": "vitest", + "preset": "stylistic" } }, { "eslint": [ { - "name": "no-extra-bind", - "url": "https://eslint.org/docs/latest/rules/no-extra-bind" + "name": "no-importing-vitest-globals", + "url": "https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-importing-vitest-globals.md" } ], "flint": { - "name": "unnecessaryBind", - "plugin": "ts", - "preset": "Logical" + "name": "vitestGlobalImports", + "plugin": "vitest", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-extra-bind", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extra-bind.html" - } - ] + "notes": "For a no-longer-recommended globals style." }, { - "biome": [ - { - "name": "noUselessLoneBlockStatements", - "url": "https://biomejs.dev/linter/rules/noUselessLoneBlockStatements" - } - ], "eslint": [ { - "name": "no-lone-blocks", - "url": "https://eslint.org/docs/latest/rules/no-lone-blocks" + "name": "vue/no-spaces-around-equal-signs-in-attribute", + "url": "https://eslint.vuejs.org/rules/no-spaces-around-equal-signs-in-attribute.html" } ], "flint": { - "implemented": true, - "name": "unnecessaryBlocks", - "plugin": "ts", - "preset": "Stylistic" + "name": "attributeEqualSignSpaces", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-lone-blocks", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-lone-blocks.html" - } - ] + "notes": "Formatting rule." }, { - "biome": [ + "eslint": [ { - "name": "noExtraBooleanCast", - "url": "https://biomejs.dev/linter/rules/noExtraBooleanCast" + "name": "vue/first-attribute-linebreak", + "url": "https://eslint.vuejs.org/rules/first-attribute-linebreak.html" } ], - "deno": [ + "flint": { + "name": "attributeLinebreaks", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "no-extra-boolean-cast", - "url": "https://docs.deno.com/lint/rules/no-extra-boolean-cast" + "name": "vue/attribute-hyphenation", + "url": "https://eslint.vuejs.org/rules/attribute-hyphenation.html" } ], + "flint": { + "name": "attributeNameCasing", + "plugin": "vue", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "no-extra-boolean-cast", - "url": "https://eslint.org/docs/latest/rules/no-extra-boolean-cast" + "name": "vue/valid-attribute-name", + "url": "https://eslint.vuejs.org/rules/valid-attribute-name.html" } ], "flint": { - "name": "unnecessaryBooleanCasts", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/no-extra-boolean-cast", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extra-boolean-cast.html" - } - ] + "name": "attributeNameValidity", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Generally handled by parsers." }, { - "biome": [ + "eslint": [ { - "name": "noUselessCatch", - "url": "https://biomejs.dev/linter/rules/noUselessCatch" + "name": "vue/attributes-order", + "url": "https://eslint.vuejs.org/rules/attributes-order.html" } ], + "flint": { + "name": "attributeOrders", + "plugin": "vue", + "preset": "stylistic", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-useless-catch", - "url": "https://eslint.org/docs/latest/rules/no-useless-catch" + "name": "vue/max-attributes-per-line", + "url": "https://eslint.vuejs.org/rules/max-attributes-per-line.html" } ], "flint": { - "implemented": true, - "name": "unnecessaryCatches", - "plugin": "ts", - "preset": "Logical" + "name": "attributesPerLine", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "eslint/no-useless-catch", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-catch.html" + "name": "vue/valid-v-bind", + "url": "https://eslint.vuejs.org/rules/valid-v-bind.html" } - ] + ], + "flint": { + "name": "bindDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } }, { - "flint": { - "name": "unnecessaryComparisons", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "oxc/const-comparisons", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/const-comparisons.html" - }, + "eslint": [ { - "name": "oxc/double-comparisons", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/double-comparisons.html" + "name": "vue/v-bind-style", + "url": "https://eslint.vuejs.org/rules/v-bind-style.html" } - ] + ], + "flint": { + "name": "bindStyles", + "plugin": "vue", + "preset": "stylistic" + } }, { - "biome": [ + "eslint": [ { - "name": "useLiteralKeys", - "url": "https://biomejs.dev/linter/rules/useLiteralKeys" + "name": "vue/block-order", + "url": "https://eslint.vuejs.org/rules/block-order.html" } ], + "flint": { + "name": "blockOrders", + "plugin": "vue", + "preset": "sorting" + } + }, + { "eslint": [ { - "name": "no-useless-computed-key", - "url": "https://eslint.org/docs/latest/rules/no-useless-computed-key" + "name": "vue/no-child-content", + "url": "https://eslint.vuejs.org/rules/no-child-content.html" } ], "flint": { - "name": "unnecessaryComputedKeys", - "plugin": "ts", - "preset": "Stylistic" + "name": "childContentOverrides", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noUselessStringConcat", - "url": "https://biomejs.dev/linter/rules/noUselessStringConcat" + "name": "vue/valid-v-cloak", + "url": "https://eslint.vuejs.org/rules/valid-v-cloak.html" } ], + "flint": { + "name": "cloakDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-useless-concat", - "url": "https://eslint.org/docs/latest/rules/no-useless-concat" + "name": "vue/html-closing-bracket-newline", + "url": "https://eslint.vuejs.org/rules/html-closing-bracket-newline.html" } ], "flint": { - "implemented": true, - "name": "unnecessaryConcatenation", - "plugin": "ts", - "preset": "Stylistic" + "name": "closingBracketNewlines", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-useless-concat", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-concat.html" - } - ] + "notes": "Formatting rule." }, { - "biome": [ + "eslint": [ { - "name": "noUnnecessaryConditions", - "url": "https://biomejs.dev/linter/rules/noUnnecessaryConditions" + "name": "vue/html-closing-bracket-spacing", + "url": "https://eslint.vuejs.org/rules/html-closing-bracket-spacing.html" } ], + "flint": { + "name": "closingBracketSpacing", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Formatting rule." + }, + { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-condition", - "url": "https://typescript-eslint.io/rules/no-unnecessary-condition" + "name": "vue/no-shared-component-data", + "url": "https://eslint.vuejs.org/rules/no-shared-component-data.html" } ], "flint": { - "name": "unnecessaryConditions", - "plugin": "ts", - "preset": "Logical" + "name": "componentDataSharing", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noUselessConstructor", - "url": "https://biomejs.dev/linter/rules/noUselessConstructor" + "name": "vue/no-v-text-v-html-on-component", + "url": "https://eslint.vuejs.org/rules/no-v-text-v-html-on-component.html" } ], + "flint": { + "name": "componentHtmlTextProps", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-useless-constructor", - "url": "https://eslint.org/docs/latest/rules/no-useless-constructor" - }, - { - "name": "@typescript-eslint/no-useless-constructor", - "url": "https://typescript-eslint.io/rules/no-useless-constructor" + "name": "vue/component-definition-name-casing", + "url": "https://eslint.vuejs.org/rules/component-definition-name-casing.html" } ], "flint": { - "name": "unnecessaryConstructors", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/no-useless-constructor", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-constructor.html" - } - ] + "name": "componentNameCasing", + "plugin": "vue", + "preset": "stylistic" + } }, { - "biome": [ + "eslint": [ { - "name": "noUselessContinue", - "url": "https://biomejs.dev/linter/rules/noUselessContinue" + "name": "vue/multi-word-component-names", + "url": "https://eslint.vuejs.org/rules/multi-word-component-names.html" } ], "flint": { - "name": "unnecessaryContinues", - "plugin": "ts", - "preset": "Logical" + "name": "componentNames", + "plugin": "vue", + "preset": "stylistic" } }, { - "biome": [ - { - "name": "noUselessEscapeInRegex", - "url": "https://biomejs.dev/linter/rules/noUselessEscapeInRegex" - }, + "eslint": [ { - "name": "noUselessEscapeInString", - "url": "https://biomejs.dev/linter/rules/noUselessEscapeInString" + "name": "vue/no-reserved-component-names", + "url": "https://eslint.vuejs.org/rules/no-reserved-component-names.html" } ], + "flint": { + "name": "componentNameValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-useless-escape", - "url": "https://eslint.org/docs/latest/rules/no-useless-escape" + "name": "vue/order-in-components", + "url": "https://eslint.vuejs.org/rules/order-in-components.html" } ], "flint": { - "name": "unnecessaryEscapes", - "plugin": "ts", - "preset": "Stylistic" + "name": "componentPropertyOrder", + "plugin": "vue", + "preset": "sorting" } }, { "eslint": [ { - "name": "no-useless-call", - "url": "https://eslint.org/docs/latest/rules/no-useless-call" + "name": "vue/no-mutating-props", + "url": "https://eslint.vuejs.org/rules/no-mutating-props.html" } ], "flint": { - "name": "unnecessaryFunctionCurries", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "eslint/no-useless-call", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-call.html" - } - ] + "name": "componentPropMutations", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noUselessLabel", - "url": "https://biomejs.dev/linter/rules/noUselessLabel" + "name": "vue/require-component-is", + "url": "https://eslint.vuejs.org/rules/require-component-is.html" } ], + "flint": { + "name": "componentVIsBinds", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-extra-label", - "url": "https://eslint.org/docs/latest/rules/no-extra-label" + "name": "vue/no-async-in-computed-properties", + "url": "https://eslint.vuejs.org/rules/no-async-in-computed-properties.html" } ], "flint": { - "name": "unnecessaryLabels", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ - { - "name": "eslint/no-extra-label", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-extra-label.html" - } - ] + "name": "computedAsyncProperties", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "useSimplifiedLogicExpression", - "url": "https://biomejs.dev/linter/rules/useSimplifiedLogicExpression" + "name": "vue/no-use-computed-property-like-method", + "url": "https://eslint.vuejs.org/rules/no-use-computed-property-like-method.html" } ], + "flint": { + "name": "computedPropertyLikeMethods", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-boolean-literal-compare", - "url": "https://typescript-eslint.io/rules/no-unnecessary-boolean-literal-compare" + "name": "vue/return-in-computed-property", + "url": "https://eslint.vuejs.org/rules/return-in-computed-property.html" } ], "flint": { - "name": "unnecessaryLogicalComparisons", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-unnecessary-boolean-literal-compare", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-boolean-literal-compare.html" - } - ] + "name": "computedPropertyReturns", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noConstantMathMinMaxClamp", - "url": "https://biomejs.dev/linter/rules/noConstantMathMinMaxClamp" + "name": "vue/no-side-effects-in-computed-properties", + "url": "https://eslint.vuejs.org/rules/no-side-effects-in-computed-properties.html" } ], "flint": { - "name": "unnecessaryMathClamps", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "oxc/bad-min-max-func", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/oxc/bad-min-max-func.html" - } - ] + "name": "computedPropertySideEffects", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/no-zero-fractions", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-zero-fractions.md" + "name": "vue/no-computed-properties-in-data", + "url": "https://eslint.vuejs.org/rules/no-computed-properties-in-data.html" } ], "flint": { - "name": "unnecessaryNumericFractions", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "unicorn/no-zero-fractions", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-zero-fractions.html" - } - ] + "name": "dataComputedProperties", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/no-unnecessary-polyfills", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unnecessary-polyfills.md" + "name": "vue/require-valid-default-prop", + "url": "https://eslint.vuejs.org/rules/require-valid-default-prop.html" } ], "flint": { - "name": "unnecessaryPolyfills", - "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Superseded by the e18e initiative" + "name": "defaultPropTypes", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noUselessRename", - "url": "https://biomejs.dev/linter/rules/noUselessRename" + "name": "vue/valid-define-emits", + "url": "https://eslint.vuejs.org/rules/valid-define-emits.html" } ], - "deno": [ + "flint": { + "name": "defineEmitsValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-useless-rename", - "url": "https://docs.deno.com/lint/rules/no-useless-rename" + "name": "vue/valid-define-options", + "url": "https://eslint.vuejs.org/rules/valid-define-options.html" } ], + "flint": { + "name": "defineOptionsValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-useless-rename", - "url": "https://eslint.org/docs/latest/rules/no-useless-rename" + "name": "vue/valid-define-props", + "url": "https://eslint.vuejs.org/rules/valid-define-props.html" } ], "flint": { - "name": "unnecessaryRenames", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ - { - "name": "eslint/no-useless-rename", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-useless-rename.html" - } - ] + "name": "definePropsValidity", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "no-useless-return", - "url": "https://eslint.org/docs/latest/rules/no-useless-return" + "name": "vue/no-deprecated-v-bind-sync", + "url": "https://eslint.vuejs.org/rules/no-deprecated-v-bind-sync.html" } ], "flint": { - "name": "unnecessaryReturns", - "plugin": "ts", - "preset": "Stylistic" - } + "name": "deprecatedBindSyncs", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." }, { "eslint": [ { - "name": "unicorn/no-useless-spread", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-spread.md" + "name": "vue/no-deprecated-data-object-declaration", + "url": "https://eslint.vuejs.org/rules/no-deprecated-data-object-declaration.html" } ], "flint": { - "name": "unnecessarySpreads", - "plugin": "ts", - "preset": "Logical" + "name": "deprecatedDataObjectDeclarations", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noUselessStringRaw", - "url": "https://biomejs.dev/linter/rules/noUselessStringRaw" + "name": "vue/no-deprecated-destroyed-lifecycle", + "url": "https://eslint.vuejs.org/rules/no-deprecated-destroyed-lifecycle.html" } ], "flint": { - "name": "unnecessaryStringRaws", - "plugin": "ts", - "preset": "Not implementing" + "name": "deprecatedDestroyedLifecycleHooks", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noUnusedTemplateLiteral", - "url": "https://biomejs.dev/linter/rules/noUnusedTemplateLiteral" + "name": "vue/no-deprecated-dollar-listeners-api", + "url": "https://eslint.vuejs.org/rules/no-deprecated-dollar-listeners-api.html" } ], + "flint": { + "name": "deprecatedDollarListeners", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-template-expression", - "url": "https://typescript-eslint.io/rules/no-unnecessary-template-expression" + "name": "vue/no-deprecated-dollar-scopedslots-api", + "url": "https://eslint.vuejs.org/rules/no-deprecated-dollar-scopedslots-api.html" } ], "flint": { - "name": "unnecessaryTemplateExpressions", - "plugin": "ts", - "preset": "Logical" + "name": "deprecatedDollarScopedSlots", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/no-unnecessary-template-expression", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-template-expression.html" - } - ] + "notes": "Superseded by deprecated." }, { "eslint": [ { - "name": "unicorn/prefer-logical-operator-over-ternary", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-logical-operator-over-ternary.md" + "name": "vue/no-deprecated-events-api", + "url": "https://eslint.vuejs.org/rules/no-deprecated-events-api.html" } ], "flint": { - "name": "unnecessaryTernaries", - "plugin": "ts", - "preset": "Stylistic", - "strictness": "Strict" + "name": "deprecatedEvents", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/prefer-logical-operator-over-ternary", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-logical-operator-over-ternary.html" - } - ] + "notes": "Superseded by deprecated." }, { - "biome": [ + "eslint": [ { - "name": "noInferrableTypes", - "url": "https://biomejs.dev/linter/rules/noInferrableTypes" + "name": "vue/no-deprecated-filter", + "url": "https://eslint.vuejs.org/rules/no-deprecated-filter.html" } ], - "deno": [ + "flint": { + "name": "deprecatedFilters", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-inferrable-types", - "url": "https://docs.deno.com/lint/rules/no-inferrable-types" + "name": "vue/no-deprecated-functional-template", + "url": "https://eslint.vuejs.org/rules/no-deprecated-functional-template.html" } ], + "flint": { + "name": "deprecatedFunctionalTemplates", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/no-inferrable-types", - "url": "https://typescript-eslint.io/rules/no-inferrable-types" + "name": "vue/no-deprecated-html-element-is", + "url": "https://eslint.vuejs.org/rules/no-deprecated-html-element-is.html" } ], "flint": { - "name": "unnecessaryTypeAnnotations", - "plugin": "ts", - "preset": "Stylistic" + "name": "deprecatedHtmlElementIs", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/no-inferrable-types", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-inferrable-types.html" - } - ] + "notes": "Superseded by deprecated." }, { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-type-arguments", - "url": "https://typescript-eslint.io/rules/no-unnecessary-type-arguments" + "name": "vue/no-deprecated-inline-template", + "url": "https://eslint.vuejs.org/rules/no-deprecated-inline-template.html" } ], "flint": { - "name": "unnecessaryTypeArguments", - "plugin": "ts", - "preset": "Logical" + "name": "deprecatedInlineTemplates", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/no-unnecessary-type-arguments", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-type-arguments.html" - } - ] + "notes": "Superseded by deprecated." }, { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-type-assertion", - "url": "https://typescript-eslint.io/rules/no-unnecessary-type-assertion" + "name": "vue/no-deprecated-model-definition", + "url": "https://eslint.vuejs.org/rules/no-deprecated-model-definition.html" } ], "flint": { - "name": "unnecessaryTypeAssertions", - "plugin": "ts", - "preset": "Logical" + "name": "deprecatedModelDefinitions", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/no-unnecessary-type-assertion", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-type-assertion.html" - } - ] + "notes": "Superseded by deprecated." }, { - "biome": [ - { - "name": "noUselessTypeConstraint", - "url": "https://biomejs.dev/linter/rules/noUselessTypeConstraint" - } - ], "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-type-constraint", - "url": "https://typescript-eslint.io/rules/no-unnecessary-type-constraint" + "name": "vue/no-deprecated-router-link-tag-prop", + "url": "https://eslint.vuejs.org/rules/no-deprecated-router-link-tag-prop.html" } ], "flint": { - "name": "unnecessaryTypeConstraints", - "plugin": "ts", - "preset": "Logical" + "name": "deprecatedRouterLinkTagProps", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "typescript/no-unnecessary-type-constraint", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unnecessary-type-constraint.html" - } - ] + "notes": "Superseded by deprecated." }, { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-type-conversion", - "url": "https://typescript-eslint.io/rules/no-unnecessary-type-conversion" + "name": "vue/no-deprecated-scope-attribute", + "url": "https://eslint.vuejs.org/rules/no-deprecated-scope-attribute.html" } ], "flint": { - "name": "unnecessaryTypeConversions", - "plugin": "ts", - "preset": "Logical" - } + "name": "deprecatedScopeAttributes", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." }, { "eslint": [ { - "name": "@typescript-eslint/no-unnecessary-type-parameters", - "url": "https://typescript-eslint.io/rules/no-unnecessary-type-parameters" + "name": "vue/no-deprecated-delete-set", + "url": "https://eslint.vuejs.org/rules/no-deprecated-delete-set.html" } ], "flint": { - "name": "unnecessaryTypeParameters", - "plugin": "ts", - "preset": "Logical" - } + "name": "deprecatedSetDeletes", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." }, { - "biome": [ + "eslint": [ { - "name": "noUselessUndefined", - "url": "https://biomejs.dev/linter/rules/noUselessUndefined" + "name": "vue/no-deprecated-slot-attribute", + "url": "https://eslint.vuejs.org/rules/no-deprecated-slot-attribute.html" } ], + "flint": { + "name": "deprecatedSlotAttributes", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { "eslint": [ { - "name": "unicorn/no-useless-undefined", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-undefined.md" + "name": "vue/no-deprecated-slot-scope-attribute", + "url": "https://eslint.vuejs.org/rules/no-deprecated-slot-scope-attribute.html" } ], "flint": { - "name": "unnecessaryUndefinedDefaults", - "plugin": "ts", - "preset": "Logical" + "name": "deprecatedSlotScopeAttributes", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "unicorn/no-useless-undefined", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-undefined.html" - } - ] + "notes": "Superseded by deprecated." }, { - "biome": [ + "eslint": [ { - "name": "noRedundantUseStrict", - "url": "https://biomejs.dev/linter/rules/noRedundantUseStrict" + "name": "vue/no-deprecated-props-default-this", + "url": "https://eslint.vuejs.org/rules/no-deprecated-props-default-this.html" } ], "flint": { - "name": "unnecessaryUseStricts", - "plugin": "ts", - "preset": "Logical" + "name": "deprecatedThisDefaultProps", + "plugin": "vue", + "preset": "logical" } }, { "eslint": [ { - "name": "no-unreachable-loop", - "url": "https://eslint.org/docs/latest/rules/no-unreachable-loop" + "name": "vue/no-deprecated-v-is", + "url": "https://eslint.vuejs.org/rules/no-deprecated-v-is.html" } ], "flint": { - "name": "unreachableLoops", - "plugin": "ts", - "preset": "Not implementing" - } + "name": "deprecatedVIs", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." }, { - "biome": [ + "eslint": [ { - "name": "noUnreachable", - "url": "https://biomejs.dev/linter/rules/noUnreachable" + "name": "vue/no-deprecated-v-on-native-modifier", + "url": "https://eslint.vuejs.org/rules/no-deprecated-v-on-native-modifier.html" } ], - "deno": [ + "flint": { + "name": "deprecatedVOnNativeModifiers", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { + "eslint": [ { - "name": "no-unreachable", - "url": "https://docs.deno.com/lint/rules/no-unreachable" + "name": "vue/no-deprecated-v-on-number-modifiers", + "url": "https://eslint.vuejs.org/rules/no-deprecated-v-on-number-modifiers.html" } ], + "flint": { + "name": "deprecatedVOnNumberModifiers", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Superseded by deprecated." + }, + { "eslint": [ { - "name": "no-unreachable", - "url": "https://eslint.org/docs/latest/rules/no-unreachable" + "name": "vue/no-deprecated-vue-config-keycodes", + "url": "https://eslint.vuejs.org/rules/no-deprecated-vue-config-keycodes.html" } ], "flint": { - "name": "unreachableStatements", - "plugin": "ts", - "preset": "Untyped" + "name": "deprecatedVueConfigKeyCodes", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-unreachable", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unreachable.html" - } - ] + "notes": "Superseded by deprecated." }, { - "biome": [ + "eslint": [ { - "name": "noUnsafeDeclarationMerging", - "url": "https://biomejs.dev/linter/rules/noUnsafeDeclarationMerging" + "name": "vue/no-duplicate-attributes", + "url": "https://eslint.vuejs.org/rules/no-duplicate-attributes.html" } ], + "flint": { + "name": "duplicateAttributes", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "@typescript-eslint/no-unsafe-declaration-merging", - "url": "https://typescript-eslint.io/rules/no-unsafe-declaration-merging" + "name": "vue/no-dupe-v-else-if", + "url": "https://eslint.vuejs.org/rules/no-dupe-v-else-if.html" } ], "flint": { - "name": "unsafeDeclarationmerging", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-unsafe-declaration-merging", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-declaration-merging.html" - } - ] + "name": "duplicateVElseIfConditions", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-unsafe-enum-comparison", - "url": "https://typescript-eslint.io/rules/no-unsafe-enum-comparison" + "name": "vue/valid-v-else", + "url": "https://eslint.vuejs.org/rules/valid-v-else.html" } ], "flint": { - "name": "unsafeEnumComparisons", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "name": "elseDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "typescript/no-unsafe-enum-comparison", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-enum-comparison.html" + "name": "vue/valid-v-else-if", + "url": "https://eslint.vuejs.org/rules/valid-v-else-if.html" } - ] + ], + "flint": { + "name": "elseIfDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noUnsafeFinally", - "url": "https://biomejs.dev/linter/rules/noUnsafeFinally" + "name": "vue/return-in-emits-validator", + "url": "https://eslint.vuejs.org/rules/return-in-emits-validator.html" } ], - "deno": [ + "flint": { + "name": "emitsValidatorReturns", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-unsafe-finally", - "url": "https://docs.deno.com/lint/rules/no-unsafe-finally" + "name": "vue/html-end-tags", + "url": "https://eslint.vuejs.org/rules/html-end-tags.html" } ], + "flint": { + "name": "endTagPresence", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-unsafe-finally", - "url": "https://eslint.org/docs/latest/rules/no-unsafe-finally" + "name": "vue/require-explicit-emits", + "url": "https://eslint.vuejs.org/rules/require-explicit-emits.html" } ], "flint": { - "name": "unsafeFinallyStatements", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "name": "eventTriggerExplicitEmits", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/no-unsafe-finally", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unsafe-finally.html" + "name": "vue/no-expose-after-await", + "url": "https://eslint.vuejs.org/rules/no-expose-after-await.html" } - ] + ], + "flint": { + "name": "exposeAfterAwaits", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-unsafe-function-type", - "url": "https://typescript-eslint.io/rules/no-unsafe-function-type" + "name": "vue/require-v-for-key", + "url": "https://eslint.vuejs.org/rules/require-v-for-key.html" } ], "flint": { - "name": "unsafeFunctionTypes", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "typescript/no-unsafe-function-type", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-function-type.html" - } - ] + "name": "forBindKeys", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noUnsafeNegation", - "url": "https://biomejs.dev/linter/rules/noUnsafeNegation" + "name": "vue/valid-v-for", + "url": "https://eslint.vuejs.org/rules/valid-v-for.html" } ], - "deno": [ + "flint": { + "name": "forDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-unsafe-negation", - "url": "https://docs.deno.com/lint/rules/no-unsafe-negation" + "name": "vue/valid-v-html", + "url": "https://eslint.vuejs.org/rules/valid-v-html.html" } ], + "flint": { + "name": "htmlDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-unsafe-negation", - "url": "https://eslint.org/docs/latest/rules/no-unsafe-negation" + "name": "vue/html-quotes", + "url": "https://eslint.vuejs.org/rules/html-quotes.html" } ], "flint": { - "implemented": true, - "name": "unsafeNegations", - "plugin": "ts", - "preset": "Untyped" + "name": "htmlQuotes", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-unsafe-negation", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unsafe-negation.html" - } - ] + "notes": "Formatting rule." }, { - "biome": [ - { - "name": "noUnsafeOptionalChaining", - "url": "https://biomejs.dev/linter/rules/noUnsafeOptionalChaining" - } - ], "eslint": [ { - "name": "no-unsafe-optional-chaining", - "url": "https://eslint.org/docs/latest/rules/no-unsafe-optional-chaining" + "name": "vue/html-self-closing", + "url": "https://eslint.vuejs.org/rules/html-self-closing.html" } ], "flint": { - "name": "unsafeOptionalChains", - "plugin": "ts", - "preset": "Untyped" + "name": "htmlTagsSelfClosing", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "eslint/no-unsafe-optional-chaining", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unsafe-optional-chaining.html" + "name": "vue/valid-v-if", + "url": "https://eslint.vuejs.org/rules/valid-v-if.html" } - ] + ], + "flint": { + "name": "ifDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-base-to-string", - "url": "https://typescript-eslint.io/rules/no-base-to-string" + "name": "vue/html-indent", + "url": "https://eslint.vuejs.org/rules/html-indent.html" } ], "flint": { - "name": "unsafeToString", - "plugin": "ts", - "preset": "Logical" + "name": "indents", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "typescript/no-base-to-string", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-base-to-string.html" + "name": "vue/valid-v-is", + "url": "https://eslint.vuejs.org/rules/valid-v-is.html" } - ] + ], + "flint": { + "name": "isDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-unsafe-unary-minus", - "url": "https://typescript-eslint.io/rules/no-unsafe-unary-minus" + "name": "vue/no-dupe-keys", + "url": "https://eslint.vuejs.org/rules/no-dupe-keys.html" } ], "flint": { - "name": "unsafeUnaryNegations", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "name": "keyDuplicates", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "typescript/no-unsafe-unary-minus", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-unsafe-unary-minus.html" + "name": "vue/no-reserved-keys", + "url": "https://eslint.vuejs.org/rules/no-reserved-keys.html" } - ] + ], + "flint": { + "name": "keyValidity", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "unicorn/prefer-optional-catch-binding", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/prefer-optional-catch-binding.md" + "name": "vue/no-lifecycle-after-await", + "url": "https://eslint.vuejs.org/rules/no-lifecycle-after-await.html" } ], "flint": { - "name": "unusedCatchBindings", - "plugin": "ts", - "preset": "Not implementing" - }, - "notes": "Superseded by unusedVariables", - "oxlint": [ + "name": "lifecyclesAfterAwaits", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "unicorn/prefer-optional-catch-binding", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/prefer-optional-catch-binding.html" + "name": "vue/no-lone-template", + "url": "https://eslint.vuejs.org/rules/no-lone-template.html" } - ] + ], + "flint": { + "name": "loneTemplates", + "plugin": "vue", + "preset": "logical", + "strictness": "strict" + } }, { "eslint": [ { - "name": "no-unused-expressions", - "url": "https://eslint.org/docs/latest/rules/no-unused-expressions" - }, - { - "name": "@typescript-eslint/no-unused-expressions", - "url": "https://typescript-eslint.io/rules/no-unused-expressions" + "name": "vue/one-component-per-file", + "url": "https://eslint.vuejs.org/rules/one-component-per-file.html" } ], "flint": { - "name": "unusedExpressions", - "plugin": "ts", - "preset": "Logical" + "name": "maximumComponentsPerFile", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ - { - "name": "eslint/no-unused-expressions", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-expressions.html" - } - ] + "notes": "Overly opinionated." }, { - "biome": [ + "eslint": [ { - "name": "noUnusedLabels", - "url": "https://biomejs.dev/linter/rules/noUnusedLabels" + "name": "vue/valid-v-memo", + "url": "https://eslint.vuejs.org/rules/valid-v-memo.html" } ], - "deno": [ + "flint": { + "name": "memoDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-unused-labels", - "url": "https://docs.deno.com/lint/rules/no-unused-labels" + "name": "vue/valid-v-model", + "url": "https://eslint.vuejs.org/rules/valid-v-model.html" } ], + "flint": { + "name": "modelDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-unused-labels", - "url": "https://eslint.org/docs/latest/rules/no-unused-labels" + "name": "vue/multiline-html-element-content-newline", + "url": "https://eslint.vuejs.org/rules/multiline-html-element-content-newline.html" } ], "flint": { - "name": "unusedLabels", - "plugin": "ts", - "preset": "Stylistic" + "name": "multilineElementContentNewlines", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "eslint/no-unused-labels", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-labels.html" + "name": "vue/mustache-interpolation-spacing", + "url": "https://eslint.vuejs.org/rules/mustache-interpolation-spacing.html" } - ] + ], + "flint": { + "name": "mustacheInterpolationSpaces", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Formatting rule." }, { "eslint": [ { - "name": "unicorn/no-unused-properties", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-unused-properties.md" + "name": "vue/valid-next-tick", + "url": "https://eslint.vuejs.org/rules/valid-next-tick.html" } ], "flint": { - "name": "unusedObjectProperties", - "plugin": "ts", - "preset": "Not implementing" + "name": "nextTickValidity", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noUnusedPrivateClassMembers", - "url": "https://biomejs.dev/linter/rules/noUnusedPrivateClassMembers" + "name": "vue/valid-v-once", + "url": "https://eslint.vuejs.org/rules/valid-v-once.html" } ], + "flint": { + "name": "onceDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-unused-private-class-members", - "url": "https://eslint.org/docs/latest/rules/no-unused-private-class-members" + "name": "vue/valid-v-on", + "url": "https://eslint.vuejs.org/rules/valid-v-on.html" } ], "flint": { - "name": "unusedPrivateClassMembers", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "eslint/no-unused-private-class-members", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-private-class-members.html" - } - ] + "name": "onDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noUselessSwitchCase", - "url": "https://biomejs.dev/linter/rules/noUselessSwitchCase" + "name": "vue/v-on-event-hyphenation", + "url": "https://eslint.vuejs.org/rules/v-on-event-hyphenation.html" } ], + "flint": { + "name": "onEventHyphens", + "plugin": "vue", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "unicorn/no-useless-switch-case", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/no-useless-switch-case.md" + "name": "vue/v-on-style", + "url": "https://eslint.vuejs.org/rules/v-on-style.html" } ], "flint": { - "name": "unusedSwitchStatements", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ - { - "name": "unicorn/no-useless-switch-case", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/unicorn/no-useless-switch-case.html" - } - ] + "name": "onEventStyles", + "plugin": "vue", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "no-useless-assignment", - "url": "https://eslint.org/docs/latest/rules/no-useless-assignment" + "name": "vue/use-v-on-exact", + "url": "https://eslint.vuejs.org/rules/use-v-on-exact.html" } ], "flint": { - "name": "unusedValues", - "plugin": "ts", - "preset": "Logical" + "name": "onExactModifiers", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ - { - "name": "noUnusedFunctionParameters", - "url": "https://biomejs.dev/linter/rules/noUnusedFunctionParameters" - }, + "eslint": [ { - "name": "noUnusedVariables", - "url": "https://biomejs.dev/linter/rules/noUnusedVariables" + "name": "vue/require-default-prop", + "url": "https://eslint.vuejs.org/rules/require-default-prop.html" } ], - "deno": [ + "flint": { + "name": "optionalPropDefaults", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-unused-vars", - "url": "https://docs.deno.com/lint/rules/no-unused-vars" + "name": "vue/no-parsing-error", + "url": "https://eslint.vuejs.org/rules/no-parsing-error.html" } ], + "flint": { + "name": "parsingErrors", + "plugin": "vue", + "status": "skipped" + }, + "notes": "Generally handled by parsers." + }, + { "eslint": [ { - "name": "no-unused-vars", - "url": "https://eslint.org/docs/latest/rules/no-unused-vars" - }, - { - "name": "@typescript-eslint/no-unused-vars", - "url": "https://typescript-eslint.io/rules/no-unused-vars" + "name": "vue/valid-v-pre", + "url": "https://eslint.vuejs.org/rules/valid-v-pre.html" } ], "flint": { - "name": "unusedVariables", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "name": "preDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/no-unused-vars", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-unused-vars.html" + "name": "vue/prop-name-casing", + "url": "https://eslint.vuejs.org/rules/prop-name-casing.html" } - ] + ], + "flint": { + "name": "propNameCasing", + "plugin": "vue", + "preset": "stylistic" + } }, { "eslint": [ { - "name": "unicorn/relative-url-style", - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn/blob/HEAD/docs/rules/relative-url-style.md" + "name": "vue/no-reserved-props", + "url": "https://eslint.vuejs.org/rules/no-reserved-props.html" } ], "flint": { - "name": "urlRelativity", - "plugin": "ts", - "preset": "Not implementing" + "name": "propNameValidity", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noInvalidUseBeforeDeclaration", - "url": "https://biomejs.dev/linter/rules/noInvalidUseBeforeDeclaration" + "name": "vue/no-required-prop-with-default", + "url": "https://eslint.vuejs.org/rules/no-required-prop-with-default.html" } ], + "flint": { + "name": "propRequiredAndDefaults", + "plugin": "vue", + "preset": "logical", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-use-before-define", - "url": "https://eslint.org/docs/latest/rules/no-use-before-define" - }, - { - "name": "@typescript-eslint/no-use-before-define", - "url": "https://typescript-eslint.io/rules/no-use-before-define" + "name": "vue/require-prop-type-constructor", + "url": "https://eslint.vuejs.org/rules/require-prop-type-constructor.html" } ], "flint": { - "name": "usageBeforeDefinition", - "plugin": "ts", - "preset": "Untyped" + "name": "propTypeConstructors", + "plugin": "vue", + "preset": "logical" } }, { "eslint": [ { - "name": "strict", - "url": "https://eslint.org/docs/latest/rules/strict" + "name": "vue/require-prop-types", + "url": "https://eslint.vuejs.org/rules/require-prop-types.html" } ], "flint": { - "name": "useStrictDirectives", - "plugin": "ts", - "preset": "Untyped" + "name": "propTypes", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noVar", - "url": "https://biomejs.dev/linter/rules/noVar" + "name": "vue/no-ref-as-operand", + "url": "https://eslint.vuejs.org/rules/no-ref-as-operand.html" } ], - "deno": [ + "flint": { + "name": "refOperands", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-var", - "url": "https://docs.deno.com/lint/rules/no-var" + "name": "vue/require-render-return", + "url": "https://eslint.vuejs.org/rules/require-render-return.html" } ], + "flint": { + "name": "renderReturns", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-var", - "url": "https://eslint.org/docs/latest/rules/no-var" + "name": "vue/no-export-in-script-setup", + "url": "https://eslint.vuejs.org/rules/no-export-in-script-setup.html" } ], "flint": { - "name": "varDeclarations", - "plugin": "ts", - "preset": "Stylistic" + "name": "scriptSetupExports", + "plugin": "vue", + "preset": "logical" } }, { "eslint": [ { - "name": "block-scoped-var", - "url": "https://eslint.org/docs/latest/rules/block-scoped-var" + "name": "vue/valid-v-show", + "url": "https://eslint.vuejs.org/rules/valid-v-show.html" } ], "flint": { - "name": "variableBlockScopeUsage", - "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ - { - "name": "eslint/block-scoped-var", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/block-scoped-var.html" - } - ] + "name": "showDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "init-declarations", - "url": "https://eslint.org/docs/latest/rules/init-declarations" - }, - { - "name": "@typescript-eslint/init-declarations", - "url": "https://typescript-eslint.io/rules/init-declarations" + "name": "vue/singleline-html-element-content-newline", + "url": "https://eslint.vuejs.org/rules/singleline-html-element-content-newline.html" } ], "flint": { - "name": "variableDeclarationInitializations", - "plugin": "ts", - "preset": "Not implementing" + "name": "singleLineElementContentNewlines", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "eslint/init-declarations", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/init-declarations.html" + "name": "vue/no-multiple-slot-args", + "url": "https://eslint.vuejs.org/rules/no-multiple-slot-args.html" } - ] + ], + "flint": { + "name": "slotArguments", + "plugin": "vue", + "preset": "logical", + "strictness": "strict" + } }, { "eslint": [ { - "name": "sort-vars", - "url": "https://eslint.org/docs/latest/rules/sort-vars" + "name": "vue/valid-v-slot", + "url": "https://eslint.vuejs.org/rules/valid-v-slot.html" } ], "flint": { - "name": "variableDeclarationSorting", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "name": "slotDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/sort-vars", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/sort-vars.html" + "name": "vue/require-slots-as-functions", + "url": "https://eslint.vuejs.org/rules/require-slots-as-functions.html" } - ] + ], + "flint": { + "name": "slotsAsFunctions", + "plugin": "vue", + "preset": "logical" + } }, { - "deno": [ + "eslint": [ { - "name": "no-delete-var", - "url": "https://docs.deno.com/lint/rules/no-delete-var" + "name": "vue/v-slot-style", + "url": "https://eslint.vuejs.org/rules/v-slot-style.html" } ], + "flint": { + "name": "slotStyles", + "plugin": "vue", + "preset": "stylistic" + } + }, + { "eslint": [ { - "name": "no-delete-var", - "url": "https://eslint.org/docs/latest/rules/no-delete-var" + "name": "vue/no-multi-spaces", + "url": "https://eslint.vuejs.org/rules/no-multi-spaces.html" } ], "flint": { - "implemented": true, - "name": "variableDeletions", - "plugin": "ts", - "preset": "Untyped" + "name": "spaces", + "plugin": "vue", + "status": "skipped" }, - "oxlint": [ + "notes": "Formatting rule." + }, + { + "eslint": [ { - "name": "eslint/no-delete-var", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-delete-var.html" + "name": "vue/no-template-key", + "url": "https://eslint.vuejs.org/rules/no-template-key.html" } - ] + ], + "flint": { + "name": "templateKeys", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noRedeclare", - "url": "https://biomejs.dev/linter/rules/noRedeclare" + "name": "vue/valid-template-root", + "url": "https://eslint.vuejs.org/rules/valid-template-root.html" } ], - "deno": [ + "flint": { + "name": "templateRootValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "no-redeclare", - "url": "https://docs.deno.com/lint/rules/no-redeclare" + "name": "vue/no-template-shadow", + "url": "https://eslint.vuejs.org/rules/no-template-shadow.html" } ], + "flint": { + "name": "templateShadows", + "plugin": "vue", + "preset": "logical", + "strictness": "strict" + } + }, + { "eslint": [ { - "name": "no-redeclare", - "url": "https://eslint.org/docs/latest/rules/no-redeclare" - }, - { - "name": "@typescript-eslint/no-redeclare", - "url": "https://typescript-eslint.io/rules/no-redeclare" + "name": "vue/no-v-for-template-key-on-child", + "url": "https://eslint.vuejs.org/rules/no-v-for-template-key-on-child.html" } ], "flint": { - "name": "variableRedeclarations", - "plugin": "ts", - "preset": "Untyped" - }, - "oxlint": [ + "name": "templateVForOnChildren", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/no-redeclare", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-redeclare.html" + "name": "vue/no-textarea-mustache", + "url": "https://eslint.vuejs.org/rules/no-textarea-mustache.html" } - ] + ], + "flint": { + "name": "textareaMustacheChildren", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "vars-on-top", - "url": "https://eslint.org/docs/latest/rules/vars-on-top" + "name": "vue/valid-v-text", + "url": "https://eslint.vuejs.org/rules/valid-v-text.html" } ], "flint": { - "name": "variablesOnTop", - "plugin": "ts", - "preset": "Not implementing" - }, - "oxlint": [ + "name": "textDirectiveValidity", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/vars-on-top", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/vars-on-top.html" + "name": "vue/this-in-template", + "url": "https://eslint.vuejs.org/rules/this-in-template.html" } - ] + ], + "flint": { + "name": "thisInTemplates", + "plugin": "vue", + "preset": "logical", + "strictness": "strict" + } }, { - "deno": [ + "eslint": [ { - "name": "verbatim-module-syntax", - "url": "https://docs.deno.com/lint/rules/verbatim-module-syntax" + "name": "vue/require-toggle-inside-transition", + "url": "https://eslint.vuejs.org/rules/require-toggle-inside-transition.html" } ], "flint": { - "name": "verbatimModuleSyntax", - "plugin": "ts", - "preset": "Not implementing" + "name": "transitionToggles", + "plugin": "vue", + "preset": "logical" } }, { - "biome": [ + "eslint": [ { - "name": "noVoid", - "url": "https://biomejs.dev/linter/rules/noVoid" + "name": "vue/no-useless-template-attributes", + "url": "https://eslint.vuejs.org/rules/no-useless-template-attributes.html" } ], + "flint": { + "name": "unnecessaryTemplateAttributes", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-void", - "url": "https://eslint.org/docs/latest/rules/no-void" + "name": "vue/no-unused-components", + "url": "https://eslint.vuejs.org/rules/no-unused-components.html" } ], "flint": { - "implemented": true, - "name": "voidOperator", - "plugin": "ts", - "preset": "Stylistic" - }, - "oxlint": [ + "name": "unusedComponents", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/no-void", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-void.html" + "name": "vue/no-unused-vars", + "url": "https://eslint.vuejs.org/rules/no-unused-vars.html" } - ] + ], + "flint": { + "name": "unusedVariables", + "plugin": "vue", + "preset": "logical" + } }, { - "biome": [ + "eslint": [ { - "name": "noWith", - "url": "https://biomejs.dev/linter/rules/noWith" + "name": "vue/no-v-html", + "url": "https://eslint.vuejs.org/rules/no-v-html.html" } ], - "deno": [ + "flint": { + "name": "vHtmlDirectives", + "plugin": "vue", + "preset": "logical", + "strictness": "strict" + } + }, + { + "eslint": [ { - "name": "no-with", - "url": "https://docs.deno.com/lint/rules/no-with" + "name": "vue/no-use-v-if-with-v-for", + "url": "https://eslint.vuejs.org/rules/no-use-v-if-with-v-for.html" } ], + "flint": { + "name": "vIfsWithVFors", + "plugin": "vue", + "preset": "logical" + } + }, + { "eslint": [ { - "name": "no-with", - "url": "https://eslint.org/docs/latest/rules/no-with" + "name": "vue/prefer-import-from-vue", + "url": "https://eslint.vuejs.org/rules/prefer-import-from-vue.html" } ], "flint": { - "name": "withStatements", - "plugin": "ts", - "preset": "Logical" - }, - "oxlint": [ + "name": "vuePackageImports", + "plugin": "vue", + "preset": "logical" + } + }, + { + "eslint": [ { - "name": "eslint/no-with", - "url": "https://oxc.rs/docs/guide/usage/linter/rules/eslint/no-with.html" + "name": "vue/no-watch-after-await", + "url": "https://eslint.vuejs.org/rules/no-watch-after-await.html" } - ] + ], + "flint": { + "name": "watchAfterAwaits", + "plugin": "vue", + "preset": "logical" + } }, { "eslint": [ { - "name": "@typescript-eslint/no-wrapper-object-types", - "url": "https://typescript-eslint.io/rules/no-wrapper-object-types" + "name": "vue/no-arrow-functions-in-watch", + "url": "https://eslint.vuejs.org/rules/no-arrow-functions-in-watch.html" } ], "flint": { - "name": "wrapperObjectTypes", - "plugin": "ts", - "preset": "Logical" + "name": "watchArrowFunctions", + "plugin": "vue", + "preset": "logical" } }, { @@ -16411,7 +21141,7 @@ "flint": { "name": "blockMappings", "plugin": "yaml", - "preset": "Stylistic" + "preset": "stylistic" } }, { @@ -16424,7 +21154,7 @@ "flint": { "name": "blockSequences", "plugin": "yaml", - "preset": "Stylistic" + "preset": "stylistic" } }, { @@ -16437,7 +21167,7 @@ "flint": { "name": "emptyDocuments", "plugin": "yaml", - "preset": "Logical" + "preset": "logical" } }, { @@ -16448,10 +21178,10 @@ } ], "flint": { - "implemented": true, "name": "emptyMappingKeys", "plugin": "yaml", - "preset": "Logical" + "preset": "logical", + "status": "implemented" } }, { @@ -16464,7 +21194,7 @@ "flint": { "name": "emptyMappingValues", "plugin": "yaml", - "preset": "Logical" + "preset": "logical" } }, { @@ -16477,7 +21207,7 @@ "flint": { "name": "emptySequenceEntries", "plugin": "yaml", - "preset": "Logical" + "preset": "logical" } }, { @@ -16490,8 +21220,8 @@ "flint": { "name": "fileExtensions", "plugin": "yaml", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic", + "strictness": "strict" } }, { @@ -16504,7 +21234,7 @@ "flint": { "name": "irregularWhitespace", "plugin": "yaml", - "preset": "Stylistic" + "preset": "stylistic" } }, { @@ -16517,7 +21247,7 @@ "flint": { "name": "mappingKeyCasing", "plugin": "yaml", - "preset": "Not implementing" + "status": "skipped" } }, { @@ -16530,8 +21260,8 @@ "flint": { "name": "numericTrailingZeros", "plugin": "yaml", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic", + "strictness": "strict" } }, { @@ -16544,8 +21274,8 @@ "flint": { "name": "plainScalars", "plugin": "yaml", - "preset": "Stylistic", - "strictness": "Strict" + "preset": "stylistic", + "strictness": "strict" } }, { @@ -16558,8 +21288,8 @@ "flint": { "name": "stringMappingKeys", "plugin": "yaml", - "preset": "Logical", - "strictness": "Strict" + "preset": "logical", + "strictness": "strict" } } ] diff --git a/packages/comparisons/src/index.ts b/packages/comparisons/src/index.ts index e06da39ab..7888b8f05 100644 --- a/packages/comparisons/src/index.ts +++ b/packages/comparisons/src/index.ts @@ -12,7 +12,7 @@ export const linterNames = { oxlint: "Oxlint", } as const satisfies Record; -const comparisons: Comparison[] = data; +const comparisons = data as Comparison[]; export { comparisons }; @@ -27,13 +27,15 @@ export interface Comparison { } export interface FlintRuleReference { - implemented?: boolean; name: string; plugin: string; - preset: string; + preset?: string; + status?: FlintRuleStatus; strictness?: string; } +export type FlintRuleStatus = "implemented" | "skipped"; + export type Linter = "biome" | "deno" | "eslint" | "markdownlint" | "oxlint"; export interface LinterRuleReference { diff --git a/packages/comparisons/src/sort-data.ts b/packages/comparisons/src/sort-data.ts new file mode 100644 index 000000000..abf8e1f14 --- /dev/null +++ b/packages/comparisons/src/sort-data.ts @@ -0,0 +1,25 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { isDeepStrictEqual } from "node:util"; +import prettier from "prettier"; + +import dataOriginal from "./data.json" with { type: "json" }; + +const dataFilePath = path.join(import.meta.dirname, "data.json"); + +const dataSorted = dataOriginal.toSorted((a, b) => + a.flint.plugin === b.flint.plugin + ? a.flint.name.localeCompare(b.flint.name) + : a.flint.plugin.localeCompare(b.flint.plugin), +); + +if (!isDeepStrictEqual(dataOriginal, dataSorted)) { + console.log("Writing to:", dataFilePath); + await fs.writeFile( + dataFilePath, + await prettier.format(JSON.stringify(dataSorted, null, 2), { + parser: "json", + ...(await prettier.resolveConfig(dataFilePath)), + }), + ); +} diff --git a/packages/core/src/types/rules.test-d.ts b/packages/core/src/types/rules.test-d.ts index 886388a73..9487c86ec 100644 --- a/packages/core/src/types/rules.test-d.ts +++ b/packages/core/src/types/rules.test-d.ts @@ -59,11 +59,13 @@ describe("Rule", () => { }); it("should work with AnyOptionalSchema|undefined", () => { + // flint-disable-lines-begin voidOperator void (( rule: AnyRuleDefinition, options: InferredObject, ) => { void rule.setup({}, options); }); + // flint-disable-lines-end voidOperator }); }); diff --git a/packages/json/src/plugin.ts b/packages/json/src/plugin.ts index aca7b0d01..3b57a890a 100644 --- a/packages/json/src/plugin.ts +++ b/packages/json/src/plugin.ts @@ -8,6 +8,6 @@ export const json = createPlugin({ files: { all: ["**/*.json"], }, - name: "json", + name: "JSON", rules: [keyDuplicates, keyNormalization, valueSafety], }); diff --git a/packages/md/src/plugin.ts b/packages/md/src/plugin.ts index 5163354dc..b317a29b5 100644 --- a/packages/md/src/plugin.ts +++ b/packages/md/src/plugin.ts @@ -18,7 +18,7 @@ export const md = createPlugin({ files: { all: ["**/*.md"], }, - name: "md", + name: "Markdown", rules: [ bareUrls, definitionContents, diff --git a/packages/plugin-astro/README.md b/packages/plugin-astro/README.md new file mode 100644 index 000000000..70e0515b7 --- /dev/null +++ b/packages/plugin-astro/README.md @@ -0,0 +1,6 @@ +

@flint.fyi/plugin-astro

+ +

+ [Experimental] A Flint plugin for Astro code. + ❤️‍🔥 +

diff --git a/packages/plugin-astro/package.json b/packages/plugin-astro/package.json new file mode 100644 index 000000000..40340f3d3 --- /dev/null +++ b/packages/plugin-astro/package.json @@ -0,0 +1,30 @@ +{ + "name": "@flint.fyi/plugin-astro", + "version": "0.1.0", + "description": "[Experimental] A Flint plugin for Astro code.", + "repository": { + "type": "git", + "url": "https://github.com/JoshuaKGoldberg/flint", + "directory": "packages/plugin-astro" + }, + "license": "MIT", + "author": { + "name": "JoshuaKGoldberg", + "email": "npm@joshuakgoldberg.com" + }, + "type": "module", + "main": "./lib/index.js", + "dependencies": { + "@flint.fyi/core": "workspace:", + "@flint.fyi/rule-tester": "workspace:", + "@flint.fyi/ts": "workspace:", + "@flint.fyi/utils": "workspace:" + }, + "engines": { + "node": ">=24.0.0" + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/packages/plugin-astro/src/astro.ts b/packages/plugin-astro/src/astro.ts new file mode 100644 index 000000000..5dd4e4433 --- /dev/null +++ b/packages/plugin-astro/src/astro.ts @@ -0,0 +1,6 @@ +import { createPlugin } from "@flint.fyi/core"; + +export const astro = createPlugin({ + name: "Astro", + rules: [], +}); diff --git a/packages/plugin-astro/src/index.ts b/packages/plugin-astro/src/index.ts new file mode 100644 index 000000000..55576fb97 --- /dev/null +++ b/packages/plugin-astro/src/index.ts @@ -0,0 +1 @@ +export * from "./astro.js"; diff --git a/packages/plugin-astro/tsconfig.json b/packages/plugin-astro/tsconfig.json new file mode 100644 index 000000000..b43c3a951 --- /dev/null +++ b/packages/plugin-astro/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "extends": "../../tsconfig.base.json", + "include": ["src"], + "references": [ + { "path": "../core" }, + { "path": "../rule-tester" }, + { "path": "../ts" }, + { "path": "../utils" } + ] +} diff --git a/packages/plugin-browser/src/browser.ts b/packages/plugin-browser/src/browser.ts index c99848add..c22d4b97d 100644 --- a/packages/plugin-browser/src/browser.ts +++ b/packages/plugin-browser/src/browser.ts @@ -17,7 +17,7 @@ import scriptUrls from "./rules/scriptUrls.js"; import windowMessagingTargetOrigin from "./rules/windowMessagingTargetOrigin.js"; export const browser = createPlugin({ - name: "browser", + name: "Browser", rules: [ alerts, classListToggles, diff --git a/packages/plugin-cspell/README.md b/packages/plugin-cspell/README.md deleted file mode 100644 index 172c2c361..000000000 --- a/packages/plugin-cspell/README.md +++ /dev/null @@ -1,9 +0,0 @@ -

@flint.fyi/plugin-cspell

- -

- [Experimental] A CSpell plugin for Flint. - ❤️‍🔥 -

- -This is an internal package for Flint. -Documentation will eventually be added. diff --git a/packages/plugin-cspell/src/cspell.ts b/packages/plugin-cspell/src/cspell.ts deleted file mode 100644 index 18708d190..000000000 --- a/packages/plugin-cspell/src/cspell.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createPlugin } from "@flint.fyi/core"; - -import spelling from "./rules/spelling.js"; - -export const cspell = createPlugin({ - name: "cspell", - rules: [spelling], -}); diff --git a/packages/plugin-cspell/src/index.ts b/packages/plugin-cspell/src/index.ts deleted file mode 100644 index 70752904f..000000000 --- a/packages/plugin-cspell/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./cspell.js"; diff --git a/packages/plugin-flint/src/flint.ts b/packages/plugin-flint/src/flint.ts index 11da0f014..2fc29a4d4 100644 --- a/packages/plugin-flint/src/flint.ts +++ b/packages/plugin-flint/src/flint.ts @@ -4,6 +4,6 @@ import invalidCodeLines from "./rules/invalidCodeLines.js"; import testCaseDuplicates from "./rules/testCaseDuplicates.js"; export const flint = createPlugin({ - name: "flint", + name: "Flint", rules: [invalidCodeLines, testCaseDuplicates], }); diff --git a/packages/plugin-jsx/src/jsx.ts b/packages/plugin-jsx/src/jsx.ts index 17f4e1bb4..9daa0b6e0 100644 --- a/packages/plugin-jsx/src/jsx.ts +++ b/packages/plugin-jsx/src/jsx.ts @@ -46,7 +46,7 @@ import unescapedEntities from "./rules/unescapedEntities.js"; import unnecessaryFragments from "./rules/unnecessaryFragments.js"; export const jsx = createPlugin({ - name: "jsx", + name: "JSX", rules: [ accessKeys, altTexts, diff --git a/packages/plugin-next/README.md b/packages/plugin-next/README.md new file mode 100644 index 000000000..fa1ee6d63 --- /dev/null +++ b/packages/plugin-next/README.md @@ -0,0 +1,6 @@ +

@flint.fyi/plugin-next

+ +

+ [Experimental] A Flint plugin for Next.js code. + ❤️‍🔥 +

diff --git a/packages/plugin-next/package.json b/packages/plugin-next/package.json new file mode 100644 index 000000000..64c0e3b40 --- /dev/null +++ b/packages/plugin-next/package.json @@ -0,0 +1,30 @@ +{ + "name": "@flint.fyi/plugin-next", + "version": "0.1.0", + "description": "[Experimental] A Flint plugin for Next.js code.", + "repository": { + "type": "git", + "url": "https://github.com/JoshuaKGoldberg/flint", + "directory": "packages/plugin-next" + }, + "license": "MIT", + "author": { + "name": "JoshuaKGoldberg", + "email": "npm@joshuakgoldberg.com" + }, + "type": "module", + "main": "./lib/index.js", + "dependencies": { + "@flint.fyi/core": "workspace:", + "@flint.fyi/rule-tester": "workspace:", + "@flint.fyi/ts": "workspace:", + "@flint.fyi/utils": "workspace:" + }, + "engines": { + "node": ">=24.0.0" + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/packages/plugin-next/src/index.ts b/packages/plugin-next/src/index.ts new file mode 100644 index 000000000..c14ce9f21 --- /dev/null +++ b/packages/plugin-next/src/index.ts @@ -0,0 +1 @@ +export * from "./next.js"; diff --git a/packages/plugin-next/src/next.ts b/packages/plugin-next/src/next.ts new file mode 100644 index 000000000..ea266170c --- /dev/null +++ b/packages/plugin-next/src/next.ts @@ -0,0 +1,6 @@ +import { createPlugin } from "@flint.fyi/core"; + +export const next = createPlugin({ + name: "Next.js", + rules: [], +}); diff --git a/packages/plugin-next/tsconfig.json b/packages/plugin-next/tsconfig.json new file mode 100644 index 000000000..b43c3a951 --- /dev/null +++ b/packages/plugin-next/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "extends": "../../tsconfig.base.json", + "include": ["src"], + "references": [ + { "path": "../core" }, + { "path": "../rule-tester" }, + { "path": "../ts" }, + { "path": "../utils" } + ] +} diff --git a/packages/plugin-node/src/node.ts b/packages/plugin-node/src/node.ts index b5459baa4..f9130a544 100644 --- a/packages/plugin-node/src/node.ts +++ b/packages/plugin-node/src/node.ts @@ -8,7 +8,7 @@ import eventClasses from "./rules/eventClasses.js"; import exportsAssignments from "./rules/exportsAssignments.js"; export const node = createPlugin({ - name: "node", + name: "Node.js", rules: [ assertStrict, assertStyles, diff --git a/packages/plugin-nuxt/README.md b/packages/plugin-nuxt/README.md new file mode 100644 index 000000000..c7003dd23 --- /dev/null +++ b/packages/plugin-nuxt/README.md @@ -0,0 +1,6 @@ +

@flint.fyi/plugin-nuxt

+ +

+ [Experimental] A Flint plugin for Nuxt code. + ❤️‍🔥 +

diff --git a/packages/plugin-nuxt/package.json b/packages/plugin-nuxt/package.json new file mode 100644 index 000000000..a06a832a0 --- /dev/null +++ b/packages/plugin-nuxt/package.json @@ -0,0 +1,30 @@ +{ + "name": "@flint.fyi/plugin-nuxt", + "version": "0.1.0", + "description": "[Experimental] A Flint plugin for Nuxt code.", + "repository": { + "type": "git", + "url": "https://github.com/JoshuaKGoldberg/flint", + "directory": "packages/plugin-nuxt" + }, + "license": "MIT", + "author": { + "name": "JoshuaKGoldberg", + "email": "npm@joshuakgoldberg.com" + }, + "type": "module", + "main": "./lib/index.js", + "dependencies": { + "@flint.fyi/core": "workspace:", + "@flint.fyi/rule-tester": "workspace:", + "@flint.fyi/ts": "workspace:", + "@flint.fyi/utils": "workspace:" + }, + "engines": { + "node": ">=24.0.0" + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/packages/plugin-nuxt/src/index.ts b/packages/plugin-nuxt/src/index.ts new file mode 100644 index 000000000..90ba456c1 --- /dev/null +++ b/packages/plugin-nuxt/src/index.ts @@ -0,0 +1 @@ +export * from "./nuxt.js"; diff --git a/packages/plugin-nuxt/src/nuxt.ts b/packages/plugin-nuxt/src/nuxt.ts new file mode 100644 index 000000000..595144afb --- /dev/null +++ b/packages/plugin-nuxt/src/nuxt.ts @@ -0,0 +1,6 @@ +import { createPlugin } from "@flint.fyi/core"; + +export const nuxt = createPlugin({ + name: "Nuxt.js", + rules: [], +}); diff --git a/packages/plugin-nuxt/tsconfig.json b/packages/plugin-nuxt/tsconfig.json new file mode 100644 index 000000000..b43c3a951 --- /dev/null +++ b/packages/plugin-nuxt/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "extends": "../../tsconfig.base.json", + "include": ["src"], + "references": [ + { "path": "../core" }, + { "path": "../rule-tester" }, + { "path": "../ts" }, + { "path": "../utils" } + ] +} diff --git a/packages/plugin-performance/src/performance.ts b/packages/plugin-performance/src/performance.ts index c4657fa84..3a8c0216d 100644 --- a/packages/plugin-performance/src/performance.ts +++ b/packages/plugin-performance/src/performance.ts @@ -7,7 +7,7 @@ import loopFunctions from "./rules/loopFunctions.js"; import spreadAccumulators from "./rules/spreadAccumulators.js"; export const performance = createPlugin({ - name: "performance", + name: "Performance", rules: [ deletes, importedNamespaceDynamicAccesses, diff --git a/packages/plugin-react/README.md b/packages/plugin-react/README.md new file mode 100644 index 000000000..b52a68d71 --- /dev/null +++ b/packages/plugin-react/README.md @@ -0,0 +1,6 @@ +

@flint.fyi/plugin-react

+ +

+ [Experimental] A Flint plugin for React code. + ❤️‍🔥 +

diff --git a/packages/plugin-react/package.json b/packages/plugin-react/package.json new file mode 100644 index 000000000..fcdde43a1 --- /dev/null +++ b/packages/plugin-react/package.json @@ -0,0 +1,30 @@ +{ + "name": "@flint.fyi/plugin-react", + "version": "0.1.0", + "description": "[Experimental] A Flint plugin for React code.", + "repository": { + "type": "git", + "url": "https://github.com/JoshuaKGoldberg/flint", + "directory": "packages/plugin-react" + }, + "license": "MIT", + "author": { + "name": "JoshuaKGoldberg", + "email": "npm@joshuakgoldberg.com" + }, + "type": "module", + "main": "./lib/index.js", + "dependencies": { + "@flint.fyi/core": "workspace:", + "@flint.fyi/rule-tester": "workspace:", + "@flint.fyi/ts": "workspace:", + "@flint.fyi/utils": "workspace:" + }, + "engines": { + "node": ">=24.0.0" + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/packages/plugin-react/src/index.ts b/packages/plugin-react/src/index.ts new file mode 100644 index 000000000..ccf847469 --- /dev/null +++ b/packages/plugin-react/src/index.ts @@ -0,0 +1 @@ +export * from "./react.js"; diff --git a/packages/plugin-react/src/react.ts b/packages/plugin-react/src/react.ts new file mode 100644 index 000000000..5a7326d62 --- /dev/null +++ b/packages/plugin-react/src/react.ts @@ -0,0 +1,6 @@ +import { createPlugin } from "@flint.fyi/core"; + +export const react = createPlugin({ + name: "React", + rules: [], +}); diff --git a/packages/plugin-react/tsconfig.json b/packages/plugin-react/tsconfig.json new file mode 100644 index 000000000..b43c3a951 --- /dev/null +++ b/packages/plugin-react/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "extends": "../../tsconfig.base.json", + "include": ["src"], + "references": [ + { "path": "../core" }, + { "path": "../rule-tester" }, + { "path": "../ts" }, + { "path": "../utils" } + ] +} diff --git a/packages/plugin-solid/README.md b/packages/plugin-solid/README.md new file mode 100644 index 000000000..08d0a7a51 --- /dev/null +++ b/packages/plugin-solid/README.md @@ -0,0 +1,6 @@ +

@flint.fyi/plugin-solid

+ +

+ [Experimental] A Flint plugin for SolidJS code. + ❤️‍🔥 +

diff --git a/packages/plugin-solid/package.json b/packages/plugin-solid/package.json new file mode 100644 index 000000000..0582df6e0 --- /dev/null +++ b/packages/plugin-solid/package.json @@ -0,0 +1,30 @@ +{ + "name": "@flint.fyi/plugin-solid", + "version": "0.1.0", + "description": "[Experimental] A Flint plugin for SolidJS code.", + "repository": { + "type": "git", + "url": "https://github.com/JoshuaKGoldberg/flint", + "directory": "packages/plugin-solid" + }, + "license": "MIT", + "author": { + "name": "JoshuaKGoldberg", + "email": "npm@joshuakgoldberg.com" + }, + "type": "module", + "main": "./lib/index.js", + "dependencies": { + "@flint.fyi/core": "workspace:", + "@flint.fyi/rule-tester": "workspace:", + "@flint.fyi/ts": "workspace:", + "@flint.fyi/utils": "workspace:" + }, + "engines": { + "node": ">=24.0.0" + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/packages/plugin-solid/src/index.ts b/packages/plugin-solid/src/index.ts new file mode 100644 index 000000000..a9588f14d --- /dev/null +++ b/packages/plugin-solid/src/index.ts @@ -0,0 +1 @@ +export * from "./solid.js"; diff --git a/packages/plugin-solid/src/solid.ts b/packages/plugin-solid/src/solid.ts new file mode 100644 index 000000000..ff9d6d148 --- /dev/null +++ b/packages/plugin-solid/src/solid.ts @@ -0,0 +1,6 @@ +import { createPlugin } from "@flint.fyi/core"; + +export const solid = createPlugin({ + name: "SolidJS", + rules: [], +}); diff --git a/packages/plugin-solid/tsconfig.json b/packages/plugin-solid/tsconfig.json new file mode 100644 index 000000000..b43c3a951 --- /dev/null +++ b/packages/plugin-solid/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "extends": "../../tsconfig.base.json", + "include": ["src"], + "references": [ + { "path": "../core" }, + { "path": "../rule-tester" }, + { "path": "../ts" }, + { "path": "../utils" } + ] +} diff --git a/packages/plugin-cspell/CHANGELOG.md b/packages/plugin-spelling/CHANGELOG.md similarity index 95% rename from packages/plugin-cspell/CHANGELOG.md rename to packages/plugin-spelling/CHANGELOG.md index fd3d7a6c3..ca6ac6854 100644 --- a/packages/plugin-cspell/CHANGELOG.md +++ b/packages/plugin-spelling/CHANGELOG.md @@ -1,4 +1,4 @@ -# @flint.fyi/plugin-cspell +# @flint.fyi/plugin-spelling ## 0.1.2 diff --git a/packages/plugin-spelling/README.md b/packages/plugin-spelling/README.md new file mode 100644 index 000000000..2f61fc759 --- /dev/null +++ b/packages/plugin-spelling/README.md @@ -0,0 +1,9 @@ +

@flint.fyi/plugin-spelling

+ +

+ [Experimental] A spell-checker plugin for Flint, powered by CSpell. + ❤️‍🔥 +

+ +This is an internal package for Flint. +Documentation will eventually be added. diff --git a/packages/plugin-cspell/package.json b/packages/plugin-spelling/package.json similarity index 77% rename from packages/plugin-cspell/package.json rename to packages/plugin-spelling/package.json index 57aec67c3..81d5a17cc 100644 --- a/packages/plugin-cspell/package.json +++ b/packages/plugin-spelling/package.json @@ -1,11 +1,11 @@ { - "name": "@flint.fyi/plugin-cspell", + "name": "@flint.fyi/plugin-spelling", "version": "0.1.2", - "description": "[Experimental] A CSpell plugin for Flint.", + "description": "[Experimental] A spell-checker plugin for Flint powered by CSpell.", "repository": { "type": "git", "url": "https://github.com/JoshuaKGoldberg/flint", - "directory": "packages/plugin-cspell" + "directory": "packages/plugin-spelling" }, "license": "MIT", "author": { diff --git a/packages/plugin-spelling/src/index.ts b/packages/plugin-spelling/src/index.ts new file mode 100644 index 000000000..f85ddee71 --- /dev/null +++ b/packages/plugin-spelling/src/index.ts @@ -0,0 +1 @@ +export * from "./spelling.js"; diff --git a/packages/plugin-cspell/src/rules/createDocumentValidator.ts b/packages/plugin-spelling/src/rules/createDocumentValidator.ts similarity index 95% rename from packages/plugin-cspell/src/rules/createDocumentValidator.ts rename to packages/plugin-spelling/src/rules/createDocumentValidator.ts index 1bca04327..20dee3e27 100644 --- a/packages/plugin-cspell/src/rules/createDocumentValidator.ts +++ b/packages/plugin-spelling/src/rules/createDocumentValidator.ts @@ -27,6 +27,8 @@ export async function createDocumentValidator(fileName: string, text: string) { const configFileUrlBase = pathToFileURL(configFilePath).href; const configFileUrl = `${configFileUrlBase}?timestamp=${performance.now()}`; const configFile = (await import(configFileUrl, { + // eslint-disable-next-line jsdoc/no-bad-blocks + /* @vite-ignore */ with: { type: "json" }, })) as { default: CSpellSettings }; diff --git a/packages/plugin-cspell/src/rules/spelling.test.ts b/packages/plugin-spelling/src/rules/cspell.test.ts similarity index 96% rename from packages/plugin-cspell/src/rules/spelling.test.ts rename to packages/plugin-spelling/src/rules/cspell.test.ts index d8cdd701c..7033496ae 100644 --- a/packages/plugin-cspell/src/rules/spelling.test.ts +++ b/packages/plugin-spelling/src/rules/cspell.test.ts @@ -1,6 +1,6 @@ /* cspell:disable */ +import rule from "./cspell.js"; import { ruleTester } from "./ruleTester.js"; -import rule from "./spelling.js"; ruleTester.describe(rule, { invalid: [ diff --git a/packages/plugin-cspell/src/rules/spelling.ts b/packages/plugin-spelling/src/rules/cspell.ts similarity index 99% rename from packages/plugin-cspell/src/rules/spelling.ts rename to packages/plugin-spelling/src/rules/cspell.ts index 0cf854fcc..b5451994e 100644 --- a/packages/plugin-cspell/src/rules/spelling.ts +++ b/packages/plugin-spelling/src/rules/cspell.ts @@ -10,7 +10,7 @@ interface CSpellConfigLike { export default textLanguage.createRule({ about: { description: "Runs the CSpell spell checker on any source code file.", - id: "spelling", + id: "cspell", preset: "logical", }, messages: { diff --git a/packages/plugin-cspell/src/rules/ruleTester.ts b/packages/plugin-spelling/src/rules/ruleTester.ts similarity index 100% rename from packages/plugin-cspell/src/rules/ruleTester.ts rename to packages/plugin-spelling/src/rules/ruleTester.ts diff --git a/packages/plugin-spelling/src/spelling.ts b/packages/plugin-spelling/src/spelling.ts new file mode 100644 index 000000000..48366c23b --- /dev/null +++ b/packages/plugin-spelling/src/spelling.ts @@ -0,0 +1,8 @@ +import { createPlugin } from "@flint.fyi/core"; + +import cspell from "./rules/cspell.js"; + +export const spelling = createPlugin({ + name: "Spelling", + rules: [cspell], +}); diff --git a/packages/plugin-cspell/tsconfig.json b/packages/plugin-spelling/tsconfig.json similarity index 100% rename from packages/plugin-cspell/tsconfig.json rename to packages/plugin-spelling/tsconfig.json diff --git a/packages/rule-tester/src/RuleTester.ts b/packages/rule-tester/src/RuleTester.ts index 6d7573e72..5c37059cb 100644 --- a/packages/rule-tester/src/RuleTester.ts +++ b/packages/rule-tester/src/RuleTester.ts @@ -7,7 +7,7 @@ import { RuleAbout, } from "@flint.fyi/core"; import { CachedFactory } from "cached-factory"; -import assert from "node:assert"; +import assert from "node:assert/strict"; import { createReportSnapshot } from "./createReportSnapshot.js"; import { normalizeTestCase } from "./normalizeTestCase.js"; diff --git a/packages/site/astro.config.ts b/packages/site/astro.config.ts index 0454be271..2e6ab23d0 100644 --- a/packages/site/astro.config.ts +++ b/packages/site/astro.config.ts @@ -32,7 +32,7 @@ export default defineConfig({ { label: "FAQs", link: "faqs" }, ], label: "About", - link: "/about", + link: "about", }, { icon: "list-format", @@ -40,29 +40,48 @@ export default defineConfig({ items: [ { items: [ - { label: "JSON", link: "/rules/json" }, - { label: "Markdown", link: "/rules/md" }, - { label: "PackageJSON", link: "/rules/package-json" }, - { label: "TypeScript", link: "/rules/ts" }, - { label: "YAML", link: "/rules/yaml" }, + { label: "Implementing", link: "rules/implementing" }, + { label: "Not Implementing", link: "rules/not-implementing" }, + ], + label: "All Rules", + }, + { + items: [ + { label: "JSON", link: "rules/json" }, + { label: "Markdown", link: "rules/md" }, + { label: "PackageJSON", link: "rules/package-json" }, + { label: "TypeScript", link: "rules/ts" }, + { label: "YAML", link: "rules/yaml" }, ], label: "Core Plugins", }, { items: [ - { label: "Browser", link: "/rules/browser" }, - { label: "CSpell", link: "/rules/cspell" }, - { label: "Flint", link: "/rules/flint" }, - { label: "JSX", link: "/rules/jsx" }, - { label: "Node", link: "/rules/node" }, - { label: "Performance", link: "/rules/performance" }, - { label: "Sorting", link: "/rules/sorting" }, + { label: "Browser", link: "rules/browser" }, + { label: "Flint", link: "rules/flint" }, + { label: "JSX", link: "rules/jsx" }, + { label: "Node", link: "rules/node" }, + { label: "Performance", link: "rules/performance" }, + { label: "Sorting", link: "rules/sorting" }, + { label: "Spelling", link: "rules/spelling" }, ], label: "Focused Plugins", }, + { + items: [ + { label: "Astro", link: "rules/astro" }, + { label: "Next", link: "rules/next" }, + { label: "Nuxt", link: "rules/nuxt" }, + { label: "React", link: "rules/react" }, + { label: "SolidJS", link: "rules/solid" }, + { label: "Vitest", link: "rules/vitest" }, + { label: "Vue", link: "rules/vue" }, + ], + label: "Incubator Plugins", + }, ], label: "Rules", - link: "/rules", + link: "rules", }, ]), ], @@ -89,9 +108,12 @@ export default defineConfig({ remarkPlugins: [remarkHeadingId], }, site: "https://flint.fyi", - // https://github.com/withastro/astro/issues/14117 vite: { + resolve: { + conditions: ["node", "import", "default", "browser"], + }, ssr: { + // https://github.com/withastro/astro/issues/14117 noExternal: ["zod"], }, }, diff --git a/packages/site/package.json b/packages/site/package.json index 195090c4a..dba82d517 100644 --- a/packages/site/package.json +++ b/packages/site/package.json @@ -14,19 +14,19 @@ }, "dependencies": { "@astrojs/check": "^0.9.5", - "@astrojs/react": "^4.4.0", - "@astrojs/starlight": "^0.36.1", + "@astrojs/react": "^4.4.2", + "@astrojs/starlight": "^0.36.2", "@flint.fyi/comparisons": "workspace:", "@flint.fyi/plugin-browser": "workspace:", - "@flint.fyi/plugin-cspell": "workspace:", "@flint.fyi/plugin-flint": "workspace:", "@flint.fyi/plugin-node": "workspace:", "@flint.fyi/plugin-performance": "workspace:", + "@flint.fyi/plugin-spelling": "workspace:", "@konami-emoji-blast/astro": "^0.1.1", - "@types/node": "^24.9.1", - "@types/react": "^19.2.2", - "@types/react-dom": "^19.2.2", - "astro": "^5.15.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "astro": "^5.15.8", "clsx": "^2.1.1", "flint": "workspace:", "konami-emoji-blast": "^0.6.0", @@ -34,13 +34,13 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "remark-custom-heading-id": "^2.0.0", - "starlight-links-validator": "^0.19.0", + "starlight-links-validator": "^0.19.1", "starlight-package-managers": "^0.11.1", "starlight-sidebar-topics": "^0.6.2", "typescript": "^5.9.3" }, "devDependencies": { "@types/markdown-it": "14.1.2", - "sharp": "0.34.4" + "sharp": "0.34.5" } } diff --git a/packages/site/src/components/ColoredLogo.tsx b/packages/site/src/components/ColoredLogo.tsx index e4fbd4366..0f7a1acb6 100644 --- a/packages/site/src/components/ColoredLogo.tsx +++ b/packages/site/src/components/ColoredLogo.tsx @@ -1,7 +1,7 @@ import clsx from "clsx"; import styles from "./ColoredLogo.module.css"; -import type { PluginLogoColors } from "./pluginCardData"; +import type { PluginLogoColors } from "~/data/pluginData"; export interface ColoredLogoProps { colors: PluginLogoColors; @@ -38,13 +38,13 @@ export function ColoredLogo({ diff --git a/packages/site/src/components/PluginCard.module.css b/packages/site/src/components/PluginCard.module.css index b0a3ff2e5..6970dd16e 100644 --- a/packages/site/src/components/PluginCard.module.css +++ b/packages/site/src/components/PluginCard.module.css @@ -16,6 +16,7 @@ } .pluginCard a { + color: var(----sl-color-accent-high); font-weight: bold; text-decoration: none; } diff --git a/packages/site/src/components/PluginCard.tsx b/packages/site/src/components/PluginCard.tsx index feb306cfa..1ddd57f3d 100644 --- a/packages/site/src/components/PluginCard.tsx +++ b/packages/site/src/components/PluginCard.tsx @@ -1,10 +1,10 @@ import { ColoredLogo } from "./ColoredLogo"; import { InlineMarkdown } from "./InlineMarkdown"; import styles from "./PluginCard.module.css"; -import type { PluginCardData } from "./pluginCardData"; +import type { PluginData } from "~/data/pluginData"; export interface PluginCardProps { - data: PluginCardData; + data: PluginData; } export function PluginCard({ diff --git a/packages/site/src/components/PluginCards.tsx b/packages/site/src/components/PluginCards.tsx index 01d9d9374..66c56a6ad 100644 --- a/packages/site/src/components/PluginCards.tsx +++ b/packages/site/src/components/PluginCards.tsx @@ -1,9 +1,9 @@ -import type { PluginCardData } from "./pluginCardData"; -import { PluginCard, type PluginCardProps } from "./PluginCard"; +import type { PluginData } from "~/data/pluginData"; +import { PluginCard } from "./PluginCard"; import styles from "./PluginCards.module.css"; export interface PluginCardsProps { - plugins: PluginCardData[]; + plugins: PluginData[]; } export function PluginCards({ plugins }: PluginCardsProps) { diff --git a/packages/site/src/components/PluginTop.astro b/packages/site/src/components/PluginTop.astro index 8346b4f3f..de9037af1 100644 --- a/packages/site/src/components/PluginTop.astro +++ b/packages/site/src/components/PluginTop.astro @@ -1,5 +1,5 @@ --- -import { getPluginById } from "./pluginCardData"; +import { getPluginData } from "~/data/pluginData"; import { ColoredLogo } from "./ColoredLogo"; import { PackageManagers } from "starlight-package-managers"; import { InlineMarkdown } from "./InlineMarkdown"; @@ -8,7 +8,7 @@ export interface Props { pluginId: string; } -const { group, plugin } = getPluginById(Astro.props.pluginId); +const { group, plugin } = getPluginData(Astro.props.pluginId); const npmPackage = group === "core" ? `flint` : `@flint.fyi/plugin-${Astro.props.pluginId}`; --- diff --git a/packages/site/src/components/RuleEquivalents.tsx b/packages/site/src/components/RuleEquivalents.tsx index d2e274293..fe8c273ab 100644 --- a/packages/site/src/components/RuleEquivalents.tsx +++ b/packages/site/src/components/RuleEquivalents.tsx @@ -10,11 +10,6 @@ export interface RuleEquivalentsProps { export function RuleEquivalents({ pluginId, ruleId }: RuleEquivalentsProps) { const comparison = getComparisonByFlintId(pluginId, ruleId); - // @ts-ignore - ignore this. - if (!comparison?.biome) { - console.log({ pluginId, ruleId, comparison }); - } - return (
    {(Object.entries(linterNames) as [Linter, string][]).map( diff --git a/packages/site/src/components/RulesTable.module.css b/packages/site/src/components/RulesTable.module.css index 878c0d1df..42570a6cb 100644 --- a/packages/site/src/components/RulesTable.module.css +++ b/packages/site/src/components/RulesTable.module.css @@ -12,12 +12,15 @@ vertical-align: middle; } -.rulesTable td:first-of-type, -.rulesTable th:first-of-type { +.rulesTable .ruleNameCell { padding-left: 0; max-width: 50vw; +} + +.rulesTable .implementingCell { width: 100%; } + .rulesTable code a { font-size: var(--sl-text-code); font-weight: bold; @@ -31,5 +34,14 @@ .linkCell { font-size: var(--sl-text-sm); - min-width: 10vw; + min-width: clamp(3.5rem, 7.5vw, 7.5rem); +} + +.noneCell { + font-size: var(--sl-text-sm); + font-style: italic; +} + +.notesCell { + width: 85%; } diff --git a/packages/site/src/components/RulesTable.tsx b/packages/site/src/components/RulesTable.tsx index acfe6885b..01138dd95 100644 --- a/packages/site/src/components/RulesTable.tsx +++ b/packages/site/src/components/RulesTable.tsx @@ -8,36 +8,40 @@ import clsx from "clsx"; import styles from "./RulesTable.module.css"; import { getRuleForPluginSafe } from "./getRuleForPlugin"; import { InlineMarkdown } from "./InlineMarkdown"; +import { getPluginData } from "~/data/pluginData"; +import { createRuleComparator } from "./createRuleComparator"; + +function renderFlintPlugin(flint: FlintRuleReference) { + return ( + + + {getPluginData(flint.plugin).plugin.name.split(" ")[0]} + + + ); +} + +function renderFlintPreset(flint: FlintRuleReference) { + if (!flint.preset) { + return (none); + } -const pluginNames: Record = { - browser: "Browser", - cspell: "CSpell", - deno: "Deno", - flint: "Flint", - json: "JSON", - jsx: "JSX", - md: "Markdown", - node: "Node", - packageJson: "PackageJSON", - performance: "Performance", - sorting: "Sorting", - ts: "TypeScript", - yaml: "YAML", -}; - -function renderFlintPreset(flint: Comparison["flint"]) { const hrefBase = `/rules/${flint.plugin}#${flint.preset.toLowerCase()}`; const [href, text] = flint.strictness ? [`${hrefBase}strict`, `${flint.preset} (${flint.strictness})`] : [hrefBase, flint.preset]; return ( - - {text} - + + {text} + ); } +function renderFlintNotes(notes: string | undefined) { + return {notes}; +} + export interface RulesTableProps { implementing: boolean; plugin?: string; @@ -46,7 +50,7 @@ export interface RulesTableProps { } function renderFlintName(flint: FlintRuleReference) { - return flint.implemented ? ( + return flint.status === "implemented" ? ( {flint.name} @@ -62,13 +66,15 @@ function renderFlintRuleDescription(flint: FlintRuleReference) { return description ? : null; } -function renderImplemented(values: Comparison[]) { - const count = values.filter((value) => value.flint.implemented).length; +function renderImplemented(comparisons: Comparison[]) { + const count = comparisons.filter( + (comparison) => comparison.flint.status === "implemented", + ).length; - return count === values.length ? null : ( + return count === comparisons.length ? null : ( <> - Implemented: {count} of {values.length} ( - {Math.trunc((count / values.length) * 1000) / 10}%) + Implemented: {count} of {comparisons.length} ( + {Math.trunc((count / comparisons.length) * 1000) / 10}%) ); } @@ -79,21 +85,11 @@ export function RulesTable({ plugin, small, }: RulesTableProps) { - const comparator: (a: Comparison, b: Comparison) => number = - sortBy === "name" - ? (a, b) => a.flint.name.localeCompare(b.flint.name) - : (a, b) => - a.flint.preset === b.flint.preset - ? a.flint.strictness === b.flint.strictness - ? a.flint.name.localeCompare(b.flint.name) - : a.flint.strictness - ? 1 - : -1 - : a.flint.preset.localeCompare(b.flint.preset); + const comparator = createRuleComparator(sortBy); const values = comparisons .filter((comparison) => { - if ((comparison.flint.preset !== "Not implementing") !== implementing) { + if ((comparison.flint.status === "skipped") === implementing) { return false; } @@ -128,25 +124,20 @@ export function RulesTable({ {values.map((comparison) => ( - + {renderFlintName(comparison.flint)} {renderFlintRuleDescription(comparison.flint)} - {!plugin && ( - - - {pluginNames[comparison.flint.plugin]} - - - )} - - {implementing - ? renderFlintPreset(comparison.flint) - : comparison.notes} - + {!plugin && renderFlintPlugin(comparison.flint)} + {implementing + ? renderFlintPreset(comparison.flint) + : renderFlintNotes(comparison.notes)} ))} diff --git a/packages/site/src/components/createRuleComparator.ts b/packages/site/src/components/createRuleComparator.ts new file mode 100644 index 000000000..5656f707d --- /dev/null +++ b/packages/site/src/components/createRuleComparator.ts @@ -0,0 +1,31 @@ +import type { Comparison } from "@flint.fyi/comparisons"; + +export type RuleComparator = (a: Comparison, b: Comparison) => number; + +export type RuleSortBy = "name" | "preset"; + +export function createRuleComparator(sortBy?: RuleSortBy): RuleComparator { + if (sortBy === "name") { + return (a, b) => a.flint.name.localeCompare(b.flint.name); + } + + return (a, b) => { + if (a.flint.preset !== b.flint.preset) { + if (!a.flint.preset) { + return 1; + } + + if (!b.flint.preset) { + return -1; + } + + return a.flint.preset.localeCompare(b.flint.preset); + } + + if (a.flint.strictness !== b.flint.strictness) { + return a.flint.strictness ? 1 : -1; + } + + return a.flint.name.localeCompare(b.flint.name); + }; +} diff --git a/packages/site/src/components/getRuleForPlugin.ts b/packages/site/src/components/getRuleForPlugin.ts index 59454c5d9..db2cb9bca 100644 --- a/packages/site/src/components/getRuleForPlugin.ts +++ b/packages/site/src/components/getRuleForPlugin.ts @@ -1,20 +1,20 @@ import { browser } from "@flint.fyi/plugin-browser"; -import { cspell } from "@flint.fyi/plugin-cspell"; import { flint } from "@flint.fyi/plugin-flint"; import { jsx } from "@flint.fyi/plugin-jsx"; import { node } from "@flint.fyi/plugin-node"; import { performance } from "@flint.fyi/plugin-performance"; +import { spelling } from "@flint.fyi/plugin-spelling"; import { type AnyRule, json, md, ts, yaml } from "flint"; const plugins = { browser, - cspell, flint, json, jsx, md, node, performance, + spelling, ts, yaml, }; diff --git a/packages/site/src/components/pluginCardData.ts b/packages/site/src/components/pluginCardData.ts deleted file mode 100644 index 97b6e58a7..000000000 --- a/packages/site/src/components/pluginCardData.ts +++ /dev/null @@ -1,164 +0,0 @@ -export interface PluginCardData { - colors: PluginLogoColors; - description: string; - id: string; - name: string; -} - -export interface PluginLogoColors { - flame: string; - heart: string; - squiggly: string; -} - -export const pluginCardDataById: Record< - string, - Record -> = { - core: { - json: { - colors: { - flame: "#636363", - heart: "#FAF0E6", - squiggly: "#000080", - }, - description: - "Rules for linting `.json` files containing arbitrary data in the JavaScript Object Notation (JSON) format.", - id: "json", - name: "JSON", - }, - md: { - colors: { - flame: "#ffffff", - heart: "#2BA4E0", - squiggly: "#343A40", - }, - description: - "Rules for linting `.md` files containing Markdown, the lightweight markup language.", - id: "markdown", - name: "Markdown", - }, - packageJson: { - colors: { - flame: "#F98717", - heart: "#DF2AFC", - squiggly: "#333333", - }, - description: - "Rules for linting Node.js `package.json` manifest files in repositories and workspaces.", - id: "packageJson", - name: "PackageJSON", - }, - ts: { - colors: { - flame: "#2D78C7", - heart: "#FFFFFF", - squiggly: "#235A97", - }, - description: - "Rules for linting JavaScript and TypeScript code, including the latest and greatest powerful typed linting rules.", - id: "ts", - name: "TypeScript (and JavaScript)", - }, - yaml: { - colors: { - flame: "#CC1718", - heart: "#40e0d0", - squiggly: "#008000", - }, - description: - "Rules for linting `.yaml`/`.yml` files containing arbitrary data in the Yet Another Markup Language (YAML) format.", - id: "yaml", - name: "YAML", - }, - }, - focused: { - browser: { - colors: { - flame: "#E85D0D", - heart: "#2CA6E0", - squiggly: "#031E4C", - }, - description: - "Rules for code that runs in browsers and other environments with DOM (Document Object Model) elements.", - id: "browser", - name: "Browser", - }, - cspell: { - colors: { - flame: "#B51A00", - heart: "#F5EC02", - squiggly: "#010100", - }, - description: - 'Rules that detect misspelling typos in source files using the general-purpose code-optimized "CSpell" spell-checker.', - id: "cspell", - name: "CSpell", - }, - flint: { - colors: { - flame: "#F2BF80", - heart: "#AB1B1B", - squiggly: "#886035", - }, - description: - "Rules for writing third-party Flint plugins and custom rules. Meta!", - id: "flint", - name: "Flint", - }, - jsx: { - colors: { - flame: "#61DBFB", - heart: "#F3DF49", - squiggly: "#1F80A3", - }, - description: - 'Rules for code that describes UI with the "JSX" markup language, commonly in `.jsx` and/or `.tsx` files.', - id: "jsx", - name: "JSX", - }, - node: { - colors: { - flame: "#3C873A", - heart: "#6BC045", - squiggly: "#303030", - }, - description: - "Rules for code that runs in Node.js and other server runtimes that include Node.js-like APIs.", - id: "node", - name: "Node.js", - }, - performance: { - colors: { - flame: "#fadd03ff", - heart: "#fff2eeff", - squiggly: "#F05756", - }, - description: - 'Rules for specialized code designed specifically to be run in performance-critical "hot paths".', - id: "performance", - name: "Performance", - }, - sorting: { - colors: { - flame: "#4B32C3", - heart: "#FFFFFF", - squiggly: "#232327", - }, - description: - "Rules that automatically sort any and all possible aspects of code alphabetically, such as imports and properties.", - id: "sorting", - name: "Sorting", - }, - }, -}; - -export function getPluginById(pluginId: string) { - for (const group of Object.keys(pluginCardDataById)) { - if (pluginId in pluginCardDataById[group]) { - return { group, plugin: pluginCardDataById[group][pluginId] }; - } - } - - throw new Error(`Unknown pluginId: ${pluginId}`); -} diff --git a/packages/site/src/content/docs/rules.mdx b/packages/site/src/content/docs/rules.mdx new file mode 100644 index 000000000..80735f181 --- /dev/null +++ b/packages/site/src/content/docs/rules.mdx @@ -0,0 +1,46 @@ +--- +description: "How Flint's linting rules are organized into plugins" +title: Rules +topic: rules +--- + +import { pluginDataByGroup } from "~/data/pluginData"; +import { PluginCards } from "~/components/PluginCards.tsx"; + +:::danger +Flint is still very early stage and experimental. +Not all features have been implemented. +::: + +Flint will provide a comprehensive set of rules for all languages common to most typical web development projects. +Rules are grouped into plugins that you can opt into as you choose. + +Plugins are grouped into three categories: + +- **[Core Plugins](#core-plugins)**: Those applicable to any project using their language. + They come as part of the [`flint`](https://npmjs.com/package/flint) npm package. +- **[Focused Plugins](#focused-plugins)**: Those for large areas of projects or code styles that are applicable to many, but not all, likely Flint users. + They come in separate npm packages under `@flint.fyi/`. +- **[Incubator Plugins](#incubator-plugins)**: Area-specific plugins that should exist under community governance, but don't yet have a dedicated team outside of Flint working on them. + They come in separate npm packages under `@flint.fyi/`. + +## Core Plugins + +These come as part of the [`flint`](https://npmjs.com/package/flint) npm package. +They're applicable to any project using the language they lint for. + + + +## Focused Plugins + +These are large areas of projects or code styles that are applicable to many, but not all, likely Flint users. +They come in separate npm packages under `@flint.fyi/`. + + + +## Incubator Plugins + +Area-specific plugins that should exist under community governance, but pending a dedicated maintenance team outside of Flint's, are being developed as part of the Flint project. +They come in separate npm packages under `@flint.fyi/`. + + diff --git a/packages/site/src/content/docs/rules/astro.mdx b/packages/site/src/content/docs/rules/astro.mdx new file mode 100644 index 000000000..abd209fcd --- /dev/null +++ b/packages/site/src/content/docs/rules/astro.mdx @@ -0,0 +1,21 @@ +--- +description: "Astro linting rules provided by Flint." +title: "Astro Plugin" +--- + +import { RulesTable } from "~/components/RulesTable.tsx"; +import PluginTop from "~/components/PluginTop.astro"; + + + +:::note +Coming soon: details on this plugin's presets. +::: + +:::note +Coming soon: more expansive documentation on choosing and combining plugins & presets with Flint. +::: + +## Rules + + diff --git a/packages/site/src/content/docs/rules/implementing.mdx b/packages/site/src/content/docs/rules/implementing.mdx new file mode 100644 index 000000000..bda5ef19d --- /dev/null +++ b/packages/site/src/content/docs/rules/implementing.mdx @@ -0,0 +1,25 @@ +--- +description: "All linting rules provided by Flint" +tableOfContents: false +title: All Rules +topic: rules +--- + +import { PluginCards } from "~/components/PluginCards.tsx"; +import { RulesTable } from "~/components/RulesTable.tsx"; + +:::danger +Flint is still very early stage and experimental. +Not all features have been implemented. +::: + +:::tip +Rules are grouped into plugins that you can opt into. +See [Rules](/rules) for an overview of how rules are sorted into plugins. +::: + +This is a full table of all rules that will be implemented in the main Flint project. +It includes rules from all three provided categories of plugins: [Core](/rules#core-plugins), [Focused](/rules#focused-plugins), and [Incubator](/rules#incubator-plugins). +Each rule is equivalent to at least one existing rule in another linter. + + diff --git a/packages/site/src/content/docs/rules/index.mdx b/packages/site/src/content/docs/rules/index.mdx deleted file mode 100644 index a3ddabc8b..000000000 --- a/packages/site/src/content/docs/rules/index.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -description: "Core linting rules provided by Flint" -title: Flint's Rules ---- - -import { pluginCardDataById } from "~/components/pluginCardData"; -import { PluginCards } from "~/components/PluginCards.tsx"; -import { RulesTable } from "~/components/RulesTable.tsx"; - -:::danger -Flint is still very early stage and experimental. -Not all features have been implemented. -::: - -Flint will provide a comprehensive set of rules for all languages common to most typical web development projects. -Rules are grouped into plugins that you can opt into as you choose. - -Plugins are grouped into two categories: - -- **[Core Plugins](#core-plugins)**: These come as part of the `flint` package on npm. - They're applicable to any project using the language they lint for. -- **[Focused Plugins](#focused-plugins)**: These are for specific areas of projects or code styles. - They come in separate npm packages under `@flint.fyi/`. - -## Core Plugins - -These come as part of the `flint` package on npm. -They're applicable to any project using the language they lint for. - - - -## Focused Plugins - -These are for specific areas of projects or code styles. -They come in separate npm packages under `@flint.fyi/`. - - - -## Rules - -These tables contain all the rules considered for inclusion in Flint. -That includes every non-deprecated rule provided by >=1 popular linter. - -### Implementing - -These rules will be implemented as a part of Flint. -Each is equivalent to at least one existing rule in another linter. - - - -### Not Implementing - -These rules will not be implemented as a part of Flint. -They are all too opinionated and/or too niche to be kept in the Flint project. -They're free to be implemented as a community third-party Flint plugin. - - diff --git a/packages/site/src/content/docs/rules/jsx/elementChildrenValidity.mdx b/packages/site/src/content/docs/rules/jsx/elementChildrenValidity.mdx index a7f0b485f..afdc42b0e 100644 --- a/packages/site/src/content/docs/rules/jsx/elementChildrenValidity.mdx +++ b/packages/site/src/content/docs/rules/jsx/elementChildrenValidity.mdx @@ -81,7 +81,7 @@ This rule is not configurable. ## When Not To Use It -This rule should not be disabled as void elements with children violates the HTML specification and will cause unpredictable browser behavior. +If your application is a rare one that violates HTML standards and places invalid children inside standard elements, this rule may be counterproductive for you. ## Further Reading diff --git a/packages/site/src/content/docs/rules/jsx/unnecessaryFragments.mdx b/packages/site/src/content/docs/rules/jsx/unnecessaryFragments.mdx index e81decf44..c2e6e6d7b 100644 --- a/packages/site/src/content/docs/rules/jsx/unnecessaryFragments.mdx +++ b/packages/site/src/content/docs/rules/jsx/unnecessaryFragments.mdx @@ -85,7 +85,6 @@ However, removing unnecessary fragments is generally recommended to keep code co ## Further Reading - [React Documentation: Fragments](https://react.dev/reference/react/Fragment) -- [MDN: JSX Fragments](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#spread_in_object_literals) ## Equivalents in Other Linters diff --git a/packages/site/src/content/docs/rules/next.mdx b/packages/site/src/content/docs/rules/next.mdx new file mode 100644 index 000000000..170c9f35d --- /dev/null +++ b/packages/site/src/content/docs/rules/next.mdx @@ -0,0 +1,21 @@ +--- +description: "Next.js linting rules provided by Flint." +title: "Next.js Plugin" +--- + +import { RulesTable } from "~/components/RulesTable.tsx"; +import PluginTop from "~/components/PluginTop.astro"; + + + +:::note +Coming soon: details on this plugin's presets. +::: + +:::note +Coming soon: more expansive documentation on choosing and combining plugins & presets with Flint. +::: + +## Rules + + diff --git a/packages/site/src/content/docs/rules/node.mdx b/packages/site/src/content/docs/rules/node.mdx index b8101c991..0eceeea22 100644 --- a/packages/site/src/content/docs/rules/node.mdx +++ b/packages/site/src/content/docs/rules/node.mdx @@ -10,7 +10,7 @@ import PluginTop from "~/components/PluginTop.astro"; ## Presets -Flint's Markdown plugin provides the following presets: +Flint's Node.js plugin provides the following presets: | Preset | Recommended | Description | | ----------------------------------------- | ------------- | --------------------------------------------------------------------------------------- | diff --git a/packages/site/src/content/docs/rules/not-implementing.mdx b/packages/site/src/content/docs/rules/not-implementing.mdx new file mode 100644 index 000000000..75112b17a --- /dev/null +++ b/packages/site/src/content/docs/rules/not-implementing.mdx @@ -0,0 +1,25 @@ +--- +description: "All linting rules provided by Flint" +tableOfContents: false +title: All Rules +topic: rules +--- + +import { PluginCards } from "~/components/PluginCards.tsx"; +import { RulesTable } from "~/components/RulesTable.tsx"; + +:::danger +Flint is still very early stage and experimental. +Not all features have been implemented. +::: + +:::tip +Rules are grouped into plugins that you can opt into. +See [Rules](/rules) for an overview of how rules are sorted into plugins. +::: + +These rules will not be implemented as a part of Flint. +They are all too opinionated and/or too niche to be kept in the Flint project. +They're free to be implemented as a community third-party Flint plugin. + + diff --git a/packages/site/src/content/docs/rules/nuxt.mdx b/packages/site/src/content/docs/rules/nuxt.mdx new file mode 100644 index 000000000..50e5fa7b6 --- /dev/null +++ b/packages/site/src/content/docs/rules/nuxt.mdx @@ -0,0 +1,21 @@ +--- +description: "Nuxt linting rules provided by Flint." +title: "Nuxt Plugin" +--- + +import { RulesTable } from "~/components/RulesTable.tsx"; +import PluginTop from "~/components/PluginTop.astro"; + + + +:::note +Coming soon: details on this plugin's presets. +::: + +:::note +Coming soon: more expansive documentation on choosing and combining plugins & presets with Flint. +::: + +## Rules + + diff --git a/packages/site/src/content/docs/rules/package-json.mdx b/packages/site/src/content/docs/rules/package-json.mdx index 55eb13901..1761b59c1 100644 --- a/packages/site/src/content/docs/rules/package-json.mdx +++ b/packages/site/src/content/docs/rules/package-json.mdx @@ -6,7 +6,7 @@ title: "PackageJSON Plugin" import { RulesTable } from "~/components/RulesTable.tsx"; import PluginTop from "~/components/PluginTop.astro"; - + ## Presets @@ -54,7 +54,7 @@ export default defineConfig({ ## Rules - + ## Selectors diff --git a/packages/site/src/content/docs/rules/react.mdx b/packages/site/src/content/docs/rules/react.mdx new file mode 100644 index 000000000..9708230aa --- /dev/null +++ b/packages/site/src/content/docs/rules/react.mdx @@ -0,0 +1,21 @@ +--- +description: "React linting rules provided by Flint." +title: "React Plugin" +--- + +import { RulesTable } from "~/components/RulesTable.tsx"; +import PluginTop from "~/components/PluginTop.astro"; + + + +:::note +Coming soon: details on this plugin's presets. +::: + +:::note +Coming soon: more expansive documentation on choosing and combining plugins & presets with Flint. +::: + +## Rules + + diff --git a/packages/site/src/content/docs/rules/solid.mdx b/packages/site/src/content/docs/rules/solid.mdx new file mode 100644 index 000000000..d56373efd --- /dev/null +++ b/packages/site/src/content/docs/rules/solid.mdx @@ -0,0 +1,21 @@ +--- +description: "SolidJS linting rules provided by Flint." +title: "SolidJS Plugin" +--- + +import { RulesTable } from "~/components/RulesTable.tsx"; +import PluginTop from "~/components/PluginTop.astro"; + + + +:::note +Coming soon: details on this plugin's presets. +::: + +:::note +Coming soon: more expansive documentation on choosing and combining plugins & presets with Flint. +::: + +## Rules + + diff --git a/packages/site/src/content/docs/rules/cspell.mdx b/packages/site/src/content/docs/rules/spelling.mdx similarity index 61% rename from packages/site/src/content/docs/rules/cspell.mdx rename to packages/site/src/content/docs/rules/spelling.mdx index eb872b0b4..18a180d96 100644 --- a/packages/site/src/content/docs/rules/cspell.mdx +++ b/packages/site/src/content/docs/rules/spelling.mdx @@ -1,12 +1,12 @@ --- -description: "CSpell linting rules provided by Flint." -title: "CSpell Plugin" +description: "Spelling linting rules provided by Flint, powered by CSpell." +title: "Spelling Plugin" --- import { RulesTable } from "~/components/RulesTable.tsx"; import PluginTop from "~/components/PluginTop.astro"; - + See the [CSpell spell checker documentation](https://cspell.org) for more details on spell-checking code. @@ -17,13 +17,13 @@ See the [CSpell spell checker documentation](https://cspell.org) for more detail Rules that run CSpell to find likely spell-checking mistakes. ```ts title="flint.config.ts" -import { cspell, defineConfig, globs } from "flint"; +import { defineConfig, globs, spelling } from "flint"; export default defineConfig({ use: [ { files: globs.all, - rules: cspell.presets.logical, + rules: spelling.presets.logical, }, ], }); @@ -31,4 +31,4 @@ export default defineConfig({ ## Rules - + diff --git a/packages/site/src/content/docs/rules/cspell/spelling.mdx b/packages/site/src/content/docs/rules/spelling/cspell.mdx similarity index 84% rename from packages/site/src/content/docs/rules/cspell/spelling.mdx rename to packages/site/src/content/docs/rules/spelling/cspell.mdx index c0aac8d20..0fda8e701 100644 --- a/packages/site/src/content/docs/rules/cspell/spelling.mdx +++ b/packages/site/src/content/docs/rules/spelling/cspell.mdx @@ -8,7 +8,7 @@ import { Tabs, TabItem } from "@astrojs/starlight/components"; import { RuleEquivalents } from "~/components/RuleEquivalents"; import RuleSummary from "~/components/RuleSummary.astro"; - + ## Examples @@ -39,4 +39,4 @@ This rule is not configurable. ## Equivalents in Other Linters - + diff --git a/packages/site/src/content/docs/rules/vitest.mdx b/packages/site/src/content/docs/rules/vitest.mdx new file mode 100644 index 000000000..d7664dd83 --- /dev/null +++ b/packages/site/src/content/docs/rules/vitest.mdx @@ -0,0 +1,21 @@ +--- +description: "Vitest linting rules provided by Flint." +title: "Vitest Plugin" +--- + +import { RulesTable } from "~/components/RulesTable.tsx"; +import PluginTop from "~/components/PluginTop.astro"; + + + +:::note +Coming soon: details on this plugin's presets. +::: + +:::note +Coming soon: more expansive documentation on choosing and combining plugins & presets with Flint. +::: + +## Rules + + diff --git a/packages/site/src/content/docs/rules/vue.mdx b/packages/site/src/content/docs/rules/vue.mdx new file mode 100644 index 000000000..123ec2252 --- /dev/null +++ b/packages/site/src/content/docs/rules/vue.mdx @@ -0,0 +1,21 @@ +--- +description: "Vue linting rules provided by Flint." +title: "Vue Plugin" +--- + +import { RulesTable } from "~/components/RulesTable.tsx"; +import PluginTop from "~/components/PluginTop.astro"; + + + +:::note +Coming soon: details on this plugin's presets. +::: + +:::note +Coming soon: more expansive documentation on choosing and combining plugins & presets with Flint. +::: + +## Rules + + diff --git a/packages/site/src/data/pluginData.ts b/packages/site/src/data/pluginData.ts new file mode 100644 index 000000000..0ba252152 --- /dev/null +++ b/packages/site/src/data/pluginData.ts @@ -0,0 +1,263 @@ +export interface PluginData { + colors: PluginLogoColors; + description: string; + id: string; + name: string; +} + +export interface PluginLogoColors { + flame: string; + heart: string; + squiggly: string; +} + +const pluginDataById = { + astro: { + colors: { + flame: "#D83333", + heart: "#F041FF", + squiggly: "#17191E", + }, + description: + "Rules for Astro, the web framework for content-driven websites.", + id: "astro", + name: "Astro", + }, + browser: { + colors: { + flame: "#E85D0D", + heart: "#2CA6E0", + squiggly: "#031E4C", + }, + description: + "Rules for code that runs in browsers and other environments with DOM (Document Object Model) elements.", + id: "browser", + name: "Browser", + }, + flint: { + colors: { + flame: "#F2BF80", + heart: "#AB1B1B", + squiggly: "#886035", + }, + description: + "Rules for writing third-party Flint plugins and custom rules. Meta!", + id: "flint", + name: "Flint", + }, + json: { + colors: { + flame: "#636363", + heart: "#FAF0E6", + squiggly: "#000080", + }, + description: + "Rules for linting `.json` files containing arbitrary data in the JavaScript Object Notation (JSON) format.", + id: "json", + name: "JSON", + }, + jsx: { + colors: { + flame: "#61DBFB", + heart: "#F3DF49", + squiggly: "#1F80A3", + }, + description: + 'Rules for code that describes UI with the "JSX" markup language, commonly in `.jsx` and/or `.tsx` files.', + id: "jsx", + name: "JSX", + }, + md: { + colors: { + flame: "#ffffff", + heart: "#2BA4E0", + squiggly: "#343A40", + }, + description: + "Rules for linting `.md` files containing Markdown, the lightweight markup language.", + id: "markdown", + name: "Markdown", + }, + next: { + colors: { + flame: "#404040", + heart: "#FFFFFF", + squiggly: "#000000", + }, + description: + "Rules for Next.js, the React meta-framework for high-quality web applications.", + id: "next", + name: "Next.js", + }, + node: { + colors: { + flame: "#3C873A", + heart: "#6BC045", + squiggly: "#303030", + }, + description: + "Rules for code that runs in Node.js and other server runtimes that include Node.js-like APIs.", + id: "node", + name: "Node.js", + }, + nuxt: { + colors: { + flame: "#34495E", + heart: "#00DC81", + squiggly: "#020618", + }, + description: + "Rules for Nuxt, the progress web framework that makes full-stack development with Vue.js intuitive.", + id: "nuxt", + name: "Nuxt", + }, + "package-json": { + colors: { + flame: "#F98717", + heart: "#DF2AFC", + squiggly: "#333333", + }, + description: + "Rules for linting Node.js `package.json` manifest files in repositories and workspaces.", + id: "package-json", + name: "PackageJSON", + }, + performance: { + colors: { + flame: "#fadd03ff", + heart: "#fff2eeff", + squiggly: "#F05756", + }, + description: + 'Rules for specialized code designed specifically to be run in performance-critical "hot paths".', + id: "performance", + name: "Performance", + }, + react: { + colors: { + flame: "#0A7EA5", + heart: "#57C4DC", + squiggly: "#23272F", + }, + description: + "Rules for React, the library for web and native user interfaces.", + id: "react", + name: "React", + }, + solid: { + colors: { + flame: "#90C3E8", + heart: "#446B9E", + squiggly: "#222222", + }, + description: + "Rules for SolidJS, the library for building effortless UIs with reactive precision.", + id: "solid", + name: "SolidJS", + }, + sorting: { + colors: { + flame: "#4B32C3", + heart: "#FFFFFF", + squiggly: "#232327", + }, + description: + "Rules that automatically sort any and all possible aspects of code alphabetically, such as imports and properties.", + id: "sorting", + name: "Sorting", + }, + spelling: { + colors: { + flame: "#B51A00", + heart: "#F5EC02", + squiggly: "#010100", + }, + description: + 'Rules that detect misspelling typos in source files using the code-optimized "CSpell" spell-checker.', + id: "spelling", + name: "Spelling", + }, + ts: { + colors: { + flame: "#2D78C7", + heart: "#FFFFFF", + squiggly: "#235A97", + }, + description: + "Rules for linting JavaScript and TypeScript code, including the latest and greatest powerful typed linting rules.", + id: "ts", + name: "TypeScript (and JavaScript)", + }, + vitest: { + colors: { + flame: "#729B1B", + heart: "#FCC72B", + squiggly: "#516E11", + }, + description: + "Rules for Vitest, a next generation testing framework built on Vite. It's fast!", + id: "vitest", + name: "Vitest", + }, + vue: { + colors: { + flame: "#3FB984", + heart: "#5F87F2", + squiggly: "#31475E", + }, + description: + "Rules for Vue, the Progressive JavaScript framework for building web user interfaces.", + id: "vue", + name: "Vue", + }, + yaml: { + colors: { + flame: "#CC1718", + heart: "#40e0d0", + squiggly: "#008000", + }, + description: + "Rules for linting `.yaml`/`.yml` files containing arbitrary data in the Yet Another Markup Language (YAML) format.", + id: "yaml", + name: "YAML", + }, +} satisfies Record; + +export const pluginDataByGroup: Record> = { + core: { + json: pluginDataById.json, + md: pluginDataById.md, + "package-json": pluginDataById["package-json"], + ts: pluginDataById.ts, + yaml: pluginDataById.yaml, + }, + focused: { + browser: pluginDataById.browser, + flint: pluginDataById.flint, + jsx: pluginDataById.jsx, + node: pluginDataById.node, + performance: pluginDataById.performance, + sorting: pluginDataById.sorting, + spelling: pluginDataById.spelling, + }, + incubator: { + astro: pluginDataById.astro, + next: pluginDataById.next, + nuxt: pluginDataById.nuxt, + react: pluginDataById.react, + solid: pluginDataById.solid, + vitest: pluginDataById.vitest, + vue: pluginDataById.vue, + }, +}; + +export function getPluginData(pluginId: string) { + for (const group of Object.keys(pluginDataByGroup)) { + if (pluginId in pluginDataByGroup[group]) { + return { group, plugin: pluginDataByGroup[group][pluginId] }; + } + } + + console.log(new Error().stack); + throw new Error(`Unknown pluginId: ${pluginId}`); +} diff --git a/packages/site/tsconfig.json b/packages/site/tsconfig.json index 606166e09..0d0b4597e 100644 --- a/packages/site/tsconfig.json +++ b/packages/site/tsconfig.json @@ -13,5 +13,12 @@ }, "extends": "astro/tsconfigs/strict", "include": [".astro/types.d.ts", "*.config.*", "src"], - "references": [{ "path": "../comparisons" }] + "references": [ + { "path": "../comparisons" }, + { "path": "../plugin-browser" }, + { "path": "../plugin-flint" }, + { "path": "../plugin-node" }, + { "path": "../plugin-performance" }, + { "path": "../plugin-spelling" } + ] } diff --git a/packages/ts/src/formatDiagnostic.ts b/packages/ts/src/formatDiagnostic.ts index 9049485ae..0e87c836f 100644 --- a/packages/ts/src/formatDiagnostic.ts +++ b/packages/ts/src/formatDiagnostic.ts @@ -138,7 +138,7 @@ function formatCodeSpan( gutterSeparator; context += squiggleColor; if (i === firstLine) { - const lastCharForLine = i === lastLine ? lastLineChar : void 0; + const lastCharForLine = i === lastLine ? lastLineChar : undefined; context += lineContent.slice(0, firstLineChar).replace(/\S/g, " "); context += lineContent .slice(firstLineChar, lastCharForLine) diff --git a/packages/ts/src/plugin.ts b/packages/ts/src/plugin.ts index d2eaa2c31..4ebd27f5d 100644 --- a/packages/ts/src/plugin.ts +++ b/packages/ts/src/plugin.ts @@ -55,7 +55,7 @@ export const ts = createPlugin({ files: { all: ["**/*.{cjs,js,jsx,mjs,ts,tsx}"], }, - name: "ts", + name: "TypeScript", rules: [ anyReturns, asyncPromiseExecutors, diff --git a/packages/yaml/src/plugin.ts b/packages/yaml/src/plugin.ts index 7d2ff4b28..e2b07829c 100644 --- a/packages/yaml/src/plugin.ts +++ b/packages/yaml/src/plugin.ts @@ -6,6 +6,6 @@ export const yaml = createPlugin({ files: { all: ["**/*.{yaml,yml}"], }, - name: "yaml", + name: "YAML", rules: [emptyMappingKeys], }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a3bb951a..3c84555ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + read-package-up: 12.0.0 + read-pkg: 10.0.0 + unicorn-magic: 0.4.0 + importers: .: @@ -20,15 +25,18 @@ importers: '@flint.fyi/plugin-browser': specifier: workspace:^ version: link:packages/plugin-browser - '@flint.fyi/plugin-cspell': - specifier: workspace:^ - version: link:packages/plugin-cspell '@flint.fyi/plugin-flint': specifier: workspace:^ version: link:packages/plugin-flint '@flint.fyi/plugin-jsx': specifier: workspace:^ version: link:packages/plugin-jsx + '@flint.fyi/plugin-node': + specifier: workspace:^ + version: link:packages/plugin-node + '@flint.fyi/plugin-spelling': + specifier: workspace:^ + version: link:packages/plugin-spelling '@types/eslint-plugin-markdown': specifier: 2.0.2 version: 2.0.2 @@ -241,7 +249,7 @@ importers: specifier: 3.0.3 version: 3.0.3 - packages/plugin-browser: + packages/plugin-astro: dependencies: '@flint.fyi/core': specifier: 'workspace:' @@ -256,26 +264,20 @@ importers: specifier: 'workspace:' version: link:../utils - packages/plugin-cspell: + packages/plugin-browser: dependencies: - '@cspell/url': - specifier: ^9.2.2 - version: 9.3.2 '@flint.fyi/core': specifier: 'workspace:' version: link:../core '@flint.fyi/rule-tester': specifier: 'workspace:' version: link:../rule-tester - '@flint.fyi/text': + '@flint.fyi/ts': specifier: 'workspace:' - version: link:../text + version: link:../ts '@flint.fyi/utils': specifier: 'workspace:' version: link:../utils - cspell-lib: - specifier: ^9.2.2 - version: 9.3.2 packages/plugin-flint: dependencies: @@ -314,6 +316,21 @@ importers: specifier: 1.0.4 version: 1.0.4 + packages/plugin-next: + dependencies: + '@flint.fyi/core': + specifier: 'workspace:' + version: link:../core + '@flint.fyi/rule-tester': + specifier: 'workspace:' + version: link:../rule-tester + '@flint.fyi/ts': + specifier: 'workspace:' + version: link:../ts + '@flint.fyi/utils': + specifier: 'workspace:' + version: link:../utils + packages/plugin-node: dependencies: '@flint.fyi/core': @@ -329,6 +346,21 @@ importers: specifier: 'workspace:' version: link:../utils + packages/plugin-nuxt: + dependencies: + '@flint.fyi/core': + specifier: 'workspace:' + version: link:../core + '@flint.fyi/rule-tester': + specifier: 'workspace:' + version: link:../rule-tester + '@flint.fyi/ts': + specifier: 'workspace:' + version: link:../ts + '@flint.fyi/utils': + specifier: 'workspace:' + version: link:../utils + packages/plugin-performance: dependencies: '@flint.fyi/core': @@ -347,6 +379,57 @@ importers: specifier: ^2.1.0 version: 2.1.0(typescript@5.9.3) + packages/plugin-react: + dependencies: + '@flint.fyi/core': + specifier: 'workspace:' + version: link:../core + '@flint.fyi/rule-tester': + specifier: 'workspace:' + version: link:../rule-tester + '@flint.fyi/ts': + specifier: 'workspace:' + version: link:../ts + '@flint.fyi/utils': + specifier: 'workspace:' + version: link:../utils + + packages/plugin-solid: + dependencies: + '@flint.fyi/core': + specifier: 'workspace:' + version: link:../core + '@flint.fyi/rule-tester': + specifier: 'workspace:' + version: link:../rule-tester + '@flint.fyi/ts': + specifier: 'workspace:' + version: link:../ts + '@flint.fyi/utils': + specifier: 'workspace:' + version: link:../utils + + packages/plugin-spelling: + dependencies: + '@cspell/url': + specifier: ^9.2.2 + version: 9.3.2 + '@flint.fyi/core': + specifier: 'workspace:' + version: link:../core + '@flint.fyi/rule-tester': + specifier: 'workspace:' + version: link:../rule-tester + '@flint.fyi/text': + specifier: 'workspace:' + version: link:../text + '@flint.fyi/utils': + specifier: 'workspace:' + version: link:../utils + cspell-lib: + specifier: ^9.2.2 + version: 9.3.2 + packages/rule-tester: dependencies: '@flint.fyi/core': @@ -365,20 +448,17 @@ importers: specifier: ^0.9.5 version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) '@astrojs/react': - specifier: ^4.4.0 - version: 4.4.0(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(yaml@2.8.1) + specifier: ^4.4.2 + version: 4.4.2(@types/node@24.10.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(yaml@2.8.1) '@astrojs/starlight': - specifier: ^0.36.1 - version: 0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) + specifier: ^0.36.2 + version: 0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) '@flint.fyi/comparisons': specifier: 'workspace:' version: link:../comparisons '@flint.fyi/plugin-browser': specifier: 'workspace:' version: link:../plugin-browser - '@flint.fyi/plugin-cspell': - specifier: 'workspace:' - version: link:../plugin-cspell '@flint.fyi/plugin-flint': specifier: 'workspace:' version: link:../plugin-flint @@ -388,21 +468,24 @@ importers: '@flint.fyi/plugin-performance': specifier: 'workspace:' version: link:../plugin-performance + '@flint.fyi/plugin-spelling': + specifier: 'workspace:' + version: link:../plugin-spelling '@konami-emoji-blast/astro': specifier: ^0.1.1 - version: 0.1.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))(konami-emoji-blast@0.6.0) + version: 0.1.1(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))(konami-emoji-blast@0.6.0) '@types/node': - specifier: ^24.9.1 - version: 24.10.0 + specifier: ^24.10.1 + version: 24.10.1 '@types/react': - specifier: ^19.2.2 - version: 19.2.2 + specifier: ^19.2.5 + version: 19.2.7 '@types/react-dom': - specifier: ^19.2.2 - version: 19.2.2(@types/react@19.2.2) + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) astro: - specifier: ^5.15.1 - version: 5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) + specifier: ^5.15.8 + version: 5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -425,14 +508,14 @@ importers: specifier: ^2.0.0 version: 2.0.0 starlight-links-validator: - specifier: ^0.19.0 - version: 0.19.0(@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))) + specifier: ^0.19.1 + version: 0.19.1(@astrojs/starlight@0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))) starlight-package-managers: specifier: ^0.11.1 - version: 0.11.1(@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))) + version: 0.11.1(@astrojs/starlight@0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))) starlight-sidebar-topics: specifier: ^0.6.2 - version: 0.6.2(@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))) + version: 0.6.2(@astrojs/starlight@0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -441,8 +524,8 @@ importers: specifier: 14.1.2 version: 14.1.2 sharp: - specifier: 0.34.4 - version: 0.34.4 + specifier: 0.34.5 + version: 0.34.5 packages/text: dependencies: @@ -523,8 +606,8 @@ packages: '@astrojs/internal-helpers@0.7.2': resolution: {integrity: sha512-KCkCqR3Goym79soqEtbtLzJfqhTWMyVaizUi35FLzgGSzBotSw8DB1qwsu7U96ihOJgYhDk2nVPz+3LnXPeX6g==} - '@astrojs/internal-helpers@0.7.4': - resolution: {integrity: sha512-lDA9MqE8WGi7T/t2BMi+EAXhs4Vcvr94Gqx3q15cFEz8oFZMO4/SFBqYr/UcmNlvW+35alowkVj+w9VhLvs5Cw==} + '@astrojs/internal-helpers@0.7.5': + resolution: {integrity: sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==} '@astrojs/language-server@2.15.4': resolution: {integrity: sha512-JivzASqTPR2bao9BWsSc/woPHH7OGSGc9aMxXL4U6egVTqBycB3ZHdBJPuOCVtcGLrzdWTosAqVPz1BVoxE0+A==} @@ -541,8 +624,8 @@ packages: '@astrojs/markdown-remark@6.3.6': resolution: {integrity: sha512-bwylYktCTsLMVoCOEHbn2GSUA3c5KT/qilekBKA3CBng0bo1TYjNZPr761vxumRk9kJGqTOtU+fgCAp5Vwokug==} - '@astrojs/markdown-remark@6.3.8': - resolution: {integrity: sha512-uFNyFWadnULWK2cOw4n0hLKeu+xaVWeuECdP10cQ3K2fkybtTlhb7J7TcScdjmS8Yps7oje9S/ehYMfZrhrgCg==} + '@astrojs/markdown-remark@6.3.9': + resolution: {integrity: sha512-hX2cLC/KW74Io1zIbn92kI482j9J7LleBLGCVU9EP3BeH5MVrnFawOnqD0t/q6D1Z+ZNeQG2gNKMslCcO36wng==} '@astrojs/mdx@4.3.4': resolution: {integrity: sha512-Ew3iP+6zuzzJWNEH5Qr1iknrue1heEfgmfuMpuwLaSwqlUiJQ0NDb2oxKosgWU1ROYmVf1H4KCmS6QdMWKyFjw==} @@ -554,8 +637,8 @@ packages: resolution: {integrity: sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} - '@astrojs/react@4.4.0': - resolution: {integrity: sha512-RzblkVImAFdV1C0AWsSWzS70Z0FMtW2p0XXkNYu3QePfyVJta3JIy8m8jY8271etaCZtpFjsE2UaiHGZIBm6nw==} + '@astrojs/react@4.4.2': + resolution: {integrity: sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} peerDependencies: '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 @@ -566,8 +649,8 @@ packages: '@astrojs/sitemap@3.5.0': resolution: {integrity: sha512-ldOvoBxuRgpcdndzksskOTzU55g76tkHC/POpejUbPGz6zR4rJKiXh8thX4WEPWDhCTZUafhJ1qf7k1muStHfg==} - '@astrojs/starlight@0.36.1': - resolution: {integrity: sha512-Fmt8mIsAIZN18Y4YQDI6p521GsYGe4hYxh9jWmz0pHBXnS5J7Na3TSXNya4eyIymCcKkuiKFbs7b/knsdGVYPg==} + '@astrojs/starlight@0.36.3': + resolution: {integrity: sha512-5cm4QVQHUP6ZE52O43TtUpsTvLKdZa9XEs4l3suzuY7Ymsbz4ojtoL9NhistbMqM+/qk6fm6SmxbOL6hQ/LfNA==} peerDependencies: astro: ^5.5.0 @@ -620,8 +703,8 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.27.1': @@ -632,8 +715,8 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -661,12 +744,12 @@ packages: resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - '@capsizecss/unpack@3.0.0': - resolution: {integrity: sha512-+ntATQe1AlL7nTOYjwjj6w3299CgRot48wL761TUGYpYgAou3AaONZazp0PKZyCyWhudWsjhq1nvRHOvbMzhTA==} + '@capsizecss/unpack@3.0.1': + resolution: {integrity: sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==} engines: {node: '>=18'} '@changesets/apply-release-plan@7.0.13': @@ -974,8 +1057,8 @@ packages: '@emnapi/core@1.6.0': resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -1220,124 +1303,135 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.4': - resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.4': - resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.3': - resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.3': - resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.3': - resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.3': - resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.2.3': - resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.3': - resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.3': - resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.4': - resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.4': - resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-ppc64@0.34.4': - resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - '@img/sharp-linux-s390x@0.34.4': - resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.4': - resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.4': - resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.4': - resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.4': - resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.4': - resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.4': - resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.4': - resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -1542,8 +1636,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1668,21 +1762,39 @@ packages: '@shikijs/core@3.13.0': resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + '@shikijs/core@3.17.0': + resolution: {integrity: sha512-/HjeOnbc62C+n33QFNFrAhUlIADKwfuoS50Ht0pxujxP4QjZAlFp5Q+OkDo531SCTzivx5T18khwyBdKoPdkuw==} + '@shikijs/engine-javascript@3.13.0': resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} + '@shikijs/engine-javascript@3.17.0': + resolution: {integrity: sha512-WwF99xdP8KfuDrIbT4wxyypfhoIxMeeOCp1AiuvzzZ6JT5B3vIuoclL8xOuuydA6LBeeNXUF/XV5zlwwex1jlA==} + '@shikijs/engine-oniguruma@3.13.0': resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} + '@shikijs/engine-oniguruma@3.17.0': + resolution: {integrity: sha512-flSbHZAiOZDNTrEbULY8DLWavu/TyVu/E7RChpLB4WvKX4iHMfj80C6Hi3TjIWaQtHOW0KC6kzMcuB5TO1hZ8Q==} + '@shikijs/langs@3.13.0': resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} + '@shikijs/langs@3.17.0': + resolution: {integrity: sha512-icmur2n5Ojb+HAiQu6NEcIIJ8oWDFGGEpiqSCe43539Sabpx7Y829WR3QuUW2zjTM4l6V8Sazgb3rrHO2orEAw==} + '@shikijs/themes@3.13.0': resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} + '@shikijs/themes@3.17.0': + resolution: {integrity: sha512-/xEizMHLBmMHwtx4JuOkRf3zwhWD2bmG5BRr0IPjpcWpaq4C3mYEuTk/USAEglN0qPrTwEHwKVpSu/y2jhferA==} + '@shikijs/types@3.13.0': resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} + '@shikijs/types@3.17.0': + resolution: {integrity: sha512-wjLVfutYWVUnxAjsWEob98xgyaGv0dTEnMZDruU5mRjVN7szcGOfgO+997W2yR6odp+1PtSBNeSITRRTfUzK/g==} + '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1783,6 +1895,9 @@ packages: '@types/node@24.10.0': resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1792,13 +1907,13 @@ packages: '@types/picomatch@3.0.2': resolution: {integrity: sha512-n0i8TD3UDB7paoMMxA3Y65vUncFJXjcUf7lQY7YyKGl6031FNjfsLs6pdLFCy2GNFxItPJG8GvvpbZc2skH7WA==} - '@types/react-dom@19.2.2': - resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.2': - resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -2041,8 +2156,8 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 - astro@5.15.1: - resolution: {integrity: sha512-VM679M1qxOjGo6q3vKYDNDddkALGgMopG93IwbEXd3Buc2xVLuuPj4HNziNugSbPQx5S6UReMp5uzw10EJN81A==} + astro@5.16.2: + resolution: {integrity: sha512-NFXqhB1UgBvleF5rLZ7a31Qzprf1lSch+k8o2XTvsw1d97gxGrjVVeWa8AnZUFtirz84YPW6+5NbLVNzS2y+uQ==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -2174,8 +2289,8 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} clear-module@4.1.2: @@ -2226,6 +2341,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + commander@14.0.2: resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} @@ -2311,20 +2430,35 @@ packages: engines: {node: '>=20'} hasBin: true + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + css-selector-parser@3.1.3: resolution: {integrity: sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg==} + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + css-tree@3.1.0: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} debounce@3.0.0: resolution: {integrity: sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==} @@ -2383,8 +2517,8 @@ packages: resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} engines: {node: '>=18'} - devalue@5.4.2: - resolution: {integrity: sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==} + devalue@5.5.0: + resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -2411,6 +2545,19 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dset@3.1.4: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} @@ -2535,7 +2682,6 @@ packages: eslint-plugin-markdown@5.1.0: resolution: {integrity: sha512-SJeyKko1K6GwI0AN6xeCDToXDkfKZfXcexA6B+O2Wr2btUS9GrC+YgwSyVli5DJnctUHjFXcQ2cqTaAmVoLi2A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - deprecated: Please use @eslint/markdown instead peerDependencies: eslint: '>=8' @@ -2727,8 +2873,8 @@ packages: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} - fontace@0.3.0: - resolution: {integrity: sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==} + fontace@0.3.1: + resolution: {integrity: sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==} fontkit@2.0.4: resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} @@ -2880,9 +3026,9 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} + hosted-git-info@9.0.2: + resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + engines: {node: ^20.17.0 || >=22.9.0} html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} @@ -3178,14 +3324,18 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.30.19: - resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -3274,6 +3424,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} @@ -3472,9 +3625,9 @@ packages: node-releases@2.0.21: resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} - engines: {node: ^16.14.0 || >=18.0.0} + normalize-package-data@8.0.0: + resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} + engines: {node: ^20.17.0 || >=22.9.0} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -3486,8 +3639,8 @@ packages: object-deep-merge@2.0.0: resolution: {integrity: sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==} - ofetch@1.4.1: - resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -3503,8 +3656,8 @@ packages: oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} - oniguruma-to-es@4.3.3: - resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -3544,8 +3697,8 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} - p-queue@8.1.0: - resolution: {integrity: sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==} + p-queue@8.1.1: + resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==} engines: {node: '>=18'} p-timeout@6.1.4: @@ -3564,8 +3717,8 @@ packages: package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} - package-manager-detector@1.3.0: - resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} pagefind@1.3.0: resolution: {integrity: sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==} @@ -3622,6 +3775,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3743,13 +3899,13 @@ packages: resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} - read-package-up@11.0.0: - resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} - engines: {node: '>=18'} + read-package-up@12.0.0: + resolution: {integrity: sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==} + engines: {node: '>=20'} - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} + read-pkg@10.0.0: + resolution: {integrity: sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A==} + engines: {node: '>=20'} read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} @@ -3939,8 +4095,8 @@ packages: resolution: {integrity: sha512-JfVoxf4FxQI5qpsPbkHhZo+n6N9YMJobyl4oGEUBb/31oQYlgTjkXQD8PBiafS2UbWoxrTO0Z5PJUBXEPAG1Zw==} engines: {node: '>=16.0.0'} - sharp@0.34.4: - resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -3954,6 +4110,9 @@ packages: shiki@3.13.0: resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} + shiki@3.17.0: + resolution: {integrity: sha512-lUZfWsyW7czITYTdo/Tb6ZM4VfyXlzmKYBQBjTz+pBzPPkP08RgIt00Ls1Z50Cl3SfwJsue6WbJeF3UgqLVI9Q==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -4028,8 +4187,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - starlight-links-validator@0.19.0: - resolution: {integrity: sha512-wsqVL/vL6A4wvnM0m1A9Rwu8WuKS4rZerg1Dw5p8Xq4MquJco2F68LNt5lm9kYa3G9dUi4jMZbUAUuzzczQyJQ==} + starlight-links-validator@0.19.1: + resolution: {integrity: sha512-Ermpe7zJG5uRJUqIWflX4VNLozOBX2/N4XvHvyaPQcHsfdN7y81qEd3n56PYdVb3Tj4/6ZFFSfAtiCe78XtBVw==} engines: {node: '>=18.17.1'} peerDependencies: '@astrojs/starlight': '>=0.32.0' @@ -4112,10 +4271,19 @@ packages: resolution: {integrity: sha512-i6sWEzuwadSlcr2mOnb0ktlIl+K5FVxsPXmoPfknDd2gyw4ZBIAZ5coc0NQzYqDdEYXMHy8NaY9rWwa1Q1myiQ==} engines: {node: '>=20'} + svgo@4.0.0: + resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==} + engines: {node: '>=16'} + hasBin: true + synckit@0.11.11: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -4141,8 +4309,9 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} @@ -4198,6 +4367,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.2.0: + resolution: {integrity: sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==} + engines: {node: '>=20'} + typesafe-path@0.2.2: resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} @@ -4237,9 +4410,9 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -4274,8 +4447,8 @@ packages: unist-util-visit-children@3.0.0: resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} @@ -4284,8 +4457,8 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - unstorage@1.17.1: - resolution: {integrity: sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==} + unstorage@1.17.3: + resolution: {integrity: sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==} peerDependencies: '@azure/app-configuration': ^1.8.0 '@azure/cosmos': ^4.2.0 @@ -4374,8 +4547,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@6.3.6: - resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -4710,10 +4883,10 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} - zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + zod-to-json-schema@3.25.0: + resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} peerDependencies: - zod: ^3.24.1 + zod: ^3.25 || ^4 zod-to-ts@1.2.0: resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} @@ -4749,7 +4922,7 @@ snapshots: '@astrojs/internal-helpers@0.7.2': {} - '@astrojs/internal-helpers@0.7.4': {} + '@astrojs/internal-helpers@0.7.5': {} '@astrojs/language-server@2.15.4(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3)': dependencies: @@ -4793,19 +4966,19 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.2 remark-smartypants: 3.0.2 - shiki: 3.13.0 + shiki: 3.17.0 smol-toml: 1.5.2 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@astrojs/markdown-remark@6.3.8': + '@astrojs/markdown-remark@6.3.9': dependencies: - '@astrojs/internal-helpers': 0.7.4 + '@astrojs/internal-helpers': 0.7.5 '@astrojs/prism': 3.3.0 github-slugger: 2.0.0 hast-util-from-html: 2.0.3 @@ -4819,22 +4992,22 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.2 remark-smartypants: 3.0.2 - shiki: 3.13.0 + shiki: 3.17.0 smol-toml: 1.5.2 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.4(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))': + '@astrojs/mdx@4.3.4(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))': dependencies: '@astrojs/markdown-remark': 6.3.6 '@mdx-js/mdx': 3.1.0(acorn@8.15.0) acorn: 8.15.0 - astro: 5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) + astro: 5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -4852,15 +5025,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.4.0(@types/node@24.10.0)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(yaml@2.8.1)': + '@astrojs/react@4.4.2(@types/node@24.10.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.6.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(yaml@2.8.1)': dependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - '@vitejs/plugin-react': 4.7.0(vite@6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1)) + '@types/react': 19.2.7 + '@types/react-dom': 19.2.3(@types/react@19.2.7) + '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1)) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) ultrahtml: 1.6.0 - vite: 6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -4881,17 +5054,17 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))': + '@astrojs/starlight@0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))': dependencies: - '@astrojs/markdown-remark': 6.3.8 - '@astrojs/mdx': 4.3.4(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) + '@astrojs/markdown-remark': 6.3.9 + '@astrojs/mdx': 4.3.4(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) '@astrojs/sitemap': 3.5.0 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) - astro-expressive-code: 0.41.3(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) + astro: 5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) + astro-expressive-code: 0.41.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -4916,7 +5089,7 @@ snapshots: '@astrojs/telemetry@3.3.0': dependencies: - ci-info: 4.3.0 + ci-info: 4.3.1 debug: 4.4.3 dlv: 1.1.3 dset: 3.1.4 @@ -4932,7 +5105,7 @@ snapshots: '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -4945,10 +5118,10 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -4960,8 +5133,8 @@ snapshots: '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 @@ -4979,7 +5152,7 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -4987,7 +5160,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -4996,18 +5169,18 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 - '@babel/parser@7.28.4': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': dependencies: @@ -5024,27 +5197,27 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.4': + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 - '@capsizecss/unpack@3.0.0': + '@capsizecss/unpack@3.0.1': dependencies: fontkit: 2.0.4 @@ -5437,7 +5610,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.6.0': + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 optional: true @@ -5597,7 +5770,7 @@ snapshots: postcss: 8.5.6 postcss-nested: 6.2.0(postcss@8.5.6) unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 '@expressive-code/plugin-frames@0.41.3': dependencies: @@ -5606,7 +5779,7 @@ snapshots: '@expressive-code/plugin-shiki@0.41.3': dependencies: '@expressive-code/core': 0.41.3 - shiki: 3.13.0 + shiki: 3.17.0 '@expressive-code/plugin-text-markers@0.41.3': dependencies: @@ -5625,90 +5798,98 @@ snapshots: '@img/colour@1.0.0': {} - '@img/sharp-darwin-arm64@0.34.4': + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.34.4': + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.3': + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.2.3': + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.2.3': + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.2.3': + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.3': + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.3': + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.3': + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.3': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-linux-arm64@0.34.4': + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-arm@0.34.4': + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-ppc64@0.34.4': + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.34.4': + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-x64@0.34.4': + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.4': + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.4': + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-wasm32@0.34.4': + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.6.0 + '@emnapi/runtime': 1.7.1 optional: true - '@img/sharp-win32-arm64@0.34.4': + '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-ia32@0.34.4': + '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-x64@0.34.4': + '@img/sharp-win32-x64@0.34.5': optional: true '@inquirer/external-editor@1.0.2(@types/node@24.10.0)': @@ -5743,9 +5924,9 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@konami-emoji-blast/astro@0.1.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))(konami-emoji-blast@0.6.0)': + '@konami-emoji-blast/astro@0.1.1(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))(konami-emoji-blast@0.6.0)': dependencies: - astro: 5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) + astro: 5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) konami-emoji-blast: 0.6.0 '@manypkg/find-root@1.1.0': @@ -5797,7 +5978,7 @@ snapshots: '@napi-rs/wasm-runtime@1.0.7': dependencies: '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 + '@emnapi/runtime': 1.7.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -5897,7 +6078,7 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/pluginutils@5.2.0(rollup@4.52.5)': + '@rollup/pluginutils@5.3.0(rollup@4.52.5)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 @@ -5985,30 +6166,61 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/core@3.17.0': + dependencies: + '@shikijs/types': 3.17.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@3.13.0': dependencies: '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 + oniguruma-to-es: 4.3.4 + + '@shikijs/engine-javascript@3.17.0': + dependencies: + '@shikijs/types': 3.17.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.4 '@shikijs/engine-oniguruma@3.13.0': dependencies: '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma@3.17.0': + dependencies: + '@shikijs/types': 3.17.0 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs@3.13.0': dependencies: '@shikijs/types': 3.13.0 + '@shikijs/langs@3.17.0': + dependencies: + '@shikijs/types': 3.17.0 + '@shikijs/themes@3.13.0': dependencies: '@shikijs/types': 3.13.0 + '@shikijs/themes@3.17.0': + dependencies: + '@shikijs/types': 3.17.0 + '@shikijs/types@3.13.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@3.17.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/vscode-textmate@10.0.2': {} '@sindresorhus/base62@1.0.0': {} @@ -6026,24 +6238,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@types/chai@5.2.3': dependencies: @@ -6074,7 +6286,7 @@ snapshots: '@types/fontkit@2.0.8': dependencies: - '@types/node': 24.10.0 + '@types/node': 24.10.1 '@types/hast@3.0.4': dependencies: @@ -6121,23 +6333,27 @@ snapshots: dependencies: undici-types: 7.16.0 + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + '@types/normalize-package-data@2.4.4': {} '@types/omit-empty@1.0.4': {} '@types/picomatch@3.0.2': {} - '@types/react-dom@19.2.2(@types/react@19.2.2)': + '@types/react-dom@19.2.3(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.2 + '@types/react': 19.2.7 - '@types/react@19.2.2': + '@types/react@19.2.7': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/sax@1.2.7': dependencies: - '@types/node': 24.10.0 + '@types/node': 24.10.1 '@types/unist@2.0.11': {} @@ -6244,7 +6460,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -6252,7 +6468,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -6280,7 +6496,7 @@ snapshots: dependencies: '@vitest/spy': 4.0.2 estree-walker: 3.0.3 - magic-string: 0.30.19 + magic-string: 0.30.21 optionalDependencies: vite: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1) @@ -6296,7 +6512,7 @@ snapshots: '@vitest/snapshot@4.0.2': dependencies: '@vitest/pretty-format': 4.0.2 - magic-string: 0.30.19 + magic-string: 0.30.21 pathe: 2.0.3 '@vitest/spy@4.0.2': {} @@ -6425,32 +6641,32 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.3(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)): + astro-expressive-code@0.41.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)): dependencies: - astro: 5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) + astro: 5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1) rehype-expressive-code: 0.41.3 - astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1): + astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1): dependencies: '@astrojs/compiler': 2.13.0 - '@astrojs/internal-helpers': 0.7.4 - '@astrojs/markdown-remark': 6.3.8 + '@astrojs/internal-helpers': 0.7.5 + '@astrojs/markdown-remark': 6.3.9 '@astrojs/telemetry': 3.3.0 - '@capsizecss/unpack': 3.0.0 + '@capsizecss/unpack': 3.0.1 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.3.0(rollup@4.52.5) acorn: 8.15.0 aria-query: 5.3.2 axobject-query: 4.1.0 boxen: 8.0.1 - ci-info: 4.3.0 + ci-info: 4.3.1 clsx: 2.1.1 common-ancestor-path: 1.0.1 cookie: 1.0.2 cssesc: 3.0.0 debug: 4.4.3 deterministic-object-hash: 2.0.2 - devalue: 5.4.2 + devalue: 5.5.0 diff: 5.2.0 dlv: 1.1.3 dset: 3.1.4 @@ -6458,44 +6674,45 @@ snapshots: esbuild: 0.25.11 estree-walker: 3.0.3 flattie: 1.1.1 - fontace: 0.3.0 + fontace: 0.3.1 github-slugger: 2.0.0 html-escaper: 3.0.3 http-cache-semantics: 4.2.0 import-meta-resolve: 4.2.0 js-yaml: 4.1.1 - magic-string: 0.30.19 - magicast: 0.3.5 + magic-string: 0.30.21 + magicast: 0.5.1 mrmime: 2.0.1 neotraverse: 0.6.18 p-limit: 6.2.0 - p-queue: 8.1.0 - package-manager-detector: 1.3.0 - picocolors: 1.1.1 + p-queue: 8.1.1 + package-manager-detector: 1.6.0 + piccolore: 0.1.3 picomatch: 4.0.3 prompts: 2.4.2 rehype: 13.0.2 semver: 7.7.3 - shiki: 3.13.0 + shiki: 3.17.0 smol-toml: 1.5.2 - tinyexec: 1.0.1 + svgo: 4.0.0 + tinyexec: 1.0.2 tinyglobby: 0.2.15 tsconfck: 3.1.6(typescript@5.9.3) ultrahtml: 1.6.0 unifont: 0.6.0 unist-util-visit: 5.0.0 - unstorage: 1.17.1 + unstorage: 1.17.3 vfile: 6.0.3 - vite: 6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1)) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) + vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) + zod-to-json-schema: 3.25.0(zod@3.25.76) zod-to-ts: 1.2.0(typescript@5.9.3)(zod@3.25.76) optionalDependencies: - sharp: 0.34.4 + sharp: 0.34.5 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6642,7 +6859,7 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.3.0: {} + ci-info@4.3.1: {} clear-module@4.1.2: dependencies: @@ -6688,6 +6905,8 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@11.1.0: {} + commander@14.0.2: {} commander@8.3.0: {} @@ -6811,23 +7030,42 @@ snapshots: semver: 7.7.3 tinyglobby: 0.2.15 + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + css-selector-parser@3.1.3: {} + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + css-tree@3.1.0: dependencies: mdn-data: 2.12.2 source-map-js: 1.2.1 + css-what@6.2.2: {} + cssesc@3.0.0: {} - csstype@3.1.3: {} + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.2.3: {} debounce@3.0.0: {} debug-for-file@0.2.0: dependencies: debug: 4.4.3 - read-package-up: 11.0.0 + read-package-up: 12.0.0 transitivePeerDependencies: - supports-color @@ -6861,7 +7099,7 @@ snapshots: dependencies: base-64: 1.0.0 - devalue@5.4.2: {} + devalue@5.5.0: {} devlop@1.1.0: dependencies: @@ -6881,6 +7119,24 @@ snapshots: dlv@1.1.3: {} + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dset@3.1.4: {} electron-to-chromium@1.5.218: {} @@ -7286,7 +7542,7 @@ snapshots: flattie@1.1.1: {} - fontace@0.3.0: + fontace@0.3.1: dependencies: '@types/fontkit': 2.0.8 fontkit: 2.0.4 @@ -7398,7 +7654,7 @@ snapshots: hast-util-phrasing: 3.0.1 hast-util-whitespace: 3.0.0 html-whitespace-sensitive-tag-names: 3.0.1 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 hast-util-from-html@2.0.3: dependencies: @@ -7574,9 +7830,9 @@ snapshots: property-information: 7.1.0 space-separated-tokens: 2.0.2 - hosted-git-info@7.0.2: + hosted-git-info@9.0.2: dependencies: - lru-cache: 10.4.3 + lru-cache: 11.2.2 html-entities@2.6.0: {} @@ -7827,18 +8083,20 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.2.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - magic-string@0.30.19: + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: + magicast@0.5.1: dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 source-map-js: 1.2.1 markdown-extensions@2.0.0: {} @@ -7904,7 +8162,7 @@ snapshots: mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 transitivePeerDependencies: - supports-color @@ -7913,7 +8171,7 @@ snapshots: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 mdast-util-from-markdown@0.8.5: dependencies: @@ -8083,6 +8341,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdn-data@2.0.28: {} + mdn-data@2.12.2: {} mdurl@2.0.0: {} @@ -8443,9 +8703,9 @@ snapshots: node-releases@2.0.21: {} - normalize-package-data@6.0.2: + normalize-package-data@8.0.0: dependencies: - hosted-git-info: 7.0.2 + hosted-git-info: 9.0.2 semver: 7.7.3 validate-npm-package-license: 3.0.4 @@ -8457,7 +8717,7 @@ snapshots: object-deep-merge@2.0.0: {} - ofetch@1.4.1: + ofetch@1.5.1: dependencies: destr: 2.0.5 node-fetch-native: 1.6.7 @@ -8475,7 +8735,7 @@ snapshots: oniguruma-parser@0.12.1: {} - oniguruma-to-es@4.3.3: + oniguruma-to-es@4.3.4: dependencies: oniguruma-parser: 0.12.1 regex: 6.0.1 @@ -8540,7 +8800,7 @@ snapshots: p-map@2.1.0: {} - p-queue@8.1.0: + p-queue@8.1.1: dependencies: eventemitter3: 5.0.1 p-timeout: 6.1.4 @@ -8559,7 +8819,7 @@ snapshots: dependencies: quansync: 0.2.11 - package-manager-detector@1.3.0: {} + package-manager-detector@1.6.0: {} pagefind@1.3.0: optionalDependencies: @@ -8633,6 +8893,8 @@ snapshots: pathe@2.0.3: {} + piccolore@0.1.3: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -8721,19 +8983,19 @@ snapshots: react@19.2.0: {} - read-package-up@11.0.0: + read-package-up@12.0.0: dependencies: find-up-simple: 1.0.1 - read-pkg: 9.0.1 - type-fest: 4.41.0 + read-pkg: 10.0.0 + type-fest: 5.2.0 - read-pkg@9.0.1: + read-pkg@10.0.0: dependencies: '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 + normalize-package-data: 8.0.0 parse-json: 8.3.0 - type-fest: 4.41.0 - unicorn-magic: 0.1.0 + type-fest: 5.2.0 + unicorn-magic: 0.4.0 read-yaml-file@1.1.0: dependencies: @@ -9018,34 +9280,36 @@ snapshots: dependencies: tslib: 2.8.1 - sharp@0.34.4: + sharp@0.34.5: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 semver: 7.7.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.4 - '@img/sharp-darwin-x64': 0.34.4 - '@img/sharp-libvips-darwin-arm64': 1.2.3 - '@img/sharp-libvips-darwin-x64': 1.2.3 - '@img/sharp-libvips-linux-arm': 1.2.3 - '@img/sharp-libvips-linux-arm64': 1.2.3 - '@img/sharp-libvips-linux-ppc64': 1.2.3 - '@img/sharp-libvips-linux-s390x': 1.2.3 - '@img/sharp-libvips-linux-x64': 1.2.3 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - '@img/sharp-linux-arm': 0.34.4 - '@img/sharp-linux-arm64': 0.34.4 - '@img/sharp-linux-ppc64': 0.34.4 - '@img/sharp-linux-s390x': 0.34.4 - '@img/sharp-linux-x64': 0.34.4 - '@img/sharp-linuxmusl-arm64': 0.34.4 - '@img/sharp-linuxmusl-x64': 0.34.4 - '@img/sharp-wasm32': 0.34.4 - '@img/sharp-win32-arm64': 0.34.4 - '@img/sharp-win32-ia32': 0.34.4 - '@img/sharp-win32-x64': 0.34.4 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 shebang-command@2.0.0: dependencies: @@ -9064,6 +9328,17 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + shiki@3.17.0: + dependencies: + '@shikijs/core': 3.17.0 + '@shikijs/engine-javascript': 3.17.0 + '@shikijs/engine-oniguruma': 3.17.0 + '@shikijs/langs': 3.17.0 + '@shikijs/themes': 3.17.0 + '@shikijs/types': 3.17.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -9134,9 +9409,9 @@ snapshots: stackback@0.0.2: {} - starlight-links-validator@0.19.0(@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))): + starlight-links-validator@0.19.1(@astrojs/starlight@0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))): dependencies: - '@astrojs/starlight': 0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) + '@astrojs/starlight': 0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) '@types/picomatch': 3.0.2 github-slugger: 2.0.0 hast-util-from-html: 2.0.3 @@ -9151,13 +9426,13 @@ snapshots: transitivePeerDependencies: - supports-color - starlight-package-managers@0.11.1(@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))): + starlight-package-managers@0.11.1(@astrojs/starlight@0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))): dependencies: - '@astrojs/starlight': 0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) + '@astrojs/starlight': 0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) - starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))): + starlight-sidebar-topics@0.6.2(@astrojs/starlight@0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1))): dependencies: - '@astrojs/starlight': 0.36.1(astro@5.15.1(@types/node@24.10.0)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) + '@astrojs/starlight': 0.36.3(astro@5.16.2(@types/node@24.10.1)(jiti@2.6.1)(rollup@4.52.5)(typescript@5.9.3)(yaml@2.8.1)) picomatch: 4.0.3 std-env@3.10.0: {} @@ -9225,10 +9500,22 @@ snapshots: has-flag: 5.0.1 supports-color: 10.2.2 + svgo@4.0.0: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.1.0 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.4.1 + synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 + tagged-tag@1.0.0: {} + tapable@2.3.0: {} term-size@2.2.1: {} @@ -9246,7 +9533,7 @@ snapshots: tinyexec@0.3.2: {} - tinyexec@1.0.1: {} + tinyexec@1.0.2: {} tinyglobby@0.2.15: dependencies: @@ -9289,6 +9576,10 @@ snapshots: type-fest@4.41.0: {} + type-fest@5.2.0: + dependencies: + tagged-tag: 1.0.0 + typesafe-path@0.2.2: {} typescript-auto-import-cache@0.3.6: @@ -9328,7 +9619,7 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 - unicorn-magic@0.1.0: {} + unicorn-magic@0.4.0: {} unified@11.0.5: dependencies: @@ -9343,7 +9634,7 @@ snapshots: unifont@0.6.0: dependencies: css-tree: 3.1.0 - ofetch: 1.4.1 + ofetch: 1.5.1 ohash: 2.0.11 unist-util-find-after@5.0.0: @@ -9385,7 +9676,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.1: + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 @@ -9394,11 +9685,11 @@ snapshots: dependencies: '@types/unist': 3.0.3 unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 universalify@0.1.2: {} - unstorage@1.17.1: + unstorage@1.17.3: dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -9406,7 +9697,7 @@ snapshots: h3: 1.15.4 lru-cache: 10.4.3 node-fetch-native: 1.6.7 - ofetch: 1.4.1 + ofetch: 1.5.1 ufo: 1.6.1 update-browserslist-db@1.1.3(browserslist@4.26.2): @@ -9443,7 +9734,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1): + vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -9452,7 +9743,7 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.0 + '@types/node': 24.10.1 fsevents: 2.3.3 jiti: 2.6.1 yaml: 2.8.1 @@ -9471,9 +9762,9 @@ snapshots: jiti: 2.6.1 yaml: 2.8.1 - vitefu@1.1.1(vite@6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1)): + vitefu@1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1)): optionalDependencies: - vite: 6.3.6(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@24.10.1)(jiti@2.6.1)(yaml@2.8.1) vitest@4.0.2(@types/debug@4.1.12)(@types/node@24.10.0)(jiti@2.6.1)(yaml@2.8.1): dependencies: @@ -9487,7 +9778,7 @@ snapshots: debug: 4.4.3 es-module-lexer: 1.7.0 expect-type: 1.2.2 - magic-string: 0.30.19 + magic-string: 0.30.21 pathe: 2.0.3 picomatch: 4.0.3 std-env: 3.10.0 @@ -9728,7 +10019,7 @@ snapshots: yoctocolors@2.1.2: {} - zod-to-json-schema@3.24.6(zod@3.25.76): + zod-to-json-schema@3.25.0(zod@3.25.76): dependencies: zod: 3.25.76 diff --git a/tsconfig.json b/tsconfig.json index 2cfa6135a..36146589a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,12 +11,17 @@ { "path": "./packages/flint" }, { "path": "./packages/json" }, { "path": "./packages/md" }, + { "path": "./packages/plugin-astro" }, { "path": "./packages/plugin-browser" }, - { "path": "./packages/plugin-cspell" }, { "path": "./packages/plugin-flint" }, { "path": "./packages/plugin-jsx" }, + { "path": "./packages/plugin-next" }, + { "path": "./packages/plugin-nuxt" }, { "path": "./packages/plugin-node" }, { "path": "./packages/plugin-performance" }, + { "path": "./packages/plugin-react" }, + { "path": "./packages/plugin-solid" }, + { "path": "./packages/plugin-spelling" }, { "path": "./packages/text" }, { "path": "./packages/ts" }, { "path": "./packages/yaml" }