LanguageClient: export DiagnosticManager

Change-Id: I60b3e6b14bf364da60fb8b3de6d5d5cc1cd2e634
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2022-04-01 07:34:49 +02:00
parent 929e40a9f2
commit e437cf7a71
6 changed files with 92 additions and 70 deletions

View File

@@ -1427,20 +1427,6 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir)
}
setCurrentProject(project);
setDocumentChangeUpdateThreshold(d->settings.documentUpdateThreshold);
const auto textMarkCreator = [this](const Utils::FilePath &filePath,
const Diagnostic &diag, bool isProjectFile) {
if (d->isTesting)
emit textMarkCreated(filePath);
return new ClangdTextMark(filePath, diag, isProjectFile, this);
};
const auto hideDiagsHandler = []{ ClangDiagnosticManager::clearTaskHubIssues(); };
static const auto diagsFilter = [](const Diagnostic &diag) {
const Diagnostic::Code code = diag.code().value_or(Diagnostic::Code());
const QString * const codeString = Utils::get_if<QString>(&code);
return !codeString || *codeString != "drv_unknown_argument";
};
setDiagnosticsHandlers(textMarkCreator, hideDiagsHandler, diagsFilter);
setSymbolStringifier(displayNameFromDocumentSymbol);
setSemanticTokensHandler([this](TextDocument *doc, const QList<ExpandedSemanticToken> &tokens,
int version, bool force) {
@@ -1615,6 +1601,44 @@ const LanguageClient::Client::CustomInspectorTabs ClangdClient::createCustomInsp
return {std::make_pair(new MemoryUsageWidget(this), tr("Memory Usage"))};
}
class ClangdDiagnosticManager : public LanguageClient::DiagnosticManager
{
public:
using LanguageClient::DiagnosticManager::DiagnosticManager;
void hideDiagnostics(const Utils::FilePath &filePath) override
{
DiagnosticManager::hideDiagnostics(filePath);
ClangDiagnosticManager::clearTaskHubIssues();
}
QList<Diagnostic> filteredDiagnostics(const QList<Diagnostic> &diagnostics) const override
{
return Utils::filtered(diagnostics, [](const Diagnostic &diag){
const Diagnostic::Code code = diag.code().value_or(Diagnostic::Code());
const QString * const codeString = Utils::get_if<QString>(&code);
return !codeString || *codeString != "drv_unknown_argument";
});
}
TextMark *createTextMark(const Utils::FilePath &filePath,
const Diagnostic &diagnostic,
bool isProjectFile) const override
{
return new ClangdTextMark(filePath, diagnostic, isProjectFile, client());
}
};
DiagnosticManager *ClangdClient::createDiagnosticManager()
{
auto diagnosticManager = new ClangdDiagnosticManager(this);
if (d->isTesting) {
connect(diagnosticManager, &DiagnosticManager::textMarkCreated,
this, &ClangdClient::textMarkCreated);
}
return diagnosticManager;
}
RefactoringChangesData *ClangdClient::createRefactoringChangesBackend() const
{
return new CppEditor::CppRefactoringChangesData(