{"id":14117402,"url":"https://github.com/vitest-dev/eslint-plugin-vitest","last_synced_at":"2026-04-01T22:45:27.122Z","repository":{"id":42223947,"uuid":"443772950","full_name":"vitest-dev/eslint-plugin-vitest","owner":"vitest-dev","description":"eslint plugin for vitest","archived":false,"fork":false,"pushed_at":"2026-03-22T02:37:02.000Z","size":2571,"stargazers_count":474,"open_issues_count":13,"forks_count":98,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-30T22:35:05.567Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitest-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-02T13:28:43.000Z","updated_at":"2026-03-30T20:03:56.000Z","dependencies_parsed_at":"2025-12-24T08:00:26.278Z","dependency_job_id":null,"html_url":"https://github.com/vitest-dev/eslint-plugin-vitest","commit_stats":{"total_commits":453,"total_committers":49,"mean_commits":9.244897959183673,"dds":0.2207505518763797,"last_synced_commit":"2296660c311243635cb8b0d39926deaa24404ac2"},"previous_names":["vitest-dev/eslint","veritem/eslint-plugin-vitest"],"tags_count":225,"template":false,"template_full_name":null,"purl":"pkg:github/vitest-dev/eslint-plugin-vitest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitest-dev%2Feslint-plugin-vitest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitest-dev%2Feslint-plugin-vitest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitest-dev%2Feslint-plugin-vitest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitest-dev%2Feslint-plugin-vitest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitest-dev","download_url":"https://codeload.github.com/vitest-dev/eslint-plugin-vitest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitest-dev%2Feslint-plugin-vitest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292695,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-14T18:01:16.942Z","updated_at":"2026-04-01T22:45:27.112Z","avatar_url":"https://github.com/vitest-dev.png","language":"TypeScript","funding_links":[],"categories":["Plugins","TypeScript","Packages"],"sub_categories":["Testing Tools","Linting"],"readme":"## eslint-plugin-vitest\n\n![npm](https://img.shields.io/npm/v/@vitest/eslint-plugin)\n[![ci](https://github.com/vitest-dev/eslint-plugin-vitest/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/veritem/eslint-plugin-vitest/actions/workflows/ci.yaml)\n\nESLint plugin for Vitest\n\n### Installation\n\nYou'll first need to install [ESLint](https://eslint.org/):\n\n```sh\nnpm i eslint --save-dev\n```\n\nNext, install `@vitest/eslint-plugin`\n\n```sh\nnpm install @vitest/eslint-plugin --save-dev\n```\n\n### Usage\n\nMake sure you're running ESLint `v9.0.0` or higher for the latest version of this plugin to work. The following example is how your `eslint.config.js` should be setup for this plugin to work for you.\n\n```js\nimport { defineConfig } from 'eslint/config'\nimport vitest from '@vitest/eslint-plugin'\n\nexport default defineConfig({\n  files: ['tests/**'], // or any other pattern\n  plugins: {\n    vitest,\n  },\n  rules: {\n    ...vitest.configs.recommended.rules, // you can also use vitest.configs.all.rules to enable all rules\n    'vitest/max-nested-describe': ['error', { max: 3 }], // you can also modify rules' behavior using option like this\n  },\n})\n```\n\nIf you're not using the latest version of ESLint (version `v8.57.0` or lower) you can setup this plugin using the following configuration\n\nAdd `vitest` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix:\n\n```json\n{\n  \"plugins\": [\"@vitest\"]\n}\n```\n\nThen configure the rules you want to use under the rules section.\n\n```json\n{\n  \"rules\": {\n    \"@vitest/max-nested-describe\": [\n      \"error\",\n      {\n        \"max\": 3\n      }\n    ]\n  }\n}\n```\n\nIf you're using old ESLint configuration, make sure to use legacy key like the following\n\n```js\n{\n  \"extends\": [\"plugin:@vitest/legacy-recommended\"] // or legacy-all\n}\n```\n\n#### Enabling with Type-Testing\n\nVitest ships with an optional [type-testing feature](https://vitest.dev/guide/testing-types), which is disabled by default.\n\nIf you're using this feature, you should also enabled `typecheck` in the settings for this plugin. This ensures that rules like [expect-expect](docs/rules/expect-expect.md) account for type-related assertions in tests.\n\n```js\nimport { defineConfig } from 'eslint/config'\nimport tseslint from 'typescript-eslint'\nimport vitest from '@vitest/eslint-plugin'\n\nexport default defineConfig(\n  // see https://typescript-eslint.io\n  tseslint.configs.recommended,\n  {\n    languageOptions: {\n      parserOptions: {\n        projectService: true,\n      },\n    },\n  },\n  {\n    files: ['tests/**'], // or any other pattern\n    plugins: {\n      vitest,\n    },\n    rules: {\n      ...vitest.configs.recommended.rules,\n    },\n    settings: {\n      vitest: {\n        typecheck: true,\n      },\n    },\n    languageOptions: {\n      globals: {\n        ...vitest.environments.env.globals,\n      },\n    },\n  },\n)\n```\n\n### Custom Fixtures\n\nIf you're using custom fixtures in a separate file and importing them in your tests, you can let the plugin know about them by adding them to the `vitestImports` setting. The property accepts an array of strings or regular expressions that match the module names where your custom fixtures are defined.\n\n```js\nimport { defineConfig } from 'eslint/config'\nimport vitest from '@vitest/eslint-plugin'\n\nexport default defineConfig({\n  files: ['tests/**'], // or any other pattern\n  plugins: {\n    vitest,\n  },\n  rules: {\n    ...vitest.configs.recommended.rules,\n  },\n  settings: {\n    vitest: {\n      vitestImports: ['@/tests/fixtures', /test-extend$/],\n    },\n  },\n})\n```\n\n### Shareable Configurations\n\n#### Recommended\n\nThis plugin exports a recommended configuration that enforces good testing practices.\n\nTo enable this configuration with `eslint.config.js`, use `vitest.configs.recommended`:\n\n```js\nimport { defineConfig } from 'eslint/config'\nimport vitest from '@vitest/eslint-plugin'\n\nexport default defineConfig({\n  files: ['tests/**'], // or any other pattern\n  ...vitest.configs.recommended,\n})\n```\n\n#### All\n\nIf you want to enable all rules instead of only some you can do so by adding the all configuration to your `eslint.config.js` config file:\n\n```js\nimport { defineConfig } from 'eslint/config'\nimport vitest from '@vitest/eslint-plugin'\n\nexport default defineConfig({\n  files: ['tests/**'], // or any other pattern\n  ...vitest.configs.all,\n})\n```\n\n### Rules\n\n\u003c!-- begin auto-generated rules list --\u003e\n\n💼 Configurations enabled in.\\\n⚠️ Configurations set to warn in.\\\n🚫 Configurations disabled in.\\\n🌐 Set in the `all` configuration.\\\n✅ Set in the `recommended` configuration.\\\n🔧 Automatically fixable by the [`--fix` CLI option](https://eslint.org/docs/user-guide/command-line-interface#--fix).\\\n💡 Manually fixable by [editor suggestions](https://eslint.org/docs/latest/use/core-concepts#rule-suggestions).\\\n💭 Requires [type information](https://typescript-eslint.io/linting/typed-linting).\\\n❌ Deprecated.\n\n| Name                                                                                                                     | Description                                                                                     | 💼  | ⚠️    | 🚫  | 🔧  | 💡  | 💭  | ❌  |\n| :----------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------- | :-- | :---- | :-- | :-- | :-- | :-- | :-- |\n| [consistent-each-for](docs/rules/consistent-each-for.md)                                                                 | enforce using `.each` or `.for` consistently                                                    |     | 🌐    |     |     |     |     |     |\n| [consistent-test-filename](docs/rules/consistent-test-filename.md)                                                       | require test file pattern                                                                       |     | 🌐    |     |     |     |     |     |\n| [consistent-test-it](docs/rules/consistent-test-it.md)                                                                   | enforce using test or it but not both                                                           |     | 🌐    |     | 🔧  |     |     |     |\n| [consistent-vitest-vi](docs/rules/consistent-vitest-vi.md)                                                               | enforce using vitest or vi but not both                                                         |     | 🌐    |     | 🔧  |     |     |     |\n| [expect-expect](docs/rules/expect-expect.md)                                                                             | enforce having expectation in test body                                                         | ✅  | 🌐    |     |     |     |     |     |\n| [hoisted-apis-on-top](docs/rules/hoisted-apis-on-top.md)                                                                 | enforce hoisted APIs to be on top of the file                                                   |     | 🌐    |     |     | 💡  |     |     |\n| [max-expects](docs/rules/max-expects.md)                                                                                 | enforce a maximum number of expect per test                                                     |     | 🌐    |     |     |     |     |     |\n| [max-nested-describe](docs/rules/max-nested-describe.md)                                                                 | require describe block to be less than set max value or default value                           |     | 🌐    |     |     |     |     |     |\n| [no-alias-methods](docs/rules/no-alias-methods.md)                                                                       | disallow alias methods                                                                          |     | 🌐    |     | 🔧  |     |     |     |\n| [no-commented-out-tests](docs/rules/no-commented-out-tests.md)                                                           | disallow commented out tests                                                                    | ✅  | 🌐    |     |     |     |     |     |\n| [no-conditional-expect](docs/rules/no-conditional-expect.md)                                                             | disallow conditional expects                                                                    | ✅  | 🌐    |     |     |     |     |     |\n| [no-conditional-in-test](docs/rules/no-conditional-in-test.md)                                                           | disallow conditional tests                                                                      |     | 🌐    |     |     |     |     |     |\n| [no-conditional-tests](docs/rules/no-conditional-tests.md)                                                               | disallow conditional tests                                                                      |     | 🌐    |     |     |     |     |     |\n| [no-disabled-tests](docs/rules/no-disabled-tests.md)                                                                     | disallow disabled tests                                                                         |     | 🌐 ✅ |     |     |     |     |     |\n| [no-done-callback](docs/rules/no-done-callback.md)                                                                       | disallow using a callback in asynchronous tests and hooks                                       |     |       |     |     | 💡  |     | ❌  |\n| [no-duplicate-hooks](docs/rules/no-duplicate-hooks.md)                                                                   | disallow duplicate hooks and teardown hooks                                                     |     | 🌐    |     |     |     |     |     |\n| [no-focused-tests](docs/rules/no-focused-tests.md)                                                                       | disallow focused tests                                                                          | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [no-hooks](docs/rules/no-hooks.md)                                                                                       | disallow setup and teardown hooks                                                               |     | 🌐    |     |     |     |     |     |\n| [no-identical-title](docs/rules/no-identical-title.md)                                                                   | disallow identical titles                                                                       | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [no-import-node-test](docs/rules/no-import-node-test.md)                                                                 | disallow importing `node:test`                                                                  | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [no-importing-vitest-globals](docs/rules/no-importing-vitest-globals.md)                                                 | disallow importing Vitest globals                                                               |     |       | 🌐  | 🔧  |     |     |     |\n| [no-interpolation-in-snapshots](docs/rules/no-interpolation-in-snapshots.md)                                             | disallow string interpolation in snapshots                                                      | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [no-large-snapshots](docs/rules/no-large-snapshots.md)                                                                   | disallow large snapshots                                                                        |     | 🌐    |     |     |     |     |     |\n| [no-mocks-import](docs/rules/no-mocks-import.md)                                                                         | disallow importing from **mocks** directory                                                     | ✅  | 🌐    |     |     |     |     |     |\n| [no-restricted-matchers](docs/rules/no-restricted-matchers.md)                                                           | disallow the use of certain matchers                                                            |     | 🌐    |     |     |     |     |     |\n| [no-restricted-vi-methods](docs/rules/no-restricted-vi-methods.md)                                                       | disallow specific `vi.` methods                                                                 |     | 🌐    |     |     |     |     |     |\n| [no-standalone-expect](docs/rules/no-standalone-expect.md)                                                               | disallow using `expect` outside of `it` or `test` blocks                                        | ✅  | 🌐    |     |     |     |     |     |\n| [no-test-prefixes](docs/rules/no-test-prefixes.md)                                                                       | disallow using the `f` and `x` prefixes in favour of `.only` and `.skip`                        |     | 🌐    |     | 🔧  |     |     |     |\n| [no-test-return-statement](docs/rules/no-test-return-statement.md)                                                       | disallow return statements in tests                                                             |     | 🌐    |     |     |     |     |     |\n| [no-unneeded-async-expect-function](docs/rules/no-unneeded-async-expect-function.md)                                     | Disallow unnecessary async function wrapper for expected promises                               | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-after-all-blocks](docs/rules/padding-around-after-all-blocks.md)                                         | Enforce padding around `afterAll` blocks                                                        |     | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-after-each-blocks](docs/rules/padding-around-after-each-blocks.md)                                       | Enforce padding around `afterEach` blocks                                                       |     | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-all](docs/rules/padding-around-all.md)                                                                   | Enforce padding around vitest functions                                                         |     | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-before-all-blocks](docs/rules/padding-around-before-all-blocks.md)                                       | Enforce padding around `beforeAll` blocks                                                       |     | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-before-each-blocks](docs/rules/padding-around-before-each-blocks.md)                                     | Enforce padding around `beforeEach` blocks                                                      |     | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-describe-blocks](docs/rules/padding-around-describe-blocks.md)                                           | Enforce padding around `describe` blocks                                                        |     | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-expect-groups](docs/rules/padding-around-expect-groups.md)                                               | Enforce padding around `expect` groups                                                          |     | 🌐    |     | 🔧  |     |     |     |\n| [padding-around-test-blocks](docs/rules/padding-around-test-blocks.md)                                                   | Enforce padding around `test` blocks                                                            |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-called-exactly-once-with](docs/rules/prefer-called-exactly-once-with.md)                                         | Prefer `toHaveBeenCalledExactlyOnceWith` over `toHaveBeenCalledOnce` and `toHaveBeenCalledWith` | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [prefer-called-once](docs/rules/prefer-called-once.md)                                                                   | enforce using `toBeCalledOnce()` or `toHaveBeenCalledOnce()`                                    |     |       | 🌐  | 🔧  |     |     |     |\n| [prefer-called-times](docs/rules/prefer-called-times.md)                                                                 | enforce using `toBeCalledTimes(1)` or `toHaveBeenCalledTimes(1)`                                |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-called-with](docs/rules/prefer-called-with.md)                                                                   | enforce using `toBeCalledWith()` or `toHaveBeenCalledWith()`                                    |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-comparison-matcher](docs/rules/prefer-comparison-matcher.md)                                                     | enforce using the built-in comparison matchers                                                  |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-describe-function-title](docs/rules/prefer-describe-function-title.md)                                           | enforce using a function as a describe title over an equivalent string                          |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-each](docs/rules/prefer-each.md)                                                                                 | enforce using `each` rather than manual loops                                                   |     | 🌐    |     |     |     |     |     |\n| [prefer-equality-matcher](docs/rules/prefer-equality-matcher.md)                                                         | enforce using the built-in equality matchers                                                    |     | 🌐    |     |     | 💡  |     |     |\n| [prefer-expect-assertions](docs/rules/prefer-expect-assertions.md)                                                       | enforce using expect assertions instead of callbacks                                            |     | 🌐    |     |     | 💡  |     |     |\n| [prefer-expect-resolves](docs/rules/prefer-expect-resolves.md)                                                           | enforce using `expect().resolves` over `expect(await ...)` syntax                               |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-expect-type-of](docs/rules/prefer-expect-type-of.md)                                                             | enforce using `expectTypeOf` instead of `expect(typeof ...)`                                    |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-hooks-in-order](docs/rules/prefer-hooks-in-order.md)                                                             | enforce having hooks in consistent order                                                        |     | 🌐    |     |     |     |     |     |\n| [prefer-hooks-on-top](docs/rules/prefer-hooks-on-top.md)                                                                 | enforce having hooks before any test cases                                                      |     | 🌐    |     |     |     |     |     |\n| [prefer-import-in-mock](docs/rules/prefer-import-in-mock.md)                                                             | prefer dynamic import in mock                                                                   |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-importing-vitest-globals](docs/rules/prefer-importing-vitest-globals.md)                                         | enforce importing Vitest globals                                                                |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-lowercase-title](docs/rules/prefer-lowercase-title.md)                                                           | enforce lowercase titles                                                                        |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-mock-promise-shorthand](docs/rules/prefer-mock-promise-shorthand.md)                                             | enforce mock resolved/rejected shorthands for promises                                          |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-mock-return-shorthand](docs/rules/prefer-mock-return-shorthand.md)                                               | Prefer mock return shorthands                                                                   |     |       |     | 🔧  |     |     |     |\n| [prefer-snapshot-hint](docs/rules/prefer-snapshot-hint.md)                                                               | enforce including a hint with external snapshots                                                |     | 🌐    |     |     |     |     |     |\n| [prefer-spy-on](docs/rules/prefer-spy-on.md)                                                                             | enforce using `vi.spyOn`                                                                        |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-strict-boolean-matchers](docs/rules/prefer-strict-boolean-matchers.md)                                           | enforce using `toBe(true)` and `toBe(false)` over matchers that coerce types to boolean         |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-strict-equal](docs/rules/prefer-strict-equal.md)                                                                 | enforce strict equal over equal                                                                 |     | 🌐    |     |     | 💡  |     |     |\n| [prefer-to-be](docs/rules/prefer-to-be.md)                                                                               | enforce using toBe()                                                                            |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-to-be-falsy](docs/rules/prefer-to-be-falsy.md)                                                                   | enforce using toBeFalsy()                                                                       |     |       | 🌐  | 🔧  |     |     |     |\n| [prefer-to-be-object](docs/rules/prefer-to-be-object.md)                                                                 | enforce using toBeObject()                                                                      |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-to-be-truthy](docs/rules/prefer-to-be-truthy.md)                                                                 | enforce using `toBeTruthy`                                                                      |     |       | 🌐  | 🔧  |     |     |     |\n| [prefer-to-contain](docs/rules/prefer-to-contain.md)                                                                     | enforce using toContain()                                                                       |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-to-have-been-called-times](docs/rules/prefer-to-have-been-called-times.md)                                       | Suggest using `toHaveBeenCalledTimes()`                                                         |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-to-have-length](docs/rules/prefer-to-have-length.md)                                                             | enforce using toHaveLength()                                                                    |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-todo](docs/rules/prefer-todo.md)                                                                                 | enforce using `test.todo`                                                                       |     | 🌐    |     | 🔧  |     |     |     |\n| [prefer-vi-mocked](docs/rules/prefer-vi-mocked.md)                                                                       | require `vi.mocked()` over `fn as Mock`                                                         |     | 🌐    |     | 🔧  |     | 💭  |     |\n| [require-awaited-expect-poll](docs/rules/require-awaited-expect-poll.md)                                                 | ensure that every `expect.poll` call is awaited                                                 |     | 🌐    |     |     |     |     |     |\n| [require-hook](docs/rules/require-hook.md)                                                                               | require setup and teardown to be within a hook                                                  |     | 🌐    |     |     |     |     |     |\n| [require-local-test-context-for-concurrent-snapshots](docs/rules/require-local-test-context-for-concurrent-snapshots.md) | require local Test Context for concurrent snapshot tests                                        | ✅  | 🌐    |     |     |     |     |     |\n| [require-mock-type-parameters](docs/rules/require-mock-type-parameters.md)                                               | enforce using type parameters with vitest mock functions                                        |     | 🌐    |     | 🔧  |     |     |     |\n| [require-test-timeout](docs/rules/require-test-timeout.md)                                                               | require tests to declare a timeout                                                              |     |       | 🌐  |     |     |     |     |\n| [require-to-throw-message](docs/rules/require-to-throw-message.md)                                                       | require toThrow() to be called with an error message                                            |     | 🌐    |     |     |     |     |     |\n| [require-top-level-describe](docs/rules/require-top-level-describe.md)                                                   | enforce that all tests are in a top-level describe                                              |     | 🌐    |     |     |     |     |     |\n| [unbound-method](docs/rules/unbound-method.md)                                                                           | enforce unbound methods are called with their expected scope                                    |     | 🌐    |     |     |     | 💭  |     |\n| [valid-describe-callback](docs/rules/valid-describe-callback.md)                                                         | enforce valid describe callback                                                                 | ✅  | 🌐    |     |     |     |     |     |\n| [valid-expect](docs/rules/valid-expect.md)                                                                               | enforce valid `expect()` usage                                                                  | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [valid-expect-in-promise](docs/rules/valid-expect-in-promise.md)                                                         | require promises that have expectations in their chain to be valid                              | ✅  | 🌐    |     |     |     |     |     |\n| [valid-title](docs/rules/valid-title.md)                                                                                 | enforce valid titles                                                                            | ✅  | 🌐    |     | 🔧  |     |     |     |\n| [warn-todo](docs/rules/warn-todo.md)                                                                                     | disallow `.todo` usage                                                                          |     |       |     |     |     |     |     |\n\n\u003c!-- end auto-generated rules list --\u003e\n\n#### Credits\n\n- [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest):\n  most of the rules in this plugin are essentially ports of Jest plugin rules with minor modifications\n\n### Licence\n\n[MIT](https://github.com/veritem/eslint-plugin-vitest/blob/main/LICENSE) Licence \u0026copy; 2022 - present by [veritem](https://github.com/veritem) and contributors\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitest-dev%2Feslint-plugin-vitest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitest-dev%2Feslint-plugin-vitest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitest-dev%2Feslint-plugin-vitest/lists"}