Merge remote-tracking branch 'origin/8.0'

Change-Id: Icbb87ac8bcee5fb86042d3863a973573510651b4
This commit is contained in:
hjk
2022-08-05 08:48:22 +02:00
31 changed files with 440 additions and 380 deletions

View File

@@ -40,8 +40,8 @@ using namespace Utils;
namespace ClangCodeModel::Internal {
static constexpr char roleKey[] = "role";
static constexpr char arcanaKey[] = "arcana";
static constexpr char16_t roleKey[] = u"role";
static constexpr char16_t arcanaKey[] = u"arcana";
QString ClangdAstNode::role() const { return typedValue<QString>(roleKey); }
QString ClangdAstNode::kind() const { return typedValue<QString>(kindKey); }

View File

@@ -111,7 +111,7 @@ class SymbolDetails : public JsonObject
public:
using JsonObject::JsonObject;
static constexpr char usrKey[] = "usr";
static constexpr char16_t usrKey[] = u"usr";
// the unqualified name of the symbol
QString name() const { return typedValue<QString>(nameKey); }
@@ -190,8 +190,8 @@ class DiagnosticsCapabilities : public JsonObject
{
public:
using JsonObject::JsonObject;
void enableCategorySupport() { insert("categorySupport", true); }
void enableCodeActionsInline() {insert("codeActionsInline", true);}
void enableCategorySupport() { insert(u"categorySupport", true); }
void enableCodeActionsInline() {insert(u"codeActionsInline", true);}
};
class ClangdTextDocumentClientCapabilities : public TextDocumentClientCapabilities
@@ -201,7 +201,7 @@ public:
void setPublishDiagnostics(const DiagnosticsCapabilities &caps)
{ insert("publishDiagnostics", caps); }
{ insert(u"publishDiagnostics", caps); }
};
static qint64 getRevision(const TextDocument *doc)
@@ -1338,7 +1338,7 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc,
Utils::optional<QList<CodeAction> > ClangdDiagnostic::codeActions() const
{
auto actions = optionalArray<LanguageServerProtocol::CodeAction>("codeActions");
auto actions = optionalArray<LanguageServerProtocol::CodeAction>(u"codeActions");
if (!actions)
return actions;
static const QStringList badCodeActions{
@@ -1355,7 +1355,7 @@ Utils::optional<QList<CodeAction> > ClangdDiagnostic::codeActions() const
QString ClangdDiagnostic::category() const
{
return typedValue<QString>("category");
return typedValue<QString>(u"category");
}
MessageId ClangdClient::Private::getAndHandleAst(const TextDocOrFile &doc,

View File

@@ -633,7 +633,7 @@ IAssistProposal *ClangdFunctionHintProcessor::perform(const AssistInterface *int
ClangdCompletionCapabilities::ClangdCompletionCapabilities(const JsonObject &object)
: TextDocumentClientCapabilities::CompletionCapabilities(object)
{
insert("editsNearCursor", true); // For dot-to-arrow correction.
insert(u"editsNearCursor", true); // For dot-to-arrow correction.
if (Utils::optional<CompletionItemCapbilities> completionItemCaps = completionItem()) {
completionItemCaps->setSnippetSupport(false);
setCompletionItem(*completionItemCaps);

View File

@@ -277,7 +277,7 @@ Task createTask(const ClangDiagnostic &diagnostic)
return Task(taskType,
diagnosticCategoryPrefixRemoved(diagnostic.text),
FilePath::fromString(diagnostic.location.targetFilePath.toString()),
diagnostic.location.targetFilePath,
diagnostic.location.targetLine,
Constants::TASK_CATEGORY_DIAGNOSTICS,
icon,
@@ -295,7 +295,7 @@ ClangdTextMark::ClangdTextMark(const FilePath &filePath,
, m_diagnostic(convertDiagnostic(ClangdDiagnostic(diagnostic), filePath))
, m_client(client)
{
setSettingsPage(CppEditor::Constants::CPP_CODE_MODEL_SETTINGS_ID);
setSettingsPage(CppEditor::Constants::CPP_CLANGD_SETTINGS_ID);
const bool isError = diagnostic.severity()
&& *diagnostic.severity() == DiagnosticSeverity::Error;
@@ -310,31 +310,32 @@ ClangdTextMark::ClangdTextMark(const FilePath &filePath,
client->addTask(createTask(m_diagnostic));
}
// Copy to clipboard action
QVector<QAction *> actions;
QAction *action = new QAction();
action->setIcon(QIcon::fromTheme("edit-copy", Icons::COPY.icon()));
action->setToolTip(tr("Copy to Clipboard", "Clang Code Model Marks"));
QObject::connect(action, &QAction::triggered, [diag = m_diagnostic]() {
const QString text = ClangDiagnosticWidget::createText({diag},
ClangDiagnosticWidget::InfoBar);
setClipboardAndSelection(text);
});
actions << action;
// Remove diagnostic warning action
Project *project = projectForCurrentEditor();
if (project && isDiagnosticConfigChangable(project, m_diagnostic)) {
action = new QAction();
action->setIcon(Icons::BROKEN.icon());
action->setToolTip(tr("Disable Diagnostic in Current Project"));
QObject::connect(action, &QAction::triggered, [diag = m_diagnostic]() {
disableDiagnosticInCurrentProjectConfig(diag);
setActionsProvider([diag = m_diagnostic] {
// Copy to clipboard action
QList<QAction *> actions;
QAction *action = new QAction();
action->setIcon(QIcon::fromTheme("edit-copy", Icons::COPY.icon()));
action->setToolTip(tr("Copy to Clipboard", "Clang Code Model Marks"));
QObject::connect(action, &QAction::triggered, [diag] {
const QString text = ClangDiagnosticWidget::createText({diag},
ClangDiagnosticWidget::InfoBar);
setClipboardAndSelection(text);
});
actions << action;
}
setActions(actions);
// Remove diagnostic warning action
Project *project = projectForCurrentEditor();
if (project && isDiagnosticConfigChangable(project, diag)) {
action = new QAction();
action->setIcon(Icons::BROKEN.icon());
action->setToolTip(tr("Disable Diagnostic in Current Project"));
QObject::connect(action, &QAction::triggered, [diag] {
disableDiagnosticInCurrentProjectConfig(diag);
});
actions << action;
}
return actions;
});
}
bool ClangdTextMark::addToolTipContent(QLayout *target) const

View File

@@ -76,15 +76,14 @@ QString diagnosticCategoryPrefixRemoved(const QString &text)
// Prefixes are taken from $LLVM_SOURCE_DIR/tools/clang/lib/Frontend/TextDiagnostic.cpp,
// function TextDiagnostic::printDiagnosticLevel (llvm-3.6.2).
static const QStringList categoryPrefixes = {
QStringLiteral("note"),
QStringLiteral("remark"),
QStringLiteral("warning"),
QStringLiteral("error"),
QStringLiteral("fatal error")
QStringLiteral("note: "),
QStringLiteral("remark: "),
QStringLiteral("warning: "),
QStringLiteral("error: "),
QStringLiteral("fatal error: ")
};
for (const QString &prefix : categoryPrefixes) {
const QString fullPrefix = prefix + QStringLiteral(": ");
for (const QString &fullPrefix : categoryPrefixes) {
if (theText.startsWith(fullPrefix)) {
theText.remove(0, fullPrefix.length());
return theText;