From 55426956c89a05810054d8ce2515450c91c2372b Mon Sep 17 00:00:00 2001 From: Filip Wachowiak Date: Sun, 12 Jan 2025 23:16:20 +0100 Subject: [PATCH 1/7] feat: add dependency-cruiser plugin --- .../dependency-cruiser/.dependency-cruiser.js | 1 + .../custom-depcruise-config.js | 1 + .../plugins/dependency-cruiser/package.json | 11 ++++++++ packages/knip/schema.json | 4 +++ .../src/plugins/dependency-cruiser/index.ts | 27 ++++++++++++++++++ packages/knip/src/plugins/index.ts | 2 ++ packages/knip/src/schema/plugins.ts | 1 + packages/knip/src/types/PluginNames.ts | 2 ++ .../test/plugins/dependency-cruiser.test.ts | 28 +++++++++++++++++++ 9 files changed, 77 insertions(+) create mode 100644 packages/knip/fixtures/plugins/dependency-cruiser/.dependency-cruiser.js create mode 100644 packages/knip/fixtures/plugins/dependency-cruiser/custom-depcruise-config.js create mode 100644 packages/knip/fixtures/plugins/dependency-cruiser/package.json create mode 100644 packages/knip/src/plugins/dependency-cruiser/index.ts create mode 100644 packages/knip/test/plugins/dependency-cruiser.test.ts diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/.dependency-cruiser.js b/packages/knip/fixtures/plugins/dependency-cruiser/.dependency-cruiser.js new file mode 100644 index 000000000..7c6d6c73d --- /dev/null +++ b/packages/knip/fixtures/plugins/dependency-cruiser/.dependency-cruiser.js @@ -0,0 +1 @@ +module.exports = {} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/custom-depcruise-config.js b/packages/knip/fixtures/plugins/dependency-cruiser/custom-depcruise-config.js new file mode 100644 index 000000000..7c6d6c73d --- /dev/null +++ b/packages/knip/fixtures/plugins/dependency-cruiser/custom-depcruise-config.js @@ -0,0 +1 @@ +module.exports = {} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/package.json b/packages/knip/fixtures/plugins/dependency-cruiser/package.json new file mode 100644 index 000000000..8e5d06516 --- /dev/null +++ b/packages/knip/fixtures/plugins/dependency-cruiser/package.json @@ -0,0 +1,11 @@ +{ + "name": "@fixtures/dependency-cruiser", + "version": "*", + "devDependencies": { + "dependency-cruiser": "*" + }, + "scripts": { + "test": "depcruise", + "test:custom": "depcruise --config custom-depcruise-config.js" + } +} \ No newline at end of file diff --git a/packages/knip/schema.json b/packages/knip/schema.json index a0be0d805..824cde0b3 100644 --- a/packages/knip/schema.json +++ b/packages/knip/schema.json @@ -328,6 +328,10 @@ "title": "Cypress plugin configuration (https://knip.dev/reference/plugins/cypress)", "$ref": "#/definitions/plugin" }, + "dependency-cruiser": { + "title": "dependency-cruiser plugin configuration (https://knip.dev/reference/plugins/dependency-cruiser)", + "$ref": "#/definitions/plugin" + }, "dotenv": { "title": "dotenv plugin configuration (https://knip.dev/reference/plugins/dotenv)", "$ref": "#/definitions/plugin" diff --git a/packages/knip/src/plugins/dependency-cruiser/index.ts b/packages/knip/src/plugins/dependency-cruiser/index.ts new file mode 100644 index 000000000..9c3b4cc9b --- /dev/null +++ b/packages/knip/src/plugins/dependency-cruiser/index.ts @@ -0,0 +1,27 @@ +import type { IsPluginEnabled, Plugin } from '../../types/config.js'; +import { hasDependency } from '../../util/plugin.js'; + +// https://github.com/sverweij/dependency-cruiser + +const title = 'dependency-cruiser'; + +const enablers = ['dependency-cruiser']; + +const isEnabled: IsPluginEnabled = ({ dependencies }) => hasDependency(dependencies, enablers); + +const config = ['.dependency-cruiser.{js,cjs,mjs,json}']; + +const args = { + binaries: ['depcruise'], + alias: { config: ['c'] }, + string: ['config'], + config: true, +}; + +export default { + title, + enablers, + isEnabled, + config, + args, +} satisfies Plugin; diff --git a/packages/knip/src/plugins/index.ts b/packages/knip/src/plugins/index.ts index f7c8f6036..566702c9e 100644 --- a/packages/knip/src/plugins/index.ts +++ b/packages/knip/src/plugins/index.ts @@ -11,6 +11,7 @@ import { default as commitlint } from './commitlint/index.js'; import { default as cspell } from './cspell/index.js'; import { default as cucumber } from './cucumber/index.js'; import { default as cypress } from './cypress/index.js'; +import { default as dependencyCruiser } from './dependency-cruiser/index.js'; import { default as dotenv } from './dotenv/index.js'; import { default as drizzle } from './drizzle/index.js'; import { default as eleventy } from './eleventy/index.js'; @@ -103,6 +104,7 @@ export const Plugins = { cspell, cucumber, cypress, + 'dependency-cruiser': dependencyCruiser, dotenv, drizzle, eleventy, diff --git a/packages/knip/src/schema/plugins.ts b/packages/knip/src/schema/plugins.ts index 2273c45ee..813b71ed8 100644 --- a/packages/knip/src/schema/plugins.ts +++ b/packages/knip/src/schema/plugins.ts @@ -25,6 +25,7 @@ export const pluginsSchema = z.object({ cspell: pluginSchema, cucumber: pluginSchema, cypress: pluginSchema, + 'dependency-cruiser': pluginSchema, dotenv: pluginSchema, drizzle: pluginSchema, eleventy: pluginSchema, diff --git a/packages/knip/src/types/PluginNames.ts b/packages/knip/src/types/PluginNames.ts index 959b680e7..c45cc6c72 100644 --- a/packages/knip/src/types/PluginNames.ts +++ b/packages/knip/src/types/PluginNames.ts @@ -12,6 +12,7 @@ export type PluginName = | 'cspell' | 'cucumber' | 'cypress' + | 'dependency-cruiser' | 'dotenv' | 'drizzle' | 'eleventy' @@ -104,6 +105,7 @@ export const pluginNames = [ 'cspell', 'cucumber', 'cypress', + 'dependency-cruiser', 'dotenv', 'drizzle', 'eleventy', diff --git a/packages/knip/test/plugins/dependency-cruiser.test.ts b/packages/knip/test/plugins/dependency-cruiser.test.ts new file mode 100644 index 000000000..e7e678ab0 --- /dev/null +++ b/packages/knip/test/plugins/dependency-cruiser.test.ts @@ -0,0 +1,28 @@ +import { test } from 'bun:test'; +import assert from 'node:assert/strict'; +import { main } from '../../src/index.js'; +import { resolve } from '../../src/util/path.js'; +import baseArguments from '../helpers/baseArguments.js'; +import baseCounters from '../helpers/baseCounters.js'; + +const cwd = resolve('fixtures/plugins/dependency-cruiser'); + +test('Find dependencies with the dependency-cruiser plugin', async () => { + const { issues, counters } = await main({ + ...baseArguments, + cwd, + }); + + // Check that dependencies are properly detected + assert(issues.devDependencies['package.json']['dependency-cruiser']); + assert(issues.binaries['package.json']['depcruise']); + + console.log(issues) + assert.deepEqual(counters, { + ...baseCounters, + binaries: 1, + devDependencies: 1, + processed: 2, + total: 2, + }); +}); From 95d8f269ae7c5c5bfb22c125376acf3b8fc86bc2 Mon Sep 17 00:00:00 2001 From: Filip Wachowiak Date: Sun, 12 Jan 2025 23:18:06 +0100 Subject: [PATCH 2/7] fix: remove console log --- packages/knip/test/plugins/dependency-cruiser.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/knip/test/plugins/dependency-cruiser.test.ts b/packages/knip/test/plugins/dependency-cruiser.test.ts index e7e678ab0..58dc14065 100644 --- a/packages/knip/test/plugins/dependency-cruiser.test.ts +++ b/packages/knip/test/plugins/dependency-cruiser.test.ts @@ -17,7 +17,6 @@ test('Find dependencies with the dependency-cruiser plugin', async () => { assert(issues.devDependencies['package.json']['dependency-cruiser']); assert(issues.binaries['package.json']['depcruise']); - console.log(issues) assert.deepEqual(counters, { ...baseCounters, binaries: 1, From 3f25b540aa5a55d07e7e8ea2938f41c8a186fd3e Mon Sep 17 00:00:00 2001 From: Filip Wachowiak Date: Mon, 13 Jan 2025 18:11:27 +0100 Subject: [PATCH 3/7] improve plugin definition --- packages/knip/src/plugins/dependency-cruiser/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/knip/src/plugins/dependency-cruiser/index.ts b/packages/knip/src/plugins/dependency-cruiser/index.ts index 9c3b4cc9b..15b96b0bd 100644 --- a/packages/knip/src/plugins/dependency-cruiser/index.ts +++ b/packages/knip/src/plugins/dependency-cruiser/index.ts @@ -12,9 +12,7 @@ const isEnabled: IsPluginEnabled = ({ dependencies }) => hasDependency(dependenc const config = ['.dependency-cruiser.{js,cjs,mjs,json}']; const args = { - binaries: ['depcruise'], - alias: { config: ['c'] }, - string: ['config'], + binaries: ['depcruise', 'dependency-cruise', 'dependency-cruiser', 'depcruise-baseline'], config: true, }; From f8d37f4bf3d6093b0dba503598df0717057ad57b Mon Sep 17 00:00:00 2001 From: Filip Wachowiak Date: Mon, 13 Jan 2025 18:31:01 +0100 Subject: [PATCH 4/7] add more binaries in test --- .../plugins/dependency-cruiser/baseline.config.js | 0 .../dependency-cruiser/dependency-cruise.config.js | 0 .../node_modules/dependency-cruiser/index.js | 0 .../node_modules/dependency-cruiser/package.json | 9 +++++++++ .../fixtures/plugins/dependency-cruiser/package.json | 6 ++++-- .../knip/test/plugins/dependency-cruiser.test.ts | 12 ++++-------- 6 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 packages/knip/fixtures/plugins/dependency-cruiser/baseline.config.js create mode 100644 packages/knip/fixtures/plugins/dependency-cruiser/dependency-cruise.config.js create mode 100644 packages/knip/fixtures/plugins/dependency-cruiser/node_modules/dependency-cruiser/index.js create mode 100644 packages/knip/fixtures/plugins/dependency-cruiser/node_modules/dependency-cruiser/package.json diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/baseline.config.js b/packages/knip/fixtures/plugins/dependency-cruiser/baseline.config.js new file mode 100644 index 000000000..e69de29bb diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/dependency-cruise.config.js b/packages/knip/fixtures/plugins/dependency-cruiser/dependency-cruise.config.js new file mode 100644 index 000000000..e69de29bb diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/node_modules/dependency-cruiser/index.js b/packages/knip/fixtures/plugins/dependency-cruiser/node_modules/dependency-cruiser/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/node_modules/dependency-cruiser/package.json b/packages/knip/fixtures/plugins/dependency-cruiser/node_modules/dependency-cruiser/package.json new file mode 100644 index 000000000..dab7c959b --- /dev/null +++ b/packages/knip/fixtures/plugins/dependency-cruiser/node_modules/dependency-cruiser/package.json @@ -0,0 +1,9 @@ +{ + "name": "dependency-cruiser", + "bin": { + "depcruise": "index.js", + "dependency-cruise": "index.js", + "dependency-cruiser": "index.js", + "depcruise-baseline": "index.js" + } +} diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/package.json b/packages/knip/fixtures/plugins/dependency-cruiser/package.json index 8e5d06516..12a8bcbf9 100644 --- a/packages/knip/fixtures/plugins/dependency-cruiser/package.json +++ b/packages/knip/fixtures/plugins/dependency-cruiser/package.json @@ -5,7 +5,9 @@ "dependency-cruiser": "*" }, "scripts": { - "test": "depcruise", - "test:custom": "depcruise --config custom-depcruise-config.js" + "test": "dependency-cruiser", + "test:custom": "depcruise --config custom-depcruise-config.js", + "test:baseline": "depcruise-baseline -c baseline.config.js", + "test:dependency-cruise": "dependency-cruise -c dependency-cruise.config.js" } } \ No newline at end of file diff --git a/packages/knip/test/plugins/dependency-cruiser.test.ts b/packages/knip/test/plugins/dependency-cruiser.test.ts index 58dc14065..07db13ae7 100644 --- a/packages/knip/test/plugins/dependency-cruiser.test.ts +++ b/packages/knip/test/plugins/dependency-cruiser.test.ts @@ -8,20 +8,16 @@ import baseCounters from '../helpers/baseCounters.js'; const cwd = resolve('fixtures/plugins/dependency-cruiser'); test('Find dependencies with the dependency-cruiser plugin', async () => { - const { issues, counters } = await main({ + const { issues,counters } = await main({ ...baseArguments, cwd, }); - // Check that dependencies are properly detected - assert(issues.devDependencies['package.json']['dependency-cruiser']); - assert(issues.binaries['package.json']['depcruise']); + console.log(issues); assert.deepEqual(counters, { ...baseCounters, - binaries: 1, - devDependencies: 1, - processed: 2, - total: 2, + processed: 4, + total: 4, }); }); From dd3db11cbc52e287894250cd2bd8718e86d49a9f Mon Sep 17 00:00:00 2001 From: Filip Wachowiak Date: Mon, 13 Jan 2025 18:34:12 +0100 Subject: [PATCH 5/7] add content to configs --- .../knip/fixtures/plugins/dependency-cruiser/baseline.config.js | 1 + .../plugins/dependency-cruiser/dependency-cruise.config.js | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/baseline.config.js b/packages/knip/fixtures/plugins/dependency-cruiser/baseline.config.js index e69de29bb..7c6d6c73d 100644 --- a/packages/knip/fixtures/plugins/dependency-cruiser/baseline.config.js +++ b/packages/knip/fixtures/plugins/dependency-cruiser/baseline.config.js @@ -0,0 +1 @@ +module.exports = {} \ No newline at end of file diff --git a/packages/knip/fixtures/plugins/dependency-cruiser/dependency-cruise.config.js b/packages/knip/fixtures/plugins/dependency-cruiser/dependency-cruise.config.js index e69de29bb..7c6d6c73d 100644 --- a/packages/knip/fixtures/plugins/dependency-cruiser/dependency-cruise.config.js +++ b/packages/knip/fixtures/plugins/dependency-cruiser/dependency-cruise.config.js @@ -0,0 +1 @@ +module.exports = {} \ No newline at end of file From b079529681df330e697c83bf15123f85f8902297 Mon Sep 17 00:00:00 2001 From: Filip Wachowiak Date: Mon, 13 Jan 2025 18:34:53 +0100 Subject: [PATCH 6/7] remove console log --- packages/knip/test/plugins/dependency-cruiser.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/knip/test/plugins/dependency-cruiser.test.ts b/packages/knip/test/plugins/dependency-cruiser.test.ts index 07db13ae7..69f7a8b9a 100644 --- a/packages/knip/test/plugins/dependency-cruiser.test.ts +++ b/packages/knip/test/plugins/dependency-cruiser.test.ts @@ -13,8 +13,6 @@ test('Find dependencies with the dependency-cruiser plugin', async () => { cwd, }); - console.log(issues); - assert.deepEqual(counters, { ...baseCounters, processed: 4, From cd7b5cd2c502510dbb9d76657489f83481013513 Mon Sep 17 00:00:00 2001 From: Lars Kappert Date: Wed, 15 Jan 2025 15:57:07 +0100 Subject: [PATCH 7/7] Remove unused var --- packages/knip/test/plugins/dependency-cruiser.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/knip/test/plugins/dependency-cruiser.test.ts b/packages/knip/test/plugins/dependency-cruiser.test.ts index 69f7a8b9a..6733bb250 100644 --- a/packages/knip/test/plugins/dependency-cruiser.test.ts +++ b/packages/knip/test/plugins/dependency-cruiser.test.ts @@ -8,7 +8,7 @@ import baseCounters from '../helpers/baseCounters.js'; const cwd = resolve('fixtures/plugins/dependency-cruiser'); test('Find dependencies with the dependency-cruiser plugin', async () => { - const { issues,counters } = await main({ + const { counters } = await main({ ...baseArguments, cwd, });