From eb8013e853b2ddf2db0c2e4bfe780017194268a6 Mon Sep 17 00:00:00 2001 From: Keen Yee Liau Date: Mon, 6 Nov 2017 10:30:29 -0800 Subject: [PATCH] fix(language-service): pass compilerOptions.paths to ReflectorHost (#20222) This commit fixes the options passed to ReflectorHost to include 'paths' if it's specified in compiler options, so that dependency modules can be loaded. PR Close #20222 --- .../language-service/src/typescript_host.ts | 3 +++ .../language-service/test/completions_spec.ts | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/packages/language-service/src/typescript_host.ts b/packages/language-service/src/typescript_host.ts index a39407bfb9..fce0b45791 100644 --- a/packages/language-service/src/typescript_host.ts +++ b/packages/language-service/src/typescript_host.ts @@ -376,6 +376,9 @@ export class TypeScriptServiceHost implements LanguageServiceHost { if (compilerOptions && compilerOptions.baseUrl) { options.baseUrl = compilerOptions.baseUrl; } + if (compilerOptions && compilerOptions.paths) { + options.paths = compilerOptions.paths; + } result = this._reflectorHost = new ReflectorHost(() => this.tsService.getProgram(), this.host, options); } diff --git a/packages/language-service/test/completions_spec.ts b/packages/language-service/test/completions_spec.ts index 2b1b8f410b..84f5281b73 100644 --- a/packages/language-service/test/completions_spec.ts +++ b/packages/language-service/test/completions_spec.ts @@ -160,6 +160,33 @@ export class MyComponent { }); + it('should respect paths configuration', () => { + mockHost.overrideOptions(options => { + options.baseUrl = '/app'; + options.paths = {'bar/*': ['foo/bar/*']}; + return options; + }); + mockHost.addScript('/app/foo/bar/shared.ts', ` + export interface Node { + children: Node[]; + } + `); + mockHost.addScript('/app/my.component.ts', ` + import { Component } from '@angular/core'; + import { Node } from 'bar/shared'; + + @Component({ + selector: 'my-component', + template: '{{tree.~{tree} }}' + }) + export class MyComponent { + tree: Node; + } + `); + ngHost.updateAnalyzedModules(); + contains('/app/my.component.ts', 'tree', 'children'); + }); + function addCode(code: string, cb: (fileName: string, content?: string) => void) { const fileName = '/app/app.component.ts'; const originalContent = mockHost.getFileContent(fileName);