Skip to content

Commit 5dc7f12

Browse files
authored
Add support for Prettier overrides (#1869)
1 parent 5e192e9 commit 5dc7f12

5 files changed

Lines changed: 37 additions & 9 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export default {
22
plugins: ['prettier-plugin-xml', import.meta.resolve('prettier-plugin-astro')],
3+
overrides: [{ options: { plugins: ['prettier-plugin-java'] } }],
34
};

packages/knip/src/plugins/prettier/index.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type { Args } from '../../types/args.ts';
22
import type { IsPluginEnabled, Plugin, ResolveConfig } from '../../types/config.ts';
3-
import { toDeferResolve, toDependency } from '../../util/input.ts';
3+
import { toDeferResolve, toDependency, type Input } from '../../util/input.ts';
44
import { hasDependency } from '../../util/plugin.ts';
5-
import type { PrettierConfig } from './types.ts';
5+
import type { PrettierConfig, PrettierOptions } from './types.ts';
66

77
// https://prettier.io/docs/en/configuration.html
88
// https://github.com/prettier/prettier/blob/main/src/config/prettier-config/config-searcher.js
@@ -23,9 +23,28 @@ const config = [
2323
const resolveConfig: ResolveConfig<PrettierConfig> = config => {
2424
if (typeof config === 'string') return [toDeferResolve(config)];
2525

26-
return Array.isArray(config.plugins)
27-
? config.plugins.filter((plugin): plugin is string => typeof plugin === 'string').map(id => toDependency(id))
28-
: [];
26+
const result = new Set<Input>();
27+
28+
const processOptions = (options: PrettierOptions) => {
29+
if (Array.isArray(options.plugins)) {
30+
for (const plugin of options.plugins) {
31+
if (typeof plugin === 'string') {
32+
result.add(toDependency(plugin));
33+
}
34+
}
35+
}
36+
};
37+
38+
processOptions(config);
39+
if (config.overrides) {
40+
for (const override of config.overrides) {
41+
if (override.options) {
42+
processOptions(override.options);
43+
}
44+
}
45+
}
46+
47+
return Array.from(result);
2948
};
3049

3150
const args: Args = {

packages/knip/src/plugins/prettier/types.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export type PrettierConfig = {
1+
export type PrettierOptions = {
22
plugins?: (
33
| string
44
| {
@@ -9,3 +9,9 @@ export type PrettierConfig = {
99
}
1010
)[];
1111
};
12+
13+
export type PrettierConfig = PrettierOptions & {
14+
overrides?: {
15+
options?: PrettierOptions;
16+
}[];
17+
};

packages/knip/test/cli/cli-reporter-symbols-pathlike.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ const cwd = resolve('fixtures/plugins/prettier');
88
test('knip --reporter symbols (path-like specifier)', () => {
99
const expected = `Unused devDependencies (1)
1010
prettier package.json:5:6
11-
Unlisted dependencies (3)
11+
Unlisted dependencies (4)
1212
@company/prettier-config package.json
1313
prettier-plugin-xml prettier.config.js
14-
prettier-plugin-astro prettier.config.js`;
14+
prettier-plugin-astro prettier.config.js
15+
prettier-plugin-java prettier.config.js`;
1516

1617
const result = exec('knip --reporter symbols', { cwd }).stdout.replace(/ +$/gm, '');
1718

packages/knip/test/plugins/prettier.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ test('Find dependencies with the Prettier plugin', async () => {
1414
assert(issues.devDependencies['package.json']['prettier']);
1515
assert(issues.unlisted['prettier.config.js']['prettier-plugin-xml']);
1616
assert(issues.unlisted['prettier.config.js']['prettier-plugin-astro']);
17+
assert(issues.unlisted['prettier.config.js']['prettier-plugin-java']);
1718
assert(issues.unlisted['package.json']['@company/prettier-config']);
1819

1920
assert.deepEqual(counters, {
2021
...baseCounters,
2122
devDependencies: 1,
22-
unlisted: 3,
23+
unlisted: 4,
2324
processed: 1,
2425
total: 1,
2526
});

0 commit comments

Comments
 (0)