diff options
author | Sam McCall <sam.mccall@gmail.com> | 2019-08-07 16:52:21 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2019-08-07 16:52:21 +0000 |
commit | 0e8dd4a80e74e9989fee27bdf13ea6d3589255f9 (patch) | |
tree | a3479754933c13d12931dba3ce40f9bfad79f98d /clang-tools-extra/clangd/CodeCompletionStrings.cpp | |
parent | 396f6c7e903f37211b281e580522220ae5dfc025 (diff) | |
download | bcm5719-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.cpp | 18 |
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; |