xref: /aosp_15_r20/external/crosvm/tools/clippy (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2019 The ChromiumOS Authors
3*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
5*bb4ee6a4SAndroid Build Coastguard Worker
6*bb4ee6a4SAndroid Build Coastguard Worker# To check for violations:
7*bb4ee6a4SAndroid Build Coastguard Worker# $ ./tools/clippy
8*bb4ee6a4SAndroid Build Coastguard Worker#
9*bb4ee6a4SAndroid Build Coastguard Worker# To fix violations where possible:
10*bb4ee6a4SAndroid Build Coastguard Worker# $ ./tools/clippy --fix
11*bb4ee6a4SAndroid Build Coastguard Worker
12*bb4ee6a4SAndroid Build Coastguard Workerfrom typing import Optional
13*bb4ee6a4SAndroid Build Coastguard Workerfrom impl.common import CROSVM_ROOT, run_main, cmd, chdir, Triple, SHORTHANDS
14*bb4ee6a4SAndroid Build Coastguard Workerfrom impl.test_config import DO_NOT_BUILD_RISCV64
15*bb4ee6a4SAndroid Build Coastguard Worker
16*bb4ee6a4SAndroid Build Coastguard Workerclippy = cmd("cargo clippy").with_color_flag()
17*bb4ee6a4SAndroid Build Coastguard Worker
18*bb4ee6a4SAndroid Build Coastguard Worker
19*bb4ee6a4SAndroid Build Coastguard Workerdef main(
20*bb4ee6a4SAndroid Build Coastguard Worker    fix: bool = False,
21*bb4ee6a4SAndroid Build Coastguard Worker    json: bool = False,
22*bb4ee6a4SAndroid Build Coastguard Worker    locked: bool = False,
23*bb4ee6a4SAndroid Build Coastguard Worker    platform: Optional[str] = None,
24*bb4ee6a4SAndroid Build Coastguard Worker):
25*bb4ee6a4SAndroid Build Coastguard Worker    try:
26*bb4ee6a4SAndroid Build Coastguard Worker        triple: Triple = Triple.from_shorthand(platform) if platform else Triple.host_default()
27*bb4ee6a4SAndroid Build Coastguard Worker    except Exception as e:
28*bb4ee6a4SAndroid Build Coastguard Worker        raise type(e)(str(e) + f"\nValid platforms are {', '.join(SHORTHANDS.keys())}")
29*bb4ee6a4SAndroid Build Coastguard Worker
30*bb4ee6a4SAndroid Build Coastguard Worker    chdir(CROSVM_ROOT)
31*bb4ee6a4SAndroid Build Coastguard Worker
32*bb4ee6a4SAndroid Build Coastguard Worker    # Note: Clippy checks are configured in .cargo/config.toml
33*bb4ee6a4SAndroid Build Coastguard Worker    args = [
34*bb4ee6a4SAndroid Build Coastguard Worker        "--message-format=json" if json else None,
35*bb4ee6a4SAndroid Build Coastguard Worker        "--locked" if locked else None,
36*bb4ee6a4SAndroid Build Coastguard Worker        "--all-targets",
37*bb4ee6a4SAndroid Build Coastguard Worker        "--",
38*bb4ee6a4SAndroid Build Coastguard Worker        "-Dwarnings",
39*bb4ee6a4SAndroid Build Coastguard Worker    ]
40*bb4ee6a4SAndroid Build Coastguard Worker    if fix:
41*bb4ee6a4SAndroid Build Coastguard Worker        args = [
42*bb4ee6a4SAndroid Build Coastguard Worker            "--fix",
43*bb4ee6a4SAndroid Build Coastguard Worker            "--allow-no-vcs",
44*bb4ee6a4SAndroid Build Coastguard Worker            "--allow-dirty",
45*bb4ee6a4SAndroid Build Coastguard Worker            "--allow-staged",
46*bb4ee6a4SAndroid Build Coastguard Worker            *args,
47*bb4ee6a4SAndroid Build Coastguard Worker        ]
48*bb4ee6a4SAndroid Build Coastguard Worker    # For experimental builds, don't clippy the whole workspace, just what's enabled by features.
49*bb4ee6a4SAndroid Build Coastguard Worker    if triple in (Triple.from_shorthand("riscv64"), Triple.from_shorthand("android")):
50*bb4ee6a4SAndroid Build Coastguard Worker        args = ["--no-default-features", *args]
51*bb4ee6a4SAndroid Build Coastguard Worker    else:
52*bb4ee6a4SAndroid Build Coastguard Worker        args = ["--workspace", *args]
53*bb4ee6a4SAndroid Build Coastguard Worker
54*bb4ee6a4SAndroid Build Coastguard Worker    print("Clippy crosvm workspace")
55*bb4ee6a4SAndroid Build Coastguard Worker    clippy(
56*bb4ee6a4SAndroid Build Coastguard Worker        f"--features={triple.feature_flag}",
57*bb4ee6a4SAndroid Build Coastguard Worker        *args,
58*bb4ee6a4SAndroid Build Coastguard Worker    ).with_envs(triple.get_cargo_env()).fg()
59*bb4ee6a4SAndroid Build Coastguard Worker
60*bb4ee6a4SAndroid Build Coastguard Worker
61*bb4ee6a4SAndroid Build Coastguard Workerif __name__ == "__main__":
62*bb4ee6a4SAndroid Build Coastguard Worker    run_main(main)
63