Skip to content

Commit 75396e7

Browse files
committed
make the project service (fake) async
refs #51
1 parent 4d44817 commit 75396e7

File tree

4 files changed

+118
-87
lines changed

4 files changed

+118
-87
lines changed

lib/main/lang/projectService.js

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ var tsconfig = require('../tsconfig/tsconfig');
55
var utils = require('./utils');
66
var project = require('./project');
77
var Project = project.Project;
8+
var resolve = Promise.resolve.bind(Promise);
89
var projectByProjectPath = {};
910
var projectByFilePath = {};
1011
function cacheAndCreateProject(projectFile) {
@@ -47,31 +48,31 @@ function textSpan(span) {
4748
}
4849
function echo(data) {
4950
data.num = data.num + 1;
50-
return data;
51+
return resolve(data);
5152
}
5253
exports.echo = echo;
5354
function quickInfo(query) {
5455
var project = getOrCreateProject(query.filePath);
5556
var info = project.languageService.getQuickInfoAtPosition(query.filePath, query.position);
5657
if (!info)
57-
return { valid: false };
58+
return Promise.resolve({ valid: false });
5859
else
59-
return {
60+
return resolve({
6061
valid: true,
6162
name: ts.displayPartsToString(info.displayParts || []),
6263
comment: ts.displayPartsToString(info.documentation || []),
63-
};
64+
});
6465
}
6566
exports.quickInfo = quickInfo;
6667
function build(query) {
67-
return {
68+
return resolve({
6869
outputs: getOrCreateProject(query.filePath).build()
69-
};
70+
});
7071
}
7172
exports.build = build;
7273
function errorsForFileFiltered(query) {
7374
var fileName = path.basename(query.filePath);
74-
return { errors: errorsForFile({ filePath: query.filePath }).errors.filter(function (error) { return path.basename(error.filePath) == fileName; }) };
75+
return errorsForFile({ filePath: query.filePath }).then(function (resp) { return { errors: resp.errors.filter(function (error) { return path.basename(error.filePath) == fileName; }) }; });
7576
}
7677
exports.errorsForFileFiltered = errorsForFileFiltered;
7778
var punctuations = utils.createMap([';', '{', '}', '(', ')', '.', ':', '<', '>']);
@@ -101,7 +102,7 @@ function getCompletionsAtPosition(query) {
101102
var comment = ts.displayPartsToString(completionDetails.documentation || []);
102103
return { display: display, comment: comment };
103104
}
104-
return {
105+
return resolve({
105106
completions: completionList.map(function (c) {
106107
var details = docComment(c);
107108
return {
@@ -112,44 +113,44 @@ function getCompletionsAtPosition(query) {
112113
};
113114
}),
114115
endsInPunctuation: endsInPunctuation
115-
};
116+
});
116117
}
117118
exports.getCompletionsAtPosition = getCompletionsAtPosition;
118119
function getSignatureHelps(query) {
119120
var project = getOrCreateProject(query.filePath);
120121
var signatureHelpItems = project.languageService.getSignatureHelpItems(query.filePath, query.position);
121122
if (!signatureHelpItems || !signatureHelpItems.items || !signatureHelpItems.items.length)
122-
return { signatureHelps: [] };
123+
return resolve({ signatureHelps: [] });
123124
return signatureHelpItems.items;
124125
}
125126
exports.getSignatureHelps = getSignatureHelps;
126127
function emitFile(query) {
127-
return getOrCreateProject(query.filePath).emitFile(query.filePath);
128+
return resolve(getOrCreateProject(query.filePath).emitFile(query.filePath));
128129
}
129130
exports.emitFile = emitFile;
130131
function regenerateProjectGlob(query) {
131132
var projectFile = getOrCreateProjectFile(query.filePath);
132133
cacheAndCreateProject(projectFile);
133-
return {};
134+
return resolve({});
134135
}
135136
exports.regenerateProjectGlob = regenerateProjectGlob;
136137
function formatDocument(query) {
137138
var prog = getOrCreateProject(query.filePath);
138-
return prog.formatDocument(query.filePath, query.cursor);
139+
return resolve(prog.formatDocument(query.filePath, query.cursor));
139140
}
140141
exports.formatDocument = formatDocument;
141142
function formatDocumentRange(query) {
142143
var prog = getOrCreateProject(query.filePath);
143-
return { formatted: prog.formatDocumentRange(query.filePath, query.start, query.end) };
144+
return resolve({ formatted: prog.formatDocumentRange(query.filePath, query.start, query.end) });
144145
}
145146
exports.formatDocumentRange = formatDocumentRange;
146147
function getDefinitionsAtPosition(query) {
147148
var project = getOrCreateProject(query.filePath);
148149
var definitions = project.languageService.getDefinitionAtPosition(query.filePath, query.position);
149150
var projectFileDirectory = project.projectFile.projectFileDirectory;
150151
if (!definitions || !definitions.length)
151-
return { projectFileDirectory: projectFileDirectory, definitions: [] };
152-
return {
152+
return resolve({ projectFileDirectory: projectFileDirectory, definitions: [] });
153+
return resolve({
153154
projectFileDirectory: projectFileDirectory,
154155
definitions: definitions.map(function (d) {
155156
var pos = project.languageServiceHost.getPositionFromIndex(d.fileName, d.textSpan.start());
@@ -158,12 +159,12 @@ function getDefinitionsAtPosition(query) {
158159
position: pos
159160
};
160161
})
161-
};
162+
});
162163
}
163164
exports.getDefinitionsAtPosition = getDefinitionsAtPosition;
164165
function updateText(query) {
165166
getOrCreateProject(query.filePath).languageServiceHost.updateScript(query.filePath, query.text);
166-
return {};
167+
return resolve({});
167168
}
168169
exports.updateText = updateText;
169170
function errorsForFile(query) {
@@ -172,7 +173,7 @@ function errorsForFile(query) {
172173
if (diagnostics.length === 0) {
173174
diagnostics = program.languageService.getSemanticDiagnostics(query.filePath);
174175
}
175-
return { errors: diagnostics.map(project.diagnosticToTSError) };
176+
return resolve({ errors: diagnostics.map(project.diagnosticToTSError) });
176177
}
177178
exports.errorsForFile = errorsForFile;
178179
function getRenameInfo(query) {
@@ -181,12 +182,12 @@ function getRenameInfo(query) {
181182
var info = project.languageService.getRenameInfo(query.filePath, query.position);
182183
if (info && info.canRename) {
183184
var locations = project.languageService.findRenameLocations(query.filePath, query.position, findInStrings, findInComments).map(function (loc) {
184-
return {
185+
return resolve({
185186
textSpan: textSpan(loc.textSpan),
186187
filePath: loc.fileName
187-
};
188+
});
188189
});
189-
return {
190+
return resolve({
190191
canRename: true,
191192
localizedErrorMessage: info.localizedErrorMessage,
192193
displayName: info.displayName,
@@ -195,12 +196,12 @@ function getRenameInfo(query) {
195196
kindModifiers: info.kindModifiers,
196197
triggerSpan: textSpan(info.triggerSpan),
197198
locations: locations
198-
};
199+
});
199200
}
200201
else {
201-
return {
202+
return resolve({
202203
canRename: false
203-
};
204+
});
204205
}
205206
}
206207
exports.getRenameInfo = getRenameInfo;

0 commit comments

Comments
 (0)