cppcheck/tools
Scott Furry e459762bcd Suppress Code semantic and syntax warnings (#1936)
Sources were built with Clang but with increased verbosity of error detection.

A number of syntax and semantic warnings were encountered. Commit adds
changes to correct these warnings.

Some changes involve removing extra, and unncessary, semi-colons at EOL
(e.g. at end of switch clause).

Project astyle settings are not currently setup to detect if a file is to
have an extra carriage return after the last line of data. Two files were
altered to ensure an extra carriage return.

An advisory to enhance code was encountered in triage code. Clang advisory
on a for-loop interation value suggested that:
`use reference type 'const QString &' to prevent copying`
2019-06-30 21:43:25 +02:00
..
test start_donate_cpu_client_productive.sh: Update client script regularly. 2019-03-06 08:41:16 +01:00
triage Suppress Code semantic and syntax warnings (#1936) 2019-06-30 21:43:25 +02:00
astyle_client.py astyle_client: reformat given source files 2019-06-27 09:24:22 +02:00
astyle_server.py astyle: minor tweaks in client/server scripts 2019-06-26 20:38:21 +02:00
ci.py Improve Python code 2017-06-04 22:51:48 +02:00
clang-ast.cpp clang-ast: print constructors and destructors 2018-04-30 15:42:40 +02:00
compare-ast-clang-and-cppcheck.py some small *.py script cleanup (#1328) 2018-08-05 20:36:21 +02:00
compare.cs tools/compare.cs: changed format for error message 2018-02-15 15:17:04 +01:00
daca-test-patch.sh Added script that tests a patch with daca 2018-08-04 09:42:55 +02:00
daca2-download.py Revert "Add semver import for sorting ls-lR list (#1735)" 2019-03-12 06:25:11 +01:00
daca2-getpackages.py daca2-getpackages: more protection when it goes wrong 2019-03-27 06:41:35 +01:00
daca2-logs2git.sh daca2: add script which crawls the daca logs and feeds them into a git repository. 2017-09-03 22:31:36 +02:00
dmake.cpp Makefile: Add one more flag 'MATCHCOMPILER=yes' 2019-06-23 13:43:09 +02:00
dmake.sln dmake: Fix windows project and build (#1091) 2018-02-17 06:31:12 +01:00
dmake.vcxproj dmake: Fix windows project and build (#1091) 2018-02-17 06:31:12 +01:00
donate-cpu-server.py donate-cpu-server.py: Fixed bug 2019-06-30 14:14:02 +02:00
donate-cpu.py donate-cpu: changed names 2019-06-30 12:43:05 +02:00
extract_and_run_more_tests.sh
extracttests.py Updated copyright year 2018-01-14 15:37:52 +01:00
generate_and_run_more_tests.sh
generate_cfg_tests.cpp generate_cfg_tests: fix argument count 2018-03-19 20:46:55 +01:00
git-pre-commit-cppcheck Missing return value in git-pre-commit-cppcheck (#1382) 2018-09-21 04:56:53 +02:00
listErrorsWithoutCWE.py Improve Python code 2017-07-22 11:05:50 +02:00
matchcompiler.py Update copyright year 2019-02-09 07:24:06 +01:00
parse-glibc.py Improve Python code 2017-06-05 13:23:00 +02:00
pr.py tools/pr.py: use -b to just checkout pull request code in a branch 2019-06-30 21:24:11 +02:00
readme.md tools/readme.md: short description of astyle-client 2019-06-30 19:20:29 +02:00
reduce.py reduce.py: Improved help text 2019-03-03 20:18:54 +01:00
run-coverity.sh Updated run-coverity.sh script 2018-05-05 15:23:35 +02:00
run_more_tests.sh tools/run_more_tests.sh: Fixed comment 2018-02-02 11:27:38 +01:00
test_matchcompiler.py Updated copyright year 2018-01-14 15:37:52 +01:00
test_showtimetop5.sh
testrunnerify_code.sh
times-tags.sh
times-vs.py Improve Python code 2017-06-04 22:51:48 +02:00
times.c tools: allow short SHA1 longer than 7 (#1399) 2018-09-28 19:04:39 +02:00
times.sh Makefile: Add one more flag 'MATCHCOMPILER=yes' 2019-06-23 13:43:09 +02:00
trac-keywords.py python formatting. Run autopep8 and replace tabs with spaces. 2018-02-13 09:26:11 +01:00

readme.md

Cppcheck developer and build tools

##¤ * tools/astyle-client.py

With this tool you can astyle-format arbitrary cpp/header files even if you do not have astyle on your computer.

astyle on a server is used.

Example usage:

python tools/astyle-client.py lib/token.cpp

The file is reformatted and a status message is written that says if there were any changes or not.

This script is a lot slower than running astyle locally on your computer.

* tools/matchcompiler.py

The matchcompiler.py is a build script that performs a few code transformations to .cpp files under the lib directory. These transformations are related to the use of Token::Match() function and are intended to improve code performance. The transformed files are saved on the build directory. This tool is silently used when building the code with SRCDIR=build, that is:

$ cd path/to/cppcheck
$ make MATCHCOMPILER=yes

Here is a simple example of the matchcompiler.py optimization. Suppose there is a file example.cpp under lib/:

// lib/example.cpp
void f1() {
    Token::Match(tok, "abc");
}

void f2() {
    const char *abc = "abc";
    Token::Match(tok, abc);
}

If you manually run matchcompiler.py from the main directory:

$ cd path/to/cppcheck
$ python tools/matchcompiler.py

A file example.cpp will be generated on the build directory:

// build/example.cpp
#include "token.h"
#include "errorlogger.h"
#include <string>
#include <cstring>
static const std::string matchStr1("abc");
// pattern: abc
static bool match1(const Token* tok) {
    if (!tok || !(tok->str()==matchStr1)/* abc */)
        return false;
    return true;
}
void f1() {
    match1(tok);
}

void f2() {
    const char *abc = "abc";
    Token::Match(tok, abc);
}

From this we can see that the usage of Token::Match() in f1() has been optimized, whereas the one in f2() couldn't be optimized (the string wasn't inline on the Token::Match() call). The developer doesn't need to use this tool during development but should be aware of these optimizations. Building with this optimization, cppcheck can get a boost of 2x of speed-up.

* tools/dmake.cpp

Automatically generates the main Makefile for Cppcheck (the main Makefile should not be modified manually). To build and run the dmake tool execute:

$ cd path/to/cppcheck
$ make dmake
$ ./dmake

* tools/reduce.py

Script that reduces code for a hang/false positive.

* tools/times.sh

Script to generate a times.log file that contains timing information of the last 20 revisions.