[clang-tools-extra] [run-clang-tidy.py] Refactor, add progress indicator, add type hints (PR #89490)

Nicolas van Kempen via cfe-commits cfe-commits at lists.llvm.org
Sat Apr 27 20:02:38 PDT 2024


nicovank wrote:

Reproduced the buffering issue on my setup, but flushing didn't fix the problem.
I could also reproduce with the current version of this script, which does also flush after writing.
Python defaults input/output streams to buffered mode when it detects a pipe, and I don't think flushing overrides that setting.
One way to force unbuffering I know of is to run `python3 -u` when initially invoking the script, but that's not great here.

<details>

<summary>Reproduction with current script version.</summary>

```
% python3 run-clang-tidy.py -checks="-*,performance-*" -source-filter ".*clang-tools-extra/clang-query.*" &>output

/home/nvankempen_umass_edu/work/build/bin/clang-tidy -checks=-*,performance-* -p=/home/nvankempen_umass_edu/work/llvm-project /home/nvankempen_umass_edu/work/llvm-project/clang-tools-extra/clang-query/QueryParser.cpp
/home/nvankempen_umass_edu/work/llvm-project/clang-tools-extra/clang-query/QueryParser.cpp:175:6: warning: enum 'ParsedQueryKind' uses a larger base type ('unsigned int', size: 4 bytes) than necessary for its value set, consider using 'std::uint8_t' (1 byte) as the base type to reduce its size [performance-enum-size]
  175 | enum ParsedQueryKind {
      |      ^
/home/nvankempen_umass_edu/work/llvm-project/clang-tools-extra/clang-query/QueryParser.cpp:189:6: warning: enum 'ParsedQueryVariable' uses a larger base type ('unsigned int', size: 4 bytes) than necessary for its value set, consider using 'std::uint8_t' (1 byte) as the base type to reduce its size [performance-enum-size]
  189 | enum ParsedQueryVariable {
      |      ^
/home/nvankempen_umass_edu/work/build/bin/clang-tidy -checks=-*,performance-* -p=/home/nvankempen_umass_edu/work/llvm-project /home/nvankempen_umass_edu/work/llvm-project/clang-tools-extra/clang-query/tool/ClangQuery.cpp
/home/nvankempen_umass_edu/work/build/bin/clang-tidy -checks=-*,performance-* -p=/home/nvankempen_umass_edu/work/llvm-project /home/nvankempen_umass_edu/work/llvm-project/clang-tools-extra/clang-query/Query.cpp
1363 warnings generated.
Suppressed 1361 warnings (1361 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1595 warnings generated.
Suppressed 1595 warnings (1595 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1633 warnings generated.
Suppressed 1633 warnings (1633 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
```

</details>

I think the way to go here is just to print everything to stdout, stderr can be reserved to issues within the script itself.
**→ This is the behavior in the current version of this PR**.

Added an initial message with the number of files to process over the number of files in compilation database.

Added a runtime number for each file.
Thought about making a `ClangTidyResult` class to wrap the `run_tidy` return, but it's only used once and would make the deconstructing harder, so it's fine.

https://github.com/llvm/llvm-project/pull/89490


More information about the cfe-commits mailing list