Skip to content

Commit e6e7a4e

Browse files
crisbetoAndrewKushnir
authored andcommitted
fix(language-service): allow fixes to run without template info (#58719)
Currently the code fixes won't run if the template information can't be resolved on the diagnostic node. This is incorrect for diagnostics that are reported within `.ts` files. These changes make the `templateInfo` nullable and leave the early exit up to the individual fixes. PR Close #58719
1 parent 502ee0e commit e6e7a4e

File tree

6 files changed

+13
-25
lines changed

6 files changed

+13
-25
lines changed

packages/language-service/src/codefixes/code_fixes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class CodeFixes {
4646
*/
4747
getCodeFixesAtPosition(
4848
fileName: string,
49-
templateInfo: TemplateInfo,
49+
templateInfo: TemplateInfo | null,
5050
compiler: NgCompiler,
5151
start: number,
5252
end: number,

packages/language-service/src/codefixes/fix_invalid_banana_in_box.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ import {CodeActionMeta, FixIdForCodeFixesAll} from './utils';
2121
export const fixInvalidBananaInBoxMeta: CodeActionMeta = {
2222
errorCodes: [ngErrorCode(ErrorCode.INVALID_BANANA_IN_BOX)],
2323
getCodeActions({start, fileName, templateInfo}) {
24-
const boundEvent = getTheBoundEventAtPosition(templateInfo, start);
24+
const boundEvent =
25+
templateInfo === null ? null : getTheBoundEventAtPosition(templateInfo, start);
2526
if (boundEvent === null) {
2627
return [];
2728
}

packages/language-service/src/codefixes/fix_missing_import.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,13 @@ export const missingImportMeta: CodeActionMeta = {
4747
},
4848
};
4949

50-
function getCodeActions({
51-
templateInfo,
52-
start,
53-
compiler,
54-
formatOptions,
55-
preferences,
56-
errorCode,
57-
tsLs,
58-
}: CodeActionContext) {
50+
function getCodeActions({templateInfo, start, compiler}: CodeActionContext) {
51+
if (templateInfo === null) {
52+
return [];
53+
}
54+
5955
let codeActions: ts.CodeFixAction[] = [];
6056
const checker = compiler.getTemplateTypeChecker();
61-
const tsChecker = compiler.programDriver.getProgram().getTypeChecker();
62-
6357
const target = getTargetAtPosition(templateInfo.template, start);
6458
if (target === null) {
6559
return [];

packages/language-service/src/codefixes/fix_missing_member.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@
88

99
import tss from 'typescript';
1010

11-
import {
12-
getTargetAtPosition,
13-
getTcbNodesOfTemplateAtPosition,
14-
TargetNodeKind,
15-
} from '../template_target';
11+
import {getTcbNodesOfTemplateAtPosition} from '../template_target';
1612
import {getTemplateInfoAtPosition} from '../utils';
1713

1814
import {CodeActionMeta, convertFileTextChangeInTcb, FixIdForCodeFixesAll} from './utils';
@@ -37,7 +33,8 @@ export const missingMemberMeta: CodeActionMeta = {
3733
errorCode,
3834
tsLs,
3935
}) {
40-
const tcbNodesInfo = getTcbNodesOfTemplateAtPosition(templateInfo, start, compiler);
36+
const tcbNodesInfo =
37+
templateInfo === null ? null : getTcbNodesOfTemplateAtPosition(templateInfo, start, compiler);
4138
if (tcbNodesInfo === null) {
4239
return [];
4340
}

packages/language-service/src/codefixes/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {TemplateInfo} from '../utils';
2020
* context will be provided to the `CodeActionMeta` which could handle the `errorCode`.
2121
*/
2222
export interface CodeActionContext {
23-
templateInfo: TemplateInfo;
23+
templateInfo: TemplateInfo | null;
2424
fileName: string;
2525
compiler: NgCompiler;
2626
start: number;

packages/language-service/src/language_service.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -404,17 +404,13 @@ export class LanguageService {
404404
return [];
405405
}
406406

407-
const templateInfo = getTemplateInfoAtPosition(fileName, start, compiler);
408-
if (templateInfo === undefined) {
409-
return [];
410-
}
411407
const diags = this.getSemanticDiagnostics(fileName);
412408
if (diags.length === 0) {
413409
return [];
414410
}
415411
return this.codeFixes.getCodeFixesAtPosition(
416412
fileName,
417-
templateInfo,
413+
getTemplateInfoAtPosition(fileName, start, compiler) ?? null,
418414
compiler,
419415
start,
420416
end,

0 commit comments

Comments
 (0)