diff --git a/packages/docs/scripts/generate-plugin-docs.ts b/packages/docs/scripts/generate-plugin-docs.ts
index 25a680ee3..9b2d40245 100644
--- a/packages/docs/scripts/generate-plugin-docs.ts
+++ b/packages/docs/scripts/generate-plugin-docs.ts
@@ -93,7 +93,21 @@ for await (const dir of directories) {
]
: [];
- const argsText = args ? parseFragment('## Shell commands\n\nThis plugin enables argument parsing') : [];
+ const argsText = args
+ ? [
+ ...parseFragment(
+ `## Shell commands\n\nThis plugin adds argument parsing for the ${args.binaries ? args.binaries.join(' and ') : pluginName}
binary. Configuration:`
+ ),
+ ...parseFragment(
+ `\`\`\`\n${Object.entries(args)
+ .filter(([key]) => key !== 'binaries')
+ .map(
+ ([key, value]) => `${key}: ${typeof value === 'function' ? value.toString() : JSON.stringify(value)}`
+ )
+ .join('\n')}\n\`\`\``
+ ),
+ ]
+ : [];
const tree = u('root', [
frontmatter,
diff --git a/packages/docs/src/content/docs/blog/two-years.mdx b/packages/docs/src/content/docs/blog/two-years.mdx
index 6685d4831..719d3f7ee 100644
--- a/packages/docs/src/content/docs/blog/two-years.mdx
+++ b/packages/docs/src/content/docs/blog/two-years.mdx
@@ -96,7 +96,7 @@ And eh.. gotta take my chances: how about [joining this awesome club][6]?
## Acknowledgements
-Thanks to Joshua Goldberg for [emoji-blast](https://www.emojiblast.dev)! 🎉
+Thanks to Joshua Goldberg for [emoji-blast][7]! 🎉
[1]: https://www.npmjs.com/package/exportman/v/0.0.1
[2]: /cow-with-orange-scissors-van-gogh-style.webp
@@ -104,3 +104,4 @@ Thanks to Joshua Goldberg for [emoji-blast](https://www.emojiblast.dev)! 🎉
[4]: ../features/auto-fix.md
[5]: https://github.com/unjs/jiti
[6]: /sponsors
+[7]: https://www.emojiblast.dev
diff --git a/packages/docs/src/content/docs/explanations/plugins.md b/packages/docs/src/content/docs/explanations/plugins.md
index 29b3843d1..54d6774bc 100644
--- a/packages/docs/src/content/docs/explanations/plugins.md
+++ b/packages/docs/src/content/docs/explanations/plugins.md
@@ -7,27 +7,32 @@ sidebar:
This page describes why Knip uses plugins and the difference between `config`
and `entry` files.
-Knip has an extensive and growing [list of built-in plugins][1]. Currently it's
-not possible to add custom plugins, but feel free to [request a plugin][2] or
-even [write a plugin][3] so others can benefit too.
+Knip has an extensive and growing [list of built-in plugins][1]. Feel free to
+[request a plugin][2] or even [write a plugin][3] so others can benefit too!
-## Enabled
+## What does a plugin do?
Plugins are enabled if the related package is listed in the list of dependencies
in `package.json`. For instance, if `astro` is listed in `dependencies` or
-`devDependencies`, then the Astro plugin is enabled.
+`devDependencies`, then the Astro plugin is enabled. And this means that this
+plugin will:
+
+- Handle [configuration files][4] like `astro.config.mjs`
+- Add [entry files][5] such as `src/pages/**/*.astro`
## Configuration files
-Knip uses [entry files][4] as starting points to scan your source code and
+Knip uses [entry files][6] as starting points to scan your source code and
resolve other internal files and external dependencies. The dependency graph can
be statically resolved through the `require` and `import` statements in those
source files. However, configuration files reference external dependencies in
various ways. Knip uses a plugin for each tool to parse configuration files and
find those dependencies.
-In this example we look at [Knip's ESLint plugin][5]. The default `config` file
-patterns include `.eslintrc.json`. Here's a minimal example:
+### Example: ESLint
+
+In the first example we look at [the ESLint plugin][7]. The default `config`
+file patterns include `.eslintrc.json`. Here's a minimal example:
```json title=".eslintrc.json"
{
@@ -39,12 +44,44 @@ patterns include `.eslintrc.json`. Here's a minimal example:
Configuration files like this don't `import` or `require` anything, but they do
require the referenced dependencies to be installed.
-In this case, the plugin will return the `eslint-config-airbnb`,
-`eslint-config-prettier` and `@typescript-eslint/eslint-plugin` dependencies, so
-Knip knows they should be listed in `package.json`.
+In this case, the plugin will return three dependencies:
+
+- `eslint-config-airbnb`
+- `eslint-config-prettier`
+- `@typescript-eslint/eslint-plugin`
+
+Knip will then look for missing dependencies in `package.json` and report those
+as unlisted. And vice versa, if there are any ESLint plugins listed in
+`package.json`, but unused, those will be reported as well.
+
+### Example: Vitest
+
+The second example uses [the Vitest plugin][7]. Here's a minimal example of a
+Vitest configuration file:
+
+```ts title="vitest.config.ts"
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ test: {
+ coverage: {
+ provider: 'istanbul',
+ },
+ environment: 'happy-dom',
+ },
+});
+```
+
+The Vitest plugin reads this configuration and return two dependencies:
+
+- `@vitest/coverage-istanbul`
+- `vitest-environment-happy-dom`
+
+Knip will look for missing and unused dependencies in `package.json` and report
+accordingly.
Some tools allow configuration to be stored in `package.json`, that's why some
-of the relevant plugins contain `package.json` in the list of `config` files.
+plugins contain `package.json` in the list of `config` files.
:::tip[Summary]
@@ -135,7 +172,8 @@ The Angular plugin parses the Angular configuration file. Here's a fragment:
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/knip-angular-example",
- "main": "src/main.ts"
+ "main": "src/main.ts",
+ "tsConfig": "tsconfig.app.json"
}
}
}
@@ -147,6 +185,9 @@ The Angular plugin parses the Angular configuration file. Here's a fragment:
This will result in `src/main.ts` being added as an entry file (and
`@angular-devkit/build-angular` as a referenced dependency).
+Additionally, the Angular plugin returns `tsconfig.app.json` as a configuration
+file for the TypeScript plugin.
+
### GitHub Actions
This plugin parses workflow YAML files. This fragment contains three `run`
@@ -160,12 +201,17 @@ jobs:
- run: npm install
- run: node scripts/build.js
- run: node --loader tsx scripts/deploy.ts
+ - run: playwright test -c playwright.web.config.ts
+ working-dir: e2e
```
From these scripts, the `scripts/build.js` and `scripts/deploy.ts` files will be
added as entry files by the GitHub Actions plugin.
-Read more about this in [Script Parser][6].
+Additionally, the file `e2e/playwright.web.config.ts` is detected and will be
+handed over as a Playwright configuration file.
+
+Read more about this in [Script Parser][8].
### webpack
@@ -251,6 +297,8 @@ Plugins are configured with two distinct types of files:
[1]: ../reference/plugins.md
[2]: https://github.com/webpro-nl/knip/issues/483
[3]: ../guides/writing-a-plugin.md
-[4]: ./entry-files.md
-[5]: ../reference/plugins/eslint.md
-[6]: ../features/script-parser.md
+[4]: #configuration-files
+[5]: #entry-files
+[6]: ./entry-files.md
+[7]: ../reference/plugins/eslint.md
+[8]: ../features/script-parser.md
diff --git a/packages/docs/src/content/docs/explanations/why-use-knip.md b/packages/docs/src/content/docs/explanations/why-use-knip.md
index ccae58ac8..3143c754f 100644
--- a/packages/docs/src/content/docs/explanations/why-use-knip.md
+++ b/packages/docs/src/content/docs/explanations/why-use-knip.md
@@ -13,10 +13,14 @@ in complexity and size, automated and comprehensive tooling becomes critical.
Knip finds and fixes unused files, exports and dependencies.
Deep analysis from [fine-grained entry points][1] based on the actual frameworks
-and tooling in your [(mono)repo][2] with [custom module resolution][3],
-[configuration file parsers][4], [compilers][5], a [shell script parser][6] and
-additional heuristics to maximize coverage for comprehensive and actionable
-results.
+and tooling in your [(mono)repo][2] for accurate and actionable results.
+Advanced features for maximum coverage:
+
+- [Custom module resolution][3]
+- [Configuration file parsers][4]
+- [Advanced shell script parser][5]
+- [Built-in and custom compilers][6]
+- [Auto-fix many issues][7]
:::
@@ -38,9 +42,9 @@ code":
the same for files, dependencies and exports that you forgot to delete.
- Keeping dead code around has a negative value on readability, as it can be
misleading and distracting. Even if it serves no purpose it will need to be
- maintained (source: [Safe dead code removal → YAGNI][7]).
-- Also see [Why are unused dependencies a problem?][8] and [Why are unused
- exports a problem?][9].
+ maintained (source: [Safe dead code removal → YAGNI][8]).
+- Also see [Why are unused dependencies a problem?][9] and [Why are unused
+ exports a problem?][10].
## Automation
@@ -53,7 +57,7 @@ times better and faster than trying to do it manually.
:::tip
-Knip not only finds clutter, it can also [clean it][10]!
+Knip not only finds clutter, it can also [clean it][7]!
Use Knip next to a linter like ESLint or Biome: after removing unused variables
inside files, Knip might find even more unused code. Rinse and repeat!
@@ -116,10 +120,10 @@ so you can get rid of false positives? A variety of reasons:
[2]: ../features/monorepos-and-workspaces.md
[3]: ../reference/faq.md#why-doesnt-knip-use-an-existing-module-resolver
[4]: ./plugins.md#configuration-files
-[5]: ../features/compilers.md
-[6]: ../features/script-parser.md
-[7]: https://jfmengels.net/safe-dead-code-removal/#yagni-you-arent-gonna-need-it
-[8]: ../typescript/unused-dependencies.md#why-are-unused-dependencies-a-problem
-[9]: ../typescript/unused-exports.md#why-are-unused-exports-a-problem
-[10]: ../features/auto-fix.mdx
+[5]: ../features/script-parser.md
+[6]: ../features/compilers.md
+[7]: ../features/auto-fix.mdx
+[8]: https://jfmengels.net/safe-dead-code-removal/#yagni-you-arent-gonna-need-it
+[9]: ../typescript/unused-dependencies.md#why-are-unused-dependencies-a-problem
+[10]: ../typescript/unused-exports.md#why-are-unused-exports-a-problem
[11]: ../reference/jsdoc-tsdoc-tags.md
diff --git a/packages/docs/src/content/docs/features/auto-fix.mdx b/packages/docs/src/content/docs/features/auto-fix.mdx
index 950171db9..3e4672b09 100644
--- a/packages/docs/src/content/docs/features/auto-fix.mdx
+++ b/packages/docs/src/content/docs/features/auto-fix.mdx
@@ -210,7 +210,6 @@ Also across any chain of re-exports:
```
-
### Export assignments
diff --git a/packages/docs/src/content/docs/features/script-parser.md b/packages/docs/src/content/docs/features/script-parser.md
index 9f6e3b0d4..8801adf4b 100644
--- a/packages/docs/src/content/docs/features/script-parser.md
+++ b/packages/docs/src/content/docs/features/script-parser.md
@@ -2,14 +2,14 @@
title: Script Parser
---
-Knip parses shell commands and scripts to find additional dependencies and entry
-files in various places:
+Knip parses shell commands and scripts to find additional dependencies, entry
+files and configuration files in various places:
- In [`package.json`][1]
- In specific [`config` files][2]
- In [source code][3]
-Shell scripts can be read and statically analyzed, but not executed.
+Shell scripts can be read and statically analyzed, but they're not executed.
## package.json
@@ -56,14 +56,17 @@ or parsed by Knip.
### Scripts parsing
-When parsing the `scripts` entries of `package.json`, `knip` also detect
-dependencies of `-r`, `--require`, `--loader` or `--import` arguments. Example:
+When parsing the `scripts` entries of `package.json`, Knip detects dependencies
+of `-r`, `--require`, `--loader` or `--import` arguments. It also recognizes
+configuration files. Example:
```json
{
"name": "my-lib",
"scripts": {
- "start": "node --import tsx/esm run.ts"
+ "start": "node --import tsx/esm run.ts",
+ "bundle": "tsup -c tsup.lib.config.ts",
+ "type-check": "tsc -p tsconfig.app.json"
}
}
```
@@ -71,6 +74,11 @@ dependencies of `-r`, `--require`, `--loader` or `--import` arguments. Example:
This will have `tsx` marked as a referenced dependency, and adds `run.ts` as an
entry file.
+The following files are also detected as configuration files:
+
+- `tsup.lib.config.ts` - to be handled by the tsup plugin
+- `tsconfig.app.json` - to be handled by the TypeScript plugin
+
## Plugins
Some plugins also use the script parser to extract entry files and dependencies
diff --git a/packages/docs/src/content/docs/index.mdx b/packages/docs/src/content/docs/index.mdx
index 6f708bdce..36ddbb2aa 100644
--- a/packages/docs/src/content/docs/index.mdx
+++ b/packages/docs/src/content/docs/index.mdx
@@ -14,10 +14,6 @@ hero:
link: ./overview/getting-started
icon: right-arrow
variant: primary
- - text: 'NEW! Two Years'
- link: /blog/two-years
- icon: star
- variant: secondary
- text: View on GitHub
link: https://github.com/webpro-nl/knip
icon: external
@@ -44,9 +40,14 @@ import Contributors from '../../components/Contributors.astro';
Deep analysis from fine-grained entry points based on the actual frameworks
- and tooling in your (mono)repo with custom module resolution, configuration
- file parsers, compilers, a shell script parser and additional heuristics to
- maximize coverage for comprehensive and actionable results.
+ and tooling in your (mono)repo for accurate and actionable results.
+ Advanced features for maximum coverage:
+
+ * Custom module resolution
+ * Configuration file parsers
+ * Advanced shell script parser
+ * Built-in and custom ompilers
+ * Auto-fix many issues
@@ -116,19 +117,19 @@ Special thanks to the wonderful people who have contributed to this project:
Most recent article first:
-- Anthony Pena:
- [Knip: l'ultime outil pour faire le ménage dans vos projets!](https://k49.fr.nf/knip-l-ultime-outil-pour-faire-le-menage-dans-vos-projets/)
+- [มาทำความสะอาด Project โค้ดของเราด้วย Knip กัน][6] (2024-10-22/Thai)
+- Anthony Pena: [Knip: l'ultime outil pour faire le ménage dans vos projets!][7]
(2024-10-08/French)
-- Taro: [Introducing Knip, a tool for removing unnecessary code from
- TypeScript/JavaScript][10] (2024-07-25/Japanese)
-- Maddy Miller: [Using Knip to find dead code in a high-traffic git repo][8]
+- Taro: [TypeScript/JavaScriptの不要なコードを削除するツール「Knip」の紹介][8]
+ (2024-07-25/Japanese)
+- Maddy Miller: [Using Knip to find dead code in a high-traffic git repo][9]
(2023-09-17)
-- Josh Goldberg: [Speeding Up Centered Part 4: Unused Code Bloat][9]
+- Josh Goldberg: [Speeding Up Centered Part 4: Unused Code Bloat][10]
(2023-08-21)
- Smashing Magazine: [Knip: An Automated Tool For Finding Unused Files, Exports,
- And Dependencies][6] (2023-08-14)
+ And Dependencies][11] (2023-08-14)
- Effective TypeScript: [Recommendation Update: ✂️ Use knip to detect dead code
- and types][7] (2023-07-29)
+ and types][12] (2023-07-29)
## 🧡 Testimonials
@@ -136,8 +137,8 @@ Most recent article first:
## Read More
-- [Unused dependencies][11]
-- [Unused exports][12]
+- [Unused dependencies][13]
+- [Unused exports][14]
[1]: ./explanations/why-use-knip.md
[2]: ./sponsors
@@ -145,11 +146,15 @@ Most recent article first:
[4]: ./guides/troubleshooting.md
[5]: https://www.jamesshopland.com
[6]:
- https://www.smashingmagazine.com/2023/08/knip-automated-tool-find-unused-files-exports-dependencies/
-[7]: https://effectivetypescript.com/2023/07/29/knip/
-[8]: https://madelinemiller.dev/blog/knip-dead-code/
-[9]:
+ https://engineering.thinknet.co.th/%E0%B8%A1%E0%B8%B2%E0%B8%97%E0%B8%B3%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%B0%E0%B8%AD%E0%B8%B2%E0%B8%94-project-%E0%B9%82%E0%B8%84%E0%B9%89%E0%B8%94%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%A3%E0%B8%B2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-knip-%E0%B8%81%E0%B8%B1%E0%B8%99-20dbd65f6b58
+[7]:
+ https://k49.fr.nf/knip-l-ultime-outil-pour-faire-le-menage-dans-vos-projets/
+[8]: https://tech.basemachina.jp/entry/introduction-knip
+[9]: https://madelinemiller.dev/blog/knip-dead-code/
+[10]:
https://www.joshuakgoldberg.com/blog/speeding-up-centered-part-4-unused-code-bloat/
-[10]: https://tech.basemachina.jp/entry/introduction-knip
-[11]: ./typescript/unused-dependencies.md
-[12]: ./typescript/unused-exports.md
+[11]:
+ https://www.smashingmagazine.com/2023/08/knip-automated-tool-find-unused-files-exports-dependencies/
+[12]: https://effectivetypescript.com/2023/07/29/knip/
+[13]: ./typescript/unused-dependencies.md
+[14]: ./typescript/unused-exports.md
diff --git a/packages/docs/src/content/docs/reference/known-issues.md b/packages/docs/src/content/docs/reference/known-issues.md
index 95e943fe5..496fe0017 100644
--- a/packages/docs/src/content/docs/reference/known-issues.md
+++ b/packages/docs/src/content/docs/reference/known-issues.md
@@ -40,14 +40,14 @@ the target values are not arrays).
Potential workarounds:
- Rewrite the import in the configuration file to a relative import.
-- Use Bun with [knip-bun][6].
-- [Disable the plugin][7] (not recommended, try the other options first).
+- Use Bun with [knip-bun][5].
+- [Disable the plugin][6] (not recommended, try the other options first).
## False positives with external libs
Knip may report false positives when exports are consumed by external libraries.
-Please see [external libs][12].
+Please see [external libs][7].
## Definitely Typed packages in `dependencies`
@@ -72,14 +72,10 @@ similar to how standard ES Modules work.
## `unplugin-icons` imports
-[unplugin-icons](https://github.com/antfu/unplugin-icons) uses virtual imports
-to import icons from icon sets as components. Knip cannot resolve these imports
-and will report them as unused.
-
-To fix this, you can use the [`paths` configuration option][13] to tell Knip
-where to find the icon types.
-
-For example:
+[unplugin-icons][8] uses aliased imports to import icons from icon sets as
+components. Knip cannot resolve these imports and will report them as unused.
+Use the [`paths` configuration option][9] to tell Knip where to find the icon
+types. For example:
```json title="knip.json"
{
@@ -89,20 +85,16 @@ For example:
}
```
-where `[framework]` is the name of the framework you're using (see [this
-list][14] for available types).
+Where `[framework]` is the name of the framework you're using (see [available
+types][10]).
[1]: #exceptions-from-config-files
[2]: #false-positives-with-external-libs
[3]: #definitely-typed-packages-in-dependencies
[4]: #extensionless-imports
-[5]: https://github.com/unjs/jiti
-[6]: ./cli.md#knip-bun
-[7]: ./configuration.md#plugins
-[8]: https://github.com/unjs/jiti/issues/72
-[9]: https://github.com/unjs/jiti/issues/194
-[10]: https://github.com/unjs/jiti/issues/174
-[11]: https://github.com/webpro-nl/knip/issues/565
-[12]: ../guides/handling-issues.mdx#external-libraries
-[13]: ./configuration.md#paths
-[14]: https://github.com/unplugin/unplugin-icons/tree/main/types
+[5]: ./cli.md#knip-bun
+[6]: ./configuration.md#plugins
+[7]: ../guides/handling-issues.mdx#external-libraries
+[8]: https://github.com/antfu/unplugin-icons
+[9]: ./configuration.md#paths
+[10]: https://github.com/unplugin/unplugin-icons/tree/main/types
diff --git a/packages/docs/src/content/docs/reference/plugins.md b/packages/docs/src/content/docs/reference/plugins.md
index 986b22bf3..5cb9d2e8e 100644
--- a/packages/docs/src/content/docs/reference/plugins.md
+++ b/packages/docs/src/content/docs/reference/plugins.md
@@ -1,5 +1,5 @@
---
-title: Plugins (76)
+title: Plugins (84)
tableOfContents: false
---
@@ -9,78 +9,86 @@ tableOfContents: false
- [Astro][2]
- [Ava][3]
- [Babel][4]
-- [Capacitor][5]
-- [Changesets][6]
-- [Commitizen][7]
-- [commitlint][8]
-- [CSpell][9]
-- [Cucumber][10]
-- [Cypress][11]
-- [Drizzle][12]
-- [Eleventy][13]
-- [ESLint][14]
-- [Gatsby][15]
-- [GitHub Actions][16]
-- [GraphQL Codegen][17]
-- [husky][18]
-- [Jest][19]
-- [Ladle][20]
-- [Lefthook][21]
-- [lint-staged][22]
-- [LintHTML][23]
-- [lockfile-lint][24]
-- [Lost Pixel][25]
-- [markdownlint][26]
-- [Mocha][27]
-- [moonrepo][28]
-- [Mock Service Worker][29]
-- [Nest][30]
-- [Netlify][31]
-- [Next.js][32]
-- [Node.js Test Runner][33]
-- [npm-package-json-lint][34]
-- [Nuxt][35]
-- [Nx][36]
-- [nyc][37]
-- [oclif][38]
-- [Playwright][39]
-- [Playwright for components][40]
-- [PostCSS][41]
-- [Preconstruct][42]
-- [Prettier][43]
-- [React Cosmos][44]
-- [Release It!][45]
-- [Remark][46]
-- [Remix][47]
-- [Rollup][48]
-- [Rsbuild][49]
-- [Rspack][50]
-- [Semantic Release][51]
-- [Sentry][52]
-- [simple-git-hooks][53]
-- [size-limit][54]
-- [Storybook][55]
-- [Stryker][56]
-- [Stylelint][57]
-- [Svelte][58]
-- [Syncpack][59]
-- [Tailwind][60]
-- [tsup][61]
-- [TypeDoc][62]
-- [TypeScript][63]
-- [unbuild][64]
-- [UnoCSS][65]
-- [Vercel OG][66]
-- [Vike][67]
-- [Vite][68]
-- [Vitest][69]
-- [Vue][70]
-- [WebdriverIO][71]
-- [Webpack][72]
-- [Wireit][73]
-- [Wrangler][74]
-- [xo][75]
-- [yorkie][76]
+- [c8][5]
+- [Capacitor][6]
+- [Changesets][7]
+- [Commitizen][8]
+- [commitlint][9]
+- [CSpell][10]
+- [Cucumber][11]
+- [Cypress][12]
+- [dotenv][13]
+- [Drizzle][14]
+- [Eleventy][15]
+- [ESLint][16]
+- [Gatsby][17]
+- [GitHub Actions][18]
+- [GraphQL Codegen][19]
+- [husky][20]
+- [Jest][21]
+- [Ladle][22]
+- [Lefthook][23]
+- [lint-staged][24]
+- [LintHTML][25]
+- [lockfile-lint][26]
+- [Lost Pixel][27]
+- [markdownlint][28]
+- [Mocha][29]
+- [moonrepo][30]
+- [Mock Service Worker][31]
+- [Nest][32]
+- [Netlify][33]
+- [Next.js][34]
+- [Node.js][35]
+- [Node.js Test Runner][36]
+- [nodemon][37]
+- [npm-package-json-lint][38]
+- [Nuxt][39]
+- [Nx][40]
+- [nyc][41]
+- [oclif][42]
+- [Playwright][43]
+- [Playwright for components][44]
+- [playwright-test][45]
+- [PostCSS][46]
+- [Preconstruct][47]
+- [Prettier][48]
+- [React Cosmos][49]
+- [Release It!][50]
+- [Remark][51]
+- [Remix][52]
+- [Rollup][53]
+- [Rsbuild][54]
+- [Rspack][55]
+- [Semantic Release][56]
+- [Sentry][57]
+- [simple-git-hooks][58]
+- [size-limit][59]
+- [Storybook][60]
+- [Stryker][61]
+- [Stylelint][62]
+- [Svelte][63]
+- [Syncpack][64]
+- [Tailwind][65]
+- [Travis CI][66]
+- [ts-node][67]
+- [tsup][68]
+- [tsx][69]
+- [TypeDoc][70]
+- [TypeScript][71]
+- [unbuild][72]
+- [UnoCSS][73]
+- [Vercel OG][74]
+- [Vike][75]
+- [Vite][76]
+- [Vitest][77]
+- [Vue][78]
+- [WebdriverIO][79]
+- [Webpack][80]
+- [Wireit][81]
+- [Wrangler][82]
+- [xo][83]
+- [yorkie][84]
:::
@@ -88,75 +96,83 @@ tableOfContents: false
[2]: /reference/plugins/astro 'Astro'
[3]: /reference/plugins/ava 'Ava'
[4]: /reference/plugins/babel 'Babel'
-[5]: /reference/plugins/capacitor 'Capacitor'
-[6]: /reference/plugins/changesets 'Changesets'
-[7]: /reference/plugins/commitizen 'Commitizen'
-[8]: /reference/plugins/commitlint 'commitlint'
-[9]: /reference/plugins/cspell 'CSpell'
-[10]: /reference/plugins/cucumber 'Cucumber'
-[11]: /reference/plugins/cypress 'Cypress'
-[12]: /reference/plugins/drizzle 'Drizzle'
-[13]: /reference/plugins/eleventy 'Eleventy'
-[14]: /reference/plugins/eslint 'ESLint'
-[15]: /reference/plugins/gatsby 'Gatsby'
-[16]: /reference/plugins/github-actions 'GitHub Actions'
-[17]: /reference/plugins/graphql-codegen 'GraphQL Codegen'
-[18]: /reference/plugins/husky 'husky'
-[19]: /reference/plugins/jest 'Jest'
-[20]: /reference/plugins/ladle 'Ladle'
-[21]: /reference/plugins/lefthook 'Lefthook'
-[22]: /reference/plugins/lint-staged 'lint-staged'
-[23]: /reference/plugins/linthtml 'LintHTML'
-[24]: /reference/plugins/lockfile-lint 'lockfile-lint'
-[25]: /reference/plugins/lost-pixel 'Lost Pixel'
-[26]: /reference/plugins/markdownlint 'markdownlint'
-[27]: /reference/plugins/mocha 'Mocha'
-[28]: /reference/plugins/moonrepo 'moonrepo'
-[29]: /reference/plugins/msw 'Mock Service Worker'
-[30]: /reference/plugins/nest 'Nest'
-[31]: /reference/plugins/netlify 'Netlify'
-[32]: /reference/plugins/next 'Next.js'
-[33]: /reference/plugins/node-test-runner 'Node.js Test Runner'
-[34]: /reference/plugins/npm-package-json-lint 'npm-package-json-lint'
-[35]: /reference/plugins/nuxt 'Nuxt'
-[36]: /reference/plugins/nx 'Nx'
-[37]: /reference/plugins/nyc 'nyc'
-[38]: /reference/plugins/oclif 'oclif'
-[39]: /reference/plugins/playwright 'Playwright'
-[40]: /reference/plugins/playwright-ct 'Playwright for components'
-[41]: /reference/plugins/postcss 'PostCSS'
-[42]: /reference/plugins/preconstruct 'Preconstruct'
-[43]: /reference/plugins/prettier 'Prettier'
-[44]: /reference/plugins/react-cosmos 'React Cosmos'
-[45]: /reference/plugins/release-it 'Release It!'
-[46]: /reference/plugins/remark 'Remark'
-[47]: /reference/plugins/remix 'Remix'
-[48]: /reference/plugins/rollup 'Rollup'
-[49]: /reference/plugins/rsbuild 'Rsbuild'
-[50]: /reference/plugins/rspack 'Rspack'
-[51]: /reference/plugins/semantic-release 'Semantic Release'
-[52]: /reference/plugins/sentry 'Sentry'
-[53]: /reference/plugins/simple-git-hooks 'simple-git-hooks'
-[54]: /reference/plugins/size-limit 'size-limit'
-[55]: /reference/plugins/storybook 'Storybook'
-[56]: /reference/plugins/stryker 'Stryker'
-[57]: /reference/plugins/stylelint 'Stylelint'
-[58]: /reference/plugins/svelte 'Svelte'
-[59]: /reference/plugins/syncpack 'Syncpack'
-[60]: /reference/plugins/tailwind 'Tailwind'
-[61]: /reference/plugins/tsup 'tsup'
-[62]: /reference/plugins/typedoc 'TypeDoc'
-[63]: /reference/plugins/typescript 'TypeScript'
-[64]: /reference/plugins/unbuild 'unbuild'
-[65]: /reference/plugins/unocss 'UnoCSS'
-[66]: /reference/plugins/vercel-og 'Vercel OG'
-[67]: /reference/plugins/vike 'Vike'
-[68]: /reference/plugins/vite 'Vite'
-[69]: /reference/plugins/vitest 'Vitest'
-[70]: /reference/plugins/vue 'Vue'
-[71]: /reference/plugins/webdriver-io 'WebdriverIO'
-[72]: /reference/plugins/webpack 'Webpack'
-[73]: /reference/plugins/wireit 'Wireit'
-[74]: /reference/plugins/wrangler 'Wrangler'
-[75]: /reference/plugins/xo 'xo'
-[76]: /reference/plugins/yorkie 'yorkie'
+[5]: /reference/plugins/c8 'c8'
+[6]: /reference/plugins/capacitor 'Capacitor'
+[7]: /reference/plugins/changesets 'Changesets'
+[8]: /reference/plugins/commitizen 'Commitizen'
+[9]: /reference/plugins/commitlint 'commitlint'
+[10]: /reference/plugins/cspell 'CSpell'
+[11]: /reference/plugins/cucumber 'Cucumber'
+[12]: /reference/plugins/cypress 'Cypress'
+[13]: /reference/plugins/dotenv 'dotenv'
+[14]: /reference/plugins/drizzle 'Drizzle'
+[15]: /reference/plugins/eleventy 'Eleventy'
+[16]: /reference/plugins/eslint 'ESLint'
+[17]: /reference/plugins/gatsby 'Gatsby'
+[18]: /reference/plugins/github-actions 'GitHub Actions'
+[19]: /reference/plugins/graphql-codegen 'GraphQL Codegen'
+[20]: /reference/plugins/husky 'husky'
+[21]: /reference/plugins/jest 'Jest'
+[22]: /reference/plugins/ladle 'Ladle'
+[23]: /reference/plugins/lefthook 'Lefthook'
+[24]: /reference/plugins/lint-staged 'lint-staged'
+[25]: /reference/plugins/linthtml 'LintHTML'
+[26]: /reference/plugins/lockfile-lint 'lockfile-lint'
+[27]: /reference/plugins/lost-pixel 'Lost Pixel'
+[28]: /reference/plugins/markdownlint 'markdownlint'
+[29]: /reference/plugins/mocha 'Mocha'
+[30]: /reference/plugins/moonrepo 'moonrepo'
+[31]: /reference/plugins/msw 'Mock Service Worker'
+[32]: /reference/plugins/nest 'Nest'
+[33]: /reference/plugins/netlify 'Netlify'
+[34]: /reference/plugins/next 'Next.js'
+[35]: /reference/plugins/node 'Node.js'
+[36]: /reference/plugins/node-test-runner 'Node.js Test Runner'
+[37]: /reference/plugins/nodemon 'nodemon'
+[38]: /reference/plugins/npm-package-json-lint 'npm-package-json-lint'
+[39]: /reference/plugins/nuxt 'Nuxt'
+[40]: /reference/plugins/nx 'Nx'
+[41]: /reference/plugins/nyc 'nyc'
+[42]: /reference/plugins/oclif 'oclif'
+[43]: /reference/plugins/playwright 'Playwright'
+[44]: /reference/plugins/playwright-ct 'Playwright for components'
+[45]: /reference/plugins/playwright-test 'playwright-test'
+[46]: /reference/plugins/postcss 'PostCSS'
+[47]: /reference/plugins/preconstruct 'Preconstruct'
+[48]: /reference/plugins/prettier 'Prettier'
+[49]: /reference/plugins/react-cosmos 'React Cosmos'
+[50]: /reference/plugins/release-it 'Release It!'
+[51]: /reference/plugins/remark 'Remark'
+[52]: /reference/plugins/remix 'Remix'
+[53]: /reference/plugins/rollup 'Rollup'
+[54]: /reference/plugins/rsbuild 'Rsbuild'
+[55]: /reference/plugins/rspack 'Rspack'
+[56]: /reference/plugins/semantic-release 'Semantic Release'
+[57]: /reference/plugins/sentry 'Sentry'
+[58]: /reference/plugins/simple-git-hooks 'simple-git-hooks'
+[59]: /reference/plugins/size-limit 'size-limit'
+[60]: /reference/plugins/storybook 'Storybook'
+[61]: /reference/plugins/stryker 'Stryker'
+[62]: /reference/plugins/stylelint 'Stylelint'
+[63]: /reference/plugins/svelte 'Svelte'
+[64]: /reference/plugins/syncpack 'Syncpack'
+[65]: /reference/plugins/tailwind 'Tailwind'
+[66]: /reference/plugins/travis 'Travis CI'
+[67]: /reference/plugins/ts-node 'ts-node'
+[68]: /reference/plugins/tsup 'tsup'
+[69]: /reference/plugins/tsx 'tsx'
+[70]: /reference/plugins/typedoc 'TypeDoc'
+[71]: /reference/plugins/typescript 'TypeScript'
+[72]: /reference/plugins/unbuild 'unbuild'
+[73]: /reference/plugins/unocss 'UnoCSS'
+[74]: /reference/plugins/vercel-og 'Vercel OG'
+[75]: /reference/plugins/vike 'Vike'
+[76]: /reference/plugins/vite 'Vite'
+[77]: /reference/plugins/vitest 'Vitest'
+[78]: /reference/plugins/vue 'Vue'
+[79]: /reference/plugins/webdriver-io 'WebdriverIO'
+[80]: /reference/plugins/webpack 'Webpack'
+[81]: /reference/plugins/wireit 'Wireit'
+[82]: /reference/plugins/wrangler 'Wrangler'
+[83]: /reference/plugins/xo 'xo'
+[84]: /reference/plugins/yorkie 'yorkie'