| #!/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 |