[clang-tools-extra] r365356 - [clangd] Use -completion-style=bundled by default if signature help is available
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 8 10:27:15 PDT 2019
Author: sammccall
Date: Mon Jul 8 10:27:15 2019
New Revision: 365356
URL: http://llvm.org/viewvc/llvm-project?rev=365356&view=rev
Log:
[clangd] Use -completion-style=bundled by default if signature help is available
Summary:
I didn't manage to find something nicer than optional<bool>, but at least I
found a sneakier comment.
Reviewers: kadircet
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D64216
Modified:
clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
clang-tools-extra/trunk/clangd/CodeComplete.cpp
clang-tools-extra/trunk/clangd/CodeComplete.h
clang-tools-extra/trunk/clangd/Protocol.cpp
clang-tools-extra/trunk/clangd/Protocol.h
clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp
Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp?rev=365356&r1=365355&r2=365356&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp (original)
+++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp Mon Jul 8 10:27:15 2019
@@ -366,6 +366,8 @@ void ClangdLSPServer::onInitialize(const
CCOpts.EnableSnippets = Params.capabilities.CompletionSnippets;
CCOpts.IncludeFixIts = Params.capabilities.CompletionFixes;
+ if (!CCOpts.BundleOverloads.hasValue())
+ CCOpts.BundleOverloads = Params.capabilities.HasSignatureHelp;
DiagOpts.EmbedFixesInDiagnostics = Params.capabilities.DiagnosticFixes;
DiagOpts.SendDiagnosticCategory = Params.capabilities.DiagnosticCategory;
DiagOpts.EmitRelatedLocations =
Modified: clang-tools-extra/trunk/clangd/CodeComplete.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.cpp?rev=365356&r1=365355&r2=365356&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/CodeComplete.cpp (original)
+++ clang-tools-extra/trunk/clangd/CodeComplete.cpp Mon Jul 8 10:27:15 2019
@@ -169,7 +169,7 @@ struct CompletionCandidate {
// Returns a token identifying the overload set this is part of.
// 0 indicates it's not part of any overload set.
size_t overloadSet(const CodeCompleteOptions &Opts) const {
- if (!Opts.BundleOverloads)
+ if (!Opts.BundleOverloads.getValueOr(false))
return 0;
llvm::SmallString<256> Scratch;
if (IndexResult) {
Modified: clang-tools-extra/trunk/clangd/CodeComplete.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.h?rev=365356&r1=365355&r2=365356&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/CodeComplete.h (original)
+++ clang-tools-extra/trunk/clangd/CodeComplete.h Mon Jul 8 10:27:15 2019
@@ -62,7 +62,10 @@ struct CodeCompleteOptions {
bool IncludeIneligibleResults = false;
/// Combine overloads into a single completion item where possible.
- bool BundleOverloads = false;
+ /// If none, the the implementation may choose an appropriate behavior.
+ /// (In practice, ClangdLSPServer enables bundling if the client claims
+ /// to supports signature help).
+ llvm::Optional<bool> BundleOverloads;
/// Limit the number of results returned (0 means no limit).
/// If more results are available, we set CompletionList.isIncomplete.
Modified: clang-tools-extra/trunk/clangd/Protocol.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Protocol.cpp?rev=365356&r1=365355&r2=365356&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/Protocol.cpp (original)
+++ clang-tools-extra/trunk/clangd/Protocol.cpp Mon Jul 8 10:27:15 2019
@@ -323,6 +323,7 @@ bool fromJSON(const llvm::json::Value &P
}
}
if (auto *Help = TextDocument->getObject("signatureHelp")) {
+ R.HasSignatureHelp = true;
if (auto *Info = Help->getObject("signatureInformation")) {
if (auto *Parameter = Info->getObject("parameterInformation")) {
if (auto OffsetSupport = Parameter->getBoolean("labelOffsetSupport"))
Modified: clang-tools-extra/trunk/clangd/Protocol.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Protocol.h?rev=365356&r1=365355&r2=365356&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/Protocol.h (original)
+++ clang-tools-extra/trunk/clangd/Protocol.h Mon Jul 8 10:27:15 2019
@@ -393,9 +393,15 @@ struct ClientCapabilities {
bool CompletionFixes = false;
/// Client supports hierarchical document symbols.
+ /// textDocument.documentSymbol.hierarchicalDocumentSymbolSupport
bool HierarchicalDocumentSymbol = false;
+ /// Client supports signature help.
+ /// textDocument.signatureHelp
+ bool HasSignatureHelp = false;
+
/// Client supports processing label offsets instead of a simple label string.
+ /// textDocument.signatureHelp.signatureInformation.parameterInformation.labelOffsetSupport
bool OffsetsInSignatureHelp = false;
/// The supported set of CompletionItemKinds for textDocument/completion.
@@ -407,12 +413,14 @@ struct ClientCapabilities {
bool CodeActionStructure = false;
/// Client supports semantic highlighting.
+ /// textDocument.semanticHighlightingCapabilities.semanticHighlighting
bool SemanticHighlighting = false;
/// Supported encodings for LSP character offsets. (clangd extension).
llvm::Optional<std::vector<OffsetEncoding>> offsetEncoding;
/// The content format that should be used for Hover requests.
+ /// textDocument.hover.contentEncoding
MarkupKind HoverContentFormat = MarkupKind::PlainText;
};
bool fromJSON(const llvm::json::Value &, ClientCapabilities &);
Modified: clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp?rev=365356&r1=365355&r2=365356&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp (original)
+++ clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp Mon Jul 8 10:27:15 2019
@@ -58,8 +58,7 @@ static llvm::cl::opt<CompletionStyleFlag
"completion, with full type information"),
clEnumValN(Bundled, "bundled",
"Similar completion items (e.g. function overloads) are "
- "combined. Type information shown where possible")),
- llvm::cl::init(Detailed));
+ "combined. Type information shown where possible")));
// FIXME: Flags are the wrong mechanism for user preferences.
// We should probably read a dotfile or similar.
@@ -487,7 +486,8 @@ int main(int argc, char *argv[]) {
clangd::CodeCompleteOptions CCOpts;
CCOpts.IncludeIneligibleResults = IncludeIneligibleResults;
CCOpts.Limit = LimitResults;
- CCOpts.BundleOverloads = CompletionStyle != Detailed;
+ if (CompletionStyle.getNumOccurrences())
+ CCOpts.BundleOverloads = CompletionStyle != Detailed;
CCOpts.ShowOrigins = ShowOrigins;
CCOpts.InsertIncludes = HeaderInsertion;
if (!HeaderInsertionDecorators) {
More information about the cfe-commits
mailing list