Commit Graph

11 Commits

Author SHA1 Message Date
John Stiles
fbd050bd0b Enable ClangTidy check modernize-make-unique.
The majority of existing call sites were automatically updated using
clang-tidy -fix. A small handful required a manual update,
e.g. CppCodeGen.

This check is a bit lenient, and in particular will not flag cases like
`std::unique_ptr<Base>(new Derived())` which is still pretty common
throughout our codebase. This CL does not attempt to replace all the
cases that ClangTidy does not flag.

Change-Id: I5eba48ef880e25d22de80f321a68c389ba769e36
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307459
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-03 17:53:52 +00:00
John Stiles
0633f76324 Enable ClangTidy check misc-definitions-in-headers.
https://clang.llvm.org/extra/clang-tidy/checks/misc-definitions-in-headers.html

Finds non-extern non-inline function and variable definitions in header
files, which can lead to potential ODR violations in case these headers
are included from multiple translation units.

Change-Id: I5a80d8bddbc7fae97a3b714ac4e376bcefc3b060
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307436
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-08-02 18:53:15 +00:00
John Stiles
8423d060bd Enable ClangTidy check readability-redundant-preprocessor.
https://clang.llvm.org/extra/clang-tidy/checks/readability-redundant-preprocessor.html
-----
Finds potentially redundant preprocessor directives.

- #ifdef .. #endif pairs which are nested inside an outer pair with the
  same condition. For example:

```
#ifdef FOO
#ifdef FOO // inner ifdef is considered redundant
void f();
#endif
#endif
```

- #ifndef .. #endif pairs
- #ifndef inside an #ifdef with the same condition
- #ifdef inside an #ifndef with the same condition:
- #if .. #endif pairs which are nested inside an outer pair with the
  same condition.

Change-Id: Ic1c745c0755a985e34f77a398686bf36f310acf2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307343
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-02 18:49:05 +00:00
John Stiles
ad1e2005f1 Add ClangTidy check bugprone-bool-pointer-implicit-conversion.
------
https://clang.llvm.org/extra/clang-tidy/checks/bugprone-bool-pointer-implicit-conversion.html
Checks for conditions based on implicit conversion from a bool pointer to bool.

Example:

bool *p;
if (p) {
  // Never used in a pointer-specific way.
}

Change-Id: I9399469df2d2ea1980ed6d996430f0fd6631ff0c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307342
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2020-07-31 22:17:24 +00:00
John Stiles
bfbe71252a Enable ClangTidy check performance-for-range-copy.
This will prevent us from writing range-based for loops that copy the
loop variable when a const& would suffice.

https://clang.llvm.org/extra/clang-tidy/checks/performance-for-range-copy.html
-----
Finds C++11 for ranges where the loop variable is copied in each
iteration but it would suffice to obtain it by const reference.

The check is only applied to loop variables of types that are expensive
to copy which means they are not trivially copyable or have a
non-trivial copy constructor or destructor.

Change-Id: Ic26bff7e9c48b4d1a9ad9c0606199920ea7a0af8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/306945
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-07-31 01:42:51 +00:00
John Stiles
e554301263 Enable ClangTidy guard bugprone-argument-comment.
https://clang.llvm.org/extra/clang-tidy/checks/bugprone-argument-comment.html
-----
Checks that argument comments match parameter names.

The check understands argument comments in the form /*parameter_name=*/
that are placed right before the argument.

  void f(bool foo);

  ...

  f(/*bar=*/true);
  // warning: argument name 'bar' in comment does not match parameter
  // name 'foo'

The check tries to detect typos and suggest automated fixes for them.
-----

Change-Id: I76fa82f5338f465b8f9e5a13654195f25a618b35
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/306848
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-07-30 18:24:00 +00:00
John Stiles
5f2b2d6dc6 Enable ClangTidy guard bugprone-unused-raii.
https://clang.llvm.org/extra/clang-tidy/checks/bugprone-unused-raii.html
-------
Finds temporaries that look like RAII objects.

The canonical example for this is a scoped lock.

{
  scoped_lock(&global_mutex);
  critical_section();
}

The destructor of the scoped_lock is called before the critical_section
is entered, leaving it unprotected.
-------

Change-Id: I40394eb84e7e4ad0564c409ecb52df2ef5af35b6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/306838
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2020-07-30 16:17:20 +00:00
John Stiles
398c654ce7 Enable ClangTidy 'undelegated constructor' warning.
Change-Id: I79dee7422f8a24fa0fffef33b131e96b5bf0d4ba
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/306728
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
2020-07-29 23:26:00 +00:00
Mike Klein
c33d614357 add google-build-namespaces to clang-tidy checks
Android's using this check in their clang-tidy builds.

The check itself is well intentioned but doesn't seem to take into
account the particular reason we do this... being able to use these
types and functions from files compiled with different optimization
settings without causing ODR violations or runtime crashes.

Each of the places that's marked is using an anonymous namespace
from a header for good reason, but I don't mind making clang-tidy
ask us to explicitly exempt any others that may come up in the
future.  It's definitely unusual, and rarely the best idea.

Adding -header-filters='.*' actually checks headers...
until now they've been ignored.

Change-Id: Ie421d2b47076bd384b10c7339cfb7a1c3ea90906
Reviewed-on: https://skia-review.googlesource.com/c/176963
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
2018-12-12 16:33:59 +00:00
Mike Klein
21840ed430 restrict -Werror to runs of clang-tidy.sh
Android runs clang-tidy with a different set of checks
that override our choices in .clang-tidy.

Change-Id: I95d92bb9b61bc5f94fe2bb8bff382edd876d2594
Reviewed-on: https://skia-review.googlesource.com/c/176962
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2018-12-12 14:29:50 +00:00
Mike Klein
1688507f83 Try out clang-tidy, starting with bugprone-use-after-move
- add drop-in clang-tidy cxx wrapper
 - get build clean for bugprone-use-after-move

The wrapper can be used by setting

   cxx = "/path/to/skia/tools/clang-tidy.sh"

in GN.

Change-Id: Idbba911e23bd6ef7530b08fd31906b92c1c1b28c
Reviewed-on: https://skia-review.googlesource.com/c/176523
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2018-12-11 17:28:19 +00:00