| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/env python3
- """Runs clang-tidy over all Carbon files."""
- __copyright__ = """
- Part of the Carbon Language project, under the Apache License v2.0 with LLVM
- Exceptions. See /LICENSE for license information.
- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- """
- import argparse
- import os
- import re
- import subprocess
- from pathlib import Path
- def main() -> None:
- parser = argparse.ArgumentParser(__doc__)
- # Copied from run-clang-tidy.py for forwarding.
- parser.add_argument("-fix", action="store_true", help="Apply fix-its")
- # Local flags.
- parser.add_argument("files", nargs="*", help="Files to fix")
- parsed_args = parser.parse_args()
- # If files are passed in, resolve them; otherwise, add a path filter.
- if parsed_args.files:
- files = [str(Path(f).resolve()) for f in parsed_args.files]
- else:
- files = ["^(?!.*/(bazel-|third_party)).*$"]
- # Set the repo root as the working directory.
- os.chdir(Path(__file__).resolve().parent.parent)
- # Ensure create_compdb has been run.
- subprocess.check_call(["./scripts/create_compdb.py"])
- # Use the run-clang-tidy version that should be with the rest of the clang
- # toolchain. This exposes us to version skew with user-installed clang
- # versions, but avoids version skew between the script and clang-tidy
- # itself.
- with Path(
- "./bazel-execroot/external/bazel_cc_toolchain/"
- "clang_detected_variables.bzl"
- ).open() as f:
- clang_vars = f.read()
- clang_bindir_match = re.search(r"clang_bindir = \"(.*)\"", clang_vars)
- assert clang_bindir_match is not None, clang_vars
- args = [str(Path(clang_bindir_match[1]).joinpath("run-clang-tidy"))]
- # Forward flags.
- if parsed_args.fix:
- args.append("-fix")
- # Run clang-tidy from clang-tools-extra.
- exit(subprocess.call(args + files))
- if __name__ == "__main__":
- main()
|