Skip to content

Commit c597bd6

Browse files
author
Zhengbo Li
committed
Add APIs to provide project info for a given file
Return the path of the config file and the file name list of the project (optionally). This is helpful in differentiate the build command behavior for loose files and configured projects in sublime.
1 parent 57f3e04 commit c597bd6

3 files changed

Lines changed: 49 additions & 2 deletions

File tree

src/server/editorServices.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,11 @@ module ts.server {
305305
return this.projectService.openFile(filename, false);
306306
}
307307

308+
getFileNameList() {
309+
let sourceFiles = this.program.getSourceFiles();
310+
return sourceFiles.map(sourceFile => sourceFile.fileName);
311+
}
312+
308313
getSourceFile(info: ScriptInfo) {
309314
return this.filenameToSourceFile[info.fileName];
310315
}

src/server/protocol.d.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,28 @@ declare module ts.server.protocol {
8787
file: string;
8888
}
8989

90+
/**
91+
* Arguments for ProjectInfo messages.
92+
*/
93+
export interface ProjectInfoRequestArgs {
94+
/**
95+
* The file for the request (absolute pathname required).
96+
*/
97+
file: string;
98+
/**
99+
* Indicate if the file name list of the project is needed
100+
*/
101+
needFileNameList: boolean;
102+
}
103+
104+
/**
105+
* Response message for "projectInfo" request
106+
*/
107+
export interface ProjectInfo {
108+
configFileName: string;
109+
fileNameList?: string[];
110+
}
111+
90112
/**
91113
* Request whose sole parameter is a file name.
92114
*/

src/server/session.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,9 @@ module ts.server {
9696
export var Reload = "reload";
9797
export var Rename = "rename";
9898
export var Saveto = "saveto";
99-
export var SignatureHelp = "signatureHelp";
100-
export var TypeDefinition = "typeDefinition";
99+
export var SignatureHelp = "signatureHelp";
100+
export var TypeDefinition = "typeDefinition";
101+
export var ProjectInfo = "projectInfo";
101102
export var Unknown = "unknown";
102103
}
103104

@@ -338,6 +339,20 @@ module ts.server {
338339
});
339340
}
340341

342+
getProjectInfo(fileName: string, needFileNameList: boolean): protocol.ProjectInfo {
343+
fileName = ts.normalizePath(fileName)
344+
let project = this.projectService.getProjectForFile(fileName)
345+
346+
let projectInfo: protocol.ProjectInfo = {
347+
configFileName: project.projectFilename
348+
}
349+
350+
if (needFileNameList) {
351+
projectInfo.fileNameList = project.getFileNameList();
352+
}
353+
return projectInfo;
354+
}
355+
341356
getRenameLocations(line: number, offset: number, fileName: string,findInComments: boolean, findInStrings: boolean): protocol.RenameResponseBody {
342357
var file = ts.normalizePath(fileName);
343358
var project = this.projectService.getProjectForFile(file);
@@ -951,6 +966,11 @@ module ts.server {
951966
response = this.getOccurrences(line, offset, fileName);
952967
break;
953968
}
969+
case CommandNames.ProjectInfo: {
970+
var { file, needFileNameList } = <protocol.ProjectInfoRequestArgs>request.arguments;
971+
response = this.getProjectInfo(file, needFileNameList);
972+
break;
973+
}
954974
default: {
955975
this.projectService.log("Unrecognized JSON command: " + message);
956976
this.output(undefined, CommandNames.Unknown, request.seq, "Unrecognized JSON command: " + request.command);

0 commit comments

Comments
 (0)