llvm-project
d05b7f1b - [clang-tidy] support query based custom check (#131804)

Commit
49 days ago
[clang-tidy] support query based custom check (#131804) ## summary ### Design for Compatibility For new field design 1. we must make sure the required fields do not change in quiet long time. 2. we should tolerant the unknown optional field (do not exist now) in the future. For large project integration (3rd party) 1. For config itself, since we can tolerant the unknown optional fields and required fields should not change, the user can decide whether to use custom check from third-party. 2.For clang-query, if there are some break change, since the query will be parsed at check time, the user can disable the check and it will not damage the whole clang-tidy ---- Inherit from #123734 RFC: https://discourse.llvm.org/t/support-query-based-clang-tidy-external-check/85331 this patch introduce query based custom check by `CustomChecks` options. The major improvement compared with #123734: 1. don't need to define config yaml file in command line 4. all behavior including `InheritFromParantConfig` is same as other config. 6. change configuration schema from KV structured to List structured to make extend new function easier. 7. Split bind string and diag message to two field to give more freedom to design query. example: ```yaml Checks: -*,custom-call-main-function CustomChecks: - Name: call-main-function Query: | match callExpr( callee( functionDecl(isMain()).bind("fn") ) ).bind("callee") Diagnostic: - BindName: fn Message: main function. Level: Note - BindName: callee Message: call to main function. Level: Warning ``` ```c++ int main(); // note: main function. void bar() { main(); // warning: call to main function. [custom-call-main-function] } ``` --- To make this PR don't do too much things that hard to review, here are some possible features not included in this PR - support language - support traverse - easier used template string in diagnostics message --------- Co-authored-by: DeNiCoN <denicon1234@gmail.com> Co-authored-by: Baranov Victor <bar.victor.2002@gmail.com>
Author
Parents
Loading