Skip to content

赛题四:在飞桨框架中引入 clang-tidy Tracking Issue #54073

Open
@GreatV

Description

一、 项目说明

用于跟踪 clang-tidy代码风格检查工具的引入 并记录该计划下各个子任务的计划和进度。

二、 主要工作

📓 操作指南

(以readability-container-size-empty为例)

  1. 编译Paddle (PR-CI-Coverage中的编译选项),需要打开-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
cmake .. -DCMAKE_BUILD_TYPE=Release -DWITH_GPU=ON -DWITH_CUDNN_DSO=OFF -DWITH_SHARED_PHI=ON \
-DWITH_TENSORRT=ON -DWITH_ROCM=OFF -DWITH_CINN=OFF -DWITH_DISTRIBUTE=ON \
-DWITH_MKL=ON -DWITH_AVX=ON -DCUDA_ARCH_NAME=Volta -DNEW_RELEASE_PYPI=OFF \
-DNEW_RELEASE_ALL=OFF -DNEW_RELEASE_JIT=OFF -DWITH_PYTHON=ON \
-DCUDNN_ROOT=/usr/ -DWITH_TESTING=ON -DWITH_COVERAGE=ON \
-DWITH_INCREMENTAL_COVERAGE=OFF -DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_INFERENCE_API_TEST=ON \
-DINFERENCE_DEMO_INSTALL_DIR=/home/data/cfs/.cache/coverage -DPY_VERSION=3.8 \
-DCMAKE_INSTALL_PREFIX=/paddle/build -DWITH_PSCORE=ON -DWITH_PSLIB=OFF \
-DWITH_GLOO=ON -DLITE_GIT_TAG=release/v2.10 -DWITH_XPU=OFF -DWITH_IPU=OFF \
-DXPU_SDK_ROOT= -DWITH_LITE=ON -DWITH_XPU_BKCL=OFF -DWITH_ARM=OFF \
-DWITH_STRIP=ON -DON_INFER=OFF -DWITH_HETERPS=OFF -DWITH_GPU_GRAPH=OFF \
-DCUDA_ARCH_BIN= -DWITH_RECORD_BUILDTIME=OFF -DWITH_UNITY_BUILD=ON \
-DWITH_ONNXRUNTIME=OFF -DWITH_CUDNN_FRONTEND=OFF

# 不执行make,会导致clang-tidy无法找到第三方库
make -j$(nproc)
  1. 打开检查
    .clang-tidy中移除-readability-container-size-empty的前缀-
  2. 运行clang-tidy,并根据clang-tidy提示修改代码
  3. 重新运行pre-commit确认修改完成
# paddle on develop [!+?] via △ v3.18.0 via 🐍 v3.7.16 took 27m16s
pre-commit run clang-tidy --all-files > clang-tidy.log 2>&1
grep "\[readability-container-size-empty,-warnings-as-errors\]" clang-tidy.log

也可以直接运行clang-tidy并行检查工具:

python ./tools/codestyle/clang-tidy.py -p=build -j=10 \
-clang-tidy-binary=clang-tidy \
-extra-arg=-Wno-unknown-warning-option \
-extra-arg=-Wno-pessimizing-move \
-extra-arg=-Wno-braced-scalar-init \
-extra-arg=-Wno-deprecated-copy \
-extra-arg=-Wno-dangling-gsl \
-extra-arg=-Wno-final-dtor-non-final-class \
-extra-arg=-Wno-implicit-int-float-conversion \
-extra-arg=-Wno-inconsistent-missing-override \
-extra-arg=-Wno-infinite-recursion \
-extra-arg=-Wno-mismatched-tags  \
-extra-arg=-Wno-self-assign \
-extra-arg=-Wno-sign-compare \
-extra-arg=-Wno-sometimes-uninitialized \
-extra-arg=-Wno-tautological-overlap-compare \
-extra-arg=-Wno-unused-const-variable \
-extra-arg=-Wno-unused-lambda-capture \
-extra-arg=-Wno-unused-private-field \
-extra-arg=-Wno-unused-value \
-extra-arg=-Wno-unused-variable  \
-extra-arg=-Wno-overloaded-virtual  \
-extra-arg=-Wno-defaulted-function-deleted  \
-extra-arg=-Wno-delete-non-abstract-non-virtual-dtor  \
-extra-arg=-Wno-return-type-c-linkage  > clang-tidy.log  2>&1 

整体进展 (39/94)

按完成时间顺序,排名不分先后: @GreatV (2) @ccsuzzh (1) @enkilee (36)

1. 存量修复相关

注:错误数量没有统计 CINN 目录下,CINN 目录下也暂时无需修复,原因见 #54073 (comment)

注:2023/07/21重新扫描的日志文件clang-tidy.log

注:2023/11/15重新扫描的日志文件clang-tidy.log

编号 错误类型 错误数量 认领人 PR链接
1 cppcoreguidelines-init-variables 11002
2 modernize-redundant-void-arg 1294
3 bugprone-narrowing-conversions,cppcoreguidelines-narrowing-conversions 327 @enkilee #61759#62109
4 cppcoreguidelines-pro-type-member-init 216
5✅ (2024/3/1) cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays 151 @enkilee #61751
6 modernize-unary-static-assert 132
7✅ (2024/3/1) bugprone-branch-clone 132 @enkilee #61735
8 performance-unnecessary-copy-initialization 127
9 cppcoreguidelines-avoid-goto,hicpp-avoid-goto 109
10 cppcoreguidelines-pro-type-const-cast 90
11 modernize-pass-by-value 65
12✅ (2024/3/7) modernize-loop-convert 46 @enkilee #61725
13✅ (2024/2/21) modernize-deprecated-headers 44 @enkilee #61721
14✅ (2024/2/20) misc-unused-alias-decls 44 @enkilee #61716
15✅ (2024/2/20) performance-inefficient-vector-operation 30 @enkilee #61715
16 clang-analyzer-optin.cplusplus.VirtualCall 26
17✅ (2024/3/1) cppcoreguidelines-explicit-virtual-functions,modernize-use-override 20 @enkilee #61714
18 clang-analyzer-core.NullDereference 18
19✅ (2024/2/26) readability-container-size-empty 16 @enkilee #61713
20✅ (2023/12/5) modernize-use-nullptr 15 @ccsuzzh #59626
21✅ (2024/2/21) performance-for-range-copy 14 @enkilee #61712
22 cppcoreguidelines-no-malloc 13
23 modernize-use-emplace 11
24✅ (2024/3/1) hicpp-exception-baseclass 11 @enkilee #61691
25✅ (2024/2/26) modernize-use-transparent-functors 9 @enkilee #61689
26✅ (2024/2/20) misc-unused-using-decls 9 @enkilee #61616
27✅ (2024/2/21) performance-move-const-arg 7 @enkilee #61615
28✅ (2024/2/21) modernize-use-equals-default 7 @enkilee #61614
29✅ (2024/2/20) bugprone-exception-escape 7 @enkilee #61609
30 performance-inefficient-string-concatenation 5
31✅ (2024/2/29) clang-analyzer-cplusplus.NewDeleteLeaks 5 @enkilee #62129
32✅ (2024/2/29) bugprone-unused-raii 5 @enkilee #62129
33✅ (2024/2/20) bugprone-inaccurate-erase 5 @enkilee #61589
34✅ (2024/2/29) bugprone-copy-constructor-init 5 @enkilee #62129
35✅ (2024/2/20) modernize-use-bool-literals 3 @enkilee #61580
36✅ (2024/2/20) clang-analyzer-core.DivideZero 3 @enkilee #61580
37✅ (2024/2/20) bugprone-integer-division 3 @enkilee #61580
38✅ (2024/2/26) performance-trivially-destructible 2 @enkilee #61556
39✅ (2024/2/26) modernize-make-unique 2 @enkilee #61556
40✅ (2024/2/26) modernize-avoid-bind 2 @enkilee #61556
41✅ (2024/2/29) cppcoreguidelines-slicing 2 @enkilee #62129
42✅ (2024/2/20) performance-noexcept-move-constructor 1 @enkilee #61555
43✅ (2024/2/20) clang-diagnostic-unused-but-set-variable 1 @enkilee #61555
44✅ (2024/2/20) clang-analyzer-security.FloatLoopCounter 1 @enkilee #61555
45✅ (2024/2/29) clang-analyzer-cplusplus.NewDelete 1 @enkilee #62129
46✅ (2024/2/21) clang-analyzer-core.NonNullParamChecker 1 @enkilee #61494
47✅ (2024/2/21) bugprone-unhandled-self-assignment 1 @enkilee #61494
48✅ (2024/2/20) bugprone-string-integer-assignment 1 @enkilee #61492
49✅ (2024/2/20) bugprone-misplaced-widening-cast 1 @enkilee #61492
50✅ (2024/2/20) bugprone-infinite-loop 1 @enkilee #61492
旧任务表格如下所示(旧任务进展 55/94):按完成时间顺序,排名不分先后: @GreatV (4) @BeingGod (4) @gouzil (19) @ccsuzzh (5) @enkilee (13) @xiaoyewww (6) @SigureMo (3) @RedContritio (1)
编号 错误类型 错误数量 认领人 PR链接
1 [hicpp-avoid-goto] 1603
2 [cppcoreguidelines-avoid-goto] (🏷️ alias of task 1) 1603
3✅ (2023/7/31) [modernize-redundant-void-arg] 1326 @gouzil #55652 #55741
4✅ (2023/8/3) [modernize-loop-convert] 1091 @GreatV #55704
5✅ (2023/8/30) [modernize-make-shared] 842 @SigureMo #55807
6✅ (2023/8/14) [modernize-avoid-c-arrays] 820 @gouzil #55774#55954
7✅ (2023/8/14) [cppcoreguidelines-avoid-c-arrays] (🏷️ alias of task 6) 820 @gouzil #55774#56208
8✅ (2023/9/15) [cppcoreguidelines-narrowing-conversions] 596 @gouzil #56218#56895#56904✅ 57114✅
9✅ (2023/10/11) [bugprone-narrowing-conversions] (🏷️ alias of task 8) 596 @gouzil #57861
10✅ (2023/10/11) [cppcoreguidelines-init-variables] 576 @gouzil #57871
11 ✅ (2023/7/11) [readability-container-size-empty] 458 @GreatV #55279
12✅ (2023/8/4) [modernize-use-nullptr] 409 @ccsuzzh #55800
13✅ (2023/8/4) [modernize-use-emplace] 401 @BeingGod #55799
14 [performance-unnecessary-copy-initialization] 395
15 [cppcoreguidelines-pro-type-const-cast] 164 @enkilee #58285
16✅ (2023/8/7) [modernize-use-equals-default] 150 @BeingGod #55983
17✅ (2023/10/12) [performance-for-range-copy] 127 @enkilee #57809
18 [cppcoreguidelines-pro-type-member-init] 127
19✅ (2023/10/13) [performance-move-const-arg] 113 @enkilee #57627
20✅ (2023/9/7) [clang-analyzer-core.CallAndMessage] 96 @enkilee #56954
21 [modernize-pass-by-value] 95 @Rruown
22✅ (2023/8/9) [modernize-make-unique] 81 @BeingGod #55506#55764
23✅ (2023/9/21) [bugprone-branch-clone] 74 @enkilee #57522
24 [performance-inefficient-vector-operation] 71 @gouzil #58028
25✅ (2023/9/7) [modernize-deprecated-headers] 34 @enkilee #56994
26✅ (2023/8/29) [misc-unused-using-decls] 33 @enkilee #56485
27✅ (2023/8/29) [misc-unused-alias-decls] 32 @enkilee #56485
28 [clang-analyzer-core.NullDereference] 32
29✅ (2023/9/18) [cppcoreguidelines-no-malloc] 29 @gouzil #57343
30 [clang-analyzer-optin.cplusplus.VirtualCall] 26
31✅ (2023/8/14) [modernize-use-bool-literals] 22 @enkilee #56216
32✅ (2023/9/20) [clang-analyzer-deadcode.DeadStores] 22 @enkilee #57483
33✅ (2023/9/7) [bugprone-signed-char-misuse] 21 @ccsuzzh #56744
34✅ (2023/9/1) [performance-noexcept-move-constructor] 18 @enkilee #56261
35✅ (2023/9/1) [bugprone-incorrect-roundings] 18 @gouzil #56747
36✅ (2023/9/1) [modernize-use-transparent-functors] 17 @enkilee #56261
37✅ (2023/8/15) [performance-faster-string-find] 14 @enkilee #56255
38✅ (2023/8/28) [bugprone-exception-escape] 14 @gouzil #56692
39✅ (2023/8/30) [clang-analyzer-optin.cplusplus.UninitializedObject] 13 @gouzil #56648
40✅ (2023/8/29) [performance-inefficient-string-concatenation] 12 @gouzil #56647
41✅ (2023/8/29) [bugprone-unhandled-self-assignment] 9 @gouzil #56640
42✅ (2023/8/29) [clang-analyzer-core.uninitialized.Assign] 8 @gouzil #56637
43✅ (2023/8/29) [clang-analyzer-core.UndefinedBinaryOperatorResult] 8 @gouzil #56636
44✅ (2023/8/29) [bugprone-misplaced-widening-cast] 8 @gouzil #56635
45✅ (2023/8/1) [bugprone-unused-raii] 7 @ccsuzzh #55815
46✅ (2023/8/3) [modernize-avoid-bind] 6 @gouzil
47 ✅ (2023/7/21) [modernize-use-override] 4 @BeingGod #55491
48✅(2023/11/6) [clang-analyzer-unix.Malloc] 4 @RedContritio #55658
49 [clang-analyzer-cplusplus.NewDeleteLeaks] 4
50 [clang-analyzer-core.DivideZero] 4
51✅ (2023/8/14) [bugprone-copy-constructor-init] 4 @enkilee #56219
52✅ (2023/8/14) [bugprone-argument-comment] 4 @enkilee #56217
53✅ (2023/8/29) [cppcoreguidelines-c-copy-assignment-signature] 3 @xiaoyewww #56601
54✅ (2023/8/29) [bugprone-use-after-move] 3 @xiaoyewww #56601
55 [bugprone-sizeof-expression] 3 @xiaoyewww
56✅ (2023/8/29) [modernize-raw-string-literal] 2 @SigureMo #55675
57✅ (2023/9/5) [cppcoreguidelines-explicit-virtual-functions] 2 @xiaoyewww #56649
58✅ (2023/9/5) [clang-analyzer-core.NonNullParamChecker] 2 @xiaoyewww #56649
59✅ (2023/9/5) [bugprone-unused-return-value] 2 @xiaoyewww #56676
60✅ (2023/9/5) [bugprone-suspicious-missing-comma] 2 @xiaoyewww #56676
61✅ (2023/8/29) [hicpp-exception-baseclass] 1 @SigureMo #55847
62✅ (2023/8/15) [clang-analyzer-unix.Vfork] 1 @gouzil #56253
63✅ (2023/8/15) [clang-analyzer-security.insecureAPI.vfork] 1 @gouzil #56253
64✅ (2023/9/7) [clang-analyzer-optin.portability.UnixAPI] 1 @ccsuzzh #56744
65✅ (2023/8/28) [clang-analyzer-cplusplus.InnerPointer] 1 @ccsuzzh #56693
66✅ (2023/8/14) [bugprone-integer-division] 1 @gouzil #56246

2. 增量拦截相关

编号 任务 认领人 PR链接
67✅ (2023/7/11) .pre-commit-config.yaml 在添加 clang-tidy 检查项 @GreatV #55279 #55894
68✅(2023/7/11) 使用单独的脚本运行 clang-tidy,开发者便于手动执行检查 运行tools/codestyle/clang-tidy.py即可 #55279
69 clang-tidy 工具同步到release分支 @Liyulingyue
70 clang-tidy 同步到CI镜像中,PR-CI-Build中打开CI, 避免重复安装下载 @ccsuzzh #55619

3. 移除pre-commit中的-WnoXXX (.pre-commit-config.yaml)

编号 任务 认领人 PR链接
71 -extra-arg=-Wno-pessimizing-move @enkilee
72 -extra-arg=-Wno-braced-scalar-init
73 -extra-arg=-Wno-dangling-gsl
74 -extra-arg=-Wno-deprecated-copy
75 -extra-arg=-Wno-final-dtor-non-final-class
76 -extra-arg=-Wno-implicit-int-float-conversion
77 -extra-arg=-Wno-inconsistent-missing-override
78 -extra-arg=-Wno-infinite-recursion
79 -extra-arg=-Wno-mismatched-tags
80 -extra-arg=-Wno-self-assign
81 -extra-arg=-Wno-sign-compare
82 -extra-arg=-Wno-sometimes-uninitialized
83 -extra-arg=-Wno-tautological-overlap-compare
84 -extra-arg=-Wno-unused-const-variable
85 -extra-arg=-Wno-unused-lambda-capture
86 -extra-arg=-Wno-unused-private-field
87 -extra-arg=-Wno-unused-value
88 -extra-arg=-Wno-unused-variable
89 -extra-arg=-Wno-overloaded-virtual
90 -extra-arg=-Wno-defaulted-function-deleted
91 -extra-arg=-Wno-delete-non-abstract-non-virtual-dtor
92 -extra-arg=-Wno-return-type-c-linkage
93 paddle/cinn 重新加入 clang-tidy pre-commit 扫描路径,
并确保打开的检查项能够通过
94 将cmake时自动生成的c++文件路径加入clang-tidy排除项

Metadata

Labels

PFCCPaddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfcc

Type

No type

Projects

  • Status

    In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions