aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/nim
diff options
context:
space:
mode:
authorBernhard Beschow <shentey@gmail.com>2021-02-02 16:47:42 +0100
committerBernhard Beschow <shentey@gmail.com>2021-02-03 13:53:49 +0000
commit4f96e397d2fe91713694653e57471fcb5fdf7c7d (patch)
tree70afe93c9399a653d8b7cba057d8fd91fd8b3bdd /src/plugins/nim
parent4d1b7d4c3ded97bd4480532075c310ce09111d6f (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.txt1
-rw-r--r--src/plugins/nim/nim.pro2
-rw-r--r--src/plugins/nim/nim.qbs1
-rw-r--r--src/plugins/nim/project/nimblebuildstep.cpp38
-rw-r--r--src/plugins/nim/project/nimcompilerbuildstep.cpp110
-rw-r--r--src/plugins/nim/project/nimoutputtaskparser.cpp139
-rw-r--r--src/plugins/nim/project/nimoutputtaskparser.h37
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