Skip to content

Commit ac315d0

Browse files
committed
feat(core, eslint, tslint): expose category param
1 parent c102135 commit ac315d0

File tree

4 files changed

+22
-14
lines changed

4 files changed

+22
-14
lines changed

packages/core/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ export function createLinter(
151151
rule2Mode.set(currentRuleId, true);
152152
shouldRetry = true;
153153
} else if (err instanceof Error) {
154-
report(err.stack ?? err.message, 0, 0, 0, err);
154+
report(err.stack ?? err.message, 0, 0, ts.DiagnosticCategory.Message, 0, err);
155155
} else {
156-
report(String(err), 0, 0, Number.MAX_VALUE);
156+
report(String(err), 0, 0, ts.DiagnosticCategory.Message, Number.MAX_VALUE);
157157
}
158158
}
159159

@@ -213,9 +213,9 @@ export function createLinter(
213213

214214
return diagnostics;
215215

216-
function report(message: string, start: number, end: number, stackOffset: number = 1, err?: Error): Reporter {
216+
function report(message: string, start: number, end: number, category: ts.DiagnosticCategory = ts.DiagnosticCategory.Message, stackOffset: number = 1, err?: Error): Reporter {
217217
const error: ts.DiagnosticWithLocation = {
218-
category: ts.DiagnosticCategory.Message,
218+
category,
219219
code: currentRuleId as any,
220220
messageText: message,
221221
file: rulesContext.file,

packages/eslint/index.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const loader = async (moduleName: string) => {
2929
return mod as any;
3030
};
3131

32-
type S = 'error' | 'warn' | 'suggestion' | 'off' | 0 | 1 | 2;
32+
type S = 'off' | 'error' | 'warn' | 'suggestion' | 'message' | 0 | 1 | 2 | 3 | 4;
3333
type O<T extends any[]> = S | [S, ...options: T];
3434

3535
/**
@@ -41,22 +41,16 @@ export async function convertRules(
4141
) {
4242
const rules: TSSLint.Rules = {};
4343
for (const [rule, severityOrOptions] of Object.entries(rulesConfig)) {
44-
let severity: boolean;
44+
let severity: S;
4545
let options: any[];
4646
if (Array.isArray(severityOrOptions)) {
47-
// @ts-expect-error
4847
[severity, ...options] = severityOrOptions;
4948
}
5049
else {
51-
// @ts-expect-error
5250
severity = severityOrOptions;
5351
options = [];
5452
}
55-
// @ts-expect-error backward compatibility
5653
if (severity === 'off' || severity === 0) {
57-
severity = false;
58-
}
59-
if (!severity) {
6054
rules[rule] = noop;
6155
continue;
6256
}
@@ -67,6 +61,13 @@ export async function convertRules(
6761
rules[rule] = convertRule(
6862
ruleModule,
6963
options,
64+
severity === 'warn' || severity === 1
65+
? 0
66+
: severity === 'error' || severity === 2
67+
? 1
68+
: severity === 'suggestion' || severity === 3
69+
? 2
70+
: 3,
7071
{ id: rule, ...context }
7172
);
7273
}
@@ -82,6 +83,7 @@ export async function convertRules(
8283
*/
8384
export async function defineRules(
8485
rulesConfig: { [K in keyof ESLintRulesConfig]: boolean | ESLintRulesConfig[K] },
86+
category: ts.DiagnosticCategory = 3 satisfies ts.DiagnosticCategory.Message,
8587
context: Partial<ESLint.Rule.RuleContext> = {}
8688
) {
8789
const rules: TSSLint.Rules = {};
@@ -107,6 +109,7 @@ export async function defineRules(
107109
rules[rule] = convertRule(
108110
ruleModule,
109111
options,
112+
category,
110113
{ id: rule, ...context }
111114
);
112115
}
@@ -162,6 +165,7 @@ async function loadRule(pluginName: string | undefined, ruleName: string): Promi
162165
export function convertRule(
163166
eslintRule: ESLint.Rule.RuleModule,
164167
options: any[] = [],
168+
category: ts.DiagnosticCategory = 3 satisfies ts.DiagnosticCategory.Message,
165169
context: Partial<ESLint.Rule.RuleContext> = {}
166170
): TSSLint.Rule {
167171
// ESLint internal scripts
@@ -249,7 +253,7 @@ export function convertRule(
249253
}
250254
}
251255
} catch { }
252-
const reporter = report(message, start, end, 2);
256+
const reporter = report(message, start, end, category, 2);
253257
if (descriptor.fix) {
254258
// @ts-expect-error
255259
const textChanges = getTextChanges(descriptor.fix);

packages/tslint/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import type * as TSSLint from '@tsslint/types';
22
import type * as TSLint from 'tslint';
3+
import type * as ts from 'typescript';
34

45
type TSLintRule = import('tslint/lib/language/rule/rule').RuleConstructor;
56

67
export function convertRule<T extends Partial<TSLintRule> | TSLintRule>(
78
Rule: T,
89
ruleArguments: any[] = [],
10+
category: ts.DiagnosticCategory = 3 satisfies ts.DiagnosticCategory.Message,
911
): TSSLint.Rule {
1012
const rule = new (Rule as TSLintRule)({
1113
ruleName: Rule.metadata?.ruleName ?? 'unknown',
@@ -25,6 +27,7 @@ export function convertRule<T extends Partial<TSLintRule> | TSLintRule>(
2527
failure.getFailure(),
2628
failure.getStartPosition().getPosition(),
2729
failure.getEndPosition().getPosition(),
30+
category,
2831
Number.MAX_VALUE
2932
);
3033
if (failure.hasFix()) {

packages/types/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type {
22
CodeFixAction,
33
Diagnostic,
4+
DiagnosticCategory,
45
DiagnosticWithLocation,
56
FileTextChanges,
67
LanguageService,
@@ -46,7 +47,7 @@ export interface RuleContext {
4647
languageService: LanguageService;
4748
program: Program;
4849
file: SourceFile;
49-
report(message: string, start: number, end: number, stackOffset?: number): Reporter;
50+
report(message: string, start: number, end: number, category?: DiagnosticCategory, stackOffset?: number): Reporter;
5051

5152
/**
5253
* @deprecated Use `file` instead.

0 commit comments

Comments
 (0)