From b0a0019beb459217e9e3b50c69611cb04af3012c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Sat, 3 Feb 2024 21:18:42 +0100 Subject: [PATCH] Axivion: Remove axivionresultparser.{cpp,h} Rename ShortIssue into Issue and move it to axivionplugin.cpp. Change-Id: I07a43d7ade7a06560ad130cabcf6933cd36c67e0 Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/axivion/CMakeLists.txt | 1 - src/plugins/axivion/axivion.qbs | 2 - src/plugins/axivion/axivionplugin.cpp | 34 ++++++++--- src/plugins/axivion/axivionresultparser.cpp | 68 --------------------- src/plugins/axivion/axivionresultparser.h | 43 ------------- 5 files changed, 24 insertions(+), 124 deletions(-) delete mode 100644 src/plugins/axivion/axivionresultparser.cpp delete mode 100644 src/plugins/axivion/axivionresultparser.h diff --git a/src/plugins/axivion/CMakeLists.txt b/src/plugins/axivion/CMakeLists.txt index cb34067169d..faba40706c8 100644 --- a/src/plugins/axivion/CMakeLists.txt +++ b/src/plugins/axivion/CMakeLists.txt @@ -7,7 +7,6 @@ add_qtc_plugin(Axivion axivionoutputpane.cpp axivionoutputpane.h axivionplugin.cpp axivionplugin.h axivionprojectsettings.h axivionprojectsettings.cpp - axivionresultparser.h axivionresultparser.cpp axivionsettings.cpp axivionsettings.h axiviontr.h dashboard/dto.cpp dashboard/dto.h diff --git a/src/plugins/axivion/axivion.qbs b/src/plugins/axivion/axivion.qbs index a6005edbc35..7d215259b8e 100644 --- a/src/plugins/axivion/axivion.qbs +++ b/src/plugins/axivion/axivion.qbs @@ -19,8 +19,6 @@ QtcPlugin { "axivionplugin.h", "axivionprojectsettings.h", "axivionprojectsettings.cpp", - "axivionresultparser.h", - "axivionresultparser.cpp", "axivionsettings.cpp", "axivionsettings.h", "axiviontr.h", diff --git a/src/plugins/axivion/axivionplugin.cpp b/src/plugins/axivion/axivionplugin.cpp index 82bc0862c79..26f5196a9ad 100644 --- a/src/plugins/axivion/axivionplugin.cpp +++ b/src/plugins/axivion/axivionplugin.cpp @@ -5,7 +5,6 @@ #include "axivionoutputpane.h" #include "axivionprojectsettings.h" -#include "axivionresultparser.h" #include "axivionsettings.h" #include "axiviontr.h" #include "dashboard/dto.h" @@ -54,6 +53,21 @@ using namespace Utils; namespace Axivion::Internal { +class Issue +{ +public: + QString id; + QString state; + QString errorNumber; + QString message; + QString entity; + QString filePath; + QString severity; + int lineNumber = 0; +}; + +using Issues = QList; + QIcon iconForIssue(const QString &prefix) { static QHash prefixToIcon; @@ -140,7 +154,7 @@ public: void onDocumentOpened(IDocument *doc); void onDocumentClosed(IDocument * doc); void clearAllMarks(); - void handleIssuesForFile(const IssuesList &issues); + void handleIssuesForFile(const Issues &issues); void fetchIssueInfo(const QString &id); NetworkAccessManager m_networkAccessManager; @@ -159,7 +173,7 @@ static AxivionPluginPrivate *dd = nullptr; class AxivionTextMark : public TextMark { public: - AxivionTextMark(const FilePath &filePath, const ShortIssue &issue) + AxivionTextMark(const FilePath &filePath, const Issue &issue) : TextMark(filePath, issue.lineNumber, {Tr::tr("Axivion"), AxivionTextMarkId}) { const QString markText = issue.entity.isEmpty() ? issue.message @@ -583,10 +597,10 @@ void AxivionPluginPrivate::onDocumentOpened(IDocument *doc) search.limit = 0; const auto issuesHandler = [this](const Dto::IssueTableDto &dto) { - IssuesList issues; + Issues issues; const std::vector> &rows = dto.rows; for (const auto &row : rows) { - ShortIssue issue; + Issue issue; for (auto it = row.cbegin(); it != row.cend(); ++it) { if (it->first == "id") issue.id = anyToSimpleString(it->second); @@ -605,7 +619,7 @@ void AxivionPluginPrivate::onDocumentOpened(IDocument *doc) else if (it->first == "line") issue.lineNumber = anyToSimpleString(it->second).toInt(); } - issues.issues << issue; + issues << issue; } handleIssuesForFile(issues); }; @@ -639,9 +653,9 @@ void AxivionPluginPrivate::onDocumentClosed(IDocument *doc) } } -void AxivionPluginPrivate::handleIssuesForFile(const IssuesList &issues) +void AxivionPluginPrivate::handleIssuesForFile(const Issues &issues) { - if (issues.issues.isEmpty()) + if (issues.isEmpty()) return; Project *project = ProjectManager::startupProject(); @@ -649,10 +663,10 @@ void AxivionPluginPrivate::handleIssuesForFile(const IssuesList &issues) return; const FilePath filePath = project->projectDirectory() - .pathAppended(issues.issues.first().filePath); + .pathAppended(issues.first().filePath); const Id axivionId(AxivionTextMarkId); - for (const ShortIssue &issue : std::as_const(issues.issues)) { + for (const Issue &issue : issues) { // FIXME the line location can be wrong (even the whole issue could be wrong) // depending on whether this line has been changed since the last axivion run and the // current state of the file - some magic has to happen here diff --git a/src/plugins/axivion/axivionresultparser.cpp b/src/plugins/axivion/axivionresultparser.cpp deleted file mode 100644 index f6dbf0310ff..00000000000 --- a/src/plugins/axivion/axivionresultparser.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "axivionresultparser.h" - -#include - -#include - -namespace Axivion::Internal { - -static std::pair splitHeaderAndBody(const QByteArray &input) -{ - QByteArray header; - QByteArray json; - int emptyLine = input.indexOf("\r\n\r\n"); // we always get \r\n as line separator - if (emptyLine != -1) { - header = input.left(emptyLine); - json = input.mid(emptyLine + 4); - } else { - json = input; - } - return {header, json}; -} - -static int httpStatus(const QByteArray &header) -{ - int firstHeaderEnd = header.indexOf("\r\n"); - if (firstHeaderEnd == -1) - return 600; // unexpected header - const QString firstLine = QString::fromUtf8(header.first(firstHeaderEnd)); - static const QRegularExpression regex(R"(^HTTP/\d\.\d (\d{3}) .*$)"); - const QRegularExpressionMatch match = regex.match(firstLine); - return match.hasMatch() ? match.captured(1).toInt() : 601; -} - -static BaseResult prehandleHeader(const QByteArray &header, const QByteArray &body) -{ - BaseResult result; - if (header.isEmpty()) { - result.error = QString::fromUtf8(body); // we likely had a curl problem - return result; - } - int status = httpStatus(header); - if ((status > 399) || (status > 299 && body.isEmpty())) { // FIXME handle some explicitly? - const QString statusStr = QString::number(status); - if (body.isEmpty() || body.startsWith('<')) // likely an html response or redirect - result.error = QLatin1String("(%1)").arg(statusStr); - else - result.error = QLatin1String("%1 (%2)").arg(QString::fromUtf8(body)).arg(statusStr); - } - return result; -} - -namespace ResultParser { - -QString parseRuleInfo(const QByteArray &input) // html result! -{ - auto [header, body] = splitHeaderAndBody(input); - BaseResult headerResult = prehandleHeader(header, body); - if (!headerResult.error.isEmpty()) - return QString(); - return QString::fromLocal8Bit(body); -} - -} // ResultParser - -} // Axivion::Internal diff --git a/src/plugins/axivion/axivionresultparser.h b/src/plugins/axivion/axivionresultparser.h deleted file mode 100644 index 8eae9a381bf..00000000000 --- a/src/plugins/axivion/axivionresultparser.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -#include - -namespace Axivion::Internal { - -class BaseResult -{ -public: - QString error; -}; - -class ShortIssue : public BaseResult -{ -public: - QString id; - QString state; - QString errorNumber; - QString message; - QString entity; - QString filePath; - QString severity; - int lineNumber = 0; -}; - -class IssuesList : public BaseResult -{ -public: - QList issues; -}; - -namespace ResultParser { - -QString parseRuleInfo(const QByteArray &input); - -} // ResultParser - -} // Axivion::Internal