summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/CodeCompletionStrings.cpp
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2019-08-07 16:52:21 +0000
committerSam McCall <sam.mccall@gmail.com>2019-08-07 16:52:21 +0000
commit0e8dd4a80e74e9989fee27bdf13ea6d3589255f9 (patch)
treea3479754933c13d12931dba3ce40f9bfad79f98d /clang-tools-extra/clangd/CodeCompletionStrings.cpp
parent396f6c7e903f37211b281e580522220ae5dfc025 (diff)
downloadbcm5719-llvm-0e8dd4a80e74e9989fee27bdf13ea6d3589255f9.tar.gz
bcm5719-llvm-0e8dd4a80e74e9989fee27bdf13ea6d3589255f9.zip
Code completion should not ignore default parameters in functions.
Summary: Inorder to display the default arguments we must process the CK_Optional chunks of CodeCompletionString while creating the Signature. We do not create placeholders for default arguments. Reviewers: sammccall Reviewed By: sammccall Subscribers: jkorous, arphaman, kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D65866 llvm-svn: 368186
Diffstat (limited to 'clang-tools-extra/clangd/CodeCompletionStrings.cpp')
-rw-r--r--clang-tools-extra/clangd/CodeCompletionStrings.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/CodeCompletionStrings.cpp b/clang-tools-extra/clangd/CodeCompletionStrings.cpp
index bf3cabc2698..ef44c153425 100644
--- a/clang-tools-extra/clangd/CodeCompletionStrings.cpp
+++ b/clang-tools-extra/clangd/CodeCompletionStrings.cpp
@@ -32,6 +32,21 @@ void appendEscapeSnippet(const llvm::StringRef Text, std::string *Out) {
}
}
+void appendOptionalChunk(const CodeCompletionString &CCS, std::string *Out) {
+ for (const CodeCompletionString::Chunk &C : CCS) {
+ switch (C.Kind) {
+ case CodeCompletionString::CK_Optional:
+ assert(C.Optional &&
+ "Expected the optional code completion string to be non-null.");
+ appendOptionalChunk(*C.Optional, Out);
+ break;
+ default:
+ *Out += C.Text;
+ break;
+ }
+ }
+}
+
bool looksLikeDocComment(llvm::StringRef CommentText) {
// We don't report comments that only contain "special" chars.
// This avoids reporting various delimiters, like:
@@ -138,6 +153,9 @@ void getSignature(const CodeCompletionString &CCS, std::string *Signature,
*Snippet += Chunk.Text;
break;
case CodeCompletionString::CK_Optional:
+ assert(Chunk.Optional);
+ // No need to create placeholders for default arguments in Snippet.
+ appendOptionalChunk(*Chunk.Optional, Signature);
break;
case CodeCompletionString::CK_Placeholder:
*Signature += Chunk.Text;
OpenPOWER on IntegriCloud