Skip to content

Commit ea2e716

Browse files
authored
added FileWithDetails to store resolved input path in (#6285)
1 parent c2a1c5f commit ea2e716

34 files changed

Lines changed: 285 additions & 185 deletions

Makefile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ TESTOBJ = test/fixture.o \
293293
test/testerrorlogger.o \
294294
test/testexceptionsafety.o \
295295
test/testfilelister.o \
296+
test/testfilesettings.o \
296297
test/testfunctions.o \
297298
test/testgarbage.o \
298299
test/testimportproject.o \
@@ -660,7 +661,7 @@ cli/cppcheckexecutorseh.o: cli/cppcheckexecutorseh.cpp cli/cppcheckexecutor.h cl
660661
cli/executor.o: cli/executor.cpp cli/executor.h lib/addoninfo.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h
661662
$(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/executor.cpp
662663

663-
cli/filelister.o: cli/filelister.cpp cli/filelister.h lib/config.h lib/path.h lib/pathmatch.h lib/standards.h lib/utils.h
664+
cli/filelister.o: cli/filelister.cpp cli/filelister.h lib/config.h lib/filesettings.h lib/path.h lib/pathmatch.h lib/platform.h lib/standards.h lib/utils.h
664665
$(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/filelister.cpp
665666

666667
cli/main.o: cli/main.cpp cli/cppcheckexecutor.h lib/config.h lib/errortypes.h lib/filesettings.h lib/platform.h lib/standards.h lib/utils.h
@@ -684,7 +685,7 @@ cli/threadexecutor.o: cli/threadexecutor.cpp cli/executor.h cli/threadexecutor.h
684685
test/fixture.o: test/fixture.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/analyzerinfo.h lib/check.h lib/color.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h lib/xml.h test/fixture.h test/options.h test/redirect.h
685686
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/fixture.cpp
686687

687-
test/helpers.o: test/helpers.cpp cli/filelister.h externals/simplecpp/simplecpp.h lib/addoninfo.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/helpers.h
688+
test/helpers.o: test/helpers.cpp cli/filelister.h externals/simplecpp/simplecpp.h lib/addoninfo.h lib/config.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/helpers.h
688689
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/helpers.cpp
689690

690691
test/main.o: test/main.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h test/options.h
@@ -750,9 +751,12 @@ test/testerrorlogger.o: test/testerrorlogger.cpp externals/tinyxml2/tinyxml2.h l
750751
test/testexceptionsafety.o: test/testexceptionsafety.cpp lib/addoninfo.h lib/check.h lib/checkexceptionsafety.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h
751752
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testexceptionsafety.cpp
752753

753-
test/testfilelister.o: test/testfilelister.cpp cli/filelister.h lib/addoninfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h
754+
test/testfilelister.o: test/testfilelister.cpp cli/filelister.h lib/addoninfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h
754755
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testfilelister.cpp
755756

757+
test/testfilesettings.o: test/testfilesettings.cpp lib/addoninfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h
758+
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testfilesettings.cpp
759+
756760
test/testfunctions.o: test/testfunctions.cpp lib/addoninfo.h lib/check.h lib/checkfunctions.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h
757761
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testfunctions.cpp
758762

@@ -897,6 +901,6 @@ externals/simplecpp/simplecpp.o: externals/simplecpp/simplecpp.cpp externals/sim
897901
externals/tinyxml2/tinyxml2.o: externals/tinyxml2/tinyxml2.cpp externals/tinyxml2/tinyxml2.h
898902
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -w -c -o $@ externals/tinyxml2/tinyxml2.cpp
899903

900-
tools/dmake/dmake.o: tools/dmake/dmake.cpp cli/filelister.h lib/config.h lib/pathmatch.h lib/utils.h
904+
tools/dmake/dmake.o: tools/dmake/dmake.cpp cli/filelister.h lib/config.h lib/filesettings.h lib/pathmatch.h lib/platform.h lib/standards.h lib/utils.h
901905
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ tools/dmake/dmake.cpp
902906

cli/cmdlineparser.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ bool CmdLineParser::fillSettingsFromArgs(int argc, const char* const argv[])
204204
if (!mSettings.fileFilters.empty()) {
205205
// filter only for the selected filenames from all project files
206206
std::copy_if(fileSettingsRef.cbegin(), fileSettingsRef.cend(), std::back_inserter(fileSettings), [&](const FileSettings &fs) {
207-
return matchglobs(mSettings.fileFilters, fs.filename);
207+
return matchglobs(mSettings.fileFilters, fs.filename());
208208
});
209209
if (fileSettings.empty()) {
210210
mLogger.printError("could not find any files matching the filter.");
@@ -219,11 +219,11 @@ bool CmdLineParser::fillSettingsFromArgs(int argc, const char* const argv[])
219219

220220
// sort the markup last
221221
std::copy_if(fileSettings.cbegin(), fileSettings.cend(), std::back_inserter(mFileSettings), [&](const FileSettings &fs) {
222-
return !mSettings.library.markupFile(fs.filename) || !mSettings.library.processMarkupAfterCode(fs.filename);
222+
return !mSettings.library.markupFile(fs.filename()) || !mSettings.library.processMarkupAfterCode(fs.filename());
223223
});
224224

225225
std::copy_if(fileSettings.cbegin(), fileSettings.cend(), std::back_inserter(mFileSettings), [&](const FileSettings &fs) {
226-
return mSettings.library.markupFile(fs.filename) && mSettings.library.processMarkupAfterCode(fs.filename);
226+
return mSettings.library.markupFile(fs.filename()) && mSettings.library.processMarkupAfterCode(fs.filename());
227227
});
228228

229229
if (mFileSettings.empty()) {
@@ -233,7 +233,7 @@ bool CmdLineParser::fillSettingsFromArgs(int argc, const char* const argv[])
233233
}
234234

235235
if (!pathnamesRef.empty()) {
236-
std::list<std::pair<std::string, std::size_t>> filesResolved;
236+
std::list<FileWithDetails> filesResolved;
237237
// TODO: this needs to be inlined into PathMatch as it depends on the underlying filesystem
238238
#if defined(_WIN32)
239239
// For Windows we want case-insensitive path matching
@@ -264,19 +264,19 @@ bool CmdLineParser::fillSettingsFromArgs(int argc, const char* const argv[])
264264
{
265265
auto it = filesResolved.begin();
266266
while (it != filesResolved.end()) {
267-
const std::string& name = it->first;
267+
const std::string& name = it->path();
268268
// TODO: log if duplicated files were dropped
269-
filesResolved.erase(std::remove_if(std::next(it), filesResolved.end(), [&](const std::pair<std::string, std::size_t>& entry) {
270-
return entry.first == name;
269+
filesResolved.erase(std::remove_if(std::next(it), filesResolved.end(), [&](const FileWithDetails& entry) {
270+
return entry.path() == name;
271271
}), filesResolved.end());
272272
++it;
273273
}
274274
}
275275

276-
std::list<std::pair<std::string, std::size_t>> files;
276+
std::list<FileWithDetails> files;
277277
if (!mSettings.fileFilters.empty()) {
278-
std::copy_if(filesResolved.cbegin(), filesResolved.cend(), std::inserter(files, files.end()), [&](const decltype(filesResolved)::value_type& entry) {
279-
return matchglobs(mSettings.fileFilters, entry.first);
278+
std::copy_if(filesResolved.cbegin(), filesResolved.cend(), std::inserter(files, files.end()), [&](const FileWithDetails& entry) {
279+
return matchglobs(mSettings.fileFilters, entry.path());
280280
});
281281
if (files.empty()) {
282282
mLogger.printError("could not find any files matching the filter.");
@@ -288,12 +288,12 @@ bool CmdLineParser::fillSettingsFromArgs(int argc, const char* const argv[])
288288
}
289289

290290
// sort the markup last
291-
std::copy_if(files.cbegin(), files.cend(), std::inserter(mFiles, mFiles.end()), [&](const decltype(files)::value_type& entry) {
292-
return !mSettings.library.markupFile(entry.first) || !mSettings.library.processMarkupAfterCode(entry.first);
291+
std::copy_if(files.cbegin(), files.cend(), std::inserter(mFiles, mFiles.end()), [&](const FileWithDetails& entry) {
292+
return !mSettings.library.markupFile(entry.path()) || !mSettings.library.processMarkupAfterCode(entry.path());
293293
});
294294

295-
std::copy_if(files.cbegin(), files.cend(), std::inserter(mFiles, mFiles.end()), [&](const decltype(files)::value_type& entry) {
296-
return mSettings.library.markupFile(entry.first) && mSettings.library.processMarkupAfterCode(entry.first);
295+
std::copy_if(files.cbegin(), files.cend(), std::inserter(mFiles, mFiles.end()), [&](const FileWithDetails& entry) {
296+
return mSettings.library.markupFile(entry.path()) && mSettings.library.processMarkupAfterCode(entry.path());
297297
});
298298

299299
if (mFiles.empty()) {

cli/cmdlineparser.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class CmdLineParser {
8484
/**
8585
* Return the files user gave to command line.
8686
*/
87-
const std::list<std::pair<std::string, std::size_t>>& getFiles() const {
87+
const std::list<FileWithDetails>& getFiles() const {
8888
return mFiles;
8989
}
9090

@@ -159,7 +159,7 @@ class CmdLineParser {
159159
CmdLineLogger &mLogger;
160160

161161
std::vector<std::string> mPathNames;
162-
std::list<std::pair<std::string, std::size_t>> mFiles;
162+
std::list<FileWithDetails> mFiles;
163163
std::list<FileSettings> mFileSettings;
164164
std::vector<std::string> mIgnoredPaths;
165165
Settings &mSettings;

cli/cppcheckexecutor.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ int CppCheckExecutor::check_wrapper(const Settings& settings)
218218
return check_internal(settings);
219219
}
220220

221-
bool CppCheckExecutor::reportSuppressions(const Settings &settings, const SuppressionList& suppressions, bool unusedFunctionCheckEnabled, const std::list<std::pair<std::string, std::size_t>> &files, const std::list<FileSettings>& fileSettings, ErrorLogger& errorLogger) {
221+
bool CppCheckExecutor::reportSuppressions(const Settings &settings, const SuppressionList& suppressions, bool unusedFunctionCheckEnabled, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, ErrorLogger& errorLogger) {
222222
const auto& suppr = suppressions.getSuppressions();
223223
if (std::any_of(suppr.begin(), suppr.end(), [](const SuppressionList::Suppression& s) {
224224
return s.errorId == "unmatchedSuppression" && s.fileName.empty() && s.lineNumber == SuppressionList::Suppression::NO_LINE;
@@ -230,14 +230,14 @@ bool CppCheckExecutor::reportSuppressions(const Settings &settings, const Suppre
230230
// the two inputs may only be used exclusively
231231
assert(!(!files.empty() && !fileSettings.empty()));
232232

233-
for (std::list<std::pair<std::string, std::size_t>>::const_iterator i = files.cbegin(); i != files.cend(); ++i) {
233+
for (std::list<FileWithDetails>::const_iterator i = files.cbegin(); i != files.cend(); ++i) {
234234
err |= SuppressionList::reportUnmatchedSuppressions(
235-
suppressions.getUnmatchedLocalSuppressions(i->first, unusedFunctionCheckEnabled), errorLogger);
235+
suppressions.getUnmatchedLocalSuppressions(i->path(), unusedFunctionCheckEnabled), errorLogger);
236236
}
237237

238238
for (std::list<FileSettings>::const_iterator i = fileSettings.cbegin(); i != fileSettings.cend(); ++i) {
239239
err |= SuppressionList::reportUnmatchedSuppressions(
240-
suppressions.getUnmatchedLocalSuppressions(i->filename, unusedFunctionCheckEnabled), errorLogger);
240+
suppressions.getUnmatchedLocalSuppressions(i->filename(), unusedFunctionCheckEnabled), errorLogger);
241241
}
242242
}
243243
err |= SuppressionList::reportUnmatchedSuppressions(suppressions.getUnmatchedGlobalSuppressions(unusedFunctionCheckEnabled), errorLogger);
@@ -260,8 +260,8 @@ int CppCheckExecutor::check_internal(const Settings& settings) const
260260

261261
if (!settings.buildDir.empty()) {
262262
std::list<std::string> fileNames;
263-
for (std::list<std::pair<std::string, std::size_t>>::const_iterator i = mFiles.cbegin(); i != mFiles.cend(); ++i)
264-
fileNames.emplace_back(i->first);
263+
for (std::list<FileWithDetails>::const_iterator i = mFiles.cbegin(); i != mFiles.cend(); ++i)
264+
fileNames.emplace_back(i->path());
265265
AnalyzerInformation::writeFilesTxt(settings.buildDir, fileNames, settings.userDefines, mFileSettings);
266266
}
267267

cli/cppcheckexecutor.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
class Settings;
3232
class ErrorLogger;
3333
class SuppressionList;
34+
class FileWithDetails;
3435

3536
/**
3637
* This class works as an example of how CppCheck can be used in external
@@ -81,7 +82,7 @@ class CppCheckExecutor {
8182

8283
protected:
8384

84-
static bool reportSuppressions(const Settings &settings, const SuppressionList& suppressions, bool unusedFunctionCheckEnabled, const std::list<std::pair<std::string, std::size_t>> &files, const std::list<FileSettings>& fileSettings, ErrorLogger& errorLogger);
85+
static bool reportSuppressions(const Settings &settings, const SuppressionList& suppressions, bool unusedFunctionCheckEnabled, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, ErrorLogger& errorLogger);
8586

8687
/**
8788
* Wrapper around check_internal
@@ -106,7 +107,7 @@ class CppCheckExecutor {
106107
/**
107108
* Filename associated with size of file
108109
*/
109-
std::list<std::pair<std::string, std::size_t>> mFiles;
110+
std::list<FileWithDetails> mFiles;
110111

111112
std::list<FileSettings> mFileSettings;
112113

cli/executor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
struct FileSettings;
3232

33-
Executor::Executor(const std::list<std::pair<std::string, std::size_t>> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, SuppressionList &suppressions, ErrorLogger &errorLogger)
33+
Executor::Executor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, SuppressionList &suppressions, ErrorLogger &errorLogger)
3434
: mFiles(files), mFileSettings(fileSettings), mSettings(settings), mSuppressions(suppressions), mErrorLogger(errorLogger)
3535
{
3636
// the two inputs may only be used exclusively

cli/executor.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ErrorLogger;
3131
class ErrorMessage;
3232
class SuppressionList;
3333
struct FileSettings;
34+
class FileWithDetails;
3435

3536
/// @addtogroup CLI
3637
/// @{
@@ -41,7 +42,7 @@ struct FileSettings;
4142
*/
4243
class Executor {
4344
public:
44-
Executor(const std::list<std::pair<std::string, std::size_t>> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, SuppressionList &suppressions, ErrorLogger &errorLogger);
45+
Executor(const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, SuppressionList &suppressions, ErrorLogger &errorLogger);
4546
virtual ~Executor() = default;
4647

4748
Executor(const Executor &) = delete;
@@ -67,7 +68,7 @@ class Executor {
6768
*/
6869
bool hasToLog(const ErrorMessage &msg);
6970

70-
const std::list<std::pair<std::string, std::size_t>> &mFiles;
71+
const std::list<FileWithDetails> &mFiles;
7172
const std::list<FileSettings>& mFileSettings;
7273
const Settings &mSettings;
7374
SuppressionList &mSuppressions;

0 commit comments

Comments
 (0)