blob: 3fa2a248c6dd71161fcaf50094727b8c04d812a6 [file] [log] [blame]
#!/bin/bash
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Run `cargo clippy` on all Rust code in crosvm with a mindful set of lints
# suppressed.
set -eo pipefail
USE_CACHE=false
CLIPPY_ARGS=("$@")
# TODO: When we add more options, use a fancier parsing mechanism such as
# getopts. Also use the Rust convention of -- separating the arguments for this
# script itself from the ones for clippy.
if (("$#" > 0)) && [[ "$1" == "--use-cache" ]]; then
USE_CACHE=true
CLIPPY_ARGS=("${CLIPPY_ARGS[@]:1}")
fi
# Change into directory of script, which is crosvm/bin.
cd "$(dirname "${BASH_SOURCE[0]}")"
# Jump up to root directory of crosvm repo.
cd ..
SUPPRESS=(
# TODO(crbug/908640): To be resolved.
collapsible_if
comparison_chain
missing_safety_doc
wrong_self_convention
# To be fixed in external libraries
upper_case_acronyms
from_over_into
# False positives affecting WlVfd @ `devices/src/virtio/wl.rs`.
# Bug: https://github.com/rust-lang/rust-clippy/issues/6312
field_reassign_with_default
# We don't care about these lints. Okay to remain suppressed globally.
cast_lossless
cognitive_complexity
enum_variant_names
identity_op
len_without_is_empty
len_zero
match_bool
match_wild_err_arm
module_inception
needless_bool
new_without_default
or_fun_call
should_implement_trait
single_char_pattern
too_many_arguments
trivially_copy_pass_by_ref
type_complexity
unreadable_literal
useless_let_if_seq
useless_transmute
new-ret-no-self
)
FEATURES=(
default
direct
audio
gpu
plugin
tpm
usb
video-decoder
video-encoder
wl-dmabuf
x
virgl_renderer_next
composite-disk
virgl_renderer
gfxstream
gdb
)
printf -v FEATURES_LIST '%s,' "${FEATURES[@]}"
# Needed or else clippy won't re-run on code that has already compiled.
if [[ "${USE_CACHE}" == false ]]; then
cargo clean
fi
# Need to set pass --sysroot for cargo-clippy manually.
# cf. https://github.com/rust-lang/rust-clippy/issues/3523
RUST_SYSROOT=$(rustc --print sysroot)
RUSTFLAGS="${RUSTFLAGS:-}"
export RUSTFLAGS="$RUSTFLAGS --sysroot=$RUST_SYSROOT"
cargo clippy --features ${FEATURES_LIST} --all-targets -- \
${SUPPRESS[@]/#/-Aclippy::} "${CLIPPY_ARGS[@]}" -D warnings