Fixes #19406. Only insert top level parameters for useCodeSnippedOnMethodSuggest

This commit is contained in:
Matt Bierner
2017-01-25 17:24:14 -08:00
parent 0c8829588c
commit 80e243f9ba
2 changed files with 17 additions and 5 deletions

View File

@@ -275,11 +275,23 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
}
private snippetForFunctionCall(detail: CompletionEntryDetails): SnippetString {
let codeSnippet = detail.name;
const suggestionArgumentNames: string[] = detail.displayParts
.filter(part => part.kind === 'parameterName')
.map((part, i) => `\${${i + 1}:${part.text}}`);
const suggestionArgumentNames: string[] = [];
let parenCount = 0;
for (let i = 0; i < detail.displayParts.length; ++i) {
const part = detail.displayParts[i];
// Only take top level paren names
if (part.kind === 'parameterName' && parenCount === 1) {
suggestionArgumentNames.push(`\${${i + 1}:${part.text}}`);
} else if (part.kind === 'punctuation') {
if (part.text === '(') {
++parenCount;
} else if (part.text === ')') {
--parenCount;
}
}
}
let codeSnippet = detail.name;
if (suggestionArgumentNames.length > 0) {
codeSnippet += '(' + suggestionArgumentNames.join(', ') + ')$0';
} else {