mirror of
https://github.com/danbulant/oxc
synced 2026-05-20 12:48:38 +00:00
Ensures that Jest rules which are compatible with Vitest are properly reflected in the tracking issue. Here is a preview of what the updated markdown looks like: --- --- > [!WARNING] > This comment is maintained by CI. Do not edit this comment directly. > To update comment template, see https://github.com/oxc-project/oxc/tree/main/tasks/lint_rules This is tracking issue for `eslint-plugin-vitest`. There are 51(+ 1 deprecated) rules. - 1/8 recommended rules are remaining as TODO - 30/43 not recommended rules are remaining as TODO To get started, run the following command: ```sh just new-vitest-rule <RULE_NAME> ``` Then register the rule in `crates/oxc_linter/src/rules.rs` and also `declare_all_lint_rules` at the bottom. ## Recommended rules <details open> <summary> ✨: 7, 🚫: 0 / total: 8 </summary> | Status | Name | Docs | | :----: | :--- | :--- | | ✨ | vitest/no-identical-title | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-identical-title.md | | ✨ | vitest/expect-expect | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/expect-expect.md | | ✨ | vitest/no-commented-out-tests | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-commented-out-tests.md | | ✨ | vitest/no-import-node-test | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-import-node-test.md | | | vitest/valid-title | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/valid-title.md | | ✨ | vitest/valid-expect | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/valid-expect.md | | ✨ | vitest/require-local-test-context-for-concurrent-snapshots | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/require-local-test-context-for-concurrent-snapshots.md | | ✨ | vitest/valid-describe-callback | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/valid-describe-callback.md | ✨ = Implemented, 🚫 = Not supported </details> ## Not recommended rules <details open> <summary> ✨: 13, 🚫: 0 / total: 43 </summary> | Status | Name | Docs | | :----: | :--- | :--- | | | vitest/prefer-lowercase-title | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-lowercase-title.md | | | vitest/max-nested-describe | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/max-nested-describe.md | | ✨ | vitest/no-focused-tests | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-focused-tests.md | | ✨ | vitest/no-conditional-tests | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-tests.md | | ✨ | vitest/consistent-test-it | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-it.md | | | vitest/prefer-to-be | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be.md | | | vitest/no-hooks | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-hooks.md | | | vitest/no-restricted-vi-methods | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-vi-methods.md | | | vitest/consistent-test-filename | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/consistent-test-filename.md | | | vitest/max-expects | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/max-expects.md | | ✨ | vitest/no-alias-methods | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-alias-methods.md | | ✨ | vitest/no-conditional-expect | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-expect.md | | ✨ | vitest/no-conditional-in-test | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-conditional-in-test.md | | ✨ | vitest/no-disabled-tests | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-disabled-tests.md | | | vitest/no-duplicate-hooks | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-duplicate-hooks.md | | | vitest/no-large-snapshots | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-large-snapshots.md | | | vitest/no-interpolation-in-snapshots | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-interpolation-in-snapshots.md | | | vitest/no-mocks-import | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-mocks-import.md | | | vitest/no-restricted-matchers | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-restricted-matchers.md | | | vitest/no-standalone-expect | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-standalone-expect.md | | ✨ | vitest/no-test-prefixes | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-test-prefixes.md | | | vitest/no-test-return-statement | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-test-return-statement.md | | | vitest/prefer-called-with | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-called-with.md | | ✨ | vitest/prefer-to-be-falsy | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-falsy.md | | ✨ | vitest/prefer-to-be-object | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-object.md | | ✨ | vitest/prefer-to-be-truthy | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-be-truthy.md | | | vitest/prefer-to-have-length | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-have-length.md | | | vitest/prefer-equality-matcher | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-equality-matcher.md | | | vitest/prefer-strict-equal | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-strict-equal.md | | | vitest/prefer-expect-resolves | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-resolves.md | | ✨ | vitest/prefer-each | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-each.md | | | vitest/prefer-hooks-on-top | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-on-top.md | | ✨ | vitest/prefer-hooks-in-order | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-hooks-in-order.md | | | vitest/prefer-mock-promise-shorthand | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-mock-promise-shorthand.md | | | vitest/prefer-snapshot-hint | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-snapshot-hint.md | | | vitest/require-top-level-describe | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/require-top-level-describe.md | | | vitest/require-to-throw-message | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/require-to-throw-message.md | | | vitest/require-hook | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/require-hook.md | | | vitest/prefer-todo | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-todo.md | | | vitest/prefer-spy-on | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-spy-on.md | | | vitest/prefer-comparison-matcher | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-comparison-matcher.md | | | vitest/prefer-to-contain | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-to-contain.md | | | vitest/prefer-expect-assertions | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/prefer-expect-assertions.md | ✨ = Implemented, 🚫 = Not supported </details> ## Deprecated rules <details > <summary> ✨: 0, 🚫: 0 / total: 1 </summary> | Status | Name | Docs | | :----: | :--- | :--- | | | vitest/no-done-callback | https://github.com/veritem/eslint-plugin-vitest/blob/main/docs/rules/no-done-callback.md | ✨ = Implemented, 🚫 = Not supported </details> --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
const { parseArgs } = require('node:util');
|
|
const {
|
|
ALL_TARGET_PLUGINS,
|
|
createESLintLinter,
|
|
loadTargetPluginRules,
|
|
} = require('./eslint-rules.cjs');
|
|
const {
|
|
createRuleEntries,
|
|
updateNotSupportedStatus,
|
|
updateImplementedStatus,
|
|
overrideTypeScriptPluginStatusWithEslintPluginStatus: syncTypeScriptPluginStatusWithEslintPluginStatus,
|
|
syncVitestPluginStatusWithJestPluginStatus,
|
|
} = require('./oxlint-rules.cjs');
|
|
const { renderMarkdown } = require('./markdown-renderer.cjs');
|
|
const { updateGitHubIssue } = require('./result-reporter.cjs');
|
|
|
|
const HELP = `
|
|
Usage:
|
|
$ cmd [--target=<pluginName>]... [--update] [--help]
|
|
|
|
Options:
|
|
--target, -t: Which plugin to target, multiple allowed
|
|
--update: Update the issue instead of printing to stdout
|
|
--help, -h: Print this help message
|
|
|
|
Plugins: ${Array.from(ALL_TARGET_PLUGINS.keys()).join(', ')}
|
|
`;
|
|
|
|
(async () => {
|
|
//
|
|
// Parse arguments
|
|
//
|
|
const { values } = parseArgs({
|
|
options: {
|
|
// Mainly for debugging
|
|
target: { type: 'string', short: 't', multiple: true },
|
|
update: { type: 'boolean' },
|
|
help: { type: 'boolean', short: 'h' },
|
|
},
|
|
});
|
|
|
|
if (values.help) return console.log(HELP);
|
|
|
|
const targetPluginNames = new Set(values.target ?? ALL_TARGET_PLUGINS.keys());
|
|
for (const pluginName of targetPluginNames) {
|
|
if (!ALL_TARGET_PLUGINS.has(pluginName)) {
|
|
console.error(`Unknown plugin name: ${pluginName}`);
|
|
return;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Load linter and all plugins
|
|
//
|
|
const linter = createESLintLinter();
|
|
loadTargetPluginRules(linter);
|
|
|
|
//
|
|
// Generate entry and update status
|
|
//
|
|
const ruleEntries = createRuleEntries(linter.getRules());
|
|
await updateImplementedStatus(ruleEntries);
|
|
updateNotSupportedStatus(ruleEntries);
|
|
syncTypeScriptPluginStatusWithEslintPluginStatus(ruleEntries);
|
|
await syncVitestPluginStatusWithJestPluginStatus(ruleEntries);
|
|
|
|
//
|
|
// Render list and update if necessary
|
|
//
|
|
const results = await Promise.allSettled(
|
|
Array.from(targetPluginNames).map((pluginName) => {
|
|
const pluginMeta = /** @type {import("./eslint-rules.cjs").TargetPluginMeta} */ (
|
|
ALL_TARGET_PLUGINS.get(pluginName)
|
|
);
|
|
const content = renderMarkdown(pluginName, pluginMeta, ruleEntries);
|
|
|
|
if (!values.update) return Promise.resolve(content);
|
|
// Requires `env.GITHUB_TOKEN`
|
|
return updateGitHubIssue(pluginMeta, content);
|
|
}),
|
|
);
|
|
for (const result of results) {
|
|
if (result.status === 'fulfilled') console.log(result.value);
|
|
if (result.status === 'rejected') console.error(result.reason);
|
|
}
|
|
})();
|