cppcheck/gui/erroritem.cpp

100 lines
3.1 KiB
C++
Raw Normal View History

/*
* Cppcheck - A tool for static C/C++ code analysis
2022-02-05 11:45:17 +01:00
* Copyright (C) 2007-2022 Cppcheck team.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "erroritem.h"
2022-02-02 16:17:28 +01:00
#include "common.h"
#include <list>
2020-05-23 07:16:49 +02:00
QErrorPathItem::QErrorPathItem(const ErrorMessage::FileLocation &loc)
2017-05-21 08:25:55 +02:00
: file(QString::fromStdString(loc.getfile(false)))
, line(loc.line)
, column(loc.column)
2017-05-21 08:25:55 +02:00
, info(QString::fromStdString(loc.getinfo()))
2021-08-07 20:51:18 +02:00
{}
2017-05-21 08:25:55 +02:00
bool operator==(const QErrorPathItem &i1, const QErrorPathItem &i2)
{
return i1.file == i2.file && i1.column == i2.column && i1.line == i2.line && i1.info == i2.info;
}
ErrorItem::ErrorItem()
: severity(Severity::none)
, inconclusive(false)
2017-05-21 08:25:55 +02:00
, cwe(-1)
2020-07-21 11:27:03 +02:00
, hash(0)
2021-08-07 20:51:18 +02:00
{}
2020-05-23 07:16:49 +02:00
ErrorItem::ErrorItem(const ErrorMessage &errmsg)
: file0(QString::fromStdString(errmsg.file0))
, errorId(QString::fromStdString(errmsg.id))
, severity(errmsg.severity)
, inconclusive(errmsg.certainty == Certainty::inconclusive)
2017-05-21 08:25:55 +02:00
, summary(QString::fromStdString(errmsg.shortMessage()))
, message(QString::fromStdString(errmsg.verboseMessage()))
, cwe(errmsg.cwe.id)
2020-07-21 11:27:03 +02:00
, hash(errmsg.hash)
, symbolNames(QString::fromStdString(errmsg.symbolNames()))
{
2020-05-23 07:16:49 +02:00
for (std::list<ErrorMessage::FileLocation>::const_iterator loc = errmsg.callStack.begin();
loc != errmsg.callStack.end();
2017-05-21 08:25:55 +02:00
++loc) {
errorPath << QErrorPathItem(*loc);
}
}
2017-08-09 20:53:17 +02:00
QString ErrorItem::tool() const
{
if (errorId == CLANG_ANALYZER)
return CLANG_ANALYZER;
if (errorId.startsWith(CLANG_TIDY))
return CLANG_TIDY;
2017-08-09 20:53:17 +02:00
if (errorId.startsWith("clang-"))
return "clang";
return "cppcheck";
}
2017-05-21 08:25:55 +02:00
2020-07-15 07:59:05 +02:00
QString ErrorItem::toString() const
{
2017-05-21 08:25:55 +02:00
QString str = errorPath.back().file + " - " + errorId + " - ";
if (inconclusive)
str += "inconclusive ";
str += GuiSeverity::toString(severity) +"\n";
str += summary + "\n";
str += message + "\n";
for (const QErrorPathItem& i : errorPath) {
str += " " + i.file + ": " + QString::number(i.line) + "\n";
}
return str;
}
2018-10-20 16:30:40 +02:00
bool ErrorItem::sameCID(const ErrorItem &errorItem1, const ErrorItem &errorItem2)
{
2020-07-21 11:27:03 +02:00
if (errorItem1.hash || errorItem2.hash)
return errorItem1.hash == errorItem2.hash;
2020-07-15 07:59:05 +02:00
// fallback
2018-10-20 16:30:40 +02:00
return errorItem1.errorId == errorItem2.errorId &&
errorItem1.errorPath == errorItem2.errorPath &&
errorItem1.file0 == errorItem2.file0 &&
errorItem1.message == errorItem2.message &&
errorItem1.inconclusive == errorItem2.inconclusive &&
errorItem1.severity == errorItem2.severity;
}