diff --git a/modules/@angular/language-service/src/ts_plugin.ts b/modules/@angular/language-service/src/ts_plugin.ts index 025ac8bb39..aca66c88dd 100644 --- a/modules/@angular/language-service/src/ts_plugin.ts +++ b/modules/@angular/language-service/src/ts_plugin.ts @@ -19,7 +19,6 @@ import {TypeScriptServiceHost} from './typescript_host'; * @experimental */ export class LanguageServicePlugin { - private ts: typeof ts; private serviceHost: TypeScriptServiceHost; private service: LanguageService; private host: ts.LanguageServiceHost; @@ -27,12 +26,11 @@ export class LanguageServicePlugin { static 'extension-kind' = 'language-service'; constructor(config: { - ts: typeof ts; host: ts.LanguageServiceHost; service: ts.LanguageService; + host: ts.LanguageServiceHost; service: ts.LanguageService; registry?: ts.DocumentRegistry, args?: any }) { - this.ts = config.ts; this.host = config.host; - this.serviceHost = new TypeScriptServiceHost(this.ts, config.host, config.service); + this.serviceHost = new TypeScriptServiceHost(config.host, config.service); this.service = createLanguageService(this.serviceHost); this.serviceHost.setSite(this.service); } @@ -51,7 +49,7 @@ export class LanguageServicePlugin { start: error.span.start, length: error.span.end - error.span.start, messageText: error.message, - category: this.ts.DiagnosticCategory.Error, + category: ts.DiagnosticCategory.Error, code: 0 }); } diff --git a/modules/@angular/language-service/src/typescript_host.ts b/modules/@angular/language-service/src/typescript_host.ts index f5a852d8fb..ef3c58fa32 100644 --- a/modules/@angular/language-service/src/typescript_host.ts +++ b/modules/@angular/language-service/src/typescript_host.ts @@ -34,9 +34,8 @@ import {BuiltinType, CompletionKind, Declaration, DeclarationError, Declarations * Create a `LanguageServiceHost` */ export function createLanguageServiceFromTypescript( - typescript: typeof ts, host: ts.LanguageServiceHost, - service: ts.LanguageService): LanguageService { - const ngHost = new TypeScriptServiceHost(typescript, host, service); + host: ts.LanguageServiceHost, service: ts.LanguageService): LanguageService { + const ngHost = new TypeScriptServiceHost(host, service); const ngServer = createLanguageService(ngHost); ngHost.setSite(ngServer); return ngServer; @@ -74,7 +73,6 @@ export class DummyResourceLoader extends ResourceLoader { * @expermental */ export class TypeScriptServiceHost implements LanguageServiceHost { - private ts: typeof ts; private _resolver: CompileMetadataResolver; private _staticSymbolCache = new StaticSymbolCache(); private _reflector: StaticReflector; @@ -90,11 +88,7 @@ export class TypeScriptServiceHost implements LanguageServiceHost { private templateReferences: string[]; private collectedErrors: Map; - constructor( - typescript: typeof ts, private host: ts.LanguageServiceHost, - private tsService: ts.LanguageService) { - this.ts = typescript; - } + constructor(private host: ts.LanguageServiceHost, private tsService: ts.LanguageService) {} setSite(service: LanguageService) { this.service = service; } @@ -190,14 +184,14 @@ export class TypeScriptServiceHost implements LanguageServiceHost { if (templateSource) { result.push(templateSource); } else { - this.ts.forEachChild(child, visit); + ts.forEachChild(child, visit); } }; let sourceFile = this.getSourceFile(fileName); if (sourceFile) { this.context = sourceFile.path; - this.ts.forEachChild(sourceFile, visit); + ts.forEachChild(sourceFile, visit); } return result.length ? result : undefined; } @@ -304,7 +298,7 @@ export class TypeScriptServiceHost implements LanguageServiceHost { return new TypeWrapper(type, {node, program, checker}).members();}, get query(): SymbolQuery{ if (!queryCache) { - queryCache = new TypeScriptSymbolQuery(t.ts, t.program, t.checker, sourceFile, () => { + queryCache = new TypeScriptSymbolQuery(t.program, t.checker, sourceFile, () => { const pipes = t.service.getPipesAt(fileName, node.getStart()); const checker = t.checker; const program = t.program; @@ -321,8 +315,8 @@ export class TypeScriptServiceHost implements LanguageServiceHost { let result: TemplateSource|undefined = undefined; const t = this; switch (node.kind) { - case this.ts.SyntaxKind.NoSubstitutionTemplateLiteral: - case this.ts.SyntaxKind.StringLiteral: + case ts.SyntaxKind.NoSubstitutionTemplateLiteral: + case ts.SyntaxKind.StringLiteral: let [declaration, decorator] = this.getTemplateClassDeclFromNode(node); let queryCache: SymbolQuery|undefined = undefined; if (declaration && declaration.name) { @@ -403,7 +397,7 @@ export class TypeScriptServiceHost implements LanguageServiceHost { private getTemplateClassFromStaticSymbol(type: StaticSymbol): ts.ClassDeclaration|undefined { const source = this.getSourceFile(type.filePath); if (source) { - const declarationNode = this.ts.forEachChild(source, child => { + const declarationNode = ts.forEachChild(source, child => { if (child.kind === ts.SyntaxKind.ClassDeclaration) { const classDeclaration = child as ts.ClassDeclaration; if (classDeclaration.name.text === type.name) { @@ -431,7 +425,7 @@ export class TypeScriptServiceHost implements LanguageServiceHost { if (!parentNode) { return TypeScriptServiceHost.missingTemplate; } - if (parentNode.kind !== this.ts.SyntaxKind.PropertyAssignment) { + if (parentNode.kind !== ts.SyntaxKind.PropertyAssignment) { return TypeScriptServiceHost.missingTemplate; } else { // TODO: Is this different for a literal, i.e. a quoted property name like "template"? @@ -440,23 +434,23 @@ export class TypeScriptServiceHost implements LanguageServiceHost { } } parentNode = parentNode.parent; // ObjectLiteralExpression - if (!parentNode || parentNode.kind !== this.ts.SyntaxKind.ObjectLiteralExpression) { + if (!parentNode || parentNode.kind !== ts.SyntaxKind.ObjectLiteralExpression) { return TypeScriptServiceHost.missingTemplate; } parentNode = parentNode.parent; // CallExpression - if (!parentNode || parentNode.kind !== this.ts.SyntaxKind.CallExpression) { + if (!parentNode || parentNode.kind !== ts.SyntaxKind.CallExpression) { return TypeScriptServiceHost.missingTemplate; } const callTarget = (parentNode).expression; let decorator = parentNode.parent; // Decorator - if (!decorator || decorator.kind !== this.ts.SyntaxKind.Decorator) { + if (!decorator || decorator.kind !== ts.SyntaxKind.Decorator) { return TypeScriptServiceHost.missingTemplate; } let declaration = decorator.parent; // ClassDeclaration - if (!declaration || declaration.kind !== this.ts.SyntaxKind.ClassDeclaration) { + if (!declaration || declaration.kind !== ts.SyntaxKind.ClassDeclaration) { return TypeScriptServiceHost.missingTemplate; } return [declaration, callTarget]; @@ -515,9 +509,9 @@ export class TypeScriptServiceHost implements LanguageServiceHost { private stringOf(node: ts.Node): string|undefined { switch (node.kind) { - case this.ts.SyntaxKind.NoSubstitutionTemplateLiteral: + case ts.SyntaxKind.NoSubstitutionTemplateLiteral: return (node).text; - case this.ts.SyntaxKind.StringLiteral: + case ts.SyntaxKind.StringLiteral: return (node).text; } } @@ -527,7 +521,7 @@ export class TypeScriptServiceHost implements LanguageServiceHost { function find(node: ts.Node): ts.Node|undefined { if (position >= node.getStart() && position < node.getEnd()) { - return _this.ts.forEachChild(node, find) || node; + return ts.forEachChild(node, find) || node; } } @@ -540,26 +534,26 @@ export class TypeScriptServiceHost implements LanguageServiceHost { switch (kind) { case BuiltinType.Any: type = checker.getTypeAtLocation({ - kind: this.ts.SyntaxKind.AsExpression, - expression: {kind: this.ts.SyntaxKind.TrueKeyword}, - type: {kind: this.ts.SyntaxKind.AnyKeyword} + kind: ts.SyntaxKind.AsExpression, + expression: {kind: ts.SyntaxKind.TrueKeyword}, + type: {kind: ts.SyntaxKind.AnyKeyword} }); break; case BuiltinType.Boolean: - type = checker.getTypeAtLocation({kind: this.ts.SyntaxKind.TrueKeyword}); + type = checker.getTypeAtLocation({kind: ts.SyntaxKind.TrueKeyword}); break; case BuiltinType.Null: - type = checker.getTypeAtLocation({kind: this.ts.SyntaxKind.NullKeyword}); + type = checker.getTypeAtLocation({kind: ts.SyntaxKind.NullKeyword}); break; case BuiltinType.Number: - type = checker.getTypeAtLocation({kind: this.ts.SyntaxKind.NumericLiteral}); + type = checker.getTypeAtLocation({kind: ts.SyntaxKind.NumericLiteral}); break; case BuiltinType.String: - type = checker.getTypeAtLocation( - {kind: this.ts.SyntaxKind.NoSubstitutionTemplateLiteral}); + type = + checker.getTypeAtLocation({kind: ts.SyntaxKind.NoSubstitutionTemplateLiteral}); break; case BuiltinType.Undefined: - type = checker.getTypeAtLocation({kind: this.ts.SyntaxKind.VoidExpression}); + type = checker.getTypeAtLocation({kind: ts.SyntaxKind.VoidExpression}); break; default: throw new Error(`Internal error, unhandled literal kind ${kind}:${BuiltinType[kind]}`); @@ -569,30 +563,27 @@ export class TypeScriptServiceHost implements LanguageServiceHost { } class TypeScriptSymbolQuery implements SymbolQuery { - private ts: typeof ts; private typeCache = new Map(); private pipesCache: SymbolTable; constructor( - typescript: typeof ts, private program: ts.Program, private checker: ts.TypeChecker, - private source: ts.SourceFile, private fetchPipes: () => SymbolTable) { - this.ts = typescript; - } + private program: ts.Program, private checker: ts.TypeChecker, private source: ts.SourceFile, + private fetchPipes: () => SymbolTable) {} getTypeKind(symbol: Symbol): BuiltinType { const type = this.getTsTypeOf(symbol); if (type) { - if (type.flags & this.ts.TypeFlags.Any) { + if (type.flags & ts.TypeFlags.Any) { return BuiltinType.Any; } else if ( - type.flags & (this.ts.TypeFlags.String | this.ts.TypeFlags.StringLike | - this.ts.TypeFlags.StringLiteral)) { + type.flags & + (ts.TypeFlags.String | ts.TypeFlags.StringLike | ts.TypeFlags.StringLiteral)) { return BuiltinType.String; - } else if (type.flags & (this.ts.TypeFlags.Number | this.ts.TypeFlags.NumberLike)) { + } else if (type.flags & (ts.TypeFlags.Number | ts.TypeFlags.NumberLike)) { return BuiltinType.Number; - } else if (type.flags & (this.ts.TypeFlags.Undefined)) { + } else if (type.flags & (ts.TypeFlags.Undefined)) { return BuiltinType.Undefined; - } else if (type.flags & (this.ts.TypeFlags.Null)) { + } else if (type.flags & (ts.TypeFlags.Null)) { return BuiltinType.Null; } } diff --git a/modules/@angular/language-service/test/completions_spec.ts b/modules/@angular/language-service/test/completions_spec.ts index db216c4d60..54dda028d0 100644 --- a/modules/@angular/language-service/test/completions_spec.ts +++ b/modules/@angular/language-service/test/completions_spec.ts @@ -21,7 +21,7 @@ describe('completions', () => { let mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts'], toh); let service = ts.createLanguageService(mockHost, documentRegistry); let program = service.getProgram(); - let ngHost = new TypeScriptServiceHost(ts, mockHost, service); + let ngHost = new TypeScriptServiceHost(mockHost, service); let ngService = createLanguageService(ngHost); ngHost.setSite(ngService); diff --git a/modules/@angular/language-service/test/definitions_spec.ts b/modules/@angular/language-service/test/definitions_spec.ts index 0be563cded..4aaeb92161 100644 --- a/modules/@angular/language-service/test/definitions_spec.ts +++ b/modules/@angular/language-service/test/definitions_spec.ts @@ -21,7 +21,7 @@ describe('definitions', () => { let mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts'], toh); let service = ts.createLanguageService(mockHost, documentRegistry); let program = service.getProgram(); - let ngHost = new TypeScriptServiceHost(ts, mockHost, service); + let ngHost = new TypeScriptServiceHost(mockHost, service); let ngService = createLanguageService(ngHost); ngHost.setSite(ngService); diff --git a/modules/@angular/language-service/test/diagnostics_spec.ts b/modules/@angular/language-service/test/diagnostics_spec.ts index 823f989149..effcdae7b0 100644 --- a/modules/@angular/language-service/test/diagnostics_spec.ts +++ b/modules/@angular/language-service/test/diagnostics_spec.ts @@ -20,7 +20,7 @@ describe('diagnostics', () => { let mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts'], toh); let service = ts.createLanguageService(mockHost, documentRegistry); let program = service.getProgram(); - let ngHost = new TypeScriptServiceHost(ts, mockHost, service); + let ngHost = new TypeScriptServiceHost(mockHost, service); let ngService = createLanguageService(ngHost); ngHost.setSite(ngService); diff --git a/modules/@angular/language-service/test/hover_spec.ts b/modules/@angular/language-service/test/hover_spec.ts index fce25a89d9..b476957009 100644 --- a/modules/@angular/language-service/test/hover_spec.ts +++ b/modules/@angular/language-service/test/hover_spec.ts @@ -22,7 +22,7 @@ describe('hover', () => { let mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts'], toh); let service = ts.createLanguageService(mockHost, documentRegistry); let program = service.getProgram(); - let ngHost = new TypeScriptServiceHost(ts, mockHost, service); + let ngHost = new TypeScriptServiceHost(mockHost, service); let ngService = createLanguageService(ngHost); ngHost.setSite(ngService); diff --git a/modules/@angular/language-service/test/template_references_spec.ts b/modules/@angular/language-service/test/template_references_spec.ts index e2bee1c73d..b382f388b9 100644 --- a/modules/@angular/language-service/test/template_references_spec.ts +++ b/modules/@angular/language-service/test/template_references_spec.ts @@ -20,7 +20,7 @@ describe('references', () => { let mockHost = new MockTypescriptHost(['/app/main.ts', '/app/parsing-cases.ts'], toh); let service = ts.createLanguageService(mockHost, documentRegistry); let program = service.getProgram(); - let ngHost = new TypeScriptServiceHost(ts, mockHost, service); + let ngHost = new TypeScriptServiceHost(mockHost, service); let ngService = createLanguageService(ngHost); ngHost.setSite(ngService); diff --git a/modules/@angular/language-service/test/ts_plugin_spec.ts b/modules/@angular/language-service/test/ts_plugin_spec.ts index 759fb9fbd5..3aec4dff9b 100644 --- a/modules/@angular/language-service/test/ts_plugin_spec.ts +++ b/modules/@angular/language-service/test/ts_plugin_spec.ts @@ -29,8 +29,7 @@ describe('plugin', () => { } }); - let plugin = - new LanguageServicePlugin({ts: ts, host: mockHost, service, registry: documentRegistry}); + let plugin = new LanguageServicePlugin({host: mockHost, service, registry: documentRegistry}); it('should not report template errors on tour of heroes', () => { for (let source of program.getSourceFiles()) {