Skip to content

Commit decbd28

Browse files
Add TypeScript definition (#54)
1 parent 4349f5c commit decbd28

File tree

3 files changed

+91
-2
lines changed

3 files changed

+91
-2
lines changed

index.d.ts

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import type {ESLint, Linter} from 'eslint';
2+
3+
export = formatterPretty;
4+
5+
/**
6+
Pretty formatter for [ESLint](https://eslint.org).
7+
8+
@param results - Lint result for the individual files.
9+
@param data - Extended information related to the analysis results.
10+
@returns The formatted output.
11+
*/
12+
declare function formatterPretty(
13+
results: readonly formatterPretty.LintResult[],
14+
data?: ESLint.LintResultData
15+
): string;
16+
17+
declare namespace formatterPretty {
18+
interface LintResult {
19+
readonly filePath: string;
20+
readonly errorCount: number;
21+
readonly warningCount: number;
22+
readonly messages: readonly LintMessage[];
23+
}
24+
25+
type Severity = Linter.Severity | 'warning' | 'error';
26+
27+
interface LintMessage {
28+
readonly severity: Severity;
29+
readonly fatal?: boolean;
30+
readonly line?: number;
31+
readonly column?: number;
32+
readonly message: string;
33+
readonly ruleId?: string | null;
34+
}
35+
}

index.test-d.ts

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import type {ESLint} from 'eslint';
2+
import {expectType} from 'tsd';
3+
import formatterPretty = require('.');
4+
5+
// Test type exports
6+
type LintResult = formatterPretty.LintResult;
7+
type LintMessage = formatterPretty.LintMessage;
8+
type Severity = formatterPretty.Severity;
9+
10+
// Test LintResult interface members
11+
declare const lintResult: LintResult;
12+
expectType<string>(lintResult.filePath);
13+
expectType<number>(lintResult.errorCount);
14+
expectType<number>(lintResult.warningCount);
15+
expectType<readonly LintMessage[]>(lintResult.messages);
16+
17+
// Test LintMessage interface members
18+
const lintMessage = lintResult.messages[0];
19+
expectType<Severity>(lintMessage.severity);
20+
expectType<string>(lintMessage.message);
21+
expectType<boolean | undefined>(lintMessage.fatal);
22+
expectType<number | undefined>(lintMessage.line);
23+
expectType<number | undefined>(lintMessage.column);
24+
expectType<string | null | undefined>(lintMessage.ruleId);
25+
26+
// Test formatterPretty()
27+
declare const lintResults: LintResult[];
28+
declare const eslintLintResults: ESLint.LintResult[];
29+
declare const lintResultData: ESLint.LintResultData;
30+
31+
expectType<string>(formatterPretty(lintResults));
32+
expectType<string>(formatterPretty(eslintLintResults));
33+
expectType<string>(formatterPretty(eslintLintResults, lintResultData));
34+
35+
interface PartialLintResult {
36+
filePath: string;
37+
errorCount: number;
38+
warningCount: number;
39+
messages: Array<{
40+
fileName: string;
41+
message: string;
42+
severity: 'error' | 'warning';
43+
line?: number;
44+
column?: number;
45+
}>;
46+
}
47+
48+
declare const partialLintResults: PartialLintResult[];
49+
50+
expectType<string>(formatterPretty(partialLintResults));

package.json

+6-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414
"node": ">=10"
1515
},
1616
"scripts": {
17-
"test": "xo && ava"
17+
"test": "xo && ava && tsd"
1818
},
1919
"files": [
20-
"index.js"
20+
"index.js",
21+
"index.d.ts"
2122
],
2223
"keywords": [
2324
"eslint",
@@ -28,6 +29,7 @@
2829
"validate"
2930
],
3031
"dependencies": {
32+
"@types/eslint": "^7.2.13",
3133
"ansi-escapes": "^4.2.1",
3234
"chalk": "^4.1.0",
3335
"eslint-rule-docs": "^1.1.5",
@@ -39,6 +41,8 @@
3941
"devDependencies": {
4042
"ava": "^2.4.0",
4143
"strip-ansi": "^6.0.0",
44+
"tsd": "^0.17.0",
45+
"typescript": "^4.3.2",
4246
"xo": "^0.32.0"
4347
},
4448
"ava": {

0 commit comments

Comments
 (0)