Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  apply_clang_tidy.py

  Sprache: Python
 

#!/usr/bin/env vpython3

# Copyright (c) 2025 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
#
# Run clang-tidy in the webrtc source directory.
# The list of checks that is getting applied is in the toplevel
# .clang-tidy file. To add a new check, add it to that file and run
# the script.
#
# clang-tidy needs to be added to the .gclient file:
# Example .gclient file:
# solutions = [
#  {
#    "name": "src",
#    "url": "https://webrtc.googlesource.com/src.git",
#    "deps_file": "DEPS",
#    "managed": False,
#    "custom_deps": {},
#    "custom_vars" : {
#      "checkout_clangd": True,
#      "checkout_clang_tidy": True,
#    }
#  },
# ]
#
# See also
https://chromium.googlesource.com/chromium/src/+/main/docs/clang_tidy.md

import argparse
import time
import pathlib
import subprocess

_DEFAULT_WORKDIR = pathlib.Path("out/Default")

# This is relative to src dir.
_TIDY_BUILD = "tools/clang/scripts/build_clang_tools_extra.py"
# These are relative to the work dir so the path needs to be constructed later.
_LLVM = "tools/clang/third_party/llvm/"
_TIDY_RUNNER = _LLVM + "clang-tools-extra/clang-tidy/tool/run-clang-tidy.py"
_TIDY_BINARY = _LLVM + "build/bin/clang-tidy"
_REPLACEMENTS_BINARY = _LLVM + "build/bin/clang-apply-replacements"

def _valid_dir(path: str) -> pathlib.Path:
    """Checks if the given path is an existing dir
    relative to the current working directory.

    Args:
        path: Relative dir path to the current working directory

    Returns:
        pathlib.Path object wrapping the dir path

    Raises:
        ValueError: If the dir doesn't exist
    """
    pathlib_handle = pathlib.Path(path)
    if not pathlib_handle.is_dir():
        raise ValueError(f"Dir path {pathlib_handle} does not exist!")
    return pathlib_handle


def _build_clang_tools(work_dir: pathlib.Path) -> None:
    if pathlib.Path(work_dir, _TIDY_RUNNER).exists() and pathlib.Path(
            work_dir, _TIDY_BINARY).exists() and pathlib.Path(
                work_dir, _REPLACEMENTS_BINARY).exists():
        # Assume that tidy updates at least once every 30 days, and
        # recompile it if it's more than 30 days old.
        tidy_binary_path = pathlib.Path(work_dir, _TIDY_BINARY)
        age_in_seconds = time.time() - tidy_binary_path.stat().st_mtime
        age_in_days = age_in_seconds / (24 * 60 * 60)
        if age_in_days < 30:
            return
        print("Binary is %d days old - recompiling" % age_in_days)
    print("Fetching and building clang-tidy")
    build_clang_tools_cmd = (_TIDY_BUILD, "--fetch", work_dir, "clang-tidy",
                             "clang-apply-replacements")
    subprocess.run(build_clang_tools_cmd,
                   capture_output=False,
                   text=True,
                   check=True)


def _generate_compile_commands(work_dir: pathlib.Path) -> None:
    """Automatically generates the compile_commands.json file to be used
    by the include cleaner binary.

    Args:
        work_dir: gn out dir
    """
    compile_commands_path = work_dir / "compile_commands.json"
    print("Generating compile commands file...")
    subprocess.run(
        ["tools/clang/scripts/generate_compdb.py""-p", work_dir],
        stdout=compile_commands_path.open(mode="w+"),
        check=True,
    )


def _run_clang_tidy(work_dir: pathlib.Path) -> None:
    clang_tidy_cmd = (work_dir / _TIDY_RUNNER, "-p", work_dir,
                      "-allow-no-checks""-clang-tidy-binary", work_dir /
                      _TIDY_BINARY, "-clang-apply-replacements-binary",
                      work_dir / _REPLACEMENTS_BINARY, "-fix")
    subprocess.run(clang_tidy_cmd,
                   capture_output=False,
                   text=True,
                   check=False)


def _cleanup_unrelated_changes() -> None:
    print("Cleaning up changes in third_party etcetera")
    subprocess.run(("gclient""sync""-f"),
                   capture_output=False,
                   text=True,
                   check=False)

def _parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Runs clang-tidy with a set of rules",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
    )
    parser.add_argument(
        "-w",
        "--work-dir",
        type=_valid_dir,
        default=str(_DEFAULT_WORKDIR),
        help="Specify the gn workdir",
    )

    return parser.parse_args()


def main() -> None:
    args = _parse_args()
    _build_clang_tools(args.work_dir)
    _generate_compile_commands(args.work_dir)
    _run_clang_tidy(args.work_dir)
    _cleanup_unrelated_changes()


if __name__ == "__main__":
    main()

Messung V0.5 in Prozent
C=98 H=97 G=97

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=752002