From 06889a3f406edb0103397664ec2343b6f8f08269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Tue, 11 Jun 2024 10:11:19 +0200 Subject: [PATCH] more `FileWithDetails` usage (#6500) --- Makefile | 28 ++++++++++++------------- cli/processexecutor.cpp | 2 +- cli/singleexecutor.cpp | 2 +- cli/threadexecutor.cpp | 8 +++---- democlient/democlient.cpp | 3 ++- gui/checkthread.cpp | 2 +- gui/mainwindow.cpp | 2 +- lib/cppcheck.cpp | 22 +++++++++----------- lib/cppcheck.h | 8 +++---- lib/filesettings.h | 10 +++++++++ oss-fuzz/main.cpp | 4 +++- test/testcppcheck.cpp | 8 +++---- test/testfilesettings.cpp | 10 +++++++-- test/testpath.cpp | 44 +++++++++++++++++++++++++++++++++++++++ test/testsuppressions.cpp | 4 ++-- 15 files changed, 109 insertions(+), 48 deletions(-) diff --git a/Makefile b/Makefile index 50f8e9a98f3..9ba1ceda083 100644 --- a/Makefile +++ b/Makefile @@ -668,10 +668,10 @@ $(libcppdir)/vfvalue.o: lib/vfvalue.cpp lib/config.h lib/errortypes.h lib/mathli cli/cmdlineparser.o: cli/cmdlineparser.cpp cli/cmdlinelogger.h cli/cmdlineparser.h cli/cppcheckexecutor.h cli/filelister.h 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/filesettings.h lib/importproject.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/timer.h lib/utils.h lib/xml.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/cmdlineparser.cpp -cli/cppcheckexecutor.o: cli/cppcheckexecutor.cpp cli/cmdlinelogger.h cli/cmdlineparser.h cli/cppcheckexecutor.h cli/cppcheckexecutorseh.h cli/executor.h cli/processexecutor.h cli/signalhandler.h cli/singleexecutor.h cli/threadexecutor.h lib/addoninfo.h lib/analyzerinfo.h lib/check.h lib/checkersreport.h lib/color.h lib/config.h lib/cppcheck.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 +cli/cppcheckexecutor.o: cli/cppcheckexecutor.cpp cli/cmdlinelogger.h cli/cmdlineparser.h cli/cppcheckexecutor.h cli/cppcheckexecutorseh.h cli/executor.h cli/processexecutor.h cli/signalhandler.h cli/singleexecutor.h cli/threadexecutor.h lib/addoninfo.h lib/analyzerinfo.h lib/check.h lib/checkersreport.h lib/color.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/cppcheckexecutor.cpp -cli/cppcheckexecutorseh.o: cli/cppcheckexecutorseh.cpp cli/cppcheckexecutor.h cli/cppcheckexecutorseh.h lib/config.h lib/filesettings.h lib/platform.h lib/standards.h lib/utils.h +cli/cppcheckexecutorseh.o: cli/cppcheckexecutorseh.cpp cli/cppcheckexecutor.h cli/cppcheckexecutorseh.h lib/config.h lib/filesettings.h lib/path.h lib/platform.h lib/standards.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/cppcheckexecutorseh.cpp 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 @@ -680,22 +680,22 @@ cli/executor.o: cli/executor.cpp cli/executor.h lib/addoninfo.h lib/color.h lib/ 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 $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/filelister.cpp -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 +cli/main.o: cli/main.cpp cli/cppcheckexecutor.h lib/config.h lib/errortypes.h lib/filesettings.h lib/path.h lib/platform.h lib/standards.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/main.cpp -cli/processexecutor.o: cli/processexecutor.cpp cli/executor.h cli/processexecutor.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/filesettings.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h +cli/processexecutor.o: cli/processexecutor.cpp cli/executor.h cli/processexecutor.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/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/processexecutor.cpp cli/signalhandler.o: cli/signalhandler.cpp cli/signalhandler.h cli/stacktrace.h lib/config.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/signalhandler.cpp -cli/singleexecutor.o: cli/singleexecutor.cpp cli/executor.h cli/singleexecutor.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/filesettings.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h +cli/singleexecutor.o: cli/singleexecutor.cpp cli/executor.h cli/singleexecutor.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/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/singleexecutor.cpp cli/stacktrace.o: cli/stacktrace.cpp cli/stacktrace.h lib/config.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/stacktrace.cpp -cli/threadexecutor.o: cli/threadexecutor.cpp cli/executor.h cli/threadexecutor.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/filesettings.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h +cli/threadexecutor.o: cli/threadexecutor.cpp cli/executor.h cli/threadexecutor.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/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h $(CXX) ${INCLUDE_FOR_CLI} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ cli/threadexecutor.cpp test/fixture.o: test/fixture.cpp externals/simplecpp/simplecpp.h 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/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/xml.h test/fixture.h test/helpers.h test/options.h test/redirect.h @@ -758,7 +758,7 @@ test/testcondition.o: test/testcondition.cpp externals/simplecpp/simplecpp.h lib test/testconstructors.o: test/testconstructors.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checkclass.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/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testconstructors.cpp -test/testcppcheck.o: test/testcppcheck.cpp externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.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/fixture.h test/helpers.h +test/testcppcheck.o: test/testcppcheck.cpp externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/path.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/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testcppcheck.cpp test/testerrorlogger.o: test/testerrorlogger.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 @@ -770,7 +770,7 @@ test/testexceptionsafety.o: test/testexceptionsafety.cpp externals/simplecpp/sim 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 $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testfilelister.cpp -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 +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/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testfilesettings.cpp test/testfunctions.o: test/testfunctions.cpp externals/simplecpp/simplecpp.h 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/preprocessor.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 @@ -779,7 +779,7 @@ test/testfunctions.o: test/testfunctions.cpp externals/simplecpp/simplecpp.h lib test/testgarbage.o: test/testgarbage.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/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testgarbage.cpp -test/testimportproject.o: test/testimportproject.cpp lib/addoninfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/importproject.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 test/redirect.h +test/testimportproject.o: test/testimportproject.cpp lib/addoninfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/utils.h test/fixture.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testimportproject.cpp test/testincompletestatement.o: test/testincompletestatement.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checkother.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/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h @@ -827,7 +827,7 @@ test/testpostfixoperator.o: test/testpostfixoperator.cpp externals/simplecpp/sim test/testpreprocessor.o: test/testpreprocessor.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/path.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/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testpreprocessor.cpp -test/testprocessexecutor.o: test/testprocessexecutor.cpp cli/executor.h cli/processexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h test/redirect.h +test/testprocessexecutor.o: test/testprocessexecutor.cpp cli/executor.h cli/processexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testprocessexecutor.cpp test/testsettings.o: test/testsettings.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/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h @@ -845,7 +845,7 @@ test/testsimplifytypedef.o: test/testsimplifytypedef.cpp externals/simplecpp/sim test/testsimplifyusing.o: test/testsimplifyusing.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/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testsimplifyusing.cpp -test/testsingleexecutor.o: test/testsingleexecutor.cpp cli/executor.h cli/singleexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h test/redirect.h +test/testsingleexecutor.o: test/testsingleexecutor.cpp cli/executor.h cli/singleexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testsingleexecutor.cpp test/testsizeof.o: test/testsizeof.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checksizeof.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/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h @@ -860,13 +860,13 @@ test/teststring.o: test/teststring.cpp externals/simplecpp/simplecpp.h lib/addon test/testsummaries.o: test/testsummaries.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/summaries.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testsummaries.cpp -test/testsuppressions.o: test/testsuppressions.cpp cli/cppcheckexecutor.h cli/executor.h cli/processexecutor.h cli/singleexecutor.h cli/threadexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.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/fixture.h test/helpers.h +test/testsuppressions.o: test/testsuppressions.cpp cli/cppcheckexecutor.h cli/executor.h cli/processexecutor.h cli/singleexecutor.h cli/threadexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/path.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/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testsuppressions.cpp test/testsymboldatabase.o: test/testsymboldatabase.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/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testsymboldatabase.cpp -test/testthreadexecutor.o: test/testthreadexecutor.cpp cli/executor.h cli/threadexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h test/redirect.h +test/testthreadexecutor.o: test/testthreadexecutor.cpp cli/executor.h cli/threadexecutor.h externals/simplecpp/simplecpp.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/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testthreadexecutor.cpp test/testtimer.o: test/testtimer.cpp 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/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/fixture.h @@ -917,6 +917,6 @@ externals/simplecpp/simplecpp.o: externals/simplecpp/simplecpp.cpp externals/sim externals/tinyxml2/tinyxml2.o: externals/tinyxml2/tinyxml2.cpp externals/tinyxml2/tinyxml2.h $(CXX) $(CPPFLAGS) $(CXXFLAGS) -w -c -o $@ externals/tinyxml2/tinyxml2.cpp -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 +tools/dmake/dmake.o: tools/dmake/dmake.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 $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ tools/dmake/dmake.cpp diff --git a/cli/processexecutor.cpp b/cli/processexecutor.cpp index 020c9ab5977..edee1632432 100644 --- a/cli/processexecutor.cpp +++ b/cli/processexecutor.cpp @@ -286,7 +286,7 @@ unsigned int ProcessExecutor::check() fileChecker.analyseClangTidy(*iFileSettings); } else { // Read file from a file - resultOfCheck = fileChecker.check(iFile->path()); + resultOfCheck = fileChecker.check(*iFile); // TODO: call analyseClangTidy()? } diff --git a/cli/singleexecutor.cpp b/cli/singleexecutor.cpp index 9979a7baa4c..1c24b968b73 100644 --- a/cli/singleexecutor.cpp +++ b/cli/singleexecutor.cpp @@ -50,7 +50,7 @@ unsigned int SingleExecutor::check() unsigned int c = 0; for (std::list::const_iterator i = mFiles.cbegin(); i != mFiles.cend(); ++i) { - result += mCppcheck.check(i->path()); + result += mCppcheck.check(*i); processedsize += i->size(); ++c; if (!mSettings.quiet) diff --git a/cli/threadexecutor.cpp b/cli/threadexecutor.cpp index ea96d8dfc85..2c0ffe31bc4 100644 --- a/cli/threadexecutor.cpp +++ b/cli/threadexecutor.cpp @@ -94,10 +94,10 @@ class ThreadData }); } - bool next(const std::string *&file, const FileSettings *&fs, std::size_t &fileSize) { + bool next(const FileWithDetails *&file, const FileSettings *&fs, std::size_t &fileSize) { std::lock_guard l(mFileSync); if (mItNextFile != mFiles.end()) { - file = &mItNextFile->path(); + file = &(*mItNextFile); fs = nullptr; fileSize = mItNextFile->size(); ++mItNextFile; @@ -114,7 +114,7 @@ class ThreadData return false; } - unsigned int check(ErrorLogger &errorLogger, const std::string *file, const FileSettings *fs) const { + unsigned int check(ErrorLogger &errorLogger, const FileWithDetails *file, const FileSettings *fs) const { CppCheck fileChecker(errorLogger, false, mExecuteCommand); fileChecker.settings() = mSettings; // this is a copy @@ -163,7 +163,7 @@ static unsigned int STDCALL threadProc(ThreadData *data) { unsigned int result = 0; - const std::string *file; + const FileWithDetails *file; const FileSettings *fs; std::size_t fileSize; diff --git a/democlient/democlient.cpp b/democlient/democlient.cpp index c904ff7872f..197d3df4cea 100644 --- a/democlient/democlient.cpp +++ b/democlient/democlient.cpp @@ -23,6 +23,7 @@ #include #include "cppcheck.h" +#include "filesettings.h" #include "version.h" static void unencode(const char *src, char *dest) @@ -59,7 +60,7 @@ class CppcheckExecutor : public ErrorLogger { } void run(const char code[]) { - cppcheck.check("test.cpp", code); + cppcheck.check(FileWithDetails("test.cpp"), code); } void reportOut(const std::string & /*outmsg*/, Color /*c*/) override {} diff --git a/gui/checkthread.cpp b/gui/checkthread.cpp index daea0556859..13e3c1dc2fe 100644 --- a/gui/checkthread.cpp +++ b/gui/checkthread.cpp @@ -124,7 +124,7 @@ void CheckThread::run() QString file = mResult.getNextFile(); while (!file.isEmpty() && mState == Running) { qDebug() << "Checking file" << file; - mCppcheck.check(file.toStdString()); + mCppcheck.check(FileWithDetails(file.toStdString())); runAddonsAndTools(nullptr, file); emit fileChecked(file); diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 270082d314f..8eb30a1f60f 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -662,7 +662,7 @@ void MainWindow::analyzeCode(const QString& code, const QString& filename) checkLockDownUI(); clearResults(); mUI->mResults->checkingStarted(1); - cppcheck.check(filename.toStdString(), code.toStdString()); + cppcheck.check(FileWithDetails(filename.toStdString()), code.toStdString()); analysisDone(); // Expand results diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index fa5e6b437d0..38d60a54ed2 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -539,18 +539,18 @@ unsigned int CppCheck::checkClang(const std::string &path) return mExitCode; } -unsigned int CppCheck::check(const std::string &path) +unsigned int CppCheck::check(const FileWithDetails &file) { if (mSettings.clang) - return checkClang(Path::simplifyPath(path)); + return checkClang(file.spath()); - return checkFile(Path::simplifyPath(path), emptyString); + return checkFile(file.spath(), emptyString); } -unsigned int CppCheck::check(const std::string &path, const std::string &content) +unsigned int CppCheck::check(const FileWithDetails &file, const std::string &content) { std::istringstream iss(content); - return checkFile(Path::simplifyPath(path), emptyString, &iss); + return checkFile(file.spath(), emptyString, &iss); } unsigned int CppCheck::check(const FileSettings &fs) @@ -578,12 +578,12 @@ unsigned int CppCheck::check(const FileSettings &fs) if (mSettings.clang) { temp.mSettings.includePaths.insert(temp.mSettings.includePaths.end(), fs.systemIncludePaths.cbegin(), fs.systemIncludePaths.cend()); // TODO: propagate back suppressions - const unsigned int returnValue = temp.check(Path::simplifyPath(fs.filename())); + const unsigned int returnValue = temp.check(fs.file); if (mUnusedFunctionsCheck) mUnusedFunctionsCheck->updateFunctionData(*temp.mUnusedFunctionsCheck); return returnValue; } - const unsigned int returnValue = temp.checkFile(Path::simplifyPath(fs.filename()), fs.cfg); + const unsigned int returnValue = temp.checkFile(fs.sfilename(), fs.cfg); mSettings.supprs.nomsg.addSuppressions(temp.mSettings.supprs.nomsg.getSuppressions()); if (mUnusedFunctionsCheck) mUnusedFunctionsCheck->updateFunctionData(*temp.mUnusedFunctionsCheck); @@ -612,8 +612,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string const Timer fileTotalTimer(mSettings.showtime == SHOWTIME_MODES::SHOWTIME_FILE_TOTAL, filename); if (!mSettings.quiet) { - std::string fixedpath = Path::simplifyPath(filename); - fixedpath = Path::toNativeSeparators(std::move(fixedpath)); + std::string fixedpath = Path::toNativeSeparators(filename); mErrorLogger.reportOut(std::string("Checking ") + fixedpath + ' ' + cfgname + std::string("..."), Color::FgGreen); if (mSettings.verbose) { @@ -867,8 +866,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string // If only errors are printed, print filename after the check if (!mSettings.quiet && (!mCurrentConfig.empty() || checkCount > 1)) { - std::string fixedpath = Path::simplifyPath(filename); - fixedpath = Path::toNativeSeparators(std::move(fixedpath)); + std::string fixedpath = Path::toNativeSeparators(filename); mErrorLogger.reportOut("Checking " + fixedpath + ": " + mCurrentConfig + "...", Color::FgGreen); } @@ -973,7 +971,7 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string fdump.close(); } - executeAddons(dumpFile, Path::simplifyPath(filename)); + executeAddons(dumpFile, filename); } catch (const TerminateException &) { // Analysis is terminated diff --git a/lib/cppcheck.h b/lib/cppcheck.h index 6e14683e89f..03956467916 100644 --- a/lib/cppcheck.h +++ b/lib/cppcheck.h @@ -83,12 +83,12 @@ class CPPCHECKLIB CppCheck : ErrorLogger { /** * @brief Check the file. * This function checks one given file for errors. - * @param path Path to the file to check. + * @param file The file to check. * @return amount of errors found or 0 if none were found. * @note You must set settings before calling this function (by calling * settings()). */ - unsigned int check(const std::string &path); + unsigned int check(const FileWithDetails &file); unsigned int check(const FileSettings &fs); /** @@ -96,13 +96,13 @@ class CPPCHECKLIB CppCheck : ErrorLogger { * This function checks one "virtual" file. The file is not read from * the disk but the content is given in @p content. In errors the @p path * is used as a filename. - * @param path Path to the file to check. + * @param file The file to check. * @param content File content as a string. * @return amount of errors found or 0 if none were found. * @note You must set settings before calling this function (by calling * settings()). */ - unsigned int check(const std::string &path, const std::string &content); + unsigned int check(const FileWithDetails &file, const std::string &content); /** * @brief Get reference to current settings. diff --git a/lib/filesettings.h b/lib/filesettings.h index d6edc1e443d..0f00577926f 100644 --- a/lib/filesettings.h +++ b/lib/filesettings.h @@ -20,6 +20,7 @@ #define fileSettingsH #include "config.h" +#include "path.h" #include "platform.h" #include @@ -44,6 +45,11 @@ class FileWithDetails return mPath; } + std::string spath() const + { + return Path::simplifyPath(mPath); + } + std::size_t size() const { return mSize; @@ -69,6 +75,10 @@ struct CPPCHECKLIB FileSettings { { return file.path(); } + std::string sfilename() const + { + return file.spath(); + } std::string defines; // TODO: handle differently std::string cppcheckDefines() const { diff --git a/oss-fuzz/main.cpp b/oss-fuzz/main.cpp index ee419d584b3..2c8909b740b 100644 --- a/oss-fuzz/main.cpp +++ b/oss-fuzz/main.cpp @@ -17,6 +17,7 @@ */ #include "cppcheck.h" +#include "filesettings.h" #include "type2.h" #ifdef NO_FUZZ @@ -37,13 +38,14 @@ class DummyErrorLogger : public ErrorLogger { }; static DummyErrorLogger s_errorLogger; +static const FileWithDetails s_file("test.cpp"); static void doCheck(const std::string& code) { CppCheck cppcheck(s_errorLogger, false, nullptr); cppcheck.settings().addEnabled("all"); cppcheck.settings().certainty.setEnabled(Certainty::inconclusive, true); - cppcheck.check("test.cpp", code); + cppcheck.check(s_file, code); } #ifndef NO_FUZZ diff --git a/test/testcppcheck.cpp b/test/testcppcheck.cpp index 47f7319d162..5663bb7b3b5 100644 --- a/test/testcppcheck.cpp +++ b/test/testcppcheck.cpp @@ -102,7 +102,7 @@ class TestCppcheck : public TestFixture { ErrorLogger2 errorLogger; CppCheck cppcheck(errorLogger, false, {}); - ASSERT_EQUALS(1, cppcheck.check(file.path())); + ASSERT_EQUALS(1, cppcheck.check(FileWithDetails(file.path()))); // TODO: how to properly disable these warnings? errorLogger.ids.erase(std::remove_if(errorLogger.ids.begin(), errorLogger.ids.end(), [](const std::string& id) { return id == "logChecker"; @@ -146,7 +146,7 @@ class TestCppcheck : public TestFixture { const char xmldata[] = R"()"; const Settings s = settingsBuilder().libraryxml(xmldata, sizeof(xmldata)).build(); cppcheck.settings() = s; - ASSERT_EQUALS(0, cppcheck.check(file.path())); + ASSERT_EQUALS(0, cppcheck.check(FileWithDetails(file.path()))); // TODO: how to properly disable these warnings? errorLogger.ids.erase(std::remove_if(errorLogger.ids.begin(), errorLogger.ids.end(), [](const std::string& id) { return id == "logChecker"; @@ -169,8 +169,8 @@ class TestCppcheck : public TestFixture { ErrorLogger2 errorLogger; CppCheck cppcheck(errorLogger, false, {}); - ASSERT_EQUALS(1, cppcheck.check(test_file_a.path())); - ASSERT_EQUALS(1, cppcheck.check(test_file_b.path())); + ASSERT_EQUALS(1, cppcheck.check(FileWithDetails(test_file_a.path()))); + ASSERT_EQUALS(1, cppcheck.check(FileWithDetails(test_file_b.path()))); // TODO: how to properly disable these warnings? errorLogger.errmsgs.erase(std::remove_if(errorLogger.errmsgs.begin(), errorLogger.errmsgs.end(), [](const ErrorMessage& msg) { return msg.id == "logChecker"; diff --git a/test/testfilesettings.cpp b/test/testfilesettings.cpp index a7764ca1034..7cf371305ea 100644 --- a/test/testfilesettings.cpp +++ b/test/testfilesettings.cpp @@ -25,38 +25,44 @@ class TestFileSettings : public TestFixture { private: void run() override { - TEST_CASE(path); + TEST_CASE(test); } - void path() const { + void test() const { { const FileWithDetails p{"file.cpp"}; ASSERT_EQUALS("file.cpp", p.path()); + ASSERT_EQUALS("file.cpp", p.spath()); ASSERT_EQUALS(0, p.size()); } { const FileWithDetails p{"file.cpp", 123}; ASSERT_EQUALS("file.cpp", p.path()); + ASSERT_EQUALS("file.cpp", p.spath()); ASSERT_EQUALS(123, p.size()); } { const FileWithDetails p{"in/file.cpp"}; ASSERT_EQUALS("in/file.cpp", p.path()); + ASSERT_EQUALS("in/file.cpp", p.spath()); ASSERT_EQUALS(0, p.size()); } { const FileWithDetails p{"in\\file.cpp"}; ASSERT_EQUALS("in\\file.cpp", p.path()); + ASSERT_EQUALS("in/file.cpp", p.spath()); ASSERT_EQUALS(0, p.size()); } { const FileWithDetails p{"in/../file.cpp"}; ASSERT_EQUALS("in/../file.cpp", p.path()); + ASSERT_EQUALS("file.cpp", p.spath()); ASSERT_EQUALS(0, p.size()); } { const FileWithDetails p{"in\\..\\file.cpp"}; ASSERT_EQUALS("in\\..\\file.cpp", p.path()); + ASSERT_EQUALS("file.cpp", p.spath()); ASSERT_EQUALS(0, p.size()); } } diff --git a/test/testpath.cpp b/test/testpath.cpp index 3da3f9e3670..e30470bedc0 100644 --- a/test/testpath.cpp +++ b/test/testpath.cpp @@ -47,6 +47,7 @@ class TestPath : public TestFixture { TEST_CASE(identify); TEST_CASE(identifyWithCppProbe); TEST_CASE(is_header); + TEST_CASE(simplifyPath); } void removeQuotationMarks() const { @@ -376,6 +377,49 @@ class TestPath : public TestFixture { ASSERT(Path::isHeader("index.htm")==false); ASSERT(Path::isHeader("index.html")==false); } + + void simplifyPath() const { + ASSERT_EQUALS("file.cpp", Path::simplifyPath("file.cpp")); + ASSERT_EQUALS("../file.cpp", Path::simplifyPath("../file.cpp")); + ASSERT_EQUALS("file.cpp", Path::simplifyPath("test/../file.cpp")); + ASSERT_EQUALS("../file.cpp", Path::simplifyPath("../test/../file.cpp")); + + ASSERT_EQUALS("file.cpp", Path::simplifyPath("./file.cpp")); + ASSERT_EQUALS("../file.cpp", Path::simplifyPath("./../file.cpp")); + ASSERT_EQUALS("file.cpp", Path::simplifyPath("./test/../file.cpp")); + ASSERT_EQUALS("../file.cpp", Path::simplifyPath("./../test/../file.cpp")); + + ASSERT_EQUALS("test/", Path::simplifyPath("test/")); + ASSERT_EQUALS("../test/", Path::simplifyPath("../test/")); + ASSERT_EQUALS("../", Path::simplifyPath("../test/..")); + ASSERT_EQUALS("../", Path::simplifyPath("../test/../")); + + ASSERT_EQUALS("/home/file.cpp", Path::simplifyPath("/home/test/../file.cpp")); + ASSERT_EQUALS("/file.cpp", Path::simplifyPath("/home/../test/../file.cpp")); + + ASSERT_EQUALS("C:/home/file.cpp", Path::simplifyPath("C:/home/test/../file.cpp")); + ASSERT_EQUALS("C:/file.cpp", Path::simplifyPath("C:/home/../test/../file.cpp")); + + ASSERT_EQUALS("../file.cpp", Path::simplifyPath("..\\file.cpp")); + ASSERT_EQUALS("file.cpp", Path::simplifyPath("test\\..\\file.cpp")); + ASSERT_EQUALS("../file.cpp", Path::simplifyPath("..\\test\\..\\file.cpp")); + + ASSERT_EQUALS("file.cpp", Path::simplifyPath(".\\file.cpp")); + ASSERT_EQUALS("../file.cpp", Path::simplifyPath(".\\..\\file.cpp")); + ASSERT_EQUALS("file.cpp", Path::simplifyPath(".\\test\\..\\file.cpp")); + ASSERT_EQUALS("../file.cpp", Path::simplifyPath(".\\..\\test\\..\\file.cpp")); + + ASSERT_EQUALS("test/", Path::simplifyPath("test\\")); + ASSERT_EQUALS("../test/", Path::simplifyPath("..\\test\\")); + ASSERT_EQUALS("../", Path::simplifyPath("..\\test\\..")); + ASSERT_EQUALS("../", Path::simplifyPath("..\\test\\..\\")); + + ASSERT_EQUALS("C:/home/file.cpp", Path::simplifyPath("C:\\home\\test\\..\\file.cpp")); + ASSERT_EQUALS("C:/file.cpp", Path::simplifyPath("C:\\home\\..\\test\\..\\file.cpp")); + + ASSERT_EQUALS("//home/file.cpp", Path::simplifyPath("\\\\home\\test\\..\\file.cpp")); + ASSERT_EQUALS("//file.cpp", Path::simplifyPath("\\\\home\\..\\test\\..\\file.cpp")); + } }; REGISTER_TEST(TestPath) diff --git a/test/testsuppressions.cpp b/test/testsuppressions.cpp index d2dcfb26eac..85d015a3003 100644 --- a/test/testsuppressions.cpp +++ b/test/testsuppressions.cpp @@ -1185,7 +1185,7 @@ class TestSuppressions : public TestFixture { settings.exitCode = 1; const char code[] = "int f() { int a; return a; }"; - ASSERT_EQUALS(0, cppCheck.check("test.c", code)); // <- no unsuppressed error is seen + ASSERT_EQUALS(0, cppCheck.check(FileWithDetails("test.c"), code)); // <- no unsuppressed error is seen ASSERT_EQUALS("[test.c:1]: (error) Uninitialized variable: a\n", errout_str()); // <- report error so ThreadExecutor can suppress it and make sure the global suppression is matched. } @@ -1225,7 +1225,7 @@ class TestSuppressions : public TestFixture { " // cppcheck-suppress unusedStructMember\n" " int y;\n" "};"; - ASSERT_EQUALS(0, cppCheck.check("/somewhere/test.cpp", code)); + ASSERT_EQUALS(0, cppCheck.check(FileWithDetails("/somewhere/test.cpp"), code)); ASSERT_EQUALS("",errout_str()); }