summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd')
-rw-r--r--clang-tools-extra/clangd/CodeComplete.cpp13
-rw-r--r--clang-tools-extra/clangd/CodeComplete.h4
2 files changed, 15 insertions, 2 deletions
diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp
index 36d0f21ed09..df438b4836d 100644
--- a/clang-tools-extra/clangd/CodeComplete.cpp
+++ b/clang-tools-extra/clangd/CodeComplete.cpp
@@ -1413,8 +1413,17 @@ CompletionItem CodeCompletion::render(const CodeCompleteOptions &Opts) const {
LSP.additionalTextEdits.push_back(FixIt);
}
}
- if (Opts.EnableSnippets)
- LSP.textEdit->newText += SnippetSuffix;
+ if (Opts.EnableSnippets && !SnippetSuffix.empty()) {
+ if (!Opts.EnableFunctionArgSnippets &&
+ ((Kind == CompletionItemKind::Function) ||
+ (Kind == CompletionItemKind::Method)) &&
+ (SnippetSuffix.front() == '(') && (SnippetSuffix.back() == ')'))
+ // Check whether function has any parameters or not.
+ LSP.textEdit->newText += SnippetSuffix.size() > 2 ? "(${0})" : "()";
+ else
+ LSP.textEdit->newText += SnippetSuffix;
+ }
+
// FIXME(kadircet): Do not even fill insertText after making sure textEdit is
// compatible with most of the editors.
LSP.insertText = LSP.textEdit->newText;
diff --git a/clang-tools-extra/clangd/CodeComplete.h b/clang-tools-extra/clangd/CodeComplete.h
index 9ef2b1fbaf5..1d85a66ec44 100644
--- a/clang-tools-extra/clangd/CodeComplete.h
+++ b/clang-tools-extra/clangd/CodeComplete.h
@@ -82,6 +82,10 @@ struct CodeCompleteOptions {
/// Include completions that require small corrections, e.g. change '.' to
/// '->' on member access etc.
bool IncludeFixIts = false;
+
+ /// Whether to generate snippets for function arguments on code-completion.
+ /// Needs snippets to be enabled as well.
+ bool EnableFunctionArgSnippets = true;
};
// Semi-structured representation of a code-complete suggestion for our C++ API.
OpenPOWER on IntegriCloud