Skip to content

Commit fa504f6

Browse files
author
steveluc
committed
Update project structure after change. After each change a
timer is started. If timer finishes before another change takes place, project structure will be updated to reflect any changes in reference comments or import statements.
1 parent b0c522d commit fa504f6

File tree

3 files changed

+41
-28
lines changed

3 files changed

+41
-28
lines changed

src/server/editorServices.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,7 @@ module ts.server {
101101
}
102102

103103
getScriptFileNames() {
104-
var filenames: string[] = [];
105-
for (var filename in this.filenameToScript) {
106-
if (this.filenameToScript[filename] && this.filenameToScript[filename].isOpen) {
107-
filenames.push(filename);
108-
}
109-
}
110-
return filenames;
104+
return this.roots.map(root => root.fileName);
111105
}
112106

113107
getScriptVersion(filename: string) {
@@ -536,15 +530,20 @@ module ts.server {
536530
updateProjectStructure() {
537531
this.log("updating project structure from ...", "Info");
538532
this.printProjects();
533+
var openFilesReferenced: ScriptInfo[] = [];
534+
var unattachedOpenFiles: ScriptInfo[] = [];
539535
for (var i = 0, len = this.openFilesReferenced.length; i < len; i++) {
540-
var refdFile = this.openFilesReferenced[i];
541-
refdFile.defaultProject.updateGraph();
542-
var sourceFile = refdFile.defaultProject.getSourceFile(refdFile);
543-
if (!sourceFile) {
544-
this.openFilesReferenced = copyListRemovingItem(refdFile, this.openFilesReferenced);
545-
this.addOpenFile(refdFile);
536+
var referencedFile = this.openFilesReferenced[i];
537+
referencedFile.defaultProject.updateGraph();
538+
var sourceFile = referencedFile.defaultProject.getSourceFile(referencedFile);
539+
if (sourceFile) {
540+
openFilesReferenced.push(referencedFile);
541+
}
542+
else {
543+
unattachedOpenFiles.push(referencedFile);
546544
}
547545
}
546+
this.openFilesReferenced = openFilesReferenced;
548547
var openFileRoots: ScriptInfo[] = [];
549548
for (var i = 0, len = this.openFileRoots.length; i < len; i++) {
550549
var rootFile = this.openFileRoots[i];
@@ -555,12 +554,15 @@ module ts.server {
555554
openFileRoots.push(rootFile);
556555
}
557556
else {
558-
// remove project from inferred projects list
557+
// remove project from inferred projects list because root captured
559558
this.inferredProjects = copyListRemovingItem(rootedProject, this.inferredProjects);
560559
this.openFilesReferenced.push(rootFile);
561560
}
562561
}
563562
this.openFileRoots = openFileRoots;
563+
for (var i = 0, len = unattachedOpenFiles.length; i < len; i++) {
564+
this.addOpenFile(unattachedOpenFiles[i]);
565+
}
564566
this.printProjects();
565567
}
566568

src/server/server.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,10 @@ module ts.server {
206206
}
207207

208208
};
209-
209+
var ioSession = new IOSession(ts.sys, logger);
210+
process.on('uncaughtException', function(err: Error) {
211+
ioSession.logError(err, "unknown");
212+
});
210213
// Start listening
211-
new IOSession(ts.sys, logger).listen();
214+
ioSession.listen();
212215
}

src/server/session.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -181,18 +181,29 @@ module ts.server {
181181
}
182182

183183
semanticCheck(file: string, project: Project) {
184-
var diags = project.compilerService.languageService.getSemanticDiagnostics(file);
185-
if (diags) {
186-
var bakedDiags = diags.map((diag) => formatDiag(file, project, diag));
187-
this.event({ file: file, diagnostics: bakedDiags }, "semanticDiag");
184+
try {
185+
var diags = project.compilerService.languageService.getSemanticDiagnostics(file);
186+
187+
if (diags) {
188+
var bakedDiags = diags.map((diag) => formatDiag(file, project, diag));
189+
this.event({ file: file, diagnostics: bakedDiags }, "semanticDiag");
190+
}
191+
}
192+
catch (err) {
193+
this.logError(err, "semantic check");
188194
}
189195
}
190196

191197
syntacticCheck(file: string, project: Project) {
192-
var diags = project.compilerService.languageService.getSyntacticDiagnostics(file);
193-
if (diags) {
194-
var bakedDiags = diags.map((diag) => formatDiag(file, project, diag));
195-
this.event({ file: file, diagnostics: bakedDiags }, "syntaxDiag");
198+
try {
199+
var diags = project.compilerService.languageService.getSyntacticDiagnostics(file);
200+
if (diags) {
201+
var bakedDiags = diags.map((diag) => formatDiag(file, project, diag));
202+
this.event({ file: file, diagnostics: bakedDiags }, "syntaxDiag");
203+
}
204+
}
205+
catch (err) {
206+
this.logError(err, "syntactic check");
196207
}
197208
}
198209

@@ -553,10 +564,7 @@ module ts.server {
553564
compilerService.host.editScript(file, start, end, insertString);
554565
this.changeSeq++;
555566
}
556-
// update project structure on idle commented out
557-
// until we can have the host return only the root files
558-
// from getScriptFileNames()
559-
//this.updateProjectStructure(this.changeSeq, (n) => n == this.changeSeq);
567+
this.updateProjectStructure(this.changeSeq, (n) => n == this.changeSeq);
560568
}
561569
}
562570

0 commit comments

Comments
 (0)