Skip to content

Commit 521ccfb

Browse files
crisbetopkozlowski-opensource
authored andcommitted
fix(migrations): avoid interrupting the migration if language service lookup fails (#49010)
In some internal migrations the language service was throwing for some file reads which was crashing the migration. These changes add a `try/catch` to avoid interrupting it. PR Close #49010
1 parent 26cb7ab commit 521ccfb

File tree

1 file changed

+26
-5
lines changed
  • packages/core/schematics/ng-generate/standalone-migration

1 file changed

+26
-5
lines changed

packages/core/schematics/ng-generate/standalone-migration/util.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,20 @@ export class ReferenceResolver {
195195

196196
/** Finds all references to a node within the entire project. */
197197
findReferencesInProject(node: ts.Node): ReferencesByFile {
198-
const referencedSymbols =
199-
this._getLanguageService().findReferences(node.getSourceFile().fileName, node.getStart()) ||
200-
[];
198+
const languageService = this._getLanguageService();
199+
const fileName = node.getSourceFile().fileName;
200+
const start = node.getStart();
201+
let referencedSymbols: ts.ReferencedSymbol[];
202+
203+
// The language service can throw if it fails to read a file.
204+
// Silently continue since we're making the lookup on a best effort basis.
205+
try {
206+
referencedSymbols = languageService.findReferences(fileName, start) || [];
207+
} catch (e: any) {
208+
console.error('Failed reference lookup for node ' + node.getText(), e.message);
209+
referencedSymbols = [];
210+
}
211+
201212
const results: ReferencesByFile = new Map();
202213

203214
for (const symbol of referencedSymbols) {
@@ -223,9 +234,19 @@ export class ReferenceResolver {
223234
// the one we're interested in by intercepting it at the compiler host level.
224235
// This is an order of magnitude faster on a large project.
225236
this._tempOnlyFile = fileName;
237+
238+
const nodeStart = node.getStart();
226239
const results: ReferenceSpan[] = [];
227-
const highlights =
228-
this._getLanguageService().getDocumentHighlights(fileName, node.getStart(), [fileName]);
240+
let highlights: ts.DocumentHighlights[]|undefined;
241+
242+
// The language service can throw if it fails to read a file.
243+
// Silently continue since we're making the lookup on a best effort basis.
244+
try {
245+
highlights =
246+
this._getLanguageService().getDocumentHighlights(fileName, nodeStart, [fileName]);
247+
} catch (e: any) {
248+
console.error('Failed reference lookup for node ' + node.getText(), e.message);
249+
}
229250

230251
if (highlights) {
231252
for (const file of highlights) {

0 commit comments

Comments
 (0)