parent
fe8730cf0f
commit
5a52fa80fb
@ -654,6 +654,12 @@ bool CmdLineParser::parseFromArgs(int argc, const char* const argv[])
|
|||||||
|
|
||||||
// --project
|
// --project
|
||||||
else if (std::strncmp(argv[i], "--project=", 10) == 0) {
|
else if (std::strncmp(argv[i], "--project=", 10) == 0) {
|
||||||
|
if (mSettings.project.projectType != ImportProject::Type::NONE)
|
||||||
|
{
|
||||||
|
mLogger.printError("multiple --project options are not supported.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
mSettings.checkAllConfigurations = false; // Can be overridden with --max-configs or --force
|
mSettings.checkAllConfigurations = false; // Can be overridden with --max-configs or --force
|
||||||
std::string projectFile = argv[i]+10;
|
std::string projectFile = argv[i]+10;
|
||||||
ImportProject::Type projType = mSettings.project.import(projectFile, &mSettings);
|
ImportProject::Type projType = mSettings.project.import(projectFile, &mSettings);
|
||||||
|
@ -1747,6 +1747,9 @@ void MainWindow::analyzeProject(const ProjectFile *projectFile, const bool check
|
|||||||
case ImportProject::Type::FAILURE:
|
case ImportProject::Type::FAILURE:
|
||||||
errorMessage = tr("Failed to import project file");
|
errorMessage = tr("Failed to import project file");
|
||||||
break;
|
break;
|
||||||
|
case ImportProject::Type::NONE:
|
||||||
|
// can never happen
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!errorMessage.isEmpty()) {
|
if (!errorMessage.isEmpty()) {
|
||||||
|
@ -41,7 +41,6 @@ const char Settings::SafeChecks::XmlInternalFunctions[] = "internal-functions";
|
|||||||
const char Settings::SafeChecks::XmlExternalVariables[] = "external-variables";
|
const char Settings::SafeChecks::XmlExternalVariables[] = "external-variables";
|
||||||
Settings::Settings() : maxCtuDepth(10) {}
|
Settings::Settings() : maxCtuDepth(10) {}
|
||||||
cppcheck::Platform::Platform() = default;
|
cppcheck::Platform::Platform() = default;
|
||||||
ImportProject::ImportProject() = default;
|
|
||||||
bool ImportProject::sourceFileExists(const std::string & /*file*/) {
|
bool ImportProject::sourceFileExists(const std::string & /*file*/) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -42,11 +42,6 @@
|
|||||||
|
|
||||||
#include "json.h"
|
#include "json.h"
|
||||||
|
|
||||||
ImportProject::ImportProject()
|
|
||||||
{
|
|
||||||
projectType = Type::UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImportProject::ignorePaths(const std::vector<std::string> &ipaths)
|
void ImportProject::ignorePaths(const std::vector<std::string> &ipaths)
|
||||||
{
|
{
|
||||||
for (std::list<FileSettings>::iterator it = fileSettings.begin(); it != fileSettings.end();) {
|
for (std::list<FileSettings>::iterator it = fileSettings.begin(); it != fileSettings.end();) {
|
||||||
|
@ -51,6 +51,7 @@ class Settings;
|
|||||||
class CPPCHECKLIB ImportProject {
|
class CPPCHECKLIB ImportProject {
|
||||||
public:
|
public:
|
||||||
enum class Type {
|
enum class Type {
|
||||||
|
NONE,
|
||||||
UNKNOWN,
|
UNKNOWN,
|
||||||
MISSING,
|
MISSING,
|
||||||
FAILURE,
|
FAILURE,
|
||||||
@ -82,9 +83,9 @@ public:
|
|||||||
void setIncludePaths(const std::string &basepath, const std::list<std::string> &in, std::map<std::string, std::string, cppcheck::stricmp> &variables);
|
void setIncludePaths(const std::string &basepath, const std::list<std::string> &in, std::map<std::string, std::string, cppcheck::stricmp> &variables);
|
||||||
};
|
};
|
||||||
std::list<FileSettings> fileSettings;
|
std::list<FileSettings> fileSettings;
|
||||||
Type projectType;
|
Type projectType{Type::NONE};
|
||||||
|
|
||||||
ImportProject();
|
ImportProject() = default;
|
||||||
virtual ~ImportProject() = default;
|
virtual ~ImportProject() = default;
|
||||||
ImportProject(const ImportProject&) = default;
|
ImportProject(const ImportProject&) = default;
|
||||||
ImportProject& operator=(const ImportProject&) = default;
|
ImportProject& operator=(const ImportProject&) = default;
|
||||||
|
@ -20,3 +20,4 @@ Other:
|
|||||||
- The undocumented and deprecated command-line options `--template <template>` and `--template-format <template>` has been removed. Please use `--template=` and `--template-format=` instead.
|
- The undocumented and deprecated command-line options `--template <template>` and `--template-format <template>` has been removed. Please use `--template=` and `--template-format=` instead.
|
||||||
- "--showtime=summary" will now show a single summary at the end instead of showing it after each file when using the thread execution (default on Windows)
|
- "--showtime=summary" will now show a single summary at the end instead of showing it after each file when using the thread execution (default on Windows)
|
||||||
- added "--showtime=none" to disable any previously specified showtime report. "--showtime=" without parameter is no longer valid.
|
- added "--showtime=none" to disable any previously specified showtime report. "--showtime=" without parameter is no longer valid.
|
||||||
|
- Multiple "--project" options are now prohibited. These would have overlapped each other and leads to unexpected behavior. Please use separate runs with a single "--project" option instead.
|
||||||
|
@ -281,6 +281,10 @@ private:
|
|||||||
TEST_CASE(typedefMaxTimeInvalid2);
|
TEST_CASE(typedefMaxTimeInvalid2);
|
||||||
TEST_CASE(templateMaxTime);
|
TEST_CASE(templateMaxTime);
|
||||||
TEST_CASE(templateMaxTime);
|
TEST_CASE(templateMaxTime);
|
||||||
|
TEST_CASE(project);
|
||||||
|
TEST_CASE(projectMultiple);
|
||||||
|
TEST_CASE(projectEmpty);
|
||||||
|
TEST_CASE(projectMissing);
|
||||||
|
|
||||||
TEST_CASE(ignorepaths1);
|
TEST_CASE(ignorepaths1);
|
||||||
TEST_CASE(ignorepaths2);
|
TEST_CASE(ignorepaths2);
|
||||||
@ -1946,6 +1950,37 @@ private:
|
|||||||
ASSERT_EQUALS("cppcheck: error: argument to '--typedef-max-time=' is not valid - needs to be positive.\n", logger->str());
|
ASSERT_EQUALS("cppcheck: error: argument to '--typedef-max-time=' is not valid - needs to be positive.\n", logger->str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void project() {
|
||||||
|
REDIRECT;
|
||||||
|
ScopedFile file("project.cppcheck", "<project></project>");
|
||||||
|
const char * const argv[] = {"cppcheck", "--project=project.cppcheck", "file.cpp"};
|
||||||
|
ASSERT(parser->parseFromArgs(3, argv));
|
||||||
|
ASSERT_EQUALS(static_cast<int>(ImportProject::Type::CPPCHECK_GUI), static_cast<int>(settings->project.projectType));
|
||||||
|
ASSERT_EQUALS("", logger->str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void projectMultiple() {
|
||||||
|
REDIRECT;
|
||||||
|
ScopedFile file("project.cppcheck", "<project></project>");
|
||||||
|
const char * const argv[] = {"cppcheck", "--project=project.cppcheck", "--project=project.cppcheck", "file.cpp"};
|
||||||
|
ASSERT(!parser->parseFromArgs(4, argv));
|
||||||
|
ASSERT_EQUALS("cppcheck: error: multiple --project options are not supported.\n", logger->str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void projectEmpty() {
|
||||||
|
REDIRECT;
|
||||||
|
const char * const argv[] = {"cppcheck", "--project=", "file.cpp"};
|
||||||
|
ASSERT(!parser->parseFromArgs(3, argv));
|
||||||
|
ASSERT_EQUALS("cppcheck: error: failed to open project ''. The file does not exist.\n", logger->str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void projectMissing() {
|
||||||
|
REDIRECT;
|
||||||
|
const char * const argv[] = {"cppcheck", "--project=project.cppcheck", "file.cpp"};
|
||||||
|
ASSERT(!parser->parseFromArgs(3, argv));
|
||||||
|
ASSERT_EQUALS("cppcheck: error: failed to open project 'project.cppcheck'. The file does not exist.\n", logger->str());
|
||||||
|
}
|
||||||
|
|
||||||
void ignorepaths1() {
|
void ignorepaths1() {
|
||||||
REDIRECT;
|
REDIRECT;
|
||||||
const char * const argv[] = {"cppcheck", "-isrc", "file.cpp"};
|
const char * const argv[] = {"cppcheck", "-isrc", "file.cpp"};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user