forked from qt-creator/qt-creator
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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user