wait for reparsing before returning method signatures

This commit is contained in:
Dave Holoway
2020-06-26 22:10:21 +01:00
parent c943408613
commit edb16c667b

View File

@@ -994,6 +994,7 @@ function formatDoc(header, documentation) {
* @param {import('vscode-languageserver').SignatureHelpParams} request the reeust * @param {import('vscode-languageserver').SignatureHelpParams} request the reeust
*/ */
async function onSignatureHelp(request) { async function onSignatureHelp(request) {
trace('onSignatureHelp');
/** @type {import('vscode-languageserver').SignatureHelp} */ /** @type {import('vscode-languageserver').SignatureHelp} */
let sighelp = { let sighelp = {
signatures: [], signatures: [],
@@ -1004,11 +1005,14 @@ async function onSignatureHelp(request) {
if (!docinfo || !docinfo.parsed) { if (!docinfo || !docinfo.parsed) {
return sighelp; return sighelp;
} }
await docinfo.reparseWaiter;
const index = indexAt(request.position, docinfo.content); const index = indexAt(request.position, docinfo.content);
const token = docinfo.parsed.unit.getTokenAt(index); const token = docinfo.parsed.unit.getTokenAt(index);
if (!token || !token.methodCallInfo) { if (!token || !token.methodCallInfo) {
trace('onSignatureHelp - no method call info');
return sighelp; return sighelp;
} }
trace(`onSignatureHelp - ${token.methodCallInfo.methods.length} methods`);
sighelp = { sighelp = {
signatures: token.methodCallInfo.methods.map(m => { signatures: token.methodCallInfo.methods.map(m => {
/** @type {import('vscode-languageserver').SignatureInformation} */ /** @type {import('vscode-languageserver').SignatureInformation} */