Skip to content

Commit 622cdfe

Browse files
committed
fix(ls): improve performance of service
fix: implement getProjectVersion() for LSHost fix: add reponse timing to logging
1 parent bd8f2c2 commit 622cdfe

File tree

4 files changed

+50
-9
lines changed

4 files changed

+50
-9
lines changed

client/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "ng-template",
3-
"displayName": "Angular Template",
4-
"description": "Angular Template Service",
5-
"version": "0.0.5",
3+
"displayName": "Angular Langauge Service",
4+
"description": "Editor services for Angular templates",
5+
"version": "0.0.7",
66
"publisher": "Google",
77
"engines": {
88
"vscode": "^1.4.0"

server/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
"@angular/language-service": "file:///Users/chuckj/src/angular/dist/packages-dist/language-service"
1919
},
2020
"devDependencies": {
21-
"rxjs": "^5.0.0-beta.12",
22-
"zone.js": "^0.6.25",
23-
"@angular/tsc-wrapped": "file:///Users/chuckj/src/angular/dist/tools/@angular/tsc-wrapped",
2421
"@angular/compiler": "file:///Users/chuckj/src/angular/dist/packages-dist/compiler",
2522
"@angular/compiler-cli": "file:///Users/chuckj/src/angular/dist/packages-dist/compiler-cli",
2623
"@angular/core": "file:///Users/chuckj/src/angular/dist/packages-dist/core",
27-
"@types/node": "^6.0.40"
24+
"@angular/tsc-wrapped": "file:///Users/chuckj/src/angular/dist/tools/@angular/tsc-wrapped",
25+
"@types/node": "^6.0.46",
26+
"rxjs": "^5.0.0-beta.12",
27+
"zone.js": "^0.6.25"
2828
}
2929
}

server/src/editorServices.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,7 @@ export class LSHost implements ts.LanguageServiceHost {
502502
compilationSettings: ts.CompilerOptions;
503503
filenameToScript: Map<ts.Path, ScriptInfo>;
504504
roots: ScriptInfo[] = [];
505+
version: number = 0;
505506

506507
private resolvedModuleNames: Map<ts.Path, ts.Map<TimestampedResolvedModule>>;
507508
private resolvedTypeReferenceDirectives: Map<ts.Path, ts.Map<TimestampedResolvedTypeReferenceDirective>>;
@@ -577,6 +578,10 @@ export class LSHost implements ts.LanguageServiceHost {
577578
}
578579
}
579580

581+
getProjectVersion() {
582+
return this.version.toString();
583+
}
584+
580585
resolveTypeReferenceDirectives(typeDirectiveNames: string[], containingFile: string): ts.ResolvedTypeReferenceDirective[] {
581586
return this.resolveNamesWithLocalCache(typeDirectiveNames, containingFile, this.resolvedTypeReferenceDirectives, ts.resolveTypeReferenceDirective, m => m.resolvedTypeReferenceDirective);
582587
}
@@ -602,6 +607,7 @@ export class LSHost implements ts.LanguageServiceHost {
602607
// conservatively assume that changing compiler options might affect module resolution strategy
603608
this.resolvedModuleNames.clear();
604609
this.resolvedTypeReferenceDirectives.clear();
610+
this.modified();
605611
}
606612

607613
lineAffectsRefs(filename: string, line: number) {
@@ -651,6 +657,7 @@ export class LSHost implements ts.LanguageServiceHost {
651657
this.filenameToScript.delete(info.path);
652658
this.resolvedModuleNames.delete(info.path);
653659
this.resolvedTypeReferenceDirectives.delete(info.path);
660+
this.modified();
654661
}
655662
}
656663

@@ -670,6 +677,7 @@ export class LSHost implements ts.LanguageServiceHost {
670677
if (!this.filenameToScript.has(info.path)) {
671678
this.filenameToScript.set(info.path, info);
672679
this.roots.push(info);
680+
this.modified();
673681
}
674682
}
675683

@@ -679,6 +687,7 @@ export class LSHost implements ts.LanguageServiceHost {
679687
this.roots = copyListRemovingItem(info, this.roots);
680688
this.resolvedModuleNames.delete(info.path);
681689
this.resolvedTypeReferenceDirectives.delete(info.path);
690+
this.modified();
682691
}
683692
}
684693

@@ -694,13 +703,15 @@ export class LSHost implements ts.LanguageServiceHost {
694703
const script = this.getScriptInfo(filename);
695704
if (script) {
696705
script.svc.reloadFromFile(tmpfilename, cb);
706+
this.modified();
697707
}
698708
}
699709

700710
editScript(filename: string, start: number, end: number, newText: string) {
701711
const script = this.getScriptInfo(filename);
702712
if (script) {
703713
script.editContent(start, end, newText);
714+
this.modified();
704715
return;
705716
}
706717

@@ -774,6 +785,10 @@ export class LSHost implements ts.LanguageServiceHost {
774785
const script: ScriptInfo = this.filenameToScript.get(path);
775786
return script.snap().index;
776787
}
788+
789+
private modified() {
790+
this.version++;
791+
}
777792
}
778793

779794
export interface ProjectOptions {
@@ -1544,12 +1559,14 @@ export class ProjectService {
15441559
}
15451560

15461561
// Update Angular summaries
1562+
let start = Date.now();
15471563
for (let project of this.configuredProjects) {
15481564
project.compilerService.ngHost.updateModuleSummary();
15491565
}
15501566
for (let project of this.inferredProjects) {
15511567
project.compilerService.ngHost.updateModuleSummary();
15521568
}
1569+
this.log(`updated: ng - ${Date.now() - start}ms`, "Info");
15531570

15541571
this.printProjects();
15551572
}
@@ -1997,7 +2014,7 @@ export class CompilerService {
19972014

19982015
this.ng = this.resolveLanguageServiceModule();
19992016
this.ngHost = new this.ng.TypeScriptServiceHost(ts, this.host, this.languageService);
2000-
this.ngService = this.ng.createLanguageService(this.ngHost);
2017+
this.ngService = logServiceTimes(logger, this.ng.createLanguageService(this.ngHost));
20012018
this.ngHost.setSite(this.ngService);
20022019
this.classifier = ts.createClassifier();
20032020
}
@@ -3006,3 +3023,27 @@ export class LineLeaf implements LineCollection {
30063023
return 1;
30073024
}
30083025
}
3026+
3027+
3028+
function logServiceTimes(logger: Logger, service: ng.LanguageService): ng.LanguageService {
3029+
function time<T>(name: string, cb: () => T): T {
3030+
const start = Date.now();
3031+
const result = cb();
3032+
logger.msg(`${name}: ${Date.now() - start}ms`);
3033+
return result;
3034+
}
3035+
return {
3036+
getCompletionsAt(fileName, position) {
3037+
return time("getCompletions", () => service.getCompletionsAt(fileName, position));
3038+
},
3039+
getDiagnostics(fileName) {
3040+
return time("getDiagnnostics", () => service.getDiagnostics(fileName));
3041+
},
3042+
getTemplateReferences() {
3043+
return time("getTemplateRefrences", () => service.getTemplateReferences());
3044+
},
3045+
getPipesAt(fileName, position) {
3046+
return service.getPipesAt(fileName, position);
3047+
}
3048+
};
3049+
}

server/src/server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {TextDocuments, TextDocumentEvent} from './documents';
2020
import {ErrorCollector} from './errors';
2121

2222
// Create a connection for the server. The connection uses Node's IPC as a transport
23-
let connection: IConnection = createConnection(new IPCMessageReader(process), new IPCMessageWriter(process));
23+
let connection: IConnection = createConnection();
2424

2525
// Create a simple text document manager. The text document manager
2626
// supports full document sync only

0 commit comments

Comments
 (0)