#!/bin/sh -xe

cargo clippy --release --all-features -- \
`# Forbid: Clippy Groups` \
--forbid clippy::correctness \
--forbid clippy::perf \
--forbid clippy::style \
\
`# Deny: Clippy Groups` \
--deny clippy::complexity \
--deny clippy::nursery \
--deny clippy::pedantic \
--deny clippy::restriction \
--deny clippy::suspicious \
\
`# Allow: Clippy Lints` \
--allow clippy::blanket-clippy-restriction-lints \
--allow clippy::implicit-return \
--allow clippy::integer-division-remainder-used \
--allow clippy::missing-inline-in-public-items \
--allow clippy::missing-trait-methods \
--allow clippy::pub_with_shorthand \
--allow clippy::question-mark-used \
--allow clippy::redundant-pub-crate \
--allow clippy::ref_patterns \
--allow clippy::self-named-module-files \
--allow clippy::semicolon-outside-block \
--allow clippy::separated-literal-suffix \
--allow clippy::unreachable \
--allow clippy::use-self `# unreachable!() triggers this` \
\
`# Forbid: RustC Groups` \
--forbid future-incompatible \
--forbid nonstandard-style \
--forbid rust-2018-compatibility \
--forbid rust-2018-idioms \
--forbid rustdoc::all \
\
`# Forbid: RustC Lints` \
--forbid deprecated-in-future \
--forbid macro-use-extern-crate \
--forbid meta-variable-misuse \
--forbid missing-copy-implementations \
--forbid missing-crate-level-docs \
--forbid missing-debug-implementations \
--forbid non-ascii-idents \
--forbid single-use-lifetimes \
--forbid trivial-casts \
--forbid trivial-numeric-casts \
--forbid unreachable-pub \
--forbid unsafe-code \
--forbid unstable-features \
--forbid unused-import-braces \
--forbid unused-lifetimes \
--forbid variant-size-differences \
--forbid asm-sub-register \
--forbid bindings-with-variant-name \
--forbid clashing-extern-declarations \
--forbid confusable-idents \
--forbid const-item-mutation \
--forbid deprecated \
--forbid drop-bounds \
--forbid exported-private-dependencies \
--forbid function-item-references \
--forbid improper-ctypes \
--forbid improper-ctypes-definitions \
--forbid incomplete-features \
--forbid inline-no-sanitize \
--forbid invalid-value \
--forbid irrefutable-let-patterns \
--forbid missing-docs \
--forbid mixed-script-confusables \
--forbid non-shorthand-field-patterns \
--forbid no-mangle-generic-items \
--forbid renamed-and-removed-lints \
--forbid stable-features \
--forbid temporary-cstring-as-ptr \
--forbid trivial-bounds \
--forbid type-alias-bounds \
--forbid uncommon-codepoints \
--forbid unconditional-recursion \
--forbid unknown-lints \
--forbid unnameable-test-items \
--forbid unused-crate-dependencies \
--forbid unused-comparisons \
--forbid unused-crate-dependencies \
--forbid unused-results \
--forbid warnings \
--forbid while-true \
--forbid arithmetic-overflow \
--forbid incomplete-include \
--forbid mutable-transmutes \
--forbid no-mangle-const-items \
--forbid overflowing-literals \
--forbid unconditional-panic \
--forbid unknown-crate-types \
--forbid useless-deprecated \
\
`# Deny: RustC Lints` \
--deny box-pointers \
--deny unreachable-code \
--deny unused \
\
`# Allow: RustC Lints` \
--allow unused-qualifications

