knip 2.0.0-beta.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (574) hide show
  1. package/README.md +114 -64
  2. package/dist/binaries/resolvers/fallback.js +6 -5
  3. package/dist/binaries/resolvers/index.d.ts +1 -0
  4. package/dist/binaries/resolvers/index.js +1 -0
  5. package/dist/binaries/resolvers/node.d.ts +0 -1
  6. package/dist/binaries/resolvers/node.js +1 -15
  7. package/dist/binaries/resolvers/rollup.js +10 -0
  8. package/dist/binaries/resolvers/util.d.ts +2 -0
  9. package/dist/binaries/resolvers/util.js +15 -0
  10. package/dist/cli.js +0 -0
  11. package/dist/configuration-chief.js +3 -5
  12. package/dist/configuration-validator.d.ts +400 -8
  13. package/dist/configuration-validator.js +7 -0
  14. package/dist/plugins/eslint/helpers.js +9 -9
  15. package/dist/plugins/index.d.ts +1 -0
  16. package/dist/plugins/index.js +1 -0
  17. package/dist/plugins/tailwind/index.d.ts +5 -0
  18. package/dist/plugins/tailwind/index.js +5 -0
  19. package/dist/project-principal.js +0 -2
  20. package/dist/types/ast.d.ts +1 -1
  21. package/dist/types/issues.d.ts +9 -1
  22. package/dist/types/issues.js +10 -1
  23. package/dist/typescript/ast-walker.js +17 -16
  24. package/dist/typescript/resolveModuleNames.js +0 -4
  25. package/dist/util/cli-arguments.d.ts +1 -2
  26. package/dist/util/cli-arguments.js +1 -3
  27. package/dist/util/compilers.d.ts +72 -2
  28. package/dist/util/performance.js +1 -1
  29. package/dist/version.d.ts +1 -1
  30. package/dist/version.js +1 -1
  31. package/dist/workspace-worker.d.ts +1 -1
  32. package/package.json +12 -10
  33. package/schema.json +4 -0
  34. package/dist/commonjs.test.d.ts +0 -1
  35. package/dist/commonjs.test.js +0 -29
  36. package/dist/compilers.test.d.ts +0 -1
  37. package/dist/compilers.test.js +0 -18
  38. package/dist/definitely-typed.test.d.ts +0 -1
  39. package/dist/definitely-typed.test.js +0 -35
  40. package/dist/dependencies.test.d.ts +0 -1
  41. package/dist/dependencies.test.js +0 -76
  42. package/dist/entry-js.test.d.ts +0 -1
  43. package/dist/entry-js.test.js +0 -38
  44. package/dist/exports.test.d.ts +0 -1
  45. package/dist/exports.test.js +0 -48
  46. package/dist/fixtures/binaries/dir/index.d.ts +0 -1
  47. package/dist/fixtures/binaries/dir/index.js +0 -1
  48. package/dist/fixtures/binaries/main.d.ts +0 -1
  49. package/dist/fixtures/binaries/main.js +0 -1
  50. package/dist/fixtures/binaries/require.d.ts +0 -1
  51. package/dist/fixtures/binaries/require.js +0 -1
  52. package/dist/fixtures/binaries/script.d.ts +0 -1
  53. package/dist/fixtures/binaries/script.js +0 -1
  54. package/dist/fixtures/commonjs/dir/mod.d.ts +0 -1
  55. package/dist/fixtures/commonjs/dir/mod.js +0 -5
  56. package/dist/fixtures/commonjs/dir/mod1.d.ts +0 -7
  57. package/dist/fixtures/commonjs/dir/mod1.js +0 -5
  58. package/dist/fixtures/commonjs/dir/mod2.d.ts +0 -4
  59. package/dist/fixtures/commonjs/dir/mod2.js +0 -4
  60. package/dist/fixtures/commonjs/dir/mod3.d.ts +0 -2
  61. package/dist/fixtures/commonjs/dir/mod3.js +0 -4
  62. package/dist/fixtures/commonjs/export-is.d.ts +0 -2
  63. package/dist/fixtures/commonjs/export-is.js +0 -2
  64. package/dist/fixtures/commonjs/index.d.ts +0 -1
  65. package/dist/fixtures/commonjs/index.js +0 -31
  66. package/dist/fixtures/commonjs/odd.d.ts +0 -1
  67. package/dist/fixtures/commonjs/odd.js +0 -7
  68. package/dist/fixtures/compilers/component.d.ts +0 -2
  69. package/dist/fixtures/compilers/component.jsx +0 -1
  70. package/dist/fixtures/compilers/index.d.ts +0 -1
  71. package/dist/fixtures/compilers/index.js +0 -1
  72. package/dist/fixtures/compilers/knip.d.ts +0 -0
  73. package/dist/fixtures/compilers/knip.js +0 -7
  74. package/dist/fixtures/definitely-typed/index.d.ts +0 -1
  75. package/dist/fixtures/definitely-typed/index.js +0 -1
  76. package/dist/fixtures/dependencies/entry.d.ts +0 -1
  77. package/dist/fixtures/dependencies/entry.js +0 -6
  78. package/dist/fixtures/dependencies/my-module.d.ts +0 -3
  79. package/dist/fixtures/dependencies/my-module.js +0 -6
  80. package/dist/fixtures/dependencies/unused-module.d.ts +0 -1
  81. package/dist/fixtures/dependencies/unused-module.js +0 -6
  82. package/dist/fixtures/entry-js/dangling.d.ts +0 -1
  83. package/dist/fixtures/entry-js/dangling.js +0 -1
  84. package/dist/fixtures/entry-js/index.d.ts +0 -1
  85. package/dist/fixtures/entry-js/index.js +0 -2
  86. package/dist/fixtures/entry-js/my-module.d.ts +0 -4
  87. package/dist/fixtures/entry-js/my-module.js +0 -6
  88. package/dist/fixtures/entry-js/my-namespace.d.ts +0 -5
  89. package/dist/fixtures/entry-js/my-namespace.js +0 -3
  90. package/dist/fixtures/exports/dangling.d.ts +0 -1
  91. package/dist/fixtures/exports/dangling.js +0 -1
  92. package/dist/fixtures/exports/default-arrow-function.d.ts +0 -2
  93. package/dist/fixtures/exports/default-arrow-function.js +0 -1
  94. package/dist/fixtures/exports/default-class.d.ts +0 -2
  95. package/dist/fixtures/exports/default-class.js +0 -2
  96. package/dist/fixtures/exports/default-function.d.ts +0 -1
  97. package/dist/fixtures/exports/default-function.js +0 -1
  98. package/dist/fixtures/exports/default-generator-function.d.ts +0 -1
  99. package/dist/fixtures/exports/default-generator-function.js +0 -1
  100. package/dist/fixtures/exports/default-named-class.d.ts +0 -2
  101. package/dist/fixtures/exports/default-named-class.js +0 -2
  102. package/dist/fixtures/exports/default-named-function.d.ts +0 -1
  103. package/dist/fixtures/exports/default-named-function.js +0 -1
  104. package/dist/fixtures/exports/default-named-generator-function.d.ts +0 -1
  105. package/dist/fixtures/exports/default-named-generator-function.js +0 -1
  106. package/dist/fixtures/exports/default.d.ts +0 -3
  107. package/dist/fixtures/exports/default.js +0 -2
  108. package/dist/fixtures/exports/dynamic-import.d.ts +0 -4
  109. package/dist/fixtures/exports/dynamic-import.js +0 -3
  110. package/dist/fixtures/exports/index.d.ts +0 -2
  111. package/dist/fixtures/exports/index.js +0 -6
  112. package/dist/fixtures/exports/my-module.d.ts +0 -5
  113. package/dist/fixtures/exports/my-module.js +0 -7
  114. package/dist/fixtures/exports/my-namespace.d.ts +0 -5
  115. package/dist/fixtures/exports/my-namespace.js +0 -3
  116. package/dist/fixtures/exports/named.d.ts +0 -11
  117. package/dist/fixtures/exports/named.js +0 -11
  118. package/dist/fixtures/exports/types.d.ts +0 -9
  119. package/dist/fixtures/exports/types.js +0 -3
  120. package/dist/fixtures/gitignore/packages/a/build/dist.d.ts +0 -2
  121. package/dist/fixtures/gitignore/packages/a/build/dist.js +0 -1
  122. package/dist/fixtures/gitignore/packages/a/dist.d.ts +0 -1
  123. package/dist/fixtures/gitignore/packages/a/dist.js +0 -1
  124. package/dist/fixtures/gitignore/packages/a/index.d.ts +0 -1
  125. package/dist/fixtures/gitignore/packages/a/index.js +0 -1
  126. package/dist/fixtures/imports/dir/import-b.d.ts +0 -2
  127. package/dist/fixtures/imports/dir/import-b.js +0 -1
  128. package/dist/fixtures/imports/dir/mod.d.ts +0 -1
  129. package/dist/fixtures/imports/dir/mod.js +0 -1
  130. package/dist/fixtures/imports/index.d.ts +0 -1
  131. package/dist/fixtures/imports/index.js +0 -35
  132. package/dist/fixtures/js-only/dangling.d.ts +0 -1
  133. package/dist/fixtures/js-only/dangling.js +0 -1
  134. package/dist/fixtures/js-only/index.d.ts +0 -1
  135. package/dist/fixtures/js-only/index.js +0 -2
  136. package/dist/fixtures/js-only/my-namespace.d.ts +0 -3
  137. package/dist/fixtures/js-only/my-namespace.js +0 -3
  138. package/dist/fixtures/jsdoc/index.d.ts +0 -4
  139. package/dist/fixtures/jsdoc/index.js +0 -8
  140. package/dist/fixtures/members/index.d.ts +0 -1
  141. package/dist/fixtures/members/index.js +0 -16
  142. package/dist/fixtures/members/members.d.ts +0 -23
  143. package/dist/fixtures/members/members.js +0 -38
  144. package/dist/fixtures/namespace/index.d.ts +0 -1
  145. package/dist/fixtures/namespace/index.js +0 -5
  146. package/dist/fixtures/namespace/namespace.d.ts +0 -3
  147. package/dist/fixtures/namespace/namespace.js +0 -3
  148. package/dist/fixtures/namespace/re-exported-module.d.ts +0 -2
  149. package/dist/fixtures/namespace/re-exported-module.js +0 -2
  150. package/dist/fixtures/pathless/src/dir/module-a.d.ts +0 -2
  151. package/dist/fixtures/pathless/src/dir/module-a.js +0 -1
  152. package/dist/fixtures/pathless/src/index.d.ts +0 -2
  153. package/dist/fixtures/pathless/src/index.js +0 -2
  154. package/dist/fixtures/pathless/src/same.d.ts +0 -2
  155. package/dist/fixtures/pathless/src/same.js +0 -1
  156. package/dist/fixtures/paths-knip-config/abc/main.d.ts +0 -0
  157. package/dist/fixtures/paths-knip-config/abc/main.js +0 -1
  158. package/dist/fixtures/paths-knip-config/index.d.ts +0 -1
  159. package/dist/fixtures/paths-knip-config/index.js +0 -1
  160. package/dist/fixtures/paths-knip-config/knip.d.ts +0 -3
  161. package/dist/fixtures/paths-knip-config/knip.js +0 -9
  162. package/dist/fixtures/paths-knip-config/lib/fn.d.ts +0 -2
  163. package/dist/fixtures/paths-knip-config/lib/fn.js +0 -1
  164. package/dist/fixtures/paths-knip-config/lib/index.d.ts +0 -2
  165. package/dist/fixtures/paths-knip-config/lib/index.js +0 -1
  166. package/dist/fixtures/paths-knip-config/my-module.d.ts +0 -2
  167. package/dist/fixtures/paths-knip-config/my-module.js +0 -1
  168. package/dist/fixtures/paths-knip-config-workspaces/index.d.ts +0 -1
  169. package/dist/fixtures/paths-knip-config-workspaces/index.js +0 -1
  170. package/dist/fixtures/paths-knip-config-workspaces/lib/fn.d.ts +0 -2
  171. package/dist/fixtures/paths-knip-config-workspaces/lib/fn.js +0 -1
  172. package/dist/fixtures/paths-knip-config-workspaces/lib/index.d.ts +0 -2
  173. package/dist/fixtures/paths-knip-config-workspaces/lib/index.js +0 -1
  174. package/dist/fixtures/paths-knip-config-workspaces/my-module.d.ts +0 -1
  175. package/dist/fixtures/paths-knip-config-workspaces/my-module.js +0 -1
  176. package/dist/fixtures/paths-knip-config-workspaces/ws/index.d.ts +0 -1
  177. package/dist/fixtures/paths-knip-config-workspaces/ws/index.js +0 -1
  178. package/dist/fixtures/paths-knip-config-workspaces/ws/lib/main.d.ts +0 -0
  179. package/dist/fixtures/paths-knip-config-workspaces/ws/lib/main.js +0 -1
  180. package/dist/fixtures/paths-knip-config-workspaces/ws/util/lang.d.ts +0 -2
  181. package/dist/fixtures/paths-knip-config-workspaces/ws/util/lang.js +0 -1
  182. package/dist/fixtures/peer-dependencies/index.d.ts +0 -1
  183. package/dist/fixtures/peer-dependencies/index.js +0 -1
  184. package/dist/fixtures/plugins/ava/ava.config.d.mts +0 -13
  185. package/dist/fixtures/plugins/ava/ava.config.mjs +0 -13
  186. package/dist/fixtures/plugins/babel/babel.config.d.ts +0 -14
  187. package/dist/fixtures/plugins/babel/babel.config.js +0 -47
  188. package/dist/fixtures/plugins/capacitor/capacitor.config.d.ts +0 -3
  189. package/dist/fixtures/plugins/capacitor/capacitor.config.js +0 -15
  190. package/dist/fixtures/plugins/commitlint/commitlint.config.d.ts +0 -2
  191. package/dist/fixtures/plugins/commitlint/commitlint.config.js +0 -2
  192. package/dist/fixtures/plugins/cypress/cypress/support/commands.d.ts +0 -1
  193. package/dist/fixtures/plugins/cypress/cypress/support/commands.js +0 -5
  194. package/dist/fixtures/plugins/cypress/cypress/support/e2e.d.ts +0 -2
  195. package/dist/fixtures/plugins/cypress/cypress/support/e2e.js +0 -2
  196. package/dist/fixtures/plugins/cypress/cypress.config.d.ts +0 -2
  197. package/dist/fixtures/plugins/cypress/cypress.config.js +0 -9
  198. package/dist/fixtures/plugins/eslint/eslint.config.d.ts +0 -7
  199. package/dist/fixtures/plugins/eslint/eslint.config.js +0 -11
  200. package/dist/fixtures/plugins/eslint/index.d.ts +0 -1
  201. package/dist/fixtures/plugins/eslint/index.js +0 -1
  202. package/dist/fixtures/plugins/gatsby/gatsby-config.d.ts +0 -17
  203. package/dist/fixtures/plugins/gatsby/gatsby-config.js +0 -40
  204. package/dist/fixtures/plugins/gatsby/gatsby-node.d.ts +0 -3
  205. package/dist/fixtures/plugins/gatsby/gatsby-node.js +0 -15
  206. package/dist/fixtures/plugins/github-actions/comment.d.ts +0 -0
  207. package/dist/fixtures/plugins/github-actions/comment.js +0 -1
  208. package/dist/fixtures/plugins/github-actions/scripts/check-dependencies.d.ts +0 -0
  209. package/dist/fixtures/plugins/github-actions/scripts/check-dependencies.js +0 -1
  210. package/dist/fixtures/plugins/jest/jest.config.d.ts +0 -2
  211. package/dist/fixtures/plugins/jest/jest.config.js +0 -7
  212. package/dist/fixtures/plugins/jest/jest.config.shared.d.ts +0 -2
  213. package/dist/fixtures/plugins/jest/jest.config.shared.js +0 -15
  214. package/dist/fixtures/plugins/jest/jest.setup.d.ts +0 -1
  215. package/dist/fixtures/plugins/jest/jest.setup.js +0 -1
  216. package/dist/fixtures/plugins/jest/jest.transform.d.ts +0 -1
  217. package/dist/fixtures/plugins/jest/jest.transform.js +0 -2
  218. package/dist/fixtures/plugins/lefthook/example.d.mts +0 -2
  219. package/dist/fixtures/plugins/lefthook/example.mjs +0 -1
  220. package/dist/fixtures/plugins/next/next.config.d.ts +0 -2
  221. package/dist/fixtures/plugins/next/next.config.js +0 -9
  222. package/dist/fixtures/plugins/next/pages/[[...route]].d.ts +0 -3
  223. package/dist/fixtures/plugins/next/pages/[[...route]].jsx +0 -3
  224. package/dist/fixtures/plugins/next/pages/page.d.ts +0 -3
  225. package/dist/fixtures/plugins/next/pages/page.jsx +0 -3
  226. package/dist/fixtures/plugins/playwright/playwright.config.d.ts +0 -3
  227. package/dist/fixtures/plugins/playwright/playwright.config.js +0 -10
  228. package/dist/fixtures/plugins/playwright/test/some.spec.d.ts +0 -1
  229. package/dist/fixtures/plugins/playwright/test/some.spec.js +0 -6
  230. package/dist/fixtures/plugins/postcss/postcss.config.d.ts +0 -1
  231. package/dist/fixtures/plugins/postcss/postcss.config.js +0 -4
  232. package/dist/fixtures/plugins/remix/app/entry.client.d.ts +0 -1
  233. package/dist/fixtures/plugins/remix/app/entry.client.jsx +0 -11
  234. package/dist/fixtures/plugins/remix/app/entry.server.jsx +0 -3
  235. package/dist/fixtures/plugins/remix/app/root.d.ts +0 -5
  236. package/dist/fixtures/plugins/remix/app/root.jsx +0 -31
  237. package/dist/fixtures/plugins/remix/app/routes/index.d.ts +0 -1
  238. package/dist/fixtures/plugins/remix/app/routes/index.jsx +0 -8
  239. package/dist/fixtures/plugins/remix/app/utils.d.ts +0 -1
  240. package/dist/fixtures/plugins/remix/app/utils.js +0 -1
  241. package/dist/fixtures/plugins/remix/remix.config.d.ts +0 -2
  242. package/dist/fixtures/plugins/remix/remix.config.js +0 -5
  243. package/dist/fixtures/plugins/remix/remix.init/index.d.ts +0 -4
  244. package/dist/fixtures/plugins/remix/remix.init/index.js +0 -4
  245. package/dist/fixtures/plugins/remix/server.d.ts +0 -0
  246. package/dist/fixtures/plugins/remix/server.js +0 -1
  247. package/dist/fixtures/plugins/rollup/rollup.config.d.ts +0 -16
  248. package/dist/fixtures/plugins/rollup/rollup.config.js +0 -26
  249. package/dist/fixtures/plugins/sentry/sentry.client.config.d.ts +0 -1
  250. package/dist/fixtures/plugins/sentry/sentry.client.config.js +0 -6
  251. package/dist/fixtures/plugins/sentry/sentry.server.config.d.ts +0 -1
  252. package/dist/fixtures/plugins/sentry/sentry.server.config.js +0 -1
  253. package/dist/fixtures/plugins/storybook/addon/register.d.ts +0 -0
  254. package/dist/fixtures/plugins/storybook/addon/register.js +0 -1
  255. package/dist/fixtures/plugins/storybook/main.d.ts +0 -10
  256. package/dist/fixtures/plugins/storybook/main.js +0 -38
  257. package/dist/fixtures/plugins/storybook/preview.d.ts +0 -13
  258. package/dist/fixtures/plugins/storybook/preview.js +0 -14
  259. package/dist/fixtures/plugins/stryker/stryker.conf.cjs +0 -6
  260. package/dist/fixtures/plugins/stryker/stryker.conf.d.cts +0 -3
  261. package/dist/fixtures/plugins/stryker/stryker.conf.d.mts +0 -6
  262. package/dist/fixtures/plugins/stryker/stryker.conf.mjs +0 -6
  263. package/dist/fixtures/plugins/svelte/knip.d.ts +0 -11
  264. package/dist/fixtures/plugins/svelte/knip.js +0 -10
  265. package/dist/fixtures/plugins/svelte/src/routes/+page.d.ts +0 -1
  266. package/dist/fixtures/plugins/svelte/src/routes/+page.js +0 -1
  267. package/dist/fixtures/plugins/svelte/svelte.config.d.ts +0 -2
  268. package/dist/fixtures/plugins/svelte/svelte.config.js +0 -9
  269. package/dist/fixtures/plugins/svelte/vite.config.d.ts +0 -2
  270. package/dist/fixtures/plugins/svelte/vite.config.js +0 -5
  271. package/dist/fixtures/plugins/vitest/test/basic.spec.d.ts +0 -1
  272. package/dist/fixtures/plugins/vitest/test/basic.spec.js +0 -8
  273. package/dist/fixtures/plugins/vitest/vite.config.d.ts +0 -2
  274. package/dist/fixtures/plugins/vitest/vite.config.js +0 -10
  275. package/dist/fixtures/plugins/vitest/vitest.config.d.ts +0 -2
  276. package/dist/fixtures/plugins/vitest/vitest.config.js +0 -10
  277. package/dist/fixtures/plugins/webpack/merge.d.ts +0 -2
  278. package/dist/fixtures/plugins/webpack/merge.js +0 -9
  279. package/dist/fixtures/plugins/webpack/src/app-dep.d.ts +0 -2
  280. package/dist/fixtures/plugins/webpack/src/app-dep.js +0 -1
  281. package/dist/fixtures/plugins/webpack/src/app.d.ts +0 -1
  282. package/dist/fixtures/plugins/webpack/src/app.js +0 -1
  283. package/dist/fixtures/plugins/webpack/src/entry.d.ts +0 -0
  284. package/dist/fixtures/plugins/webpack/src/entry.js +0 -1
  285. package/dist/fixtures/plugins/webpack/src/unused.d.ts +0 -0
  286. package/dist/fixtures/plugins/webpack/src/unused.js +0 -1
  287. package/dist/fixtures/plugins/webpack/src/vendor.d.ts +0 -0
  288. package/dist/fixtures/plugins/webpack/src/vendor.js +0 -1
  289. package/dist/fixtures/plugins/webpack/webpack.common.d.ts +0 -65
  290. package/dist/fixtures/plugins/webpack/webpack.common.js +0 -81
  291. package/dist/fixtures/plugins/webpack/webpack.config.d.ts +0 -2
  292. package/dist/fixtures/plugins/webpack/webpack.config.js +0 -4
  293. package/dist/fixtures/plugins/webpack/webpack.dev.d.ts +0 -2
  294. package/dist/fixtures/plugins/webpack/webpack.dev.js +0 -19
  295. package/dist/fixtures/plugins/webpack/webpack.prod.d.ts +0 -2
  296. package/dist/fixtures/plugins/webpack/webpack.prod.js +0 -16
  297. package/dist/fixtures/re-exports/barrel.d.ts +0 -1
  298. package/dist/fixtures/re-exports/barrel.js +0 -1
  299. package/dist/fixtures/re-exports/entry.d.ts +0 -1
  300. package/dist/fixtures/re-exports/entry.js +0 -2
  301. package/dist/fixtures/re-exports/my-module.d.ts +0 -4
  302. package/dist/fixtures/re-exports/my-module.js +0 -6
  303. package/dist/fixtures/react/App.d.ts +0 -1
  304. package/dist/fixtures/react/App.jsx +0 -7
  305. package/dist/fixtures/react/Component.d.ts +0 -1
  306. package/dist/fixtures/react/Component.jsx +0 -4
  307. package/dist/fixtures/self-reference/entry.d.ts +0 -1
  308. package/dist/fixtures/self-reference/entry.js +0 -8
  309. package/dist/fixtures/self-reference/lib/module.d.ts +0 -2
  310. package/dist/fixtures/self-reference/lib/module.js +0 -1
  311. package/dist/fixtures/self-reference/out/entry.d.ts +0 -1
  312. package/dist/fixtures/self-reference/out/entry.js +0 -11
  313. package/dist/fixtures/self-reference/out/lib/module.d.mts +0 -3
  314. package/dist/fixtures/self-reference/out/lib/module.mjs +0 -4
  315. package/dist/fixtures/self-reference-from-plugin/entry.d.ts +0 -0
  316. package/dist/fixtures/self-reference-from-plugin/entry.js +0 -2
  317. package/dist/fixtures/self-reference-from-plugin/file.d.ts +0 -2
  318. package/dist/fixtures/self-reference-from-plugin/file.js +0 -1
  319. package/dist/fixtures/tsconfig-paths/aliased-dir/a.d.ts +0 -1
  320. package/dist/fixtures/tsconfig-paths/aliased-dir/a.js +0 -1
  321. package/dist/fixtures/tsconfig-paths/index.d.ts +0 -1
  322. package/dist/fixtures/tsconfig-paths/index.js +0 -6
  323. package/dist/fixtures/tsconfig-paths/internal-package/index.d.ts +0 -2
  324. package/dist/fixtures/tsconfig-paths/internal-package/index.js +0 -2
  325. package/dist/fixtures/tsconfig-paths/unprefixed/module.d.ts +0 -2
  326. package/dist/fixtures/tsconfig-paths/unprefixed/module.js +0 -2
  327. package/dist/fixtures/tsconfig-paths-extends/src/cli.d.ts +0 -1
  328. package/dist/fixtures/tsconfig-paths-extends/src/cli.js +0 -3
  329. package/dist/fixtures/tsconfig-paths-extends/src/index.d.ts +0 -3
  330. package/dist/fixtures/tsconfig-paths-extends/src/index.js +0 -3
  331. package/dist/fixtures/tsconfig-paths-extends/src/lib/main.d.ts +0 -2
  332. package/dist/fixtures/tsconfig-paths-extends/src/lib/main.js +0 -1
  333. package/dist/fixtures/tsconfig-paths-extends/src/util/index.d.ts +0 -2
  334. package/dist/fixtures/tsconfig-paths-extends/src/util/index.js +0 -1
  335. package/dist/fixtures/tsconfig-paths-implicit/src/hello/world.d.ts +0 -1
  336. package/dist/fixtures/tsconfig-paths-implicit/src/hello/world.js +0 -1
  337. package/dist/fixtures/tsconfig-paths-implicit/src/index.d.ts +0 -1
  338. package/dist/fixtures/tsconfig-paths-implicit/src/index.js +0 -2
  339. package/dist/fixtures/workspaces/apps/a/index.d.ts +0 -1
  340. package/dist/fixtures/workspaces/apps/a/index.js +0 -6
  341. package/dist/fixtures/workspaces/apps/b/index.d.ts +0 -1
  342. package/dist/fixtures/workspaces/apps/b/index.js +0 -4
  343. package/dist/fixtures/workspaces/docs/dangling.d.ts +0 -1
  344. package/dist/fixtures/workspaces/docs/dangling.js +0 -1
  345. package/dist/fixtures/workspaces/packages/lib-a/index.d.ts +0 -4
  346. package/dist/fixtures/workspaces/packages/lib-a/index.js +0 -3
  347. package/dist/fixtures/workspaces/packages/lib-b/ignored/index.d.ts +0 -0
  348. package/dist/fixtures/workspaces/packages/lib-b/ignored/index.js +0 -1
  349. package/dist/fixtures/workspaces/packages/lib-b/index.d.ts +0 -3
  350. package/dist/fixtures/workspaces/packages/lib-b/index.js +0 -2
  351. package/dist/fixtures/workspaces-nested/level-1-1/index.d.ts +0 -1
  352. package/dist/fixtures/workspaces-nested/level-1-1/index.js +0 -1
  353. package/dist/fixtures/workspaces-nested/level-1-1/index.spec.d.ts +0 -1
  354. package/dist/fixtures/workspaces-nested/level-1-1/index.spec.js +0 -1
  355. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/index.d.ts +0 -1
  356. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/index.js +0 -1
  357. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/index.spec.d.ts +0 -1
  358. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/index.spec.js +0 -1
  359. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/level-1-3/index.d.ts +0 -1
  360. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/level-1-3/index.js +0 -1
  361. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/level-1-3/index.spec.d.ts +0 -1
  362. package/dist/fixtures/workspaces-nested/level-1-1/level-1-2/level-1-3/index.spec.js +0 -1
  363. package/dist/fixtures/workspaces-paths/packages/lib-a/src/dir/module-a.d.ts +0 -2
  364. package/dist/fixtures/workspaces-paths/packages/lib-a/src/dir/module-a.js +0 -1
  365. package/dist/fixtures/workspaces-paths/packages/lib-a/src/index.d.ts +0 -2
  366. package/dist/fixtures/workspaces-paths/packages/lib-a/src/index.js +0 -2
  367. package/dist/fixtures/workspaces-paths/packages/lib-a/src/same.d.ts +0 -2
  368. package/dist/fixtures/workspaces-paths/packages/lib-a/src/same.js +0 -1
  369. package/dist/fixtures/workspaces-paths/packages/lib-b/src/dir/module-b.d.ts +0 -2
  370. package/dist/fixtures/workspaces-paths/packages/lib-b/src/dir/module-b.js +0 -1
  371. package/dist/fixtures/workspaces-paths/packages/lib-b/src/index.d.ts +0 -2
  372. package/dist/fixtures/workspaces-paths/packages/lib-b/src/index.js +0 -2
  373. package/dist/fixtures/workspaces-paths/packages/lib-c/src/dir/module.d.ts +0 -2
  374. package/dist/fixtures/workspaces-paths/packages/lib-c/src/dir/module.js +0 -1
  375. package/dist/fixtures/workspaces-paths/packages/lib-c/src/index.d.ts +0 -2
  376. package/dist/fixtures/workspaces-paths/packages/lib-c/src/index.js +0 -2
  377. package/dist/fixtures/workspaces-paths/packages/lib-d/src/dir/module.d.ts +0 -2
  378. package/dist/fixtures/workspaces-paths/packages/lib-d/src/dir/module.js +0 -1
  379. package/dist/fixtures/workspaces-paths/packages/lib-d/src/index.d.ts +0 -2
  380. package/dist/fixtures/workspaces-paths/packages/lib-d/src/index.js +0 -2
  381. package/dist/fixtures/workspaces-paths/packages/lib-e/src/dir/module-e.d.ts +0 -2
  382. package/dist/fixtures/workspaces-paths/packages/lib-e/src/dir/module-e.js +0 -1
  383. package/dist/fixtures/workspaces-paths/packages/lib-e/src/index.d.ts +0 -2
  384. package/dist/fixtures/workspaces-paths/packages/lib-e/src/index.js +0 -2
  385. package/dist/fixtures/workspaces-pnpm/apps/a/index.d.ts +0 -1
  386. package/dist/fixtures/workspaces-pnpm/apps/a/index.js +0 -6
  387. package/dist/fixtures/workspaces-pnpm/apps/b/index.d.ts +0 -1
  388. package/dist/fixtures/workspaces-pnpm/apps/b/index.js +0 -4
  389. package/dist/fixtures/workspaces-pnpm/docs/dangling.d.ts +0 -1
  390. package/dist/fixtures/workspaces-pnpm/docs/dangling.js +0 -1
  391. package/dist/fixtures/workspaces-pnpm/packages/lib-a/index.d.ts +0 -4
  392. package/dist/fixtures/workspaces-pnpm/packages/lib-a/index.js +0 -3
  393. package/dist/fixtures/workspaces-pnpm/packages/lib-b/index.d.ts +0 -3
  394. package/dist/fixtures/workspaces-pnpm/packages/lib-b/index.js +0 -2
  395. package/dist/fixtures/workspaces-self-reference/packages/self-reference/entry.d.ts +0 -1
  396. package/dist/fixtures/workspaces-self-reference/packages/self-reference/entry.js +0 -4
  397. package/dist/fixtures/workspaces-self-reference/packages/self-reference-from-plugin/entry.d.ts +0 -0
  398. package/dist/fixtures/workspaces-self-reference/packages/self-reference-from-plugin/entry.js +0 -2
  399. package/dist/fixtures/workspaces-self-reference/packages/self-reference-from-plugin/file.d.ts +0 -2
  400. package/dist/fixtures/workspaces-self-reference/packages/self-reference-from-plugin/file.js +0 -1
  401. package/dist/fixtures/zero-config/exclude.d.ts +0 -1
  402. package/dist/fixtures/zero-config/exclude.js +0 -1
  403. package/dist/fixtures/zero-config/index.d.ts +0 -1
  404. package/dist/fixtures/zero-config/index.js +0 -2
  405. package/dist/fixtures/zero-config/my-module.d.ts +0 -4
  406. package/dist/fixtures/zero-config/my-module.js +0 -6
  407. package/dist/fixtures/zero-config/my-namespace.d.ts +0 -5
  408. package/dist/fixtures/zero-config/my-namespace.js +0 -3
  409. package/dist/gitignore.test.d.ts +0 -1
  410. package/dist/gitignore.test.js +0 -22
  411. package/dist/helpers/baseArguments.d.ts +0 -8
  412. package/dist/helpers/baseArguments.js +0 -8
  413. package/dist/helpers/baseCounters.d.ts +0 -17
  414. package/dist/helpers/baseCounters.js +0 -7
  415. package/dist/helpers/index.d.ts +0 -2
  416. package/dist/helpers/index.js +0 -4
  417. package/dist/imports.test.d.ts +0 -1
  418. package/dist/imports.test.js +0 -39
  419. package/dist/js-only.test.d.ts +0 -1
  420. package/dist/js-only.test.js +0 -26
  421. package/dist/jsdoc.test.d.ts +0 -1
  422. package/dist/jsdoc.test.js +0 -21
  423. package/dist/members.test.d.ts +0 -1
  424. package/dist/members.test.js +0 -28
  425. package/dist/namespace.test.d.ts +0 -1
  426. package/dist/namespace.test.js +0 -18
  427. package/dist/npm-scripts.test.d.ts +0 -1
  428. package/dist/npm-scripts.test.js +0 -78
  429. package/dist/pathless.test.d.ts +0 -1
  430. package/dist/pathless.test.js +0 -14
  431. package/dist/paths-knip-config-workspaces.test.d.ts +0 -1
  432. package/dist/paths-knip-config-workspaces.test.js +0 -18
  433. package/dist/paths-knip-config.test.d.ts +0 -1
  434. package/dist/paths-knip-config.test.js +0 -18
  435. package/dist/peer-dependencies.test.d.ts +0 -1
  436. package/dist/peer-dependencies.test.js +0 -20
  437. package/dist/plugins/_template.test.d.ts +0 -1
  438. package/dist/plugins/_template.test.js +0 -12
  439. package/dist/plugins/ava.test.d.ts +0 -1
  440. package/dist/plugins/ava.test.js +0 -18
  441. package/dist/plugins/babel.test.d.ts +0 -1
  442. package/dist/plugins/babel.test.js +0 -62
  443. package/dist/plugins/capacitor.test.d.ts +0 -1
  444. package/dist/plugins/capacitor.test.js +0 -31
  445. package/dist/plugins/changesets.test.d.ts +0 -1
  446. package/dist/plugins/changesets.test.js +0 -12
  447. package/dist/plugins/commitlint.test.d.ts +0 -1
  448. package/dist/plugins/commitlint.test.js +0 -22
  449. package/dist/plugins/cspell.test.d.ts +0 -1
  450. package/dist/plugins/cspell.test.js +0 -10
  451. package/dist/plugins/cypress.test.d.ts +0 -1
  452. package/dist/plugins/cypress.test.js +0 -23
  453. package/dist/plugins/eslint.test.d.ts +0 -1
  454. package/dist/plugins/eslint.test.js +0 -43
  455. package/dist/plugins/gatsby.test.d.ts +0 -1
  456. package/dist/plugins/gatsby.test.js +0 -31
  457. package/dist/plugins/github-actions.test.d.ts +0 -1
  458. package/dist/plugins/github-actions.test.js +0 -25
  459. package/dist/plugins/husky.test.d.ts +0 -1
  460. package/dist/plugins/husky.test.js +0 -32
  461. package/dist/plugins/jest.test.d.ts +0 -1
  462. package/dist/plugins/jest.test.js +0 -18
  463. package/dist/plugins/lefthook.test.d.ts +0 -1
  464. package/dist/plugins/lefthook.test.js +0 -16
  465. package/dist/plugins/lint-staged.test.d.ts +0 -1
  466. package/dist/plugins/lint-staged.test.js +0 -18
  467. package/dist/plugins/markdownlint.test.d.ts +0 -1
  468. package/dist/plugins/markdownlint.test.js +0 -12
  469. package/dist/plugins/mocha.test.d.ts +0 -1
  470. package/dist/plugins/mocha.test.js +0 -22
  471. package/dist/plugins/next.test.d.ts +0 -1
  472. package/dist/plugins/next.test.js +0 -24
  473. package/dist/plugins/npm-package-json-lint.test.d.ts +0 -1
  474. package/dist/plugins/npm-package-json-lint.test.js +0 -12
  475. package/dist/plugins/nx.test.d.ts +0 -1
  476. package/dist/plugins/nx.test.js +0 -15
  477. package/dist/plugins/nyc.test.d.ts +0 -1
  478. package/dist/plugins/nyc.test.js +0 -10
  479. package/dist/plugins/playwright.test.d.ts +0 -1
  480. package/dist/plugins/playwright.test.js +0 -20
  481. package/dist/plugins/postcss.test.d.ts +0 -1
  482. package/dist/plugins/postcss.test.js +0 -33
  483. package/dist/plugins/prettier.test.d.ts +0 -1
  484. package/dist/plugins/prettier.test.js +0 -10
  485. package/dist/plugins/release-it.test.d.ts +0 -1
  486. package/dist/plugins/release-it.test.js +0 -10
  487. package/dist/plugins/remark.test.d.ts +0 -1
  488. package/dist/plugins/remark.test.js +0 -12
  489. package/dist/plugins/remix.test.d.ts +0 -1
  490. package/dist/plugins/remix.test.js +0 -39
  491. package/dist/plugins/rollup.test.d.ts +0 -1
  492. package/dist/plugins/rollup.test.js +0 -24
  493. package/dist/plugins/semantic-release.test.d.ts +0 -1
  494. package/dist/plugins/semantic-release.test.js +0 -31
  495. package/dist/plugins/sentry.test.d.ts +0 -1
  496. package/dist/plugins/sentry.test.js +0 -14
  497. package/dist/plugins/storybook.test.d.ts +0 -1
  498. package/dist/plugins/storybook.test.js +0 -18
  499. package/dist/plugins/stryker.test.d.ts +0 -1
  500. package/dist/plugins/stryker.test.js +0 -44
  501. package/dist/plugins/svelte.test.d.ts +0 -1
  502. package/dist/plugins/svelte.test.js +0 -21
  503. package/dist/plugins/typedoc.test.d.ts +0 -1
  504. package/dist/plugins/typedoc.test.js +0 -14
  505. package/dist/plugins/vitest.test.d.ts +0 -1
  506. package/dist/plugins/vitest.test.js +0 -17
  507. package/dist/plugins/webpack.test.d.ts +0 -1
  508. package/dist/plugins/webpack.test.js +0 -56
  509. package/dist/re-exports.test.d.ts +0 -1
  510. package/dist/re-exports.test.js +0 -18
  511. package/dist/react.test.d.ts +0 -1
  512. package/dist/react.test.js +0 -19
  513. package/dist/self-reference-from-plugin.test.d.ts +0 -1
  514. package/dist/self-reference-from-plugin.test.js +0 -47
  515. package/dist/self-reference.test.d.ts +0 -1
  516. package/dist/self-reference.test.js +0 -46
  517. package/dist/source-lab.d.ts +0 -21
  518. package/dist/source-lab.js +0 -135
  519. package/dist/tsconfig-paths-extends.test.d.ts +0 -1
  520. package/dist/tsconfig-paths-extends.test.js +0 -18
  521. package/dist/tsconfig-paths-implicit.test.d.ts +0 -1
  522. package/dist/tsconfig-paths-implicit.test.js +0 -18
  523. package/dist/tsconfig-paths.test.d.ts +0 -1
  524. package/dist/tsconfig-paths.test.js +0 -26
  525. package/dist/util/binaries/bash-parser.d.ts +0 -6
  526. package/dist/util/binaries/bash-parser.js +0 -57
  527. package/dist/util/binaries/index.d.ts +0 -2
  528. package/dist/util/binaries/index.js +0 -27
  529. package/dist/util/binaries/resolvers/fallback.js +0 -14
  530. package/dist/util/binaries/resolvers/index.d.ts +0 -4
  531. package/dist/util/binaries/resolvers/index.js +0 -4
  532. package/dist/util/binaries/resolvers/node.d.ts +0 -3
  533. package/dist/util/binaries/resolvers/node.js +0 -20
  534. package/dist/util/binaries/resolvers/npx.d.ts +0 -2
  535. package/dist/util/binaries/resolvers/npx.js +0 -5
  536. package/dist/util/binaries/resolvers/pnpm.d.ts +0 -2
  537. package/dist/util/binaries/resolvers/pnpm.js +0 -45
  538. package/dist/util/binaries/resolvers/yarn.d.ts +0 -2
  539. package/dist/util/binaries/resolvers/yarn.js +0 -46
  540. package/dist/util/binaries/types.d.ts +0 -18
  541. package/dist/util/binaries/types.js +0 -1
  542. package/dist/util/find-import-specifiers.d.ts +0 -5
  543. package/dist/util/find-import-specifiers.js +0 -48
  544. package/dist/util/get-included-issue-types.test.d.ts +0 -1
  545. package/dist/util/get-included-issue-types.test.js +0 -70
  546. package/dist/util/getReferencesFromScripts.test.d.ts +0 -1
  547. package/dist/util/getReferencesFromScripts.test.js +0 -126
  548. package/dist/util/log.d.ts +0 -7
  549. package/dist/util/log.js +0 -21
  550. package/dist/util/members.d.ts +0 -3
  551. package/dist/util/members.js +0 -25
  552. package/dist/util/module.test.d.ts +0 -1
  553. package/dist/util/module.test.js +0 -12
  554. package/dist/util/os.d.ts +0 -1
  555. package/dist/util/os.js +0 -1
  556. package/dist/util/project.d.ts +0 -13
  557. package/dist/util/project.js +0 -48
  558. package/dist/util/resolve-included-issue-types.d.ts +0 -16
  559. package/dist/util/resolve-included-issue-types.js +0 -30
  560. package/dist/util/type.d.ts +0 -2
  561. package/dist/util/type.js +0 -9
  562. package/dist/util/workspace.test.d.ts +0 -1
  563. package/dist/util/workspace.test.js +0 -13
  564. package/dist/workspaces-nested.test.d.ts +0 -1
  565. package/dist/workspaces-nested.test.js +0 -44
  566. package/dist/workspaces-paths.test.d.ts +0 -1
  567. package/dist/workspaces-paths.test.js +0 -21
  568. package/dist/workspaces-pnpm.test.d.ts +0 -1
  569. package/dist/workspaces-pnpm.test.js +0 -21
  570. package/dist/workspaces.test.d.ts +0 -1
  571. package/dist/workspaces.test.js +0 -56
  572. package/dist/zero-config.test.d.ts +0 -1
  573. package/dist/zero-config.test.js +0 -37
  574. /package/dist/{util/binaries/resolvers/fallback.d.ts → binaries/resolvers/rollup.d.ts} +0 -0
package/README.md CHANGED
@@ -7,23 +7,23 @@ dependencies leads to improved performance, less maintenance and easier refactor
7
7
  export const myVar = true;
8
8
  ```
9
9
 
10
- ESLint handles files in isolation, so it does not know whether `myVar` is actually used somewhere else. Knip lints the
11
- project as a whole, and finds unused exports, files and dependencies.
10
+ This is where ESLint stops: it handles files in isolation, so it does not know whether `myVar` is used somewhere else.
11
+ This is where Knip starts: it lints the project as a whole, and finds unused exports, files and dependencies.
12
12
 
13
- It's only human to forget removing things that you no longer use. But how do you find out? Where to even start finding
13
+ It's only human to forget removing things that you no longer use. But how do you find out? Where do you start finding
14
14
  things that can be removed?
15
15
 
16
16
  The dots don't connect themselves. This is where Knip comes in:
17
17
 
18
18
  - [x] Finds **unused files, dependencies and exports**
19
19
  - [x] Finds used dependencies not listed in `package.json`
20
- - [x] Finds duplicate exports
21
- - [x] Finds unused members of classes and enums
22
- - [x] Built-in support for [monorepos/workspaces][1]
20
+ - [x] Built-in support for [workspaces (monorepos)][1]
23
21
  - [x] Growing list of [built-in plugins][2]
24
- - [x] Use [compilers][3] to include other file types (e.g. MDX, Vue, Svelte)
22
+ - [x] Use [compilers][3] to include other file types (e.g. `.mdx`, `.vue`, `.svelte`)
25
23
  - [x] Checks npm scripts for used and unlisted dependencies
26
- - [x] Supports JavaScript (without `tsconfig.json`, or TypeScript `allowJs: true`)
24
+ - [x] Finds unused members of classes and enums
25
+ - [x] Finds duplicate exports
26
+ - [x] Supports any combination of JavaScript and TypeScript
27
27
  - [x] Features multiple [reporters][4] and supports [custom reporters][5]
28
28
  - [x] Run Knip as part of your CI environment to detect issues and prevent regressions
29
29
 
@@ -34,8 +34,8 @@ with OpenAI_</sup>
34
34
 
35
35
  ## Migrating to v2.0.0
36
36
 
37
- Migrating from v1 to v2 requires no changes in configuration. Please see [https://github.com/webpro/knip/issues/73][8]
38
- for the full story.
37
+ Migrating from v1 to v2 requires no changes in configuration. Mostly it's just a whole lot faster! The [release notes
38
+ for v2][8] provide more details.
39
39
 
40
40
  ## Installation
41
41
 
@@ -63,7 +63,7 @@ file. Let's say you are using `.ts` files excusively and have all source files o
63
63
 
64
64
  ```json
65
65
  {
66
- "$schema": "https://unpkg.com/knip@next/schema.json",
66
+ "$schema": "https://unpkg.com/knip@2/schema.json",
67
67
  "entry": ["src/index.ts"],
68
68
  "project": ["src/**/*.ts"]
69
69
  }
@@ -107,7 +107,7 @@ Then run the checks with `npx knip`. Or first add this script to `package.json`:
107
107
  Use `npm run knip` to analyze the project and output unused files, dependencies and exports. Knip works just fine with
108
108
  `yarn` or `pnpm` as well.
109
109
 
110
- Using workspaces in a monorepo? Please see [workspaces & monorepos][1] for more details about configuring them.
110
+ Using workspaces in a monorepo? Please see [workspaces][1] for more details about configuring them.
111
111
 
112
112
  ## Command-line options
113
113
 
@@ -122,11 +122,10 @@ Using workspaces in a monorepo? Please see [workspaces & monorepos][1] for more
122
122
  --production Analyze only production source files (e.g. no tests, devDependencies, exported types)
123
123
  --strict Consider only direct dependencies of workspace (not devDependencies, not other workspaces)
124
124
  --workspace Analyze a single workspace (default: analyze all configured workspaces)
125
- --ignore Ignore files matching this glob pattern, can be repeated
126
125
  --no-gitignore Don't use .gitignore
127
126
  --include Report only provided issue type(s), can be comma-separated or repeated (1)
128
127
  --exclude Exclude provided issue type(s) from report, can be comma-separated or repeated (1)
129
- --dependencies Shortcut for --include dependencies,unlisted
128
+ --dependencies Shortcut for --include dependencies,unlisted,unresolved
130
129
  --exports Shortcut for --include exports,nsExports,classMembers,types,nsTypes,enumMembers,duplicates
131
130
  --no-progress Don't show dynamic progress updates
132
131
  --reporter Select reporter: symbols, compact, codeowners, json (default: symbols)
@@ -233,7 +232,7 @@ As always, make sure to backup files or use Git before deleting files or making
233
232
 
234
233
  🔁 Repeat the process to reveal new unused files and exports. Sometimes it's so liberating to remove things!
235
234
 
236
- ## Workspaces & Monorepos
235
+ ## Workspaces (monorepos)
237
236
 
238
237
  Workspaces and monorepos are handled out-of-the-box by Knip. Every workspace is part of the analysis.
239
238
 
@@ -282,6 +281,22 @@ Use `--debug` to get more verbose output.
282
281
 
283
282
  ## Plugins
284
283
 
284
+ Plugins tell Knip where to look for configuration and entry files, and if necessary have a custom dependency finder.
285
+ Knip plugins are automatically activated, you don't need to install or configure anything.
286
+
287
+ To explain what they do, here's a quick example from a `.eslintrc.json` configuration file (for ESLint):
288
+
289
+ ```json
290
+ {
291
+ "extends": ["airbnb"],
292
+ "plugins": ["prettier"]
293
+ }
294
+ ```
295
+
296
+ Knip's ESLint plugin reads `.eslintrc.json` and will return `eslint-config-airbnb` and `eslint-plugin-prettier` from
297
+ this example to Knip, so it can tell you whether `package.json` is out of sync. In a nutshell, this is how plugins work.
298
+ This is especially useful over time when such configuration files change (and they will)!
299
+
285
300
  Knip contains a growing list of plugins:
286
301
 
287
302
  - [Ava][plugin-ava]
@@ -317,32 +332,60 @@ Knip contains a growing list of plugins:
317
332
  - [Storybook][plugin-storybook]
318
333
  - [Stryker][plugin-stryker]
319
334
  - [Svelte][plugin-svelte]
335
+ - [Tailwind][plugin-tailwind]
320
336
  - [TypeDoc][plugin-typedoc]
321
337
  - [TypeScript][plugin-typescript]
322
338
  - [Vitest][plugin-vitest]
323
339
  - [Webpack][plugin-webpack]
324
340
 
325
341
  Plugins are automatically activated. Each plugin is automatically enabled based on simple heuristics. Most of them check
326
- whether one or one of a few (dev) dependencies are listed in `package.json`. Once enabled, they add a set of
327
- configuration and/or entry files for Knip to analyze. These defaults can be overriden.
328
-
329
- Most plugins use one or both of the following file types:
342
+ whether one of a few dependencies are listed in `package.json`. Once enabled, they add a set of `config` files for
343
+ itself and/or `entry` files for Knip to analyze.
330
344
 
331
- - `config` - custom dependency resolvers are applied to the [config files][11]
332
- - `entry` - files to include with the analysis of the rest of the source code
345
+ - `config` files are given to the plugin's dependency finder
346
+ - `entry` files are given to Knip to include with the analysis of the rest of the source code
333
347
 
334
348
  See each plugin's documentation for its default values.
335
349
 
336
350
  ### `config`
337
351
 
338
- Plugins may include `config` files. They are parsed by the plugin's custom dependency finder. Custom dependency finders
339
- return all dependencies referenced in the configuration files it is given. Knip handles the rest to determine which of
340
- those dependencies are unused or missing.
352
+ Plugins usually include `config` files. They are handled by the plugin's custom dependency finder, which returns all
353
+ dependencies referenced in the files it is given. Knip handles the rest to determine which of those dependencies are
354
+ unused or missing.
341
355
 
342
356
  ### `entry`
343
357
 
344
- Other configuration files use `require` or `import` statements to use dependencies, so they can be analyzed like the
345
- rest of the source files. These configuration files are also considered `entry` files.
358
+ Other configuration files use `require` or `import` statements to use dependencies, so they don't need special handing
359
+ and can be analyzed like any other source file. That's why these configuration files are also used as `entry` files.
360
+
361
+ ### Override plugin configuration
362
+
363
+ Usually no custom configuration is required for plugins, but if your project uses custom file locations then Knip allows
364
+ to override any defaults. Let's take Cypress for example. By default it uses `cypress.config.js`, but your project uses
365
+ `config/cypress.js`. Also, the default pattern for test files is `cypress/e2e/**/*.cy.js`, but your project has them at
366
+ `e2e-tests/*.spec.ts`. Here's how to configure this:
367
+
368
+ ```json
369
+ {
370
+ "cypress": {
371
+ "entry": ["config/cypress.js", "e2e-tests/*.spec.js"]
372
+ }
373
+ }
374
+ ```
375
+
376
+ ### Multi-project repositories
377
+
378
+ Some repositories have a single `package.json`, but consist of multiple projects with potentially lots of configuration
379
+ files (such as the [Nx "intregrated repo" style][11]). Let's assume some of these projects are apps and have their own
380
+ Cypress configuration and test files. In that case, we could configure the Cypress plugin like this:
381
+
382
+ ```json
383
+ {
384
+ "cypress": {
385
+ "entry": ["apps/**/cypress.config.ts", "apps/**/cypress/e2e/*.spec.ts"]
386
+ }
387
+ }
388
+ ```
346
389
 
347
390
  ### Disable a plugin
348
391
 
@@ -360,7 +403,8 @@ finding unused or missing dependencies. For instance, `.mdx`, `.vue` and `.svelt
360
403
 
361
404
  Currently this is only supported by using `knip.js` or `knip.ts`. Provide a `compilers` object in the configuration
362
405
  where each key represents the extension and the value is a function that takes the contents of these files as input and
363
- returns JavaScript or TypeScript as output. For example:
406
+ returns JavaScript or TypeScript as output. Here is an example that compiles `.mdx` files to JavaScript so these files
407
+ and their imports and exports become part of the analyis:
364
408
 
365
409
  ```js
366
410
  import { compileSync } from 'mdx-js/mdx';
@@ -421,7 +465,7 @@ aliases. They can be configured manually:
421
465
 
422
466
  ```json
423
467
  {
424
- "$schema": "https://unpkg.com/knip@next/schema.json",
468
+ "$schema": "https://unpkg.com/knip@2/schema.json",
425
469
  "paths": {
426
470
  "@lib": ["./lib/index.ts"],
427
471
  "@lib/*": ["./lib/*"]
@@ -447,22 +491,8 @@ Knip provides the following built-in reporters:
447
491
 
448
492
  When the provided built-in reporters are not sufficient, a custom reporter can be implemented.
449
493
 
450
- Pass `--reporter ./my-reporter`, with the default export of that module having this interface:
451
-
452
- ```ts
453
- type Reporter = (options: ReporterOptions) => void;
454
-
455
- type ReporterOptions = {
456
- report: Report;
457
- issues: Issues;
458
- cwd: string;
459
- workingDir: string;
460
- isProduction: boolean;
461
- options: string;
462
- };
463
- ```
464
-
465
- The data can then be used to write issues to `stdout`, a JSON or CSV file, or sent to a service.
494
+ Pass `--reporter ./my-reporter` from the command-line. The data can then be used to write issues to `stdout`, a JSON or
495
+ CSV file, or sent to a service.
466
496
 
467
497
  Find more details and ideas in [custom reporters][14].
468
498
 
@@ -537,23 +567,23 @@ All of this is hiding problems, so please make sure to plan for fixing them and/
537
567
 
538
568
  This table is an ongoing comparison. Based on their docs (please report any mistakes):
539
569
 
540
- | Feature | **knip** | [depcheck][17] | [unimported][18] | [ts-unused-exports][19] | [ts-prune][20] |
541
- | :-------------------------------- | :------: | :------------: | :--------------: | :---------------------: | :------------: |
542
- | Unused files | ✅ | - | ✅ | - | - |
543
- | Unused dependencies | ✅ | ✅ | ✅ | - | - |
544
- | Unlisted dependencies | ✅ | ✅ | ✅ | - | - |
545
- | [Plugins][2] | ✅ | ✅ | ❌ | - | - |
546
- | [Compilers][3] | ✅ | - | - | - | - |
547
- | Unused exports | ✅ | - | - | ✅ | ✅ |
548
- | Unused class members | ✅ | - | - | - | - |
549
- | Unused enum members | ✅ | - | - | - | - |
550
- | Duplicate exports | ✅ | - | - | ❌ | ❌ |
551
- | Search namespaces | ✅ | - | - | ✅ | ❌ |
552
- | Custom reporters | ✅ | - | - | - | - |
553
- | JavaScript support | ✅ | ✅ | ✅ | - | - |
554
- | Configure entry files | ✅ | ❌ | ✅ | ❌ | ❌ |
555
- | [Support workspaces/monorepos][1] | ✅ | ❌ | ❌ | - | - |
556
- | ESLint plugin available | - | - | - | ✅ | - |
570
+ | Feature | **knip** | [depcheck][17] | [unimported][18] | [ts-unused-exports][19] | [ts-prune][20] |
571
+ | :---------------------- | :------: | :------------: | :--------------: | :---------------------: | :------------: |
572
+ | Unused files | ✅ | - | ✅ | - | - |
573
+ | Unused dependencies | ✅ | ✅ | ✅ | - | - |
574
+ | Unlisted dependencies | ✅ | ✅ | ✅ | - | - |
575
+ | [Plugins][2] | ✅ | ✅ | ❌ | - | - |
576
+ | [Compilers][3] | ✅ | - | - | - | - |
577
+ | Unused exports | ✅ | - | - | ✅ | ✅ |
578
+ | Unused class members | ✅ | - | - | - | - |
579
+ | Unused enum members | ✅ | - | - | - | - |
580
+ | Duplicate exports | ✅ | - | - | ❌ | ❌ |
581
+ | Search namespaces | ✅ | - | - | ✅ | ❌ |
582
+ | Custom reporters | ✅ | - | - | - | - |
583
+ | JavaScript support | ✅ | ✅ | ✅ | - | - |
584
+ | Configure entry files | ✅ | ❌ | ✅ | ❌ | ❌ |
585
+ | [Support workspaces][1] | ✅ | ❌ | ❌ | - | - |
586
+ | ESLint plugin available | - | - | - | ✅ | - |
557
587
 
558
588
  ✅ = Supported, ❌ = Not supported, - = Out of scope
559
589
 
@@ -591,22 +621,34 @@ The following commands are similar:
591
621
  knip --include exports,types
592
622
  knip --exports # Adds unused exports/types in namespaces and unused enum/class members
593
623
 
624
+ ## Projects using Knip
625
+
626
+ Many thanks to some of the early adopters of Knip:
627
+
628
+ - [Block Protocol][22]
629
+ - [DeepmergeTS][23]
630
+ - [eslint-plugin-functional][24]
631
+ - [freeCodeCamp.org][25]
632
+ - [is-immutable-type][26]
633
+ - [release-it][27]
634
+ - [Template TypeScript Node Package][28]
635
+
594
636
  ## Knip?!
595
637
 
596
638
  Knip is Dutch for a "cut". A Dutch expression is "to be ge**knip**t for something", which means to be perfectly suited
597
639
  for the job. I'm motivated to make knip perfectly suited for the job of cutting projects to perfection! ✂️
598
640
 
599
- [1]: #workspaces--monorepos
641
+ [1]: #workspaces-monorepos
600
642
  [2]: #plugins
601
643
  [3]: #compilers
602
644
  [4]: #reporters
603
645
  [5]: #custom-reporters
604
646
  [6]: https://labs.openai.com/s/xZQACaLepaKya0PRUPtIN5dC
605
647
  [7]: ./assets/cow-with-orange-scissors-van-gogh-style.webp
606
- [8]: https://github.com/webpro/knip/issues/73
648
+ [8]: ./docs/release-notes-v2.md
607
649
  [9]: #faq
608
650
  [10]: #ignore
609
- [11]: #config
651
+ [11]: https://nx.dev/concepts/integrated-vs-package-based
610
652
  [12]: ./docs/writing-a-plugin.md
611
653
  [13]: ./docs/compilers.md
612
654
  [14]: ./docs/custom-reporters.md
@@ -617,6 +659,13 @@ for the job. I'm motivated to make knip perfectly suited for the job of cutting
617
659
  [19]: https://github.com/pzavolinsky/ts-unused-exports
618
660
  [20]: https://github.com/nadeesha/ts-prune
619
661
  [21]: #production-mode
662
+ [22]: https://github.com/blockprotocol/blockprotocol
663
+ [23]: https://github.com/RebeccaStevens/deepmerge-ts
664
+ [24]: https://github.com/eslint-functional/eslint-plugin-functional
665
+ [25]: https://github.com/freeCodeCamp/freeCodeCamp
666
+ [26]: https://github.com/RebeccaStevens/is-immutable-type
667
+ [27]: https://github.com/release-it/release-it
668
+ [28]: https://github.com/JoshuaKGoldberg/template-typescript-node-package
620
669
  [plugin-ava]: ./src/plugins/ava
621
670
  [plugin-babel]: ./src/plugins/babel
622
671
  [plugin-capacitor]: ./src/plugins/capacitor
@@ -650,6 +699,7 @@ for the job. I'm motivated to make knip perfectly suited for the job of cutting
650
699
  [plugin-storybook]: ./src/plugins/storybook
651
700
  [plugin-stryker]: ./src/plugins/stryker
652
701
  [plugin-svelte]: ./src/plugins/svelte
702
+ [plugin-tailwind]: ./src/plugins/tailwind
653
703
  [plugin-typedoc]: ./src/plugins/typedoc
654
704
  [plugin-typescript]: ./src/plugins/typescript
655
705
  [plugin-vitest]: ./src/plugins/vitest
@@ -1,6 +1,7 @@
1
1
  import parseArgs from 'minimist';
2
- import { tryResolveFilePaths } from './node.js';
3
- const argResolvers = {
2
+ import { compact } from '../../util/array.js';
3
+ import { tryResolveFilePaths } from './util.js';
4
+ const argFilters = {
4
5
  'babel-node': parsed => [parsed._[0], parsed.require].flat(),
5
6
  'ts-node': parsed => [parsed._[0], parsed.require].flat(),
6
7
  tsx: parsed => parsed._.filter(p => p !== 'watch'),
@@ -8,7 +9,7 @@ const argResolvers = {
8
9
  };
9
10
  export const resolve = (binary, args, { cwd }) => {
10
11
  const parsed = parseArgs(args, { string: ['r'], alias: { require: ['r', 'loader'] } });
11
- const resolver = argResolvers[binary] ?? argResolvers.default;
12
- const resolve = resolver(parsed);
13
- return [binary, ...tryResolveFilePaths(cwd, resolve)];
12
+ const argFilter = argFilters[binary] ?? argFilters.default;
13
+ const filteredArgs = compact(argFilter(parsed));
14
+ return [binary, ...tryResolveFilePaths(cwd, filteredArgs)];
14
15
  };
@@ -1,4 +1,5 @@
1
1
  export * as node from './node.js';
2
2
  export * as npx from './npx.js';
3
3
  export * as pnpm from './pnpm.js';
4
+ export * as rollup from './rollup.js';
4
5
  export * as yarn from './yarn.js';
@@ -1,4 +1,5 @@
1
1
  export * as node from './node.js';
2
2
  export * as npx from './npx.js';
3
3
  export * as pnpm from './pnpm.js';
4
+ export * as rollup from './rollup.js';
4
5
  export * as yarn from './yarn.js';
@@ -1,3 +1,2 @@
1
1
  import type { Resolver } from '../types.js';
2
- export declare const tryResolveFilePaths: (cwd: string, specifiers: string[]) => string[];
3
2
  export declare const resolve: Resolver;
@@ -1,19 +1,5 @@
1
1
  import parseArgs from 'minimist';
2
- import { isInNodeModules, join } from '../../util/path.js';
3
- import { _tryResolve } from '../../util/require.js';
4
- const tryResolveFilePath = (cwd, specifier, fallback) => {
5
- if (specifier) {
6
- const filePath = join(cwd, specifier);
7
- if (!isInNodeModules(filePath)) {
8
- const resolvedFilePath = _tryResolve(filePath, cwd);
9
- if (resolvedFilePath)
10
- return [resolvedFilePath];
11
- }
12
- return fallback ? [fallback] : [];
13
- }
14
- return [];
15
- };
16
- export const tryResolveFilePaths = (cwd, specifiers) => specifiers.flatMap(specifier => tryResolveFilePath(cwd, specifier, specifier));
2
+ import { tryResolveFilePath, tryResolveFilePaths } from './util.js';
17
3
  export const resolve = (binary, args, { cwd }) => {
18
4
  const parsed = parseArgs(args, { string: ['r'], alias: { require: ['r', 'loader', 'experimental-loader'] } });
19
5
  return [...tryResolveFilePath(cwd, parsed._[0]), ...tryResolveFilePaths(cwd, [parsed.require].flat())];
@@ -0,0 +1,10 @@
1
+ import parseArgs from 'minimist';
2
+ import { tryResolveFilePaths } from './util.js';
3
+ export const resolve = (binary, args, { cwd, fromArgs }) => {
4
+ const safeArgs = args.filter(arg => arg !== '--watch');
5
+ const parsed = parseArgs(safeArgs, { alias: { plugin: 'p' } });
6
+ const watchers = parsed.watch ? fromArgs(Object.values(parsed.watch)) : [];
7
+ const plugins = parsed.plugin ? tryResolveFilePaths(cwd, [parsed.plugin].flat()) : [];
8
+ const configPlugins = parsed.configPlugin ? tryResolveFilePaths(cwd, [parsed.configPlugin].flat()) : [];
9
+ return [binary, ...watchers, ...plugins, ...configPlugins];
10
+ };
@@ -0,0 +1,2 @@
1
+ export declare const tryResolveFilePath: (cwd: string, specifier: string, fallback?: string) => string[];
2
+ export declare const tryResolveFilePaths: (cwd: string, specifiers: string[]) => string[];
@@ -0,0 +1,15 @@
1
+ import { isInNodeModules, join } from '../../util/path.js';
2
+ import { _tryResolve } from '../../util/require.js';
3
+ export const tryResolveFilePath = (cwd, specifier, fallback) => {
4
+ if (specifier) {
5
+ const filePath = join(cwd, specifier);
6
+ if (!isInNodeModules(filePath)) {
7
+ const resolvedFilePath = _tryResolve(filePath, cwd);
8
+ if (resolvedFilePath)
9
+ return [resolvedFilePath];
10
+ }
11
+ return fallback ? [fallback] : [];
12
+ }
13
+ return [];
14
+ };
15
+ export const tryResolveFilePaths = (cwd, specifiers) => specifiers.flatMap(specifier => tryResolveFilePath(cwd, specifier, specifier));
package/dist/cli.js CHANGED
File without changes
@@ -11,10 +11,11 @@ import { findFile, loadJSON } from './util/fs.js';
11
11
  import { getIncludedIssueTypes } from './util/get-included-issue-types.js';
12
12
  import { _dirGlob } from './util/glob.js';
13
13
  import { _load } from './util/loader.js';
14
- import { join, relative } from './util/path.js';
14
+ import { join, relative, toPosix } from './util/path.js';
15
15
  import { toCamelCase } from './util/plugin.js';
16
16
  import { byPathDepth } from './util/workspace.js';
17
17
  const { config: rawConfigArg, workspace: rawWorkspaceArg, include = [], exclude = [], dependencies = false, exports = false, } = parsedArgs.values;
18
+ const workspaceArg = rawWorkspaceArg ? toPosix(rawWorkspaceArg).replace(/^\.\//, '').replace(/\/$/, '') : undefined;
18
19
  const getDefaultWorkspaceConfig = (extensions) => {
19
20
  const exts = [...DEFAULT_EXTENSIONS, ...(extensions ?? [])].map(ext => ext.slice(1)).join(',');
20
21
  return {
@@ -180,7 +181,6 @@ export class ConfigurationChief {
180
181
  }
181
182
  getEnabledWorkspaces() {
182
183
  const allWorkspaces = this.getAllWorkspaces();
183
- const workspace = (rawWorkspaceArg ?? '').replace(/\/$/, '');
184
184
  const getAncestors = (name) => (ancestors, ancestorName) => {
185
185
  if (name === ancestorName)
186
186
  return ancestors;
@@ -188,9 +188,7 @@ export class ConfigurationChief {
188
188
  ancestors.push(ancestorName);
189
189
  return ancestors;
190
190
  };
191
- const workspaces = rawWorkspaceArg
192
- ? [workspace, ...allWorkspaces.reduce(getAncestors(workspace), [])]
193
- : allWorkspaces;
191
+ const workspaces = workspaceArg ? [workspaceArg] : allWorkspaces;
194
192
  return workspaces.sort(byPathDepth).map((name) => ({
195
193
  name,
196
194
  pkgName: this.manifestWorkspaces.get(name) ?? this.manifest?.name,