From 72cbcfa32c219fabfc7b9ab24bbe2745ed354583 Mon Sep 17 00:00:00 2001 From: Lars Kappert Date: Mon, 10 Feb 2025 09:15:26 +0100 Subject: [PATCH] Add `pos` to more issue types in json reporter (resolves #930) --- .../src/content/docs/features/reporters.md | 4 +-- packages/knip/src/reporters/json.ts | 12 +++---- .../cli/reporter/cli-reporter-json4.test.ts | 34 +++++++++++++++++++ 3 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 packages/knip/test/cli/reporter/cli-reporter-json4.test.ts diff --git a/packages/docs/src/content/docs/features/reporters.md b/packages/docs/src/content/docs/features/reporters.md index 465c10427..92dc3d117 100644 --- a/packages/docs/src/content/docs/features/reporters.md +++ b/packages/docs/src/content/docs/features/reporters.md @@ -32,8 +32,8 @@ object per file structured like this: { "file": "package.json", "owners": ["@org/admin"], - "dependencies": ["jquery", "moment"], - "devDependencies": [], + "dependencies": [{ "name": "jquery", "line": 5, "col": 6, "pos": 71 }], + "devDependencies": [{ "name": "lodash", "line": 9, "col": 6, "pos": 99 }], "unlisted": [{ "name": "react" }, { "name": "@org/unresolved" }], "exports": [], "types": [], diff --git a/packages/knip/src/reporters/json.ts b/packages/knip/src/reporters/json.ts index 85fd9b249..b7e8e75cf 100644 --- a/packages/knip/src/reporters/json.ts +++ b/packages/knip/src/reporters/json.ts @@ -14,9 +14,9 @@ type Item = { name: string; pos?: number; line?: number; col?: number }; type Row = { file: string; owners?: Array<{ name: string }>; - dependencies?: Array<{ name: string }>; - devDependencies?: Array<{ name: string }>; - optionalPeerDependencies?: Array<{ name: string }>; + dependencies?: Array; + devDependencies?: Array; + optionalPeerDependencies?: Array; unlisted?: Array<{ name: string }>; binaries?: Array<{ name: string }>; unresolved?: Array<{ name: string }>; @@ -82,10 +82,10 @@ export default async ({ report, issues, options }: ReporterOptions) => { item[parentSymbol].push(convert(issue)); } } else { - if (['exports', 'nsExports', 'types', 'nsTypes', 'unresolved'].includes(type)) { - json[filePath][type]?.push(convert(issue)); - } else { + if (['unlisted', 'binaries'].includes(type)) { json[filePath][type]?.push({ name: symbol }); + } else { + json[filePath][type]?.push(convert(issue)); } } } diff --git a/packages/knip/test/cli/reporter/cli-reporter-json4.test.ts b/packages/knip/test/cli/reporter/cli-reporter-json4.test.ts new file mode 100644 index 000000000..4273ae57c --- /dev/null +++ b/packages/knip/test/cli/reporter/cli-reporter-json4.test.ts @@ -0,0 +1,34 @@ +import { test } from 'bun:test'; +import assert from 'node:assert/strict'; +import { resolve } from '../../../src/util/path.js'; +import { execFactory } from '../../helpers/exec.js'; + +const cwd = resolve('fixtures/dependencies'); + +const exec = execFactory(cwd); + +test('knip --reporter json (dependencies)', () => { + const json = { + files: ['unused-module.ts'], + issues: [ + { + file: 'package.json', + dependencies: [ + { name: '@tootallnate/once', line: 8, col: 6, pos: 131 }, + { name: 'fs-extra', line: 10, col: 6, pos: 190 }, + ], + devDependencies: [{ name: 'mocha', line: 23, col: 6, pos: 422 }], + optionalPeerDependencies: [], + unlisted: [], + binaries: [{ name: 'jest' }, { name: 'start-server' }], + unresolved: [], + exports: [], + types: [], + enumMembers: {}, + duplicates: [], + }, + ], + }; + + assert.equal(exec('knip --reporter json').stdout, `${JSON.stringify(json)}\n`); +});