Skip to content

Commit 74d977b

Browse files
committed
feat: replace linter reporters to transports
1 parent bdcc6d1 commit 74d977b

File tree

12 files changed

+87
-171
lines changed

12 files changed

+87
-171
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,12 @@ Usage: @nodejs/doc-kit lint [options]
7979
Run linter independently
8080
8181
Options:
82-
-i, --input <patterns...> Input file patterns (glob)
83-
--ignore [patterns...] Ignore patterns (comma-separated)
84-
--disable-rule [rules...] Disable linter rules (choices: "duplicate-stability-nodes", "invalid-change-version", "missing-introduced-in")
85-
--dry-run Dry run mode (default: false)
86-
-r, --reporter <reporter> Linter reporter to use
87-
-h, --help display help for command
82+
-i, --input <patterns...> Input file patterns (glob)
83+
--ignore [patterns...] Ignore patterns (comma-separated)
84+
--disable-rule [rules...] Disable linter rules (choices: "duplicate-stability-nodes", "invalid-change-version", "missing-introduced-in")
85+
--dry-run Dry run mode (default: false)
86+
-r, --transport <transport> Logger transport to use
87+
-h, --help display help for command
8888
```
8989

9090
### `interactive`
@@ -106,7 +106,7 @@ Usage: @nodejs/doc-kit list [options] <types>
106106
List the given type
107107
108108
Arguments:
109-
types The type to list (choices: "generators", "rules", "reporters")
109+
types The type to list (choices: "generators", "rules", "transports")
110110
111111
Options:
112112
-h, --help display help for command

bin/commands/lint.mjs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
import process from 'node:process';
22

33
import createLinter from '../../src/linter/index.mjs';
4-
import reporters from '../../src/linter/reporters/index.mjs';
54
import rules from '../../src/linter/rules/index.mjs';
65
import { getEnabledRules } from '../../src/linter/utils/rules.mjs';
76
import { Logger } from '../../src/logger/index.mjs';
7+
import { availableTransports } from '../../src/logger/transports/index.mjs';
88
import { loadAndParse } from '../utils.mjs';
99

1010
const availableRules = Object.keys(rules);
11-
const availableReporters = Object.keys(reporters);
1211

1312
/**
1413
* @typedef {Object} LinterOptions
1514
* @property {Array<string>|string} input - Glob/path for input files.
1615
* @property {Array<string>|string} [ignore] - Glob/path for ignoring files.
1716
* @property {string[]} [disableRule] - Linter rules to disable.
1817
* @property {boolean} [dryRun] - Dry-run mode.
19-
* @property {keyof reporters} reporter - Reporter for linter output.
18+
* @property {keyof transports} transport - Transport for logger output.
2019
*/
2120

2221
/**
@@ -63,13 +62,13 @@ export default {
6362
initialValue: false,
6463
},
6564
},
66-
reporter: {
67-
flags: ['-r', '--reporter <reporter>'],
68-
desc: 'Linter reporter to use',
65+
transport: {
66+
flags: ['-r', '--transport <transport>'],
67+
desc: 'Linter transport to use',
6968
prompt: {
7069
type: 'select',
71-
message: 'Choose a reporter',
72-
options: availableReporters.map(r => ({ label: r, value: r })),
70+
message: 'Choose a transport',
71+
options: availableTransports.map(t => ({ label: t, value: t })),
7372
},
7473
},
7574
},
@@ -81,6 +80,8 @@ export default {
8180
*/
8281
async action(opts) {
8382
try {
83+
Logger.init(opts.transport);
84+
8485
const rules = getEnabledRules(opts.disableRule);
8586
const linter = createLinter(rules, opts.dryRun);
8687

@@ -91,6 +92,7 @@ export default {
9192
process.exitCode = +linter.hasError();
9293
} catch (error) {
9394
Logger.getInstance().error('Error running the linter:', error);
95+
9496
process.exitCode = 1;
9597
}
9698
},

bin/commands/list.mjs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
import { publicGenerators } from '../../src/generators/index.mjs';
2-
import reporters from '../../src/linter/reporters/index.mjs';
32
import rules from '../../src/linter/rules/index.mjs';
43
import { Logger } from '../../src/logger/index.mjs';
4+
import { availableTransports } from '../../src/logger/transports/index.mjs';
55

66
const availableRules = Object.keys(rules);
7-
const availableReporters = Object.keys(reporters);
87

9-
export const types = ['generators', 'rules', 'reporters'];
8+
export const types = ['generators', 'rules', 'transports'];
109

1110
/**
12-
* Lists available generators, rules, or reporters based on the given type.
11+
* Lists available generators, rules, or transports based on the given type.
1312
*
14-
* @param {'generators' | 'rules' | 'reporters'} type - The type of items to list.
13+
* @param {'generators' | 'rules' | 'transports'} type - The type of items to list.
1514
*/
1615
export default function list(type) {
1716
const list =
@@ -22,7 +21,7 @@ export default function list(type) {
2221
)
2322
: type === 'rules'
2423
? availableRules
25-
: availableReporters;
24+
: availableTransports;
2625

2726
Logger.getInstance().info(list.join('\n'));
2827
}

src/linter/index.mjs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
import createContext from './context.mjs';
4-
import reporters from './reporters/index.mjs';
4+
import { Logger } from '../logger/index.mjs';
55

66
/**
77
* Creates a linter instance to validate API documentation ASTs against a
@@ -37,23 +37,39 @@ const createLinter = (rules, dryRun = false) => {
3737
};
3838

3939
/**
40-
* Reports collected issues using the specified reporter.
40+
* Reports collected issues using the default logger.
4141
*
42-
* @param {keyof typeof reporters} [reporterName] Reporter name
4342
* @returns {void}
4443
*/
45-
const report = (reporterName = 'console') => {
44+
const report = () => {
4645
if (dryRun) {
4746
return;
4847
}
4948

50-
const reporter = reporters[reporterName];
51-
5249
for (const issue of issues) {
53-
reporter(issue);
50+
logIssue(issue);
5451
}
5552
};
5653

54+
/**
55+
* Logs an issue using the default logger instance.
56+
*
57+
* @param {import('./types').LintIssue} issue
58+
* @returns {void}
59+
*/
60+
const logIssue = issue => {
61+
const logger = Logger.getInstance();
62+
63+
const logFn = logger[issue.level];
64+
65+
logFn(issue.message, {
66+
file: {
67+
path: issue.location.path,
68+
position: issue.location.position,
69+
},
70+
});
71+
};
72+
5773
/**
5874
* Checks if any error-level issues were collected.
5975
*

src/linter/reporters/__tests__/console.test.mjs

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/linter/reporters/__tests__/github.test.mjs

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/linter/reporters/console.mjs

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/linter/reporters/github.mjs

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/linter/reporters/index.mjs

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/linter/types.d.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Root } from 'mdast';
2-
import reporters from './reporters/index.mjs';
32
import { VFile } from 'vfile';
43

54
export type IssueLevel = 'info' | 'warn' | 'error';
@@ -22,12 +21,10 @@ export interface LintIssue {
2221

2322
type LintRule = (context: LintContext) => void;
2423

25-
export type Reporter = (message: LintIssue) => void;
26-
2724
export interface Linter {
2825
readonly issues: LintIssue[];
2926
lint: (file: VFile, tree: Root) => void;
30-
report: (reporterName: keyof typeof reporters) => void;
27+
report: () => void;
3128
hasError: () => boolean;
3229
}
3330

0 commit comments

Comments
 (0)