Skip to content

Commit e32fb17

Browse files
committed
refactor: combine err: Error, stackOffset: number to reportAt: [Error, number]
1 parent 2925d2d commit e32fb17

File tree

5 files changed

+16
-17
lines changed

5 files changed

+16
-17
lines changed

packages/core/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function createLinter(
2626
ctx: LinterContext,
2727
rootDir: string,
2828
config: Config | Config[],
29-
handleError: (diag: ts.DiagnosticWithLocation, err: Error, stackOffset: number) => void,
29+
handleError: (diag: ts.DiagnosticWithLocation, reportAt: [Error, number]) => void,
3030
syntaxOnlyLanguageService?: ts.LanguageService & {
3131
getNonBoundSourceFile?(fileName: string): ts.SourceFile;
3232
}
@@ -140,9 +140,9 @@ export function createLinter(
140140
rule2Mode.set(currentRuleId, true);
141141
shouldRetry = true;
142142
} else if (err instanceof Error) {
143-
report(err.stack ?? err.message, 0, 0, ts.DiagnosticCategory.Message, 0, err);
143+
report(err.stack ?? err.message, 0, 0, ts.DiagnosticCategory.Message, [err, 0]);
144144
} else {
145-
report(String(err), 0, 0, ts.DiagnosticCategory.Message, Number.MAX_VALUE);
145+
report(String(err), 0, 0, ts.DiagnosticCategory.Message, [new Error(), Number.MAX_VALUE]);
146146
}
147147
}
148148

@@ -202,7 +202,7 @@ export function createLinter(
202202

203203
return diagnostics;
204204

205-
function report(message: string, start: number, end: number, category: ts.DiagnosticCategory = ts.DiagnosticCategory.Message, stackOffset: number = 1, err?: Error): Reporter {
205+
function report(message: string, start: number, end: number, category: ts.DiagnosticCategory = ts.DiagnosticCategory.Message, reportAt: [Error, number] = [new Error(), 1]): Reporter {
206206
const error: ts.DiagnosticWithLocation = {
207207
category,
208208
code: currentRuleId as any,
@@ -226,7 +226,7 @@ export function createLinter(
226226
});
227227
}
228228

229-
handleError(error, err ?? new Error(), stackOffset);
229+
handleError(error, reportAt);
230230

231231
let lintResult = lintResults.get(fileName);
232232
if (!lintResult) {

packages/eslint/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ export function convertRule(
253253
}
254254
}
255255
} catch { }
256-
const reporter = report(message, start, end, category, 2);
256+
const reporter = report(message, start, end, category, [new Error(), 1]);
257257
if (descriptor.fix) {
258258
// @ts-expect-error
259259
const textChanges = getTextChanges(descriptor.fix);

packages/tslint/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export function convertRule<T extends Partial<TSLintRule> | TSLintRule>(
2828
failure.getStartPosition().getPosition(),
2929
failure.getEndPosition().getPosition(),
3030
category,
31-
Number.MAX_VALUE
31+
[new Error(), Number.MAX_VALUE]
3232
);
3333
if (failure.hasFix()) {
3434
const fix = failure.getFix();

packages/types/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export interface RuleContext {
4747
languageService: LanguageService;
4848
program: Program;
4949
file: SourceFile;
50-
report(message: string, start: number, end: number, category?: DiagnosticCategory, stackOffset?: number): Reporter;
50+
report(message: string, start: number, end: number, category?: DiagnosticCategory, reportAt?: [Error, number]): Reporter;
5151
}
5252

5353
export interface Reporter {

packages/typescript-plugin/index.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,12 @@ function decorateLanguageService(
152152

153153
try {
154154
config = (await import(configFile)).default;
155-
linter = core.createLinter(projectContext, path.dirname(configFile), config!, (diag, err, stackOffset) => {
156-
const relatedInfo = createRelatedInformation(ts, err, stackOffset);
155+
linter = core.createLinter(projectContext, path.dirname(configFile), config!, (diag, reportAt) => {
156+
const stacks = ErrorStackParser.parse(reportAt[0]);
157+
if (stacks.length <= reportAt[1]) {
158+
return;
159+
}
160+
const relatedInfo = createRelatedInformation(ts, stacks[reportAt[1]]);
157161
if (relatedInfo) {
158162
diag.relatedInformation!.push(relatedInfo);
159163
}
@@ -163,7 +167,7 @@ function decorateLanguageService(
163167
linter = undefined;
164168
const prevLength = configFileDiagnostics.length;
165169
if (err instanceof Error) {
166-
const relatedInfo = createRelatedInformation(ts, err, 0);
170+
const relatedInfo = createRelatedInformation(ts, ErrorStackParser.parse(err)[0]);
167171
if (relatedInfo) {
168172
configFileDiagnostics.push({
169173
category: ts.DiagnosticCategory.Message,
@@ -185,12 +189,7 @@ function decorateLanguageService(
185189
}
186190
}
187191

188-
function createRelatedInformation(ts: typeof import('typescript'), err: Error, stackOffset: number): ts.DiagnosticRelatedInformation | undefined {
189-
const stacks = ErrorStackParser.parse(err);
190-
if (stacks.length <= stackOffset) {
191-
return;
192-
}
193-
const stack = stacks[stackOffset];
192+
function createRelatedInformation(ts: typeof import('typescript'), stack: ErrorStackParser.StackFrame): ts.DiagnosticRelatedInformation | undefined {
194193
if (stack.fileName && stack.lineNumber !== undefined && stack.columnNumber !== undefined) {
195194
let fileName = stack.fileName.replace(/\\/g, '/');
196195
if (fileName.startsWith('file://')) {

0 commit comments

Comments
 (0)