From 14efd2fdf5a2e9ec61f67f76c2d1ad090c11df17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 3 Aug 2017 17:20:29 +0200 Subject: [PATCH] GUI: Split up parsers for addons/clang --- gui/checkthread.cpp | 77 +++++++++++++++++++++++---------------------- gui/checkthread.h | 3 +- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/gui/checkthread.cpp b/gui/checkthread.cpp index 22c89365c..bc6f117e0 100644 --- a/gui/checkthread.cpp +++ b/gui/checkthread.cpp @@ -109,8 +109,7 @@ void CheckThread::run() qDebug() << cmd; process.start(cmd); process.waitForFinished(); - QString err(process.readAllStandardError()); - parseErrors(err, addon); + parseAddonErrors(process.readAllStandardError(), addon); } } emit fileChecked(file); @@ -145,6 +144,7 @@ void CheckThread::run() qDebug() << cmd; process.start(cmd); process.waitForFinished(600*1000); + parseClangErrors(process.readAllStandardError()); } else { QString a; if (QFileInfo(addonPath + '/' + addon + ".py").exists()) @@ -158,9 +158,8 @@ void CheckThread::run() qDebug() << cmd; process.start(cmd); process.waitForFinished(); + parseAddonErrors(process.readAllStandardError(), addon); } - QString err(process.readAllStandardError()); - parseErrors(err, addon); } } emit fileChecked(file); @@ -183,45 +182,49 @@ void CheckThread::stop() mCppcheck.terminate(); } -void CheckThread::parseErrors(QString err, QString tool) +void CheckThread::parseAddonErrors(QString err, QString tool) { QTextStream in(&err, QIODevice::ReadOnly); while (!in.atEnd()) { QString line = in.readLine(); + QRegExp r1("\\[([^:]+):([0-9]+)\\](.*)"); + if (!r1.exactMatch(line)) + continue; + const std::string &filename = r1.cap(1).toStdString(); + const int lineNumber = r1.cap(2).toInt(); - if (tool == "clang") { - QRegExp r("([^:]+):([0-9]+):[0-9]+: (warning|error): (.*)"); - if (!r.exactMatch(line)) - continue; - const std::string filename = r.cap(1).toStdString(); - const int lineNumber = r.cap(2).toInt(); - Severity::SeverityType severity = (r.cap(3) == "error") ? Severity::error : Severity::warning; - const std::string message = r.cap(4).toStdString(); - const std::string id = tool.toStdString(); - std::list callstack; - callstack.push_back(ErrorLogger::ErrorMessage::FileLocation(filename, lineNumber)); - ErrorLogger::ErrorMessage errmsg(callstack, filename, severity, message, id, false); - mResult.reportErr(errmsg); + std::string message, id; + QRegExp r2("(.*)\\[([a-zA-Z0-9\\-\\._]+)\\]"); + if (r2.exactMatch(r1.cap(3))) { + message = r2.cap(1).toStdString(); + id = tool.toStdString() + '-' + r2.cap(2).toStdString(); } else { - QRegExp r1("\\[([^:]+):([0-9]+)\\](.*)"); - if (!r1.exactMatch(line)) - continue; - const std::string &filename = r1.cap(1).toStdString(); - const int lineNumber = r1.cap(2).toInt(); - - std::string message, id; - QRegExp r2("(.*)\\[([a-zA-Z0-9\\-\\._]+)\\]"); - if (r2.exactMatch(r1.cap(3))) { - message = r2.cap(1).toStdString(); - id = tool.toStdString() + '-' + r2.cap(2).toStdString(); - } else { - message = r1.cap(3).toStdString(); - id = tool.toStdString(); - } - std::list callstack; - callstack.push_back(ErrorLogger::ErrorMessage::FileLocation(filename, lineNumber)); - ErrorLogger::ErrorMessage errmsg(callstack, filename, Severity::style, message, id, false); - mResult.reportErr(errmsg); + message = r1.cap(3).toStdString(); + id = tool.toStdString(); } + std::list callstack; + callstack.push_back(ErrorLogger::ErrorMessage::FileLocation(filename, lineNumber)); + ErrorLogger::ErrorMessage errmsg(callstack, filename, Severity::style, message, id, false); + mResult.reportErr(errmsg); + } +} + +void CheckThread::parseClangErrors(QString err) +{ + QTextStream in(&err, QIODevice::ReadOnly); + while (!in.atEnd()) { + QString line = in.readLine(); + QRegExp r("([^:]+):([0-9]+):[0-9]+: (warning|error): (.*)"); + if (!r.exactMatch(line)) + continue; + const std::string filename = r.cap(1).toStdString(); + const int lineNumber = r.cap(2).toInt(); + Severity::SeverityType severity = (r.cap(3) == "error") ? Severity::error : Severity::warning; + const std::string message = r.cap(4).toStdString(); + const std::string id = "clang"; + std::list callstack; + callstack.push_back(ErrorLogger::ErrorMessage::FileLocation(filename, lineNumber)); + ErrorLogger::ErrorMessage errmsg(callstack, filename, severity, message, id, false); + mResult.reportErr(errmsg); } } diff --git a/gui/checkthread.h b/gui/checkthread.h index 6f627e6ae..89a86ad66 100644 --- a/gui/checkthread.h +++ b/gui/checkthread.h @@ -106,7 +106,8 @@ protected: CppCheck mCppcheck; private: - void parseErrors(QString err, QString tool); + void parseAddonErrors(QString err, QString tool); + void parseClangErrors(QString err); QStringList mFiles; bool mAnalyseWholeProgram;