diff options
author | Cristian Adam <cristian.adam@qt.io> | 2021-09-07 14:34:02 +0200 |
---|---|---|
committer | Cristian Adam <cristian.adam@qt.io> | 2021-09-08 08:31:42 +0000 |
commit | a2c70d1a12d07a3ce6ee57da4e12c70e5f9c8c8d (patch) | |
tree | af65eb721458fd1e8d82577695d074c4cb56f32c /src/plugins/cmakeprojectmanager/cmakeparser.cpp | |
parent | 473746e8fde6cabe05c36a78e517f8115d5e4e30 (diff) | |
download | qt-creator-a2c70d1a12d07a3ce6ee57da4e12c70e5f9c8c8d.tar.gz |
CMakePM: Add CMake warning parsing support
Previously the CMake warnings weren't displayed in Qt Creator's
issues pane.
Fixes: QTCREATORBUG-26231
Change-Id: I3e8e3dbfaed3649e99bbbc8f006093d7c81d2b8a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakeparser.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakeparser.cpp | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeparser.cpp b/src/plugins/cmakeprojectmanager/cmakeparser.cpp index dfb18ac7ce..3da9a18b49 100644 --- a/src/plugins/cmakeprojectmanager/cmakeparser.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeparser.cpp @@ -36,6 +36,7 @@ namespace CMakeProjectManager { const char COMMON_ERROR_PATTERN[] = "^CMake Error at (.*?):([0-9]*?)( \\((.*?)\\))?:"; const char NEXT_SUBERROR_PATTERN[] = "^CMake Error in (.*?):"; +const char COMMON_WARNING_PATTERN[] = "^CMake Warning (\\(dev\\) )?at (.*?):([0-9]*?)( \\((.*?)\\))?:"; const char LOCATION_LINE_PATTERN[] = ":(\\d+?):(?:(\\d+?))?$"; CMakeParser::CMakeParser() @@ -46,6 +47,9 @@ CMakeParser::CMakeParser() m_nextSubError.setPattern(QLatin1String(NEXT_SUBERROR_PATTERN)); QTC_CHECK(m_nextSubError.isValid()); + m_commonWarning.setPattern(QLatin1String(COMMON_WARNING_PATTERN)); + QTC_CHECK(m_commonWarning.isValid()); + m_locationLine.setPattern(QLatin1String(LOCATION_LINE_PATTERN)); QTC_CHECK(m_locationLine.isValid()); } @@ -102,7 +106,23 @@ OutputLineParser::Result CMakeParser::handleLine(const QString &line, OutputForm match, 1); m_lines = 1; return {Status::InProgress, linkSpecs}; - } else if (trimmedLine.startsWith(QLatin1String(" ")) && !m_lastTask.isNull()) { + } + match = m_commonWarning.match(trimmedLine); + if (match.hasMatch()) { + QString path = m_sourceDirectory ? m_sourceDirectory->absoluteFilePath( + QDir::fromNativeSeparators(match.captured(2))) + : QDir::fromNativeSeparators(match.captured(2)); + m_lastTask = BuildSystemTask(Task::Warning, + QString(), + absoluteFilePath(FilePath::fromUserInput(path)), + match.captured(3).toInt()); + m_lines = 1; + LinkSpecs linkSpecs; + addLinkSpecForAbsoluteFilePath(linkSpecs, m_lastTask.file, m_lastTask.line, + match, 1); + return {Status::InProgress, linkSpecs}; + } + else if (trimmedLine.startsWith(QLatin1String(" ")) && !m_lastTask.isNull()) { if (!m_lastTask.summary.isEmpty()) m_lastTask.summary.append(' '); m_lastTask.summary.append(trimmedLine.trimmed()); @@ -294,7 +314,7 @@ void Internal::CMakeProjectPlugin::testCMakeParser_data() FilePath::fromUserInput("CMakeLists.txt"), 4)) << QString(); - QTest::newRow("cmake warning") + QTest::newRow("cmake syntax warning") << QString::fromLatin1("Syntax Warning in cmake code at\n" "/test/path/CMakeLists.txt:9:15\n" "Argument not separated from preceding token by whitespace.") @@ -305,6 +325,29 @@ void Internal::CMakeProjectPlugin::testCMakeParser_data() "Argument not separated from preceding token by whitespace.", FilePath::fromUserInput("/test/path/CMakeLists.txt"), 9)) << QString(); + + QTest::newRow("cmake warning") + << QString::fromLatin1("CMake Warning at CMakeLists.txt:13 (message):\n" + " this is a warning\n\n") + << OutputParserTester::STDERR + << QString() << QString() + << (Tasks() + << BuildSystemTask(Task::Warning, + "this is a warning", + FilePath::fromUserInput("CMakeLists.txt"), 13)) + << QString(); + + QTest::newRow("cmake author warning") + << QString::fromLatin1("CMake Warning (dev) at CMakeLists.txt:15 (message):\n" + " this is an author warning\n\n") + << OutputParserTester::STDERR + << QString() << QString() + << (Tasks() + << BuildSystemTask(Task::Warning, + "this is an author warning", + FilePath::fromUserInput("CMakeLists.txt"), 15)) + << QString(); + QTest::newRow("eat normal CMake output") << QString::fromLatin1("-- Qt5 install prefix: /usr/lib\n" " * Plugin componentsplugin, with CONDITION TARGET QmlDesigner") |