diff options
author | Bernhard Beschow <shentey@gmail.com> | 2021-02-02 16:47:42 +0100 |
---|---|---|
committer | Bernhard Beschow <shentey@gmail.com> | 2021-02-03 13:53:49 +0000 |
commit | 4f96e397d2fe91713694653e57471fcb5fdf7c7d (patch) | |
tree | 70afe93c9399a653d8b7cba057d8fd91fd8b3bdd /src/plugins/nim | |
parent | 4d1b7d4c3ded97bd4480532075c310ce09111d6f (diff) |
Nim: Resolve duplicate code
Both NimParser implementations were exactly the same code but only one
got tested.
Change-Id: Icdd8badfe60c8d2d8d3184b8307bd3ab67aee95e
Reviewed-by: Filippo Cucchetto <filippocucchetto@gmail.com>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/nim')
-rw-r--r-- | src/plugins/nim/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/plugins/nim/nim.pro | 2 | ||||
-rw-r--r-- | src/plugins/nim/nim.qbs | 1 | ||||
-rw-r--r-- | src/plugins/nim/project/nimblebuildstep.cpp | 38 | ||||
-rw-r--r-- | src/plugins/nim/project/nimcompilerbuildstep.cpp | 110 | ||||
-rw-r--r-- | src/plugins/nim/project/nimoutputtaskparser.cpp | 139 | ||||
-rw-r--r-- | src/plugins/nim/project/nimoutputtaskparser.h | 37 |
7 files changed, 182 insertions, 146 deletions
diff --git a/src/plugins/nim/CMakeLists.txt b/src/plugins/nim/CMakeLists.txt index 1defa28336..20a139940e 100644 --- a/src/plugins/nim/CMakeLists.txt +++ b/src/plugins/nim/CMakeLists.txt @@ -19,6 +19,7 @@ add_qtc_plugin(Nim project/nimbuildconfiguration.cpp project/nimbuildconfiguration.h project/nimcompilerbuildstep.cpp project/nimcompilerbuildstep.h project/nimcompilercleanstep.cpp project/nimcompilercleanstep.h + project/nimoutputtaskparser.cpp project/nimoutputtaskparser.h project/nimproject.cpp project/nimproject.h project/nimrunconfiguration.cpp project/nimrunconfiguration.h project/nimtoolchain.cpp project/nimtoolchain.h diff --git a/src/plugins/nim/nim.pro b/src/plugins/nim/nim.pro index 92655e31b0..2dca0c8fe6 100644 --- a/src/plugins/nim/nim.pro +++ b/src/plugins/nim/nim.pro @@ -20,6 +20,7 @@ HEADERS += \ project/nimbleproject.h \ project/nimblerunconfiguration.h \ project/nimbletaskstep.h \ + project/nimoutputtaskparser.h \ tools/nimlexer.h \ tools/sourcecodestream.h \ project/nimbuildsystem.h \ @@ -56,6 +57,7 @@ SOURCES += \ project/nimbletaskstep.cpp \ project/nimbleproject.cpp \ project/nimblerunconfiguration.cpp \ + project/nimoutputtaskparser.cpp \ tools/nimlexer.cpp \ project/nimbuildsystem.cpp \ project/nimblebuildsystem.cpp \ diff --git a/src/plugins/nim/nim.qbs b/src/plugins/nim/nim.qbs index 113d4e6e7e..dad13ff57e 100644 --- a/src/plugins/nim/nim.qbs +++ b/src/plugins/nim/nim.qbs @@ -41,6 +41,7 @@ QtcPlugin { "nimbuildconfiguration.h", "nimbuildconfiguration.cpp", "nimcompilerbuildstep.h", "nimcompilerbuildstep.cpp", "nimcompilercleanstep.h", "nimcompilercleanstep.cpp", + "nimoutputtaskparser.h", "nimoutputtaskparser.cpp", "nimproject.h", "nimproject.cpp", "nimrunconfiguration.h", "nimrunconfiguration.cpp", "nimtoolchain.h", "nimtoolchain.cpp", diff --git a/src/plugins/nim/project/nimblebuildstep.cpp b/src/plugins/nim/project/nimblebuildstep.cpp index ddbd93305c..389be08de1 100644 --- a/src/plugins/nim/project/nimblebuildstep.cpp +++ b/src/plugins/nim/project/nimblebuildstep.cpp @@ -28,6 +28,7 @@ #include "nimconstants.h" #include "nimbleproject.h" #include "nimbuildsystem.h" +#include "nimoutputtaskparser.h" #include "nimtoolchain.h" #include <projectexplorer/buildconfiguration.h> @@ -44,43 +45,6 @@ using namespace Utils; namespace Nim { -class NimParser : public OutputTaskParser -{ - Result handleLine(const QString &lne, Utils::OutputFormat) override - { - const QString line = lne.trimmed(); - static const QRegularExpression regex("(.+.nim)\\((\\d+), (\\d+)\\) (.+)"); - static const QRegularExpression warning("(Warning):(.*)"); - static const QRegularExpression error("(Error):(.*)"); - - const QRegularExpressionMatch match = regex.match(line); - if (!match.hasMatch()) - return Status::NotHandled; - const QString filename = match.captured(1); - bool lineOk = false; - const int lineNumber = match.captured(2).toInt(&lineOk); - const QString message = match.captured(4); - if (!lineOk) - return Status::NotHandled; - - Task::TaskType type = Task::Unknown; - - if (warning.match(message).hasMatch()) - type = Task::Warning; - else if (error.match(message).hasMatch()) - type = Task::Error; - else - return Status::NotHandled; - - const CompileTask t(type, message, absoluteFilePath(FilePath::fromUserInput(filename)), - lineNumber); - LinkSpecs linkSpecs; - addLinkSpecForAbsoluteFilePath(linkSpecs, t.file, t.line, match, 1); - scheduleTask(t, 1); - return {Status::Done, linkSpecs}; - } -}; - class NimbleBuildStep : public AbstractProcessStep { Q_DECLARE_TR_FUNCTIONS(Nim::NimbleBuilStep) diff --git a/src/plugins/nim/project/nimcompilerbuildstep.cpp b/src/plugins/nim/project/nimcompilerbuildstep.cpp index c956186bf2..175fe9b57e 100644 --- a/src/plugins/nim/project/nimcompilerbuildstep.cpp +++ b/src/plugins/nim/project/nimcompilerbuildstep.cpp @@ -28,6 +28,7 @@ #include "nimbuildconfiguration.h" #include "nimbuildsystem.h" #include "nimconstants.h" +#include "nimoutputtaskparser.h" #include "nimtoolchain.h" #include <projectexplorer/processparameters.h> @@ -51,45 +52,6 @@ using namespace Utils; namespace Nim { -// NimParser - -class NimParser : public ProjectExplorer::OutputTaskParser -{ - Result handleLine(const QString &lne, Utils::OutputFormat) override - { - const QString line = lne.trimmed(); - static const QRegularExpression regex("(.+.nim)\\((\\d+), (\\d+)\\) (.+)"); - static const QRegularExpression warning("(Warning):(.*)"); - static const QRegularExpression error("(Error):(.*)"); - - const QRegularExpressionMatch match = regex.match(line); - if (!match.hasMatch()) - return Status::NotHandled; - const QString filename = match.captured(1); - bool lineOk = false; - const int lineNumber = match.captured(2).toInt(&lineOk); - const QString message = match.captured(4); - if (!lineOk) - return Status::NotHandled; - - Task::TaskType type = Task::Unknown; - - if (warning.match(message).hasMatch()) - type = Task::Warning; - else if (error.match(message).hasMatch()) - type = Task::Error; - else - return Status::NotHandled; - - const CompileTask t(type, message, absoluteFilePath(FilePath::fromUserInput(filename)), - lineNumber); - LinkSpecs linkSpecs; - addLinkSpecForAbsoluteFilePath(linkSpecs, t.file, t.line, match, 1); - scheduleTask(t, 1); - return {Status::Done, linkSpecs}; - } -}; - NimCompilerBuildStep::NimCompilerBuildStep(BuildStepList *parentList, Utils::Id id) : AbstractProcessStep(parentList, id) { @@ -280,73 +242,3 @@ NimCompilerBuildStepFactory::NimCompilerBuildStepFactory() } } // namespace Nim - -#ifdef WITH_TESTS - -#include "nimplugin.h" - -#include <projectexplorer/outputparser_test.h> - -#include <QTest> - -namespace Nim { - -void NimPlugin::testNimParser_data() -{ - QTest::addColumn<QString>("input"); - QTest::addColumn<OutputParserTester::Channel>("inputChannel"); - QTest::addColumn<QString>("childStdOutLines"); - QTest::addColumn<QString>("childStdErrLines"); - QTest::addColumn<Tasks >("tasks"); - QTest::addColumn<QString>("outputLines"); - - // negative tests - QTest::newRow("pass-through stdout") - << "Sometext" << OutputParserTester::STDOUT - << "Sometext\n" << QString() - << Tasks() - << QString(); - QTest::newRow("pass-through stderr") - << "Sometext" << OutputParserTester::STDERR - << QString() << "Sometext\n" - << Tasks() - << QString(); - - // positive tests - QTest::newRow("Parse error string") - << QString::fromLatin1("main.nim(23, 1) Error: undeclared identifier: 'x'") - << OutputParserTester::STDERR - << QString() << QString() - << Tasks({CompileTask(Task::Error, - "Error: undeclared identifier: 'x'", - FilePath::fromUserInput("main.nim"), 23)}) - << QString(); - - QTest::newRow("Parse warning string") - << QString::fromLatin1("lib/pure/parseopt.nim(56, 34) Warning: quoteIfContainsWhite is deprecated [Deprecated]") - << OutputParserTester::STDERR - << QString() << QString() - << Tasks({CompileTask(Task::Warning, - "Warning: quoteIfContainsWhite is deprecated [Deprecated]", - FilePath::fromUserInput("lib/pure/parseopt.nim"), 56)}) - << QString(); -} - -void NimPlugin::testNimParser() -{ - OutputParserTester testbench; - testbench.addLineParser(new NimParser); - QFETCH(QString, input); - QFETCH(OutputParserTester::Channel, inputChannel); - QFETCH(Tasks, tasks); - QFETCH(QString, childStdOutLines); - QFETCH(QString, childStdErrLines); - QFETCH(QString, outputLines); - - testbench.testParsing(input, inputChannel, - tasks, childStdOutLines, childStdErrLines, - outputLines); -} - -} -#endif diff --git a/src/plugins/nim/project/nimoutputtaskparser.cpp b/src/plugins/nim/project/nimoutputtaskparser.cpp new file mode 100644 index 0000000000..9a4f3cb095 --- /dev/null +++ b/src/plugins/nim/project/nimoutputtaskparser.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) Filippo Cucchetto <filippocucchetto@gmail.com> +** Contact: http://www.qt.io/licensing +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "nimoutputtaskparser.h" + +#include <QRegularExpression> + +using namespace ProjectExplorer; +using namespace Utils; + +namespace Nim { + +NimParser::Result NimParser::handleLine(const QString &lne, Utils::OutputFormat) +{ + const QString line = lne.trimmed(); + static const QRegularExpression regex("(.+.nim)\\((\\d+), (\\d+)\\) (.+)"); + static const QRegularExpression warning("(Warning):(.*)"); + static const QRegularExpression error("(Error):(.*)"); + + const QRegularExpressionMatch match = regex.match(line); + if (!match.hasMatch()) + return Status::NotHandled; + const QString filename = match.captured(1); + bool lineOk = false; + const int lineNumber = match.captured(2).toInt(&lineOk); + const QString message = match.captured(4); + if (!lineOk) + return Status::NotHandled; + + Task::TaskType type = Task::Unknown; + + if (warning.match(message).hasMatch()) + type = Task::Warning; + else if (error.match(message).hasMatch()) + type = Task::Error; + else + return Status::NotHandled; + + const CompileTask t(type, message, absoluteFilePath(FilePath::fromUserInput(filename)), + lineNumber); + LinkSpecs linkSpecs; + addLinkSpecForAbsoluteFilePath(linkSpecs, t.file, t.line, match, 1); + scheduleTask(t, 1); + return {Status::Done, linkSpecs}; +} + +} // namespace Nim + +#ifdef WITH_TESTS + +#include "nimplugin.h" + +#include <projectexplorer/outputparser_test.h> + +#include <QTest> + +namespace Nim { + +void NimPlugin::testNimParser_data() +{ + QTest::addColumn<QString>("input"); + QTest::addColumn<OutputParserTester::Channel>("inputChannel"); + QTest::addColumn<QString>("childStdOutLines"); + QTest::addColumn<QString>("childStdErrLines"); + QTest::addColumn<Tasks >("tasks"); + QTest::addColumn<QString>("outputLines"); + + // negative tests + QTest::newRow("pass-through stdout") + << "Sometext" << OutputParserTester::STDOUT + << "Sometext\n" << QString() + << Tasks() + << QString(); + QTest::newRow("pass-through stderr") + << "Sometext" << OutputParserTester::STDERR + << QString() << "Sometext\n" + << Tasks() + << QString(); + + // positive tests + QTest::newRow("Parse error string") + << QString::fromLatin1("main.nim(23, 1) Error: undeclared identifier: 'x'") + << OutputParserTester::STDERR + << QString() << QString() + << Tasks({CompileTask(Task::Error, + "Error: undeclared identifier: 'x'", + FilePath::fromUserInput("main.nim"), 23)}) + << QString(); + + QTest::newRow("Parse warning string") + << QString::fromLatin1("lib/pure/parseopt.nim(56, 34) Warning: quoteIfContainsWhite is deprecated [Deprecated]") + << OutputParserTester::STDERR + << QString() << QString() + << Tasks({CompileTask(Task::Warning, + "Warning: quoteIfContainsWhite is deprecated [Deprecated]", + FilePath::fromUserInput("lib/pure/parseopt.nim"), 56)}) + << QString(); +} + +void NimPlugin::testNimParser() +{ + OutputParserTester testbench; + testbench.addLineParser(new NimParser); + QFETCH(QString, input); + QFETCH(OutputParserTester::Channel, inputChannel); + QFETCH(Tasks, tasks); + QFETCH(QString, childStdOutLines); + QFETCH(QString, childStdErrLines); + QFETCH(QString, outputLines); + + testbench.testParsing(input, inputChannel, + tasks, childStdOutLines, childStdErrLines, + outputLines); +} + +} +#endif diff --git a/src/plugins/nim/project/nimoutputtaskparser.h b/src/plugins/nim/project/nimoutputtaskparser.h new file mode 100644 index 0000000000..a8fcfc96af --- /dev/null +++ b/src/plugins/nim/project/nimoutputtaskparser.h @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) Filippo Cucchetto <filippocucchetto@gmail.com> +** Contact: http://www.qt.io/licensing +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include <projectexplorer/ioutputparser.h> + +namespace Nim { + +class NimParser : public ProjectExplorer::OutputTaskParser +{ + Result handleLine(const QString &line, Utils::OutputFormat) override; +}; + +} // Nim |