ClangCodeModel: Add experimental clangd support

If the user has enabled clangd (default is off), we start up one instance
per project when it is opened/changed (including build config switches),
and trigger background indexing.
So far, the index is used to provide results for locators and "Find
Usages".
Per-document functionality such as semantic highlighting and completion
is still provided by libclang.

Change-Id: I12532fca1b9c6278baab560e7238cba6189cde9f
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-02-23 13:51:41 +01:00
parent 8bacd9bdc4
commit ecafdb7543
40 changed files with 881 additions and 190 deletions

View File

@@ -113,11 +113,17 @@ public:
bool reachable() const { return m_state == Initialized; }
// capabilities
static LanguageServerProtocol::ClientCapabilities defaultClientCapabilities();
void setClientCapabilities(const LanguageServerProtocol::ClientCapabilities &caps);
const LanguageServerProtocol::ServerCapabilities &capabilities() const;
const DynamicCapabilities &dynamicCapabilities() const;
void registerCapabilities(const QList<LanguageServerProtocol::Registration> &registrations);
void unregisterCapabilities(const QList<LanguageServerProtocol::Unregistration> &unregistrations);
void setLocatorsEnabled(bool enabled) { m_locatorsEnabled = enabled; }
bool locatorsEnabled() const { return m_locatorsEnabled; }
void setDocumentActionsEnabled(bool enabled) { m_documentActionsEnabled = enabled; }
// document synchronization
void setSupportedLanguage(const LanguageFilter &filter);
void setActivateDocumentAutomatically(bool enabled);
@@ -226,6 +232,7 @@ private:
QMap<TextEditor::TextEditorWidget *, QTimer *> m_documentHighlightsTimer;
QTimer m_documentUpdateTimer;
Utils::Id m_id;
LanguageServerProtocol::ClientCapabilities m_clientCapabilities = defaultClientCapabilities();
LanguageServerProtocol::ServerCapabilities m_serverCapabilities;
DynamicCapabilities m_dynamicCapabilities;
struct AssistProviders
@@ -250,6 +257,8 @@ private:
ProgressManager m_progressManager;
bool m_activateDocAutomatically = false;
SemanticTokenSupport m_tokentSupport;
bool m_locatorsEnabled = true;
bool m_documentActionsEnabled = true;
};
} // namespace LanguageClient