fix(language-service): do not crash when Angular cannot be located (#14123)
Fixes #14122 PR Close #14123
This commit is contained in:
parent
5f2b3173d7
commit
49fb8143e8
|
@ -321,7 +321,12 @@ export class StaticSymbolResolver {
|
|||
getSymbolByModule(module: string, symbolName: string, containingFile?: string): StaticSymbol {
|
||||
const filePath = this.resolveModule(module, containingFile);
|
||||
if (!filePath) {
|
||||
throw new Error(`Could not resolve module ${module} relative to ${containingFile}`);
|
||||
this.reportError(
|
||||
new Error(`Could not resolve module ${module}${containingFile ? ` relative to $ {
|
||||
containingFile
|
||||
} `: ''}`),
|
||||
null);
|
||||
return this.getStaticSymbol(`ERROR:${module}`, symbolName);
|
||||
}
|
||||
return this.getStaticSymbol(filePath, symbolName);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import * as ts from 'typescript';
|
||||
|
||||
import {createLanguageService} from '../src/language_service';
|
||||
import {Completions, LanguageService} from '../src/types';
|
||||
import {TypeScriptServiceHost} from '../src/typescript_host';
|
||||
|
||||
import {toh} from './test_data';
|
||||
import {MockTypescriptHost} from './test_utils';
|
||||
|
||||
describe('service without angular', () => {
|
||||
let mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts'], toh);
|
||||
mockHost.forgetAngular();
|
||||
let service = ts.createLanguageService(mockHost);
|
||||
let ngHost = new TypeScriptServiceHost(mockHost, service);
|
||||
let ngService = createLanguageService(ngHost);
|
||||
const fileName = '/app/test.ng';
|
||||
let position = mockHost.getMarkerLocations(fileName)['h1-content'];
|
||||
|
||||
it('should not crash a get template references',
|
||||
() => expect(() => ngService.getTemplateReferences()));
|
||||
it('should not crash a get dianostics',
|
||||
() => expect(() => ngService.getDiagnostics(fileName)).not.toThrow());
|
||||
it('should not crash a completion',
|
||||
() => expect(() => ngService.getCompletionsAt(fileName, position)).not.toThrow());
|
||||
it('should not crash a get defintion',
|
||||
() => expect(() => ngService.getDefinitionAt(fileName, position)).not.toThrow());
|
||||
it('should not crash a hover', () => expect(() => ngService.getHoverAt(fileName, position)));
|
||||
});
|
|
@ -98,6 +98,8 @@ export class MockTypescriptHost implements ts.LanguageServiceHost {
|
|||
this.scriptNames.push(fileName);
|
||||
}
|
||||
|
||||
forgetAngular() { this.angularPath = undefined; }
|
||||
|
||||
getCompilationSettings(): ts.CompilerOptions {
|
||||
return {
|
||||
target: ts.ScriptTarget.ES5,
|
||||
|
|
Loading…
Reference in New Issue