You've already forked lint-policy
Initial commit
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
allow-expect-in-tests = true
|
||||||
|
check-private-items = true
|
||||||
|
|
||||||
|
allowed-duplicate-crates = []
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
*
|
||||||
|
!**/
|
||||||
|
|
||||||
|
!.zed/settings.json
|
||||||
|
!.gitignore
|
||||||
|
|
||||||
|
!/CONTRIBUTING.md
|
||||||
|
!/LICENSE.md
|
||||||
|
!/README.md
|
||||||
|
|
||||||
|
!/.clippy.toml
|
||||||
|
!/.rustfmt.toml
|
||||||
|
!/.tombi.toml
|
||||||
|
!/Cargo.toml
|
||||||
|
!/Cargo.lock
|
||||||
|
!/justfile
|
||||||
|
!/rust-toolchain.toml
|
||||||
|
|
||||||
|
!/crates/**/*.rs
|
||||||
|
!/crates/**/Cargo.toml
|
||||||
|
!/crates/**/README.md
|
||||||
|
|
||||||
|
!/lints/*.toml
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
hard_tabs = true
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
[format.rules]
|
||||||
|
indent-style = "tab"
|
||||||
|
indent-width = 4
|
||||||
|
line-width = 120
|
||||||
|
|
||||||
|
# Disable TOML 1.1 features from tombi as long as we support rust <1.94
|
||||||
|
[[schemas]]
|
||||||
|
toml-version = "v1.0.0"
|
||||||
|
path = "tombi://www.schemastore.org/cargo.json"
|
||||||
|
include = ["Cargo.toml"]
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"lsp": {
|
||||||
|
"rust-analyzer": {
|
||||||
|
"initialization_options": {
|
||||||
|
"imports": {
|
||||||
|
"granularity": { "enforce": true, "group": "module" },
|
||||||
|
"group": { "enable": true },
|
||||||
|
"merge": { "glob": false },
|
||||||
|
"preferNoStd": true,
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"extraEnv": {
|
||||||
|
"RUSTUP_TOOLCHAIN": "stable",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
How to Contribute
|
||||||
|
=================
|
||||||
|
|
||||||
|
We'd love to accept your patches and contributions to this project.
|
||||||
|
We just need you to follow the Contributor License Agreement outlined
|
||||||
|
in the latest v0.0.x of https://git.skrundz.dev/skrunix/license
|
||||||
|
(mirrored to https://github.com/skrunix/license)
|
||||||
Generated
+640
@@ -0,0 +1,640 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstream"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
|
||||||
|
dependencies = [
|
||||||
|
"anstyle",
|
||||||
|
"anstyle-parse",
|
||||||
|
"anstyle-query",
|
||||||
|
"anstyle-wincon",
|
||||||
|
"colorchoice",
|
||||||
|
"is_terminal_polyfill",
|
||||||
|
"utf8parse",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle"
|
||||||
|
version = "1.0.13"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-parse"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
|
||||||
|
dependencies = [
|
||||||
|
"utf8parse",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-query"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-wincon"
|
||||||
|
version = "3.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "abbf7eaf69f3b46121caf74645dd5d3078b4b205a2513930da0033156682cd28"
|
||||||
|
dependencies = [
|
||||||
|
"anstyle",
|
||||||
|
"windows-sys 0.59.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anyhow"
|
||||||
|
version = "1.0.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "830802095da0f959ac37cc1765a30abc768d71f4c04c3d069dc8a0f0b40fe1e0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bitflags"
|
||||||
|
version = "1.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap"
|
||||||
|
version = "4.5.61"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "52fa72306bb30daf11bc97773431628e5b4916e97aaa74b7d3f625d4d495da02"
|
||||||
|
dependencies = [
|
||||||
|
"clap_builder",
|
||||||
|
"clap_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_builder"
|
||||||
|
version = "4.5.61"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2071365c5c56eae7d77414029dde2f4f4ba151cf68d5a3261c9a40de428ace93"
|
||||||
|
dependencies = [
|
||||||
|
"anstream",
|
||||||
|
"anstyle",
|
||||||
|
"clap_lex",
|
||||||
|
"strsim",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_derive"
|
||||||
|
version = "4.5.61"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dec5be1eea072311774b7b84ded287adbd9f293f9d23456817605c6042f4f5e0"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_lex"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colorchoice"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "either"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5845bf77d497f79416df39462df26d4a8b71dd6440246848ee63709476dbb9a6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "errno"
|
||||||
|
version = "0.2.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
|
||||||
|
dependencies = [
|
||||||
|
"errno-dragonfly",
|
||||||
|
"libc",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "errno-dragonfly"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067"
|
||||||
|
dependencies = [
|
||||||
|
"gcc",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gcc"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0e33f45ff9bef4a33df0e34df4d68ee016762d11f24e8d536e5e294096cc2b96"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heck"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hermit-abi"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1ab7905ea95c6d9af62940f9d7dd9596d54c334ae2c15300c482051292d5637f"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "io-lifetimes"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a7d367024b3f3414d8e01f437f704f41a9f64ab36f9067fa73e526ad4c763c87"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"windows-sys 0.42.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "is-terminal"
|
||||||
|
version = "0.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
|
||||||
|
dependencies = [
|
||||||
|
"hermit-abi",
|
||||||
|
"io-lifetimes",
|
||||||
|
"rustix",
|
||||||
|
"windows-sys 0.42.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "is_terminal_polyfill"
|
||||||
|
version = "1.48.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d4fd87ae6e70e93bccb31290c60bdeea8ac1dca5571f71502d996f49213a8e92"
|
||||||
|
dependencies = [
|
||||||
|
"is-terminal",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.15.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.133"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lint-policy"
|
||||||
|
version = "0.0.1"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"strum",
|
||||||
|
"toml",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lint-policy-cli"
|
||||||
|
version = "0.0.1"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"clap",
|
||||||
|
"itertools",
|
||||||
|
"lint-policy",
|
||||||
|
"serde",
|
||||||
|
"strum",
|
||||||
|
"thiserror",
|
||||||
|
"toml",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linux-raw-sys"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bb68f22743a3fb35785f1e7f844ca5a3de2dde5bd0c0ef5b372065814699b121"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "private-crate"
|
||||||
|
version = "0.0.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.106"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustix"
|
||||||
|
version = "0.36.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cb93e85278e08bb5788653183213d3a60fc242b10cb9be96586f5a73dcb67c23"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"errno",
|
||||||
|
"io-lifetimes",
|
||||||
|
"libc",
|
||||||
|
"linux-raw-sys",
|
||||||
|
"windows-sys 0.42.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.225"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_core"
|
||||||
|
version = "1.0.225"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.225"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_spanned"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strsim"
|
||||||
|
version = "0.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strum"
|
||||||
|
version = "0.28.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd"
|
||||||
|
dependencies = [
|
||||||
|
"strum_macros",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strum_macros"
|
||||||
|
version = "0.28.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "2.0.117"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "15291287e9bff1bc6f9ff3409ed9af665bec7a5fc8ac079ea96be07bca0e2668"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "22efd00f33f93fa62848a7cab956c3d38c8d43095efda1decfc2b3a5dc0b8972"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml"
|
||||||
|
version = "1.0.7+spec-1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dd28d57d8a6f6e458bc0b8784f8fdcc4b99a437936056fa122cb234f18656a96"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
"serde_spanned",
|
||||||
|
"toml_datetime",
|
||||||
|
"toml_parser",
|
||||||
|
"toml_writer",
|
||||||
|
"winnow",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml_datetime"
|
||||||
|
version = "1.0.1+spec-1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9b320e741db58cac564e26c607d3cc1fdc4a88fd36c879568c07856ed83ff3e9"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml_parser"
|
||||||
|
version = "1.0.10+spec-1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7df25b4befd31c4816df190124375d5a20c6b6921e2cad937316de3fccd63420"
|
||||||
|
dependencies = [
|
||||||
|
"winnow",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml_writer"
|
||||||
|
version = "1.0.7+spec-1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f17aaa1c6e3dc22b1da4b6bba97d066e354c7945cac2f7852d4e4e7ca7a6b56d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "utf8parse"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b3ad91d846a4a5342c1fb7008d26124ee6cf94a3953751618577295373b32117"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-i686-pc-windows-gnu",
|
||||||
|
"winapi-x86_64-pc-windows-gnu",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-i686-pc-windows-gnu"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a16a8e2ebfc883e2b1771c6482b1fb3c6831eab289ba391619a2d93a7356220f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ca29cb03c8ceaf20f8224a18a530938305e9872b1478ea24ff44b4f503a1d1d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_gnullvm 0.42.0",
|
||||||
|
"windows_aarch64_msvc 0.42.0",
|
||||||
|
"windows_i686_gnu 0.42.0",
|
||||||
|
"windows_i686_msvc 0.42.0",
|
||||||
|
"windows_x86_64_gnu 0.42.0",
|
||||||
|
"windows_x86_64_gnullvm 0.42.0",
|
||||||
|
"windows_x86_64_msvc 0.42.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.59.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-targets"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_gnullvm 0.48.0",
|
||||||
|
"windows_aarch64_msvc 0.48.0",
|
||||||
|
"windows_i686_gnu 0.48.0",
|
||||||
|
"windows_i686_msvc 0.48.0",
|
||||||
|
"windows_x86_64_gnu 0.48.0",
|
||||||
|
"windows_x86_64_gnullvm 0.48.0",
|
||||||
|
"windows_x86_64_msvc 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-targets"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_gnullvm 0.52.6",
|
||||||
|
"windows_aarch64_msvc 0.52.6",
|
||||||
|
"windows_i686_gnu 0.52.6",
|
||||||
|
"windows_i686_gnullvm",
|
||||||
|
"windows_i686_msvc 0.52.6",
|
||||||
|
"windows_x86_64_gnu 0.52.6",
|
||||||
|
"windows_x86_64_gnullvm 0.52.6",
|
||||||
|
"windows_x86_64_msvc 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_gnullvm"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_gnullvm"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winnow"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8"
|
||||||
+541
@@ -0,0 +1,541 @@
|
|||||||
|
[workspace]
|
||||||
|
resolver = "3"
|
||||||
|
members = ["crates/*"]
|
||||||
|
|
||||||
|
[workspace.package]
|
||||||
|
edition = "2024"
|
||||||
|
rust-version = "1.85"
|
||||||
|
license-file = "LICENSE.md"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[workspace.dependencies]
|
||||||
|
lint-policy = { path = "crates/lint-policy", version = "=0.0.1", default-features = false }
|
||||||
|
|
||||||
|
anyhow = { version = "^1.0.14", default-features = false }
|
||||||
|
clap = { version = "^4.5.61", default-features = false }
|
||||||
|
itertools = { version = "^0.15.0", default-features = false }
|
||||||
|
serde = { version = "^1.0.225", default-features = false }
|
||||||
|
strum = { version = "^0.28.0", default-features = false }
|
||||||
|
thiserror = { version = "^2.0.0", default-features = false }
|
||||||
|
toml = { version = "^1.0.7", default-features = false }
|
||||||
|
|
||||||
|
[workspace.lints.clippy]
|
||||||
|
cargo = { level = "warn", priority = -1 }
|
||||||
|
complexity = { level = "warn", priority = -1 }
|
||||||
|
correctness = { level = "deny", priority = -1 }
|
||||||
|
perf = { level = "warn", priority = -1 }
|
||||||
|
style = { level = "warn", priority = -1 }
|
||||||
|
suspicious = { level = "warn", priority = -1 }
|
||||||
|
|
||||||
|
absolute-paths = "allow"
|
||||||
|
alloc-instead-of-core = "warn"
|
||||||
|
allow-attributes = "warn"
|
||||||
|
allow-attributes-without-reason = "deny"
|
||||||
|
arbitrary-source-item-ordering = "allow"
|
||||||
|
arithmetic-side-effects = "deny"
|
||||||
|
as-conversions = "deny"
|
||||||
|
as-pointer-underscore = "deny"
|
||||||
|
as-ptr-cast-mut = "deny"
|
||||||
|
as-underscore = "deny"
|
||||||
|
assertions-on-result-states = "warn"
|
||||||
|
assigning-clones = "warn"
|
||||||
|
big-endian-bytes = "allow"
|
||||||
|
bool-to-int-with-if = "warn"
|
||||||
|
borrow-as-ptr = "warn"
|
||||||
|
branches-sharing-code = "warn"
|
||||||
|
case-sensitive-file-extension-comparisons = "warn"
|
||||||
|
cast-lossless = "deny"
|
||||||
|
cast-possible-truncation = "deny"
|
||||||
|
cast-possible-wrap = "deny"
|
||||||
|
cast-precision-loss = "deny"
|
||||||
|
cast-ptr-alignment = "deny"
|
||||||
|
cast-sign-loss = "deny"
|
||||||
|
cfg-not-test = "deny"
|
||||||
|
checked-conversions = "deny"
|
||||||
|
clear-with-drain = "warn"
|
||||||
|
clone-on-ref-ptr = "warn"
|
||||||
|
cloned-instead-of-copied = "warn"
|
||||||
|
coerce-container-to-any = "warn"
|
||||||
|
cognitive-complexity = "allow"
|
||||||
|
collapsible-else-if = "warn"
|
||||||
|
collection-is-never-read = "warn"
|
||||||
|
comparison-chain = "warn"
|
||||||
|
copy-iterator = "warn"
|
||||||
|
create-dir = "warn"
|
||||||
|
dbg-macro = "warn"
|
||||||
|
debug-assert-with-mut-call = "deny"
|
||||||
|
decimal-bitwise-operands = "warn"
|
||||||
|
decimal-literal-representation = "warn"
|
||||||
|
default-numeric-fallback = "warn"
|
||||||
|
default-trait-access = "warn"
|
||||||
|
default-union-representation = "allow"
|
||||||
|
deref-by-slicing = "warn"
|
||||||
|
derive-partial-eq-without-eq = "warn"
|
||||||
|
disallowed-script-idents = "deny"
|
||||||
|
doc-broken-link = "warn"
|
||||||
|
doc-comment-double-space-linebreaks = "warn"
|
||||||
|
doc-include-without-cfg = "warn"
|
||||||
|
doc-link-code = "warn"
|
||||||
|
doc-link-with-quotes = "warn"
|
||||||
|
doc-markdown = "warn"
|
||||||
|
doc-paragraphs-missing-punctuation = "warn"
|
||||||
|
duration-suboptimal-units = "warn"
|
||||||
|
elidable-lifetime-names = "warn"
|
||||||
|
else-if-without-else = "warn"
|
||||||
|
empty-drop = "warn"
|
||||||
|
empty-enum-variants-with-brackets = "warn"
|
||||||
|
empty-enums = "warn"
|
||||||
|
empty-structs-with-brackets = "warn"
|
||||||
|
enum-glob-use = "warn"
|
||||||
|
equatable-if-let = "warn"
|
||||||
|
error-impl-error = "warn"
|
||||||
|
exhaustive-enums = "warn"
|
||||||
|
exhaustive-structs = "warn"
|
||||||
|
exit = "warn"
|
||||||
|
expect-used = "warn"
|
||||||
|
expl-impl-clone-on-copy = "warn"
|
||||||
|
explicit-deref-methods = "warn"
|
||||||
|
explicit-into-iter-loop = "warn"
|
||||||
|
explicit-iter-loop = "warn"
|
||||||
|
fallible-impl-from = "warn"
|
||||||
|
field-scoped-visibility-modifiers = "warn"
|
||||||
|
filetype-is-file = "warn"
|
||||||
|
filter-map-next = "warn"
|
||||||
|
flat-map-option = "warn"
|
||||||
|
float-arithmetic = "warn"
|
||||||
|
float-cmp = "warn"
|
||||||
|
float-cmp-const = "warn"
|
||||||
|
fn-params-excessive-bools = "allow"
|
||||||
|
fn-to-numeric-cast-any = "warn"
|
||||||
|
format-collect = "warn"
|
||||||
|
format-push-string = "warn"
|
||||||
|
from-iter-instead-of-collect = "warn"
|
||||||
|
future-not-send = "warn"
|
||||||
|
get-unwrap = "warn"
|
||||||
|
host-endian-bytes = "allow"
|
||||||
|
if-not-else = "warn"
|
||||||
|
if-then-some-else-none = "warn"
|
||||||
|
ignore-without-reason = "warn"
|
||||||
|
ignored-unit-patterns = "warn"
|
||||||
|
impl-trait-in-params = "warn"
|
||||||
|
implicit-clone = "warn"
|
||||||
|
implicit-hasher = "warn"
|
||||||
|
implicit-return = "allow"
|
||||||
|
imprecise-flops = "warn"
|
||||||
|
inconsistent-struct-constructor = "warn"
|
||||||
|
index-refutable-slice = "deny"
|
||||||
|
indexing-slicing = "deny"
|
||||||
|
inefficient-to-string = "warn"
|
||||||
|
infinite-loop = "warn"
|
||||||
|
inline-always = "warn"
|
||||||
|
inline-asm-x86-att-syntax = "warn"
|
||||||
|
inline-asm-x86-intel-syntax = "warn"
|
||||||
|
inline-modules = "allow"
|
||||||
|
inline-trait-bounds = "allow"
|
||||||
|
integer-division = "deny"
|
||||||
|
integer-division-remainder-used = "deny"
|
||||||
|
into-iter-without-iter = "warn"
|
||||||
|
invalid-upcast-comparisons = "warn"
|
||||||
|
ip-constant = "warn"
|
||||||
|
items-after-statements = "warn"
|
||||||
|
iter-filter-is-ok = "warn"
|
||||||
|
iter-filter-is-some = "warn"
|
||||||
|
iter-not-returning-iterator = "warn"
|
||||||
|
iter-on-empty-collections = "warn"
|
||||||
|
iter-on-single-items = "warn"
|
||||||
|
iter-over-hash-type = "warn"
|
||||||
|
iter-with-drain = "warn"
|
||||||
|
iter-without-into-iter = "warn"
|
||||||
|
large-digit-groups = "warn"
|
||||||
|
large-futures = "warn"
|
||||||
|
large-include-file = "warn"
|
||||||
|
large-stack-arrays = "warn"
|
||||||
|
large-stack-frames = "warn"
|
||||||
|
large-types-passed-by-value = "warn"
|
||||||
|
let-underscore-must-use = "warn"
|
||||||
|
let-underscore-untyped = "warn"
|
||||||
|
linkedlist = "warn"
|
||||||
|
literal-string-with-formatting-args = "warn"
|
||||||
|
little-endian-bytes = "allow"
|
||||||
|
lossy-float-literal = "warn"
|
||||||
|
macro-use-imports = "warn"
|
||||||
|
manual-assert = "warn"
|
||||||
|
manual-assert-eq = "warn"
|
||||||
|
manual-ilog2 = "warn"
|
||||||
|
manual-instant-elapsed = "warn"
|
||||||
|
manual-is-power-of-two = "warn"
|
||||||
|
manual-is-variant-and = "warn"
|
||||||
|
manual-let-else = "warn"
|
||||||
|
manual-midpoint = "warn"
|
||||||
|
manual-string-new = "warn"
|
||||||
|
many-single-char-names = "warn"
|
||||||
|
map-err-ignore = "warn"
|
||||||
|
map-unwrap-or = "warn"
|
||||||
|
map-with-unused-argument-over-ranges = "warn"
|
||||||
|
match-bool = "warn"
|
||||||
|
match-same-arms = "warn"
|
||||||
|
match-wild-err-arm = "warn"
|
||||||
|
match-wildcard-for-single-variants = "warn"
|
||||||
|
maybe-infinite-iter = "warn"
|
||||||
|
mem-forget = "warn"
|
||||||
|
min-ident-chars = "allow"
|
||||||
|
mismatching-type-param-order = "warn"
|
||||||
|
missing-assert-message = "warn"
|
||||||
|
missing-asserts-for-indexing = "warn"
|
||||||
|
missing-const-for-fn = "warn"
|
||||||
|
missing-docs-in-private-items = "warn"
|
||||||
|
missing-errors-doc = "warn"
|
||||||
|
missing-fields-in-debug = "warn"
|
||||||
|
missing-inline-in-public-items = "warn"
|
||||||
|
missing-panics-doc = "warn"
|
||||||
|
missing-trait-methods = "warn"
|
||||||
|
mixed-read-write-in-expression = "warn"
|
||||||
|
mod-module-files = "allow"
|
||||||
|
module-name-repetitions = "warn"
|
||||||
|
modulo-arithmetic = "warn"
|
||||||
|
multiple-inherent-impl = "warn"
|
||||||
|
multiple-unsafe-ops-per-block = "warn"
|
||||||
|
must-use-candidate = "warn"
|
||||||
|
mut-mut = "warn"
|
||||||
|
mutex-atomic = "warn"
|
||||||
|
mutex-integer = "warn"
|
||||||
|
naive-bytecount = "warn"
|
||||||
|
needless-bitwise-bool = "warn"
|
||||||
|
needless-collect = "warn"
|
||||||
|
needless-continue = "warn"
|
||||||
|
needless-for-each = "warn"
|
||||||
|
needless-pass-by-ref-mut = "warn"
|
||||||
|
needless-pass-by-value = "warn"
|
||||||
|
needless-raw-string-hashes = "warn"
|
||||||
|
needless-raw-strings = "warn"
|
||||||
|
needless-type-cast = "warn"
|
||||||
|
no-effect-underscore-binding = "warn"
|
||||||
|
no-mangle-with-rust-abi = "warn"
|
||||||
|
non-ascii-literal = "allow"
|
||||||
|
non-send-fields-in-send-ty = "warn"
|
||||||
|
non-std-lazy-statics = "warn"
|
||||||
|
non-zero-suggestions = "warn"
|
||||||
|
nonminimal-bool = "warn"
|
||||||
|
nonstandard-macro-braces = "warn"
|
||||||
|
option-as-ref-cloned = "warn"
|
||||||
|
option-if-let-else = "warn"
|
||||||
|
option-option = "warn"
|
||||||
|
or-fun-call = "warn"
|
||||||
|
overly-complex-bool-expr = "allow"
|
||||||
|
panic = "warn"
|
||||||
|
panic-in-result-fn = "warn"
|
||||||
|
partial-pub-fields = "warn"
|
||||||
|
path-buf-push-overwrite = "warn"
|
||||||
|
pathbuf-init-then-push = "warn"
|
||||||
|
pattern-type-mismatch = "allow"
|
||||||
|
pointer-format = "warn"
|
||||||
|
precedence-bits = "warn"
|
||||||
|
print-stderr = "warn"
|
||||||
|
print-stdout = "warn"
|
||||||
|
ptr-as-ptr = "warn"
|
||||||
|
ptr-cast-constness = "warn"
|
||||||
|
ptr-offset-by-literal = "warn"
|
||||||
|
pub-underscore-fields = "warn"
|
||||||
|
pub-use = "allow"
|
||||||
|
pub-with-shorthand = "allow"
|
||||||
|
pub-without-shorthand = "warn"
|
||||||
|
question-mark-used = "allow"
|
||||||
|
range-minus-one = "warn"
|
||||||
|
range-plus-one = "warn"
|
||||||
|
rc-buffer = "warn"
|
||||||
|
rc-mutex = "warn"
|
||||||
|
read-zero-byte-vec = "warn"
|
||||||
|
redundant-clone = "warn"
|
||||||
|
redundant-closure-for-method-calls = "warn"
|
||||||
|
redundant-else = "warn"
|
||||||
|
redundant-pub-crate = "allow"
|
||||||
|
redundant-test-prefix = "warn"
|
||||||
|
redundant-type-annotations = "warn"
|
||||||
|
ref-as-ptr = "warn"
|
||||||
|
ref-binding-to-reference = "warn"
|
||||||
|
ref-option = "warn"
|
||||||
|
ref-option-ref = "warn"
|
||||||
|
ref-patterns = "warn"
|
||||||
|
renamed-function-params = "warn"
|
||||||
|
rest-pat-in-fully-bound-structs = "warn"
|
||||||
|
return-and-then = "warn"
|
||||||
|
return-self-not-must-use = "warn"
|
||||||
|
same-functions-in-if-condition = "warn"
|
||||||
|
same-length-and-capacity = "warn"
|
||||||
|
same-name-method = "warn"
|
||||||
|
search-is-some = "warn"
|
||||||
|
self-named-module-files = "warn"
|
||||||
|
self-only-used-in-recursion = "warn"
|
||||||
|
semicolon-if-nothing-returned = "warn"
|
||||||
|
semicolon-inside-block = "warn"
|
||||||
|
semicolon-outside-block = "allow"
|
||||||
|
separated-literal-suffix = "allow"
|
||||||
|
set-contains-or-insert = "warn"
|
||||||
|
shadow-reuse = "allow"
|
||||||
|
shadow-same = "allow"
|
||||||
|
shadow-unrelated = "allow"
|
||||||
|
should-panic-without-expect = "warn"
|
||||||
|
significant-drop-in-scrutinee = "warn"
|
||||||
|
significant-drop-tightening = "warn"
|
||||||
|
similar-names = "allow"
|
||||||
|
single-call-fn = "allow"
|
||||||
|
single-char-lifetime-names = "allow"
|
||||||
|
single-char-pattern = "allow"
|
||||||
|
single-match-else = "warn"
|
||||||
|
single-option-map = "warn"
|
||||||
|
stable-sort-primitive = "warn"
|
||||||
|
std-instead-of-alloc = "warn"
|
||||||
|
std-instead-of-core = "warn"
|
||||||
|
str-split-at-newline = "warn"
|
||||||
|
str-to-string = "warn"
|
||||||
|
string-add = "warn"
|
||||||
|
string-add-assign = "warn"
|
||||||
|
string-lit-as-bytes = "warn"
|
||||||
|
string-lit-chars-any = "warn"
|
||||||
|
string-slice = "warn"
|
||||||
|
struct-excessive-bools = "allow"
|
||||||
|
struct-field-names = "warn"
|
||||||
|
suboptimal-flops = "warn"
|
||||||
|
suspicious-operation-groupings = "warn"
|
||||||
|
suspicious-xor-used-as-pow = "warn"
|
||||||
|
tests-outside-test-module = "warn"
|
||||||
|
todo = "warn"
|
||||||
|
too-long-first-doc-paragraph = "allow"
|
||||||
|
too-many-lines = "allow"
|
||||||
|
trailing-empty-array = "warn"
|
||||||
|
trait-duplication-in-bounds = "warn"
|
||||||
|
transmute-ptr-to-ptr = "warn"
|
||||||
|
transmute-undefined-repr = "warn"
|
||||||
|
trivial-regex = "warn"
|
||||||
|
trivially-copy-pass-by-ref = "warn"
|
||||||
|
try-err = "warn"
|
||||||
|
tuple-array-conversions = "warn"
|
||||||
|
type-repetition-in-bounds = "warn"
|
||||||
|
unchecked-time-subtraction = "deny"
|
||||||
|
undocumented-unsafe-blocks = "deny"
|
||||||
|
unicode-not-nfc = "warn"
|
||||||
|
unimplemented = "warn"
|
||||||
|
uninhabited-references = "warn"
|
||||||
|
uninlined-format-args = "warn"
|
||||||
|
unnecessary-box-returns = "warn"
|
||||||
|
unnecessary-debug-formatting = "warn"
|
||||||
|
unnecessary-join = "warn"
|
||||||
|
unnecessary-literal-bound = "warn"
|
||||||
|
unnecessary-safety-comment = "warn"
|
||||||
|
unnecessary-safety-doc = "warn"
|
||||||
|
unnecessary-self-imports = "warn"
|
||||||
|
unnecessary-semicolon = "warn"
|
||||||
|
unnecessary-struct-initialization = "warn"
|
||||||
|
unnecessary-trailing-comma = "warn"
|
||||||
|
unnecessary-wraps = "warn"
|
||||||
|
unneeded-field-pattern = "warn"
|
||||||
|
unnested-or-patterns = "warn"
|
||||||
|
unreachable = "warn"
|
||||||
|
unreadable-literal = "warn"
|
||||||
|
unsafe-derive-deserialize = "warn"
|
||||||
|
unseparated-literal-suffix = "warn"
|
||||||
|
unused-async = "warn"
|
||||||
|
unused-peekable = "warn"
|
||||||
|
unused-result-ok = "warn"
|
||||||
|
unused-rounding = "warn"
|
||||||
|
unused-self = "warn"
|
||||||
|
unused-trait-names = "warn"
|
||||||
|
unwrap-in-result = "warn"
|
||||||
|
unwrap-used = "warn"
|
||||||
|
use-debug = "warn"
|
||||||
|
use-self = "warn"
|
||||||
|
used-underscore-binding = "warn"
|
||||||
|
used-underscore-items = "warn"
|
||||||
|
useless-let-if-seq = "warn"
|
||||||
|
verbose-bit-mask = "warn"
|
||||||
|
verbose-file-reads = "warn"
|
||||||
|
volatile-composites = "warn"
|
||||||
|
while-float = "warn"
|
||||||
|
wildcard-enum-match-arm = "warn"
|
||||||
|
wildcard-imports = "warn"
|
||||||
|
zero-sized-map-values = "warn"
|
||||||
|
|
||||||
|
[workspace.lints.rust]
|
||||||
|
deprecated-safe = "forbid"
|
||||||
|
future-incompatible = "deny"
|
||||||
|
keyword-idents = "deny"
|
||||||
|
let-underscore = "warn"
|
||||||
|
nonstandard-style = "warn"
|
||||||
|
refining-impl-trait = "warn"
|
||||||
|
rust-2018-compatibility = "deny"
|
||||||
|
rust-2018-idioms = "deny"
|
||||||
|
rust-2021-compatibility = "deny"
|
||||||
|
rust-2024-compatibility = "deny"
|
||||||
|
unknown-or-malformed-diagnostic-attributes = "deny"
|
||||||
|
unused = { level = "warn", priority = -1 }
|
||||||
|
|
||||||
|
ambiguous-glob-reexports = "warn"
|
||||||
|
ambiguous-negative-literals = "deny"
|
||||||
|
ambiguous-wide-pointer-comparisons = "warn"
|
||||||
|
arithmetic-overflow = "deny"
|
||||||
|
asm-sub-register = "warn"
|
||||||
|
async-fn-in-trait = "warn"
|
||||||
|
bad-asm-style = "warn"
|
||||||
|
binary-asm-labels = "deny"
|
||||||
|
bindings-with-variant-name = "deny"
|
||||||
|
break-with-label-and-loop = "warn"
|
||||||
|
clashing-extern-declarations = "warn"
|
||||||
|
closure-returning-async-block = "warn"
|
||||||
|
confusable-idents = "warn"
|
||||||
|
const-item-interior-mutations = "warn"
|
||||||
|
const-item-mutation = "warn"
|
||||||
|
dangerous-implicit-autorefs = "deny"
|
||||||
|
dangling-pointers-from-locals = "warn"
|
||||||
|
dangling-pointers-from-temporaries = "warn"
|
||||||
|
dead-code-pub-in-binary = "warn"
|
||||||
|
deprecated = "warn"
|
||||||
|
deprecated-in-future = "allow"
|
||||||
|
deprecated-where-clause-location = "warn"
|
||||||
|
deref-into-dyn-supertrait = "warn"
|
||||||
|
deref-nullptr = "deny"
|
||||||
|
double-negations = "warn"
|
||||||
|
drop-bounds = "warn"
|
||||||
|
dropping-copy-types = "warn"
|
||||||
|
dropping-references = "warn"
|
||||||
|
duplicate-features = "deny"
|
||||||
|
duplicate-macro-attributes = "warn"
|
||||||
|
dyn-drop = "warn"
|
||||||
|
enum-intrinsics-non-enums = "deny"
|
||||||
|
explicit-builtin-cfgs-in-flags = "deny"
|
||||||
|
exported-private-dependencies = "warn"
|
||||||
|
ffi-unwind-calls = "warn"
|
||||||
|
for-loops-over-fallibles = "warn"
|
||||||
|
forgetting-copy-types = "warn"
|
||||||
|
forgetting-references = "warn"
|
||||||
|
function-casts-as-integer = "warn"
|
||||||
|
function-item-references = "warn"
|
||||||
|
hidden-glob-reexports = "warn"
|
||||||
|
impl-trait-redundant-captures = "warn"
|
||||||
|
improper-ctypes = "warn"
|
||||||
|
improper-ctypes-definitions = "warn"
|
||||||
|
improper-gpu-kernel-arg = "warn"
|
||||||
|
incomplete-features = "warn"
|
||||||
|
incomplete-include = "deny"
|
||||||
|
ineffective-unstable-trait-impl = "deny"
|
||||||
|
inline-no-sanitize = "warn"
|
||||||
|
integer-to-ptr-transmutes = "warn"
|
||||||
|
internal-features = "warn"
|
||||||
|
invalid-atomic-ordering = "deny"
|
||||||
|
invalid-doc-attributes = "warn"
|
||||||
|
invalid-from-utf8 = "warn"
|
||||||
|
invalid-from-utf8-unchecked = "deny"
|
||||||
|
invalid-nan-comparisons = "warn"
|
||||||
|
invalid-null-arguments = "deny"
|
||||||
|
invalid-reference-casting = "deny"
|
||||||
|
invalid-value = "warn"
|
||||||
|
irrefutable-let-patterns = "warn"
|
||||||
|
large-assignments = "warn"
|
||||||
|
linker-info = "allow"
|
||||||
|
linker-messages = "warn"
|
||||||
|
long-running-const-eval = "deny"
|
||||||
|
macro-use-extern-crate = "warn"
|
||||||
|
meta-variable-misuse = "warn"
|
||||||
|
mismatched-lifetime-syntaxes = "warn"
|
||||||
|
missing-abi = "warn"
|
||||||
|
missing-copy-implementations = "warn"
|
||||||
|
missing-debug-implementations = "warn"
|
||||||
|
missing-docs = "warn"
|
||||||
|
missing-gpu-kernel-export-name = "warn"
|
||||||
|
mixed-script-confusables = "warn"
|
||||||
|
mutable-transmutes = "deny"
|
||||||
|
named-arguments-used-positionally = "warn"
|
||||||
|
named-asm-labels = "deny"
|
||||||
|
no-mangle-const-items = "deny"
|
||||||
|
no-mangle-generic-items = "warn"
|
||||||
|
non-ascii-idents = "deny"
|
||||||
|
non-contiguous-range-endpoints = "warn"
|
||||||
|
non-local-definitions = "warn"
|
||||||
|
non-shorthand-field-patterns = "warn"
|
||||||
|
noop-method-call = "warn"
|
||||||
|
opaque-hidden-inferred-bound = "warn"
|
||||||
|
overflowing-literals = "deny"
|
||||||
|
overlapping-range-endpoints = "warn"
|
||||||
|
private-bounds = "warn"
|
||||||
|
private-interfaces = "warn"
|
||||||
|
ptr-to-integer-transmute-in-consts = "warn"
|
||||||
|
redundant-imports = "warn"
|
||||||
|
redundant-lifetimes = "warn"
|
||||||
|
renamed-and-removed-lints = "warn"
|
||||||
|
rtsan-nonblocking-async = "warn"
|
||||||
|
single-use-lifetimes = "warn"
|
||||||
|
special-module-name = "warn"
|
||||||
|
stable-features = "warn"
|
||||||
|
suspicious-double-ref-op = "warn"
|
||||||
|
text-direction-codepoint-in-comment = "deny"
|
||||||
|
text-direction-codepoint-in-literal = "deny"
|
||||||
|
trivial-bounds = "warn"
|
||||||
|
trivial-casts = "warn"
|
||||||
|
trivial-numeric-casts = "warn"
|
||||||
|
type-alias-bounds = "warn"
|
||||||
|
uncommon-codepoints = "warn"
|
||||||
|
unconditional-panic = "deny"
|
||||||
|
unconditional-recursion = "warn"
|
||||||
|
undropped-manually-drops = "deny"
|
||||||
|
unexpected-cfgs = "warn"
|
||||||
|
unfulfilled-lint-expectations = "warn"
|
||||||
|
ungated-async-fn-track-caller = "warn"
|
||||||
|
unit-bindings = "warn"
|
||||||
|
unknown-crate-types = "deny"
|
||||||
|
unknown-lints = "warn"
|
||||||
|
unnameable-test-items = "warn"
|
||||||
|
unnameable-types = "warn"
|
||||||
|
unnecessary-transmutes = "warn"
|
||||||
|
unpredictable-function-pointer-comparisons = "warn"
|
||||||
|
unreachable-cfg-select-predicates = "warn"
|
||||||
|
unreachable-pub = "warn"
|
||||||
|
unsafe-code = "forbid"
|
||||||
|
unstable-features = "forbid"
|
||||||
|
unused-associated-type-bounds = "warn"
|
||||||
|
unused-comparisons = "warn"
|
||||||
|
unused-crate-dependencies = "warn"
|
||||||
|
unused-import-braces = "warn"
|
||||||
|
unused-lifetimes = "warn"
|
||||||
|
unused-qualifications = "warn"
|
||||||
|
unused-results = "warn"
|
||||||
|
useless-deprecated = "deny"
|
||||||
|
useless-ptr-null-checks = "warn"
|
||||||
|
uses-power-alignment = "warn"
|
||||||
|
variant-size-differences = "warn"
|
||||||
|
warnings = "warn"
|
||||||
|
while-true = "warn"
|
||||||
|
|
||||||
|
# unstable lints
|
||||||
|
# default-overrides-default-fields = "deny"
|
||||||
|
# deprecated-llvm-intrinsic = "warn"
|
||||||
|
# fuzzy-provenance-casts = "deny"
|
||||||
|
# lossy-provenance-casts = "deny"
|
||||||
|
# multiple-supertrait-upcastable = "warn"
|
||||||
|
# must-not-suspend = "warn"
|
||||||
|
# non-exhaustive-omitted-patterns = "warn"
|
||||||
|
# resolving-to-items-shadowing-supertrait-items = "warn"
|
||||||
|
# shadowing-supertrait-items = "warn"
|
||||||
|
# tail-call-track-caller = "warn"
|
||||||
|
# test-unstable-lint = "deny"
|
||||||
|
# unqualified-local-imports = "deny"
|
||||||
|
|
||||||
|
[workspace.lints.rustdoc]
|
||||||
|
bare-urls = "warn"
|
||||||
|
broken-intra-doc-links = "warn"
|
||||||
|
invalid-codeblock-attributes = "warn"
|
||||||
|
invalid-html-tags = "warn"
|
||||||
|
invalid-rust-codeblocks = "warn"
|
||||||
|
missing-crate-level-docs = "warn"
|
||||||
|
private-doc-tests = "warn"
|
||||||
|
private-intra-doc-links = "warn"
|
||||||
|
redundant-explicit-links = "warn"
|
||||||
|
unescaped-backticks = "warn"
|
||||||
|
|
||||||
|
# unstable lints
|
||||||
|
# missing-doc-code-examples = "warn"
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
opt-level = 3
|
||||||
|
strip = "debuginfo"
|
||||||
|
overflow-checks = true
|
||||||
|
lto = "fat"
|
||||||
|
codegen-units = 1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
Skrunix Software License
|
||||||
|
========================
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software is
|
||||||
|
outlined in the latest v0.0.x of https://github.com/Skrunix/license
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS"
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Lints
|
||||||
|
|
||||||
|
Repo for dealing with linting rust code.
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
Run the full validation suite before committing:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
just all
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Publish
|
||||||
|
|
||||||
|
- `cargo semver-checks --all-features`
|
||||||
|
- `cargo publish --dry-run -p <crate>`
|
||||||
|
- `cargo publish --dry-run --workspace`
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
[package]
|
||||||
|
name = "lint-policy-cli"
|
||||||
|
version = "0.0.1"
|
||||||
|
description = "Track rust lints"
|
||||||
|
repository = "https://git.skrundz.dev/codegen/lints"
|
||||||
|
keywords = ["cargo", "lint"]
|
||||||
|
categories = ["command-line-utilities"]
|
||||||
|
include = ["/src"]
|
||||||
|
publish = true
|
||||||
|
|
||||||
|
edition.workspace = true
|
||||||
|
rust-version.workspace = true
|
||||||
|
license-file.workspace = true
|
||||||
|
|
||||||
|
[package.metadata.docs.rs]
|
||||||
|
all-features = true
|
||||||
|
rustdoc-args = ["--cfg", "docsrs"]
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
doc = false
|
||||||
|
name = "lint-policy"
|
||||||
|
path = "src/main.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
lint-policy = { workspace = true, features = ["alloc", "serde"] }
|
||||||
|
|
||||||
|
anyhow = { workspace = true, features = ["std"] }
|
||||||
|
clap = { workspace = true, features = ["color", "derive", "help", "std", "suggestions", "usage"] }
|
||||||
|
itertools = { workspace = true }
|
||||||
|
serde = { workspace = true, features = ["alloc", "derive"] }
|
||||||
|
strum = { workspace = true, features = ["derive"] }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
toml = { workspace = true, features = ["display", "parse", "serde"] }
|
||||||
|
|
||||||
|
[lints]
|
||||||
|
workspace = true
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# lint-policy-cli
|
||||||
|
|
||||||
|
[](https://crates.io/crates/lint-policy-cli)
|
||||||
|
|
||||||
|
Generate lints for Cargo.toml
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo install lint-policy-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
`lint-policy` accepts one or two inputs. Each input may be either:
|
||||||
|
|
||||||
|
- a Rust toolchain (for example `+1.85`)
|
||||||
|
- a TOML file
|
||||||
|
|
||||||
|
With one input, it prints the generated lint policy:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
lint-policy +1.85
|
||||||
|
```
|
||||||
|
|
||||||
|
With two inputs, it prints the differences between the two policies:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
lint-policy +1.86 +1.85
|
||||||
|
lint-policy +1.86 ./1.85.toml
|
||||||
|
lint-policy ./1.86.toml +1.85
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, the diff compares both the presence of lints and their configured levels. To compare only the set of lint names, ignoring changes to lint levels, pass `--ignore-level`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
lint-policy --ignore-level +1.86 +1.85
|
||||||
|
```
|
||||||
|
|
||||||
|
When `--ignore-level` is enabled, only added and removed lints are reported. Lints that exist in both inputs but have different levels are treated as unchanged.
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
//! Command line argument parsing.
|
||||||
|
|
||||||
|
use lint_policy::cargo;
|
||||||
|
|
||||||
|
use crate::group::LintGroups;
|
||||||
|
use crate::source::Source;
|
||||||
|
|
||||||
|
/// Command line argument parser struct.
|
||||||
|
#[derive(Debug, clap::Parser)]
|
||||||
|
#[command(version, about, long_about = None)]
|
||||||
|
pub(crate) struct Args {
|
||||||
|
/// New lint source, or only source when generating.
|
||||||
|
#[arg(value_name = "NEW")]
|
||||||
|
new: Source,
|
||||||
|
/// Old lint source when generating a diff.
|
||||||
|
#[arg(value_name = "OLD")]
|
||||||
|
old: Option<Source>,
|
||||||
|
|
||||||
|
/// Only diff new and missing lints.
|
||||||
|
#[arg(long)]
|
||||||
|
ignore_level: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Args {
|
||||||
|
/// Reads the lints and groups of the new source.
|
||||||
|
pub(crate) fn read_new_source(&self) -> (cargo::Lints, LintGroups) {
|
||||||
|
(self.new.read_lints(), self.new.read_groups())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Reads the lints and groups of the old source.
|
||||||
|
pub(crate) fn read_old_source(&self) -> Option<(cargo::Lints, LintGroups)> {
|
||||||
|
self.old.as_ref().map(|s| (s.read_lints(), s.read_groups()))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns true if the level should be ignored while diffing.
|
||||||
|
pub(crate) const fn ignore_level(&self) -> bool {
|
||||||
|
self.ignore_level
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
//! Diffing lint.
|
||||||
|
|
||||||
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
extern crate alloc;
|
||||||
|
use alloc::collections::BTreeSet;
|
||||||
|
|
||||||
|
use lint_policy::cargo::{LintSetting, LintTable};
|
||||||
|
|
||||||
|
use crate::group::GroupTable;
|
||||||
|
|
||||||
|
/// Represents a difference between two lint tables.
|
||||||
|
pub(crate) enum Diff<'a> {
|
||||||
|
/// A lint was added in the new table.
|
||||||
|
Added {
|
||||||
|
/// The name of the lint.
|
||||||
|
name: &'a str,
|
||||||
|
/// The new lint settings.
|
||||||
|
new: &'a LintSetting,
|
||||||
|
},
|
||||||
|
/// A lint was removed from the new table.
|
||||||
|
Removed {
|
||||||
|
/// The name of the lint.
|
||||||
|
name: &'a str,
|
||||||
|
/// The old lint settings.
|
||||||
|
old: &'a LintSetting,
|
||||||
|
},
|
||||||
|
/// A lint's settings were changed in the new table.
|
||||||
|
Modified {
|
||||||
|
/// The name of the lint.
|
||||||
|
name: &'a str,
|
||||||
|
/// The old lint settings.
|
||||||
|
old: &'a LintSetting,
|
||||||
|
/// The new lint settings.
|
||||||
|
new: &'a LintSetting,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Compute the difference between lints tables.
|
||||||
|
pub(crate) fn diff<'a>(
|
||||||
|
old_lints: &'a LintTable,
|
||||||
|
new_lints: &'a LintTable,
|
||||||
|
new_groups: &'a GroupTable,
|
||||||
|
) -> Vec<Diff<'a>> {
|
||||||
|
// Filter groups
|
||||||
|
let mut ignored_old = BTreeSet::new();
|
||||||
|
let mut ignored_new = BTreeSet::new();
|
||||||
|
|
||||||
|
for (group, lints) in new_groups {
|
||||||
|
if old_lints.contains_key(group) {
|
||||||
|
_ = ignored_old.insert(group);
|
||||||
|
_ = ignored_new.insert(group);
|
||||||
|
ignored_new.extend(lints.iter());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diff remaining lints
|
||||||
|
let mut diffs = Vec::new();
|
||||||
|
|
||||||
|
let mut old = old_lints
|
||||||
|
.iter()
|
||||||
|
.filter(|(name, _)| !ignored_old.contains(name))
|
||||||
|
.peekable();
|
||||||
|
let mut new = new_lints
|
||||||
|
.iter()
|
||||||
|
.filter(|(name, _)| !ignored_new.contains(name))
|
||||||
|
.peekable();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
match (old.peek(), new.peek()) {
|
||||||
|
(Some((ok, ov)), Some((nk, nv))) => match ok.cmp(nk) {
|
||||||
|
Ordering::Less => {
|
||||||
|
diffs.push(Diff::Removed { name: ok, old: ov });
|
||||||
|
_ = old.next();
|
||||||
|
}
|
||||||
|
Ordering::Greater => {
|
||||||
|
diffs.push(Diff::Added { name: nk, new: nv });
|
||||||
|
_ = new.next();
|
||||||
|
}
|
||||||
|
Ordering::Equal => {
|
||||||
|
if ov.level != nv.level {
|
||||||
|
diffs.push(Diff::Modified {
|
||||||
|
name: ok,
|
||||||
|
old: ov,
|
||||||
|
new: nv,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_ = old.next();
|
||||||
|
_ = new.next();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(Some((ok, ov)), None) => {
|
||||||
|
diffs.push(Diff::Removed { name: ok, old: ov });
|
||||||
|
_ = old.next();
|
||||||
|
}
|
||||||
|
(None, Some((nk, nv))) => {
|
||||||
|
diffs.push(Diff::Added { name: nk, new: nv });
|
||||||
|
_ = new.next();
|
||||||
|
}
|
||||||
|
(None, None) => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diffs
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
//! Lint groups.
|
||||||
|
|
||||||
|
extern crate alloc;
|
||||||
|
use alloc::collections::BTreeMap;
|
||||||
|
|
||||||
|
use lint_policy::Linter;
|
||||||
|
|
||||||
|
/// A group table.
|
||||||
|
pub(crate) type GroupTable = BTreeMap<String, Vec<String>>;
|
||||||
|
|
||||||
|
/// A struct containing tables for each linter.
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub(crate) struct LintGroups {
|
||||||
|
/// Table of clippy groups.
|
||||||
|
pub clippy: Option<GroupTable>,
|
||||||
|
/// Table of rust groups.
|
||||||
|
pub rust: Option<GroupTable>,
|
||||||
|
/// Table of rustdoc groups.
|
||||||
|
pub rustdoc: Option<GroupTable>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl LintGroups {
|
||||||
|
/// Get a reference to the group table corresponding to the given [Linter].
|
||||||
|
pub(crate) const fn get_groups_for(&self, linter: Linter) -> Option<&GroupTable> {
|
||||||
|
match linter {
|
||||||
|
Linter::Clippy => self.clippy.as_ref(),
|
||||||
|
Linter::Rust => self.rust.as_ref(),
|
||||||
|
Linter::Rustdoc => self.rustdoc.as_ref(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the group table corresponding to the given [Linter].
|
||||||
|
pub(crate) fn set_groups_for(&mut self, linter: Linter, lints: GroupTable) {
|
||||||
|
match linter {
|
||||||
|
Linter::Clippy => self.clippy = Some(lints),
|
||||||
|
Linter::Rust => self.rust = Some(lints),
|
||||||
|
Linter::Rustdoc => self.rustdoc = Some(lints),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
//! Generate lints for Cargo.toml.
|
||||||
|
|
||||||
|
#![cfg_attr(docsrs, feature(doc_cfg))]
|
||||||
|
|
||||||
|
use anyhow::Result;
|
||||||
|
use clap::Parser as _;
|
||||||
|
use lint_policy::Linter;
|
||||||
|
use lint_policy::cargo::{LintTable, Manifest};
|
||||||
|
use strum::IntoEnumIterator as _;
|
||||||
|
|
||||||
|
mod cli;
|
||||||
|
mod diff;
|
||||||
|
mod group;
|
||||||
|
mod source;
|
||||||
|
|
||||||
|
use cli::Args;
|
||||||
|
use diff::{Diff, diff};
|
||||||
|
|
||||||
|
use crate::group::GroupTable;
|
||||||
|
|
||||||
|
/// An empty lint table for unwrapping table references.
|
||||||
|
static EMPTY_LINTS: LintTable = LintTable::new();
|
||||||
|
/// An empty group table for unwrapping table references.
|
||||||
|
static EMPTY_GROUPS: GroupTable = GroupTable::new();
|
||||||
|
|
||||||
|
#[cfg_attr(test, expect(clippy::missing_errors_doc, reason = "main function"))]
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
let args = Args::parse();
|
||||||
|
|
||||||
|
let new_lints = args.read_new_source();
|
||||||
|
let old_lints = args.read_old_source();
|
||||||
|
|
||||||
|
match old_lints {
|
||||||
|
None => {
|
||||||
|
for linter in Linter::iter() {
|
||||||
|
// section
|
||||||
|
#[expect(clippy::print_stdout, reason = "printing out actual output")]
|
||||||
|
{
|
||||||
|
let mut manifest = Manifest::default();
|
||||||
|
manifest
|
||||||
|
.workspace
|
||||||
|
.lints
|
||||||
|
.set_lints_for(linter, LintTable::default());
|
||||||
|
print!("{}", toml::to_string(&manifest)?);
|
||||||
|
}
|
||||||
|
|
||||||
|
// lints
|
||||||
|
if let Some(lints) = new_lints.0.get_lints_for(linter) {
|
||||||
|
let mut value = String::new();
|
||||||
|
#[expect(clippy::print_stdout, reason = "printing out actual output")]
|
||||||
|
for lint in lints {
|
||||||
|
_ = serde::Serialize::serialize(
|
||||||
|
&lint.1,
|
||||||
|
toml::ser::ValueSerializer::new(&mut value),
|
||||||
|
)?;
|
||||||
|
println!("{} = {}", lint.0, value);
|
||||||
|
value.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(old_lints) => {
|
||||||
|
for linter in Linter::iter() {
|
||||||
|
// section
|
||||||
|
#[expect(clippy::print_stdout, reason = "printing out actual output")]
|
||||||
|
{
|
||||||
|
let mut manifest = Manifest::default();
|
||||||
|
manifest
|
||||||
|
.workspace
|
||||||
|
.lints
|
||||||
|
.set_lints_for(linter, LintTable::default());
|
||||||
|
print!("{}", toml::to_string(&manifest)?);
|
||||||
|
}
|
||||||
|
|
||||||
|
// diff
|
||||||
|
let mut value = String::new();
|
||||||
|
let old_lints = old_lints.0.get_lints_for(linter).unwrap_or(&EMPTY_LINTS);
|
||||||
|
let (new_lints, new_groups) = (
|
||||||
|
new_lints.0.get_lints_for(linter).unwrap_or(&EMPTY_LINTS),
|
||||||
|
new_lints.1.get_groups_for(linter).unwrap_or(&EMPTY_GROUPS),
|
||||||
|
);
|
||||||
|
for diff in diff(old_lints, new_lints, new_groups) {
|
||||||
|
#[expect(clippy::print_stdout, reason = "printing out actual output")]
|
||||||
|
match diff {
|
||||||
|
Diff::Added { name, new } => {
|
||||||
|
_ = serde::Serialize::serialize(
|
||||||
|
&new,
|
||||||
|
toml::ser::ValueSerializer::new(&mut value),
|
||||||
|
)?;
|
||||||
|
println!("+ {name} = {value}");
|
||||||
|
}
|
||||||
|
Diff::Removed { name, old } => {
|
||||||
|
_ = serde::Serialize::serialize(
|
||||||
|
&old,
|
||||||
|
toml::ser::ValueSerializer::new(&mut value),
|
||||||
|
)?;
|
||||||
|
println!("- {name} = {value}");
|
||||||
|
}
|
||||||
|
Diff::Modified { name, old, new } => {
|
||||||
|
if !args.ignore_level() {
|
||||||
|
_ = serde::Serialize::serialize(
|
||||||
|
&old,
|
||||||
|
toml::ser::ValueSerializer::new(&mut value),
|
||||||
|
)?;
|
||||||
|
print!("~ {name} = {value}");
|
||||||
|
value.clear();
|
||||||
|
_ = serde::Serialize::serialize(
|
||||||
|
&new,
|
||||||
|
toml::ser::ValueSerializer::new(&mut value),
|
||||||
|
)?;
|
||||||
|
println!(" => {value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
value.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
//! Lint sources.
|
||||||
|
|
||||||
|
use core::convert::Infallible;
|
||||||
|
use core::str::FromStr;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use lint_policy::cargo;
|
||||||
|
|
||||||
|
use crate::group::LintGroups;
|
||||||
|
|
||||||
|
mod toml;
|
||||||
|
mod toolchain;
|
||||||
|
|
||||||
|
/// A lint source.
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub(crate) enum Source {
|
||||||
|
/// A toolchain lint source specified by version.
|
||||||
|
Toolchain(String),
|
||||||
|
/// A TOML lint source specified by path.
|
||||||
|
Toml(PathBuf),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for Source {
|
||||||
|
type Err = Infallible;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
if s.starts_with('+') {
|
||||||
|
Ok(Self::Toolchain(s.to_owned()))
|
||||||
|
} else {
|
||||||
|
Ok(Self::Toml(PathBuf::from(s.to_owned())))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Source {
|
||||||
|
/// Query the source for the list of included lints, panicking on any error.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// If the underlying source implemenation encounters and error.
|
||||||
|
pub(crate) fn read_lints(&self) -> cargo::Lints {
|
||||||
|
match self {
|
||||||
|
Self::Toolchain(toolchain) => toolchain::read_lints(toolchain),
|
||||||
|
Self::Toml(filepath) => toml::read_lints(filepath),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Query the source for the list of included lint groups, panicking on any error.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// If the underlying source implemenation encounters and error.
|
||||||
|
pub(crate) fn read_groups(&self) -> LintGroups {
|
||||||
|
match self {
|
||||||
|
Self::Toolchain(toolchain) => toolchain::read_groups(toolchain),
|
||||||
|
Self::Toml(filepath) => toml::read_groups(filepath),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
//! TOML lint source.
|
||||||
|
|
||||||
|
use std::fs;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
use anyhow::Context as _;
|
||||||
|
use lint_policy::cargo;
|
||||||
|
|
||||||
|
use crate::source::LintGroups;
|
||||||
|
|
||||||
|
/// Query a TOML file for the list of included lints, panicking on any error.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// If an error occurs while reading the file or parsing the content.
|
||||||
|
pub(crate) fn read_lints(filepath: &Path) -> cargo::Lints {
|
||||||
|
#[expect(
|
||||||
|
clippy::expect_used,
|
||||||
|
reason = "errors here are not deisgned to be recoverable"
|
||||||
|
)]
|
||||||
|
private_read_lints(filepath)
|
||||||
|
.with_context(|| format!("reading lints from {}", filepath.display()))
|
||||||
|
.expect("toml source error")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Query a TOML file for the list of included lints.
|
||||||
|
///
|
||||||
|
/// # Errors
|
||||||
|
/// IO can fail while reading the file, and TOML parsing can fail.
|
||||||
|
fn private_read_lints(filepath: &Path) -> anyhow::Result<cargo::Lints> {
|
||||||
|
let contents = fs::read_to_string(filepath)?;
|
||||||
|
let manifest: cargo::Manifest = toml::from_str(&contents)?;
|
||||||
|
Ok(manifest.workspace.lints)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Query a TOML file for the list of included groups.
|
||||||
|
///
|
||||||
|
/// There is currently no differentiator between lints and groups so this function
|
||||||
|
/// just returns [Default].
|
||||||
|
pub(crate) fn read_groups(_: &Path) -> LintGroups {
|
||||||
|
LintGroups::default()
|
||||||
|
}
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
//! Toolchain lint source.
|
||||||
|
|
||||||
|
use core::str::{FromStr as _, Utf8Error};
|
||||||
|
use std::io;
|
||||||
|
use std::process::{Command, ExitStatus};
|
||||||
|
|
||||||
|
use anyhow::Context as _;
|
||||||
|
use itertools::Itertools as _;
|
||||||
|
use lint_policy::cargo::{LintSetting, LintTable, Lints};
|
||||||
|
use lint_policy::{Level, Linter};
|
||||||
|
use strum::{IntoEnumIterator as _, ParseError};
|
||||||
|
|
||||||
|
use crate::group::GroupTable;
|
||||||
|
use crate::source::LintGroups;
|
||||||
|
|
||||||
|
/// Query the toolchain version for the list of supported lints, panicking on any error.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// If an error occurs while running the toolchain or parsing the output.
|
||||||
|
pub(crate) fn read_lints(toolchain: &str) -> Lints {
|
||||||
|
#[expect(
|
||||||
|
clippy::expect_used,
|
||||||
|
reason = "errors here are not deisgned to be recoverable"
|
||||||
|
)]
|
||||||
|
private_read_lints(toolchain)
|
||||||
|
.with_context(|| format!("gathering lints from {toolchain:?}"))
|
||||||
|
.expect("toolchain source error")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Query the toolchain version for the list of supported lints, panicking on any error.
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// If an error occurs while running the toolchain or parsing the output.
|
||||||
|
pub(crate) fn read_groups(toolchain: &str) -> LintGroups {
|
||||||
|
#[expect(
|
||||||
|
clippy::expect_used,
|
||||||
|
reason = "errors here are not deisgned to be recoverable"
|
||||||
|
)]
|
||||||
|
private_read_groups(toolchain)
|
||||||
|
.with_context(|| format!("gathering lint groups from {toolchain:?}"))
|
||||||
|
.expect("toolchain source error")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Possible errors that can occur while querying a toolchain version.
|
||||||
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
pub(crate) enum ToolchainError {
|
||||||
|
/// Executing a [Command] failed.
|
||||||
|
#[error("failed to execute command: {0}")]
|
||||||
|
Command(#[from] io::Error),
|
||||||
|
/// The toolchain did not exit successfully.
|
||||||
|
#[error("command exited with code {0}")]
|
||||||
|
Status(ExitStatus),
|
||||||
|
/// The output from the toolchain was not UTF-8.
|
||||||
|
#[error("output is not utf8: {0}")]
|
||||||
|
NotUtf8(#[from] Utf8Error),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Possible errors that can occur while parsing lines of the toolchain output.
|
||||||
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
pub(crate) enum LineError {
|
||||||
|
/// The output does not match the expected format.
|
||||||
|
#[error("output is malformed: {0}")]
|
||||||
|
Malformed(String),
|
||||||
|
/// The lint level is not recognized.
|
||||||
|
#[error("invalid level: {0}")]
|
||||||
|
InvalidLevel(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Query the toolchain version for the list of supported lints.
|
||||||
|
///
|
||||||
|
/// # Errors
|
||||||
|
/// Either running the [Command] or parsing the output could fail.
|
||||||
|
fn private_read_lints(toolchain: &str) -> anyhow::Result<Lints> {
|
||||||
|
let mut lints = Lints::default();
|
||||||
|
let mut errors = Vec::new();
|
||||||
|
|
||||||
|
for linter in Linter::iter() {
|
||||||
|
let (l, e) = read_linter_lints(linter, toolchain)?;
|
||||||
|
lints.set_lints_for(linter, l);
|
||||||
|
errors.push(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if errors.iter().any(|e| !e.is_empty()) {
|
||||||
|
for errors in &errors {
|
||||||
|
#[expect(clippy::print_stderr, reason = "printing out actual error")]
|
||||||
|
for error in errors {
|
||||||
|
eprintln!("{error}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
anyhow::bail!("encountered errors for toolchain");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(lints)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Run the linter and parse its output.
|
||||||
|
///
|
||||||
|
/// # Errors
|
||||||
|
/// Either running the [Command] or parsing the output could fail.
|
||||||
|
fn read_linter_lints(
|
||||||
|
linter: Linter,
|
||||||
|
toolchain: &str,
|
||||||
|
) -> Result<(LintTable, Vec<LineError>), ToolchainError> {
|
||||||
|
let mut command = match linter {
|
||||||
|
Linter::Clippy => Command::new("clippy-driver"),
|
||||||
|
Linter::Rust => Command::new("rustc"),
|
||||||
|
Linter::Rustdoc => Command::new("rustdoc"),
|
||||||
|
};
|
||||||
|
let output = command.arg(toolchain).args(["-W", "help"]).output()?;
|
||||||
|
|
||||||
|
if !output.status.success() {
|
||||||
|
return Err(ToolchainError::Status(output.status));
|
||||||
|
}
|
||||||
|
|
||||||
|
let stdout = core::str::from_utf8(&output.stdout)?;
|
||||||
|
|
||||||
|
let lint_begin_line = match linter {
|
||||||
|
Linter::Rust => "Lint checks provided by rustc:",
|
||||||
|
Linter::Clippy | Linter::Rustdoc => "Lint checks loaded by this crate:",
|
||||||
|
};
|
||||||
|
|
||||||
|
let lint_lines = stdout
|
||||||
|
.lines()
|
||||||
|
.skip_while(|&line| line != lint_begin_line)
|
||||||
|
.skip(4)
|
||||||
|
.take_while(|line| !line.is_empty());
|
||||||
|
|
||||||
|
let lints = lint_lines.map(|line| {
|
||||||
|
let (name, level) = line
|
||||||
|
.trim()
|
||||||
|
.split_once(' ')
|
||||||
|
.ok_or_else(|| LineError::Malformed(line.to_owned()))
|
||||||
|
.and_then(|(name, rest)| {
|
||||||
|
rest.trim()
|
||||||
|
.split_once(' ')
|
||||||
|
.map(|(level, _)| (name, level))
|
||||||
|
.ok_or_else(|| LineError::Malformed(line.to_owned()))
|
||||||
|
})?;
|
||||||
|
Level::from_str(level)
|
||||||
|
.map(|level| (strip_lint_name(linter, name), LintSetting::level(level)))
|
||||||
|
.map_err(|ParseError::VariantNotFound| LineError::InvalidLevel(level.to_owned()))
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(lints.partition_result())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Query the toolchain version for the list of supported lints, panicking on any error.
|
||||||
|
///
|
||||||
|
/// # Errors
|
||||||
|
/// Either running the [Command] or parsing the output could fail.
|
||||||
|
fn private_read_groups(toolchain: &str) -> anyhow::Result<LintGroups> {
|
||||||
|
let mut groups = LintGroups::default();
|
||||||
|
let mut errors = Vec::new();
|
||||||
|
|
||||||
|
for linter in Linter::iter() {
|
||||||
|
let (g, e) = read_linter_groups(linter, toolchain)?;
|
||||||
|
groups.set_groups_for(linter, g);
|
||||||
|
errors.push(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if errors.iter().any(|e| !e.is_empty()) {
|
||||||
|
for errors in &errors {
|
||||||
|
#[expect(clippy::print_stderr, reason = "printing out actual error")]
|
||||||
|
for error in errors {
|
||||||
|
eprintln!("{error}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
anyhow::bail!("encountered errors for toolchain");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(groups)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Run the linter and parse its output.
|
||||||
|
///
|
||||||
|
/// # Errors
|
||||||
|
/// Either running the [Command] or parsing the output could fail.
|
||||||
|
fn read_linter_groups(
|
||||||
|
linter: Linter,
|
||||||
|
toolchain: &str,
|
||||||
|
) -> Result<(GroupTable, Vec<LineError>), ToolchainError> {
|
||||||
|
let mut command = match linter {
|
||||||
|
Linter::Clippy => Command::new("clippy-driver"),
|
||||||
|
Linter::Rust => Command::new("rustc"),
|
||||||
|
Linter::Rustdoc => Command::new("rustdoc"),
|
||||||
|
};
|
||||||
|
let output = command.arg(toolchain).args(["-W", "help"]).output()?;
|
||||||
|
|
||||||
|
if !output.status.success() {
|
||||||
|
return Err(ToolchainError::Status(output.status));
|
||||||
|
}
|
||||||
|
|
||||||
|
let stdout = core::str::from_utf8(&output.stdout)?;
|
||||||
|
|
||||||
|
let lint_begin_line = match linter {
|
||||||
|
Linter::Rust => "Lint groups provided by rustc:",
|
||||||
|
Linter::Clippy | Linter::Rustdoc => "Lint groups loaded by this crate:",
|
||||||
|
};
|
||||||
|
|
||||||
|
let lint_lines = stdout
|
||||||
|
.lines()
|
||||||
|
.skip_while(|&line| line != lint_begin_line)
|
||||||
|
.skip(4)
|
||||||
|
.take_while(|line| !line.is_empty());
|
||||||
|
|
||||||
|
let lints = lint_lines.map(|line| {
|
||||||
|
line.trim()
|
||||||
|
.split_once(' ')
|
||||||
|
.ok_or_else(|| LineError::Malformed(line.to_owned()))
|
||||||
|
.map(|(name, rest)| {
|
||||||
|
(
|
||||||
|
strip_lint_name(linter, name),
|
||||||
|
rest.split(',')
|
||||||
|
.map(|s| strip_lint_name(linter, s))
|
||||||
|
.collect::<Vec<_>>(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(lints.partition_result())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Strip the linter's name from the front of the lint name.
|
||||||
|
fn strip_lint_name(linter: Linter, name: &str) -> String {
|
||||||
|
let name = name.trim();
|
||||||
|
name.strip_prefix(linter.as_ref())
|
||||||
|
.and_then(|name| name.strip_prefix("::"))
|
||||||
|
.unwrap_or(name)
|
||||||
|
.to_owned()
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
[package]
|
||||||
|
name = "lint-policy"
|
||||||
|
version = "0.0.1"
|
||||||
|
description = "Model used by cargo-lint-policy"
|
||||||
|
repository = "https://git.skrundz.dev/codegen/lints"
|
||||||
|
keywords = ["no-std"]
|
||||||
|
categories = ["development-tools::cargo-plugins"]
|
||||||
|
include = ["/src"]
|
||||||
|
publish = true
|
||||||
|
|
||||||
|
edition.workspace = true
|
||||||
|
rust-version.workspace = true
|
||||||
|
license-file.workspace = true
|
||||||
|
|
||||||
|
[package.metadata.docs.rs]
|
||||||
|
all-features = true
|
||||||
|
rustdoc-args = ["--cfg", "docsrs"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
strum = { workspace = true, features = ["derive"] }
|
||||||
|
|
||||||
|
serde = { workspace = true, features = ["derive"], optional = true }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
toml = { workspace = true, features = ["display", "parse", "serde"] }
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = []
|
||||||
|
alloc = ["serde?/alloc"]
|
||||||
|
serde = ["dep:serde"]
|
||||||
|
|
||||||
|
[lints]
|
||||||
|
workspace = true
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# lint-policy
|
||||||
|
|
||||||
|
[](https://crates.io/crates/lint-policy)
|
||||||
|
|
||||||
|
Model used by lint-policy-cli
|
||||||
@@ -0,0 +1,214 @@
|
|||||||
|
//! Types for serializing and deserializing a workspace TOML file with a lint table.
|
||||||
|
|
||||||
|
extern crate alloc;
|
||||||
|
use alloc::collections::BTreeMap;
|
||||||
|
use alloc::string::String;
|
||||||
|
|
||||||
|
use crate::{Level, Linter};
|
||||||
|
|
||||||
|
/// A lint table.
|
||||||
|
pub type LintTable = BTreeMap<String, LintSetting>;
|
||||||
|
|
||||||
|
/// Top level TOML manifest table.
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub struct Manifest {
|
||||||
|
/// The workspace table.
|
||||||
|
pub workspace: Workspace,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The TOML workspace table.
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub struct Workspace {
|
||||||
|
/// The lints table.
|
||||||
|
pub lints: Lints,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The TOML lints table.
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||||
|
#[expect(clippy::exhaustive_structs, reason = "Linters are added infrequently")]
|
||||||
|
pub struct Lints {
|
||||||
|
/// Table of clippy lints.
|
||||||
|
pub clippy: Option<LintTable>,
|
||||||
|
/// Table of rust lints.
|
||||||
|
pub rust: Option<LintTable>,
|
||||||
|
/// Table of rustdoc lints.
|
||||||
|
pub rustdoc: Option<LintTable>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Lints {
|
||||||
|
/// Get a reference to the lint table corresponding to the given [Linter].
|
||||||
|
#[inline]
|
||||||
|
#[must_use]
|
||||||
|
pub const fn get_lints_for(&self, linter: Linter) -> Option<&LintTable> {
|
||||||
|
match linter {
|
||||||
|
Linter::Clippy => self.clippy.as_ref(),
|
||||||
|
Linter::Rust => self.rust.as_ref(),
|
||||||
|
Linter::Rustdoc => self.rustdoc.as_ref(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the lint table corresponding to the given [Linter].
|
||||||
|
#[inline]
|
||||||
|
pub fn set_lints_for(&mut self, linter: Linter, lints: LintTable) {
|
||||||
|
match linter {
|
||||||
|
Linter::Clippy => self.clippy = Some(lints),
|
||||||
|
Linter::Rust => self.rust = Some(lints),
|
||||||
|
Linter::Rustdoc => self.rustdoc = Some(lints),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The settings applied to a lint, contains a [Level] and an optional priority.
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub struct LintSetting {
|
||||||
|
/// The lint [Level].
|
||||||
|
pub level: Level,
|
||||||
|
/// The lint priority.
|
||||||
|
pub priority: Option<i8>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl LintSetting {
|
||||||
|
/// Construct a new [`LintSetting`] from a [Level].
|
||||||
|
#[inline]
|
||||||
|
#[must_use]
|
||||||
|
pub const fn level(level: Level) -> Self {
|
||||||
|
Self {
|
||||||
|
level,
|
||||||
|
priority: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Implementation of [`serde::Serialize`] and [`serde::Deserialize`] for [`LintSetting`].
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
mod serde_impl {
|
||||||
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
|
use super::{Level, LintSetting};
|
||||||
|
|
||||||
|
/// An enum to facilitate serializing and deserializing of different formats.
|
||||||
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
enum LintSettingRepr {
|
||||||
|
/// The lint setting is ser/de as a plain string.
|
||||||
|
Level(Level),
|
||||||
|
/// The lint setting is ser/de as a table.
|
||||||
|
Table {
|
||||||
|
/// The lint level.
|
||||||
|
level: Level,
|
||||||
|
/// The lint priority.
|
||||||
|
priority: i8,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Serialize for LintSetting {
|
||||||
|
#[inline]
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
let value = self
|
||||||
|
.priority
|
||||||
|
.map_or(LintSettingRepr::Level(self.level), |priority| {
|
||||||
|
LintSettingRepr::Table {
|
||||||
|
level: self.level,
|
||||||
|
priority,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
value.serialize(serializer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for LintSetting {
|
||||||
|
#[inline]
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
match LintSettingRepr::deserialize(deserializer)? {
|
||||||
|
LintSettingRepr::Level(level) => Ok(Self {
|
||||||
|
level,
|
||||||
|
priority: None,
|
||||||
|
}),
|
||||||
|
LintSettingRepr::Table { level, priority } => Ok(Self {
|
||||||
|
level,
|
||||||
|
priority: Some(priority),
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn deserialize_in_place<D>(deserializer: D, place: &mut Self) -> Result<(), D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
*place = Self::deserialize(deserializer)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use strum::IntoEnumIterator as _;
|
||||||
|
|
||||||
|
use crate::cargo::{LintSetting, LintTable};
|
||||||
|
use crate::{Level, Linter};
|
||||||
|
|
||||||
|
use super::Manifest;
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
use super::{Lints, Workspace};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
#[expect(clippy::missing_panics_doc, reason = "unit test")]
|
||||||
|
fn serde() {
|
||||||
|
let manifest = Manifest {
|
||||||
|
workspace: Workspace {
|
||||||
|
lints: Lints {
|
||||||
|
clippy: Some(LintTable::default()),
|
||||||
|
rust: Some(LintTable::default()),
|
||||||
|
rustdoc: Some(LintTable::default()),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
"[workspace.lints.clippy]\n\n[workspace.lints.rust]\n\n[workspace.lints.rustdoc]\n",
|
||||||
|
toml::to_string(&manifest).expect("serialize manifest"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[expect(clippy::missing_panics_doc, reason = "unit test")]
|
||||||
|
fn getset() {
|
||||||
|
for linter in Linter::iter() {
|
||||||
|
let mut manifest = Manifest::default();
|
||||||
|
|
||||||
|
manifest
|
||||||
|
.workspace
|
||||||
|
.lints
|
||||||
|
.set_lints_for(linter, LintTable::default());
|
||||||
|
|
||||||
|
for l in Linter::iter() {
|
||||||
|
let lints = manifest.workspace.lints.get_lints_for(l);
|
||||||
|
assert_eq!(l == linter, lints.is_some());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[expect(clippy::missing_panics_doc, reason = "unit test")]
|
||||||
|
fn lintsetting_level() {
|
||||||
|
for level in Level::iter() {
|
||||||
|
assert_eq!(level, LintSetting::level(level).level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
//! This module holds the definition of available lint levels.
|
||||||
|
|
||||||
|
/// Lint levels that are usable in Cargo.toml.
|
||||||
|
#[derive(
|
||||||
|
Debug,
|
||||||
|
Clone,
|
||||||
|
Copy,
|
||||||
|
PartialEq,
|
||||||
|
Eq,
|
||||||
|
PartialOrd,
|
||||||
|
Ord,
|
||||||
|
Hash,
|
||||||
|
strum::EnumString,
|
||||||
|
strum::Display,
|
||||||
|
strum::AsRefStr,
|
||||||
|
strum::IntoStaticStr,
|
||||||
|
strum::EnumIter,
|
||||||
|
strum::VariantArray,
|
||||||
|
strum::VariantNames,
|
||||||
|
)]
|
||||||
|
#[strum(serialize_all = "lowercase")]
|
||||||
|
#[expect(clippy::exhaustive_enums, reason = "Levels are not expected to change")]
|
||||||
|
pub enum Level {
|
||||||
|
/// Do nothing.
|
||||||
|
Allow,
|
||||||
|
/// Produce a warning if you violate the lint.
|
||||||
|
Warn,
|
||||||
|
/// Produce an error if you violate the lint.
|
||||||
|
Deny,
|
||||||
|
/// Same as `Deny` but can not be overridden.
|
||||||
|
Forbid,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Implementation of [`serde::Serialize`] and [`serde::Deserialize`] for [Level].
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
mod serde_impl {
|
||||||
|
use core::str::FromStr as _;
|
||||||
|
|
||||||
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
use strum::{ParseError, VariantNames as _};
|
||||||
|
|
||||||
|
use super::Level;
|
||||||
|
|
||||||
|
impl Serialize for Level {
|
||||||
|
#[inline]
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
serializer.serialize_str(self.as_ref())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for Level {
|
||||||
|
#[inline]
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let value = <&str>::deserialize(deserializer)?;
|
||||||
|
|
||||||
|
Self::from_str(value).map_err(|ParseError::VariantNotFound| {
|
||||||
|
serde::de::Error::unknown_variant(value, Self::VARIANTS)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn deserialize_in_place<D>(deserializer: D, place: &mut Self) -> Result<(), D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
*place = Self::deserialize(deserializer)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::Level;
|
||||||
|
|
||||||
|
/// Test that ordering goes in the right direction.
|
||||||
|
#[test]
|
||||||
|
#[expect(clippy::missing_panics_doc, reason = "unit test")]
|
||||||
|
fn ordering() {
|
||||||
|
assert!(Level::Allow < Level::Warn);
|
||||||
|
assert!(Level::Warn < Level::Deny);
|
||||||
|
assert!(Level::Deny < Level::Forbid);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
//! Model used by cargo-lint-policy.
|
||||||
|
|
||||||
|
#![no_std]
|
||||||
|
#![cfg_attr(docsrs, feature(doc_cfg))]
|
||||||
|
|
||||||
|
mod level;
|
||||||
|
mod linter;
|
||||||
|
|
||||||
|
pub use level::Level;
|
||||||
|
pub use linter::Linter;
|
||||||
|
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
|
||||||
|
pub mod cargo;
|
||||||
|
|
||||||
|
// dev-dependencies cannot be optional and `toml` is only used when the `alloc`
|
||||||
|
// and `serde` features are active
|
||||||
|
#[cfg(test)]
|
||||||
|
use toml as _;
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
//! This module holds the definition of available lint providers.
|
||||||
|
|
||||||
|
/// Linters that are configurable in Cargo.toml.
|
||||||
|
#[derive(
|
||||||
|
Debug,
|
||||||
|
Clone,
|
||||||
|
Copy,
|
||||||
|
PartialEq,
|
||||||
|
Eq,
|
||||||
|
Hash,
|
||||||
|
strum::EnumString,
|
||||||
|
strum::Display,
|
||||||
|
strum::AsRefStr,
|
||||||
|
strum::IntoStaticStr,
|
||||||
|
strum::EnumIter,
|
||||||
|
strum::VariantArray,
|
||||||
|
strum::VariantNames,
|
||||||
|
)]
|
||||||
|
#[strum(serialize_all = "lowercase")]
|
||||||
|
#[expect(clippy::exhaustive_enums, reason = "Linters are added infrequently")]
|
||||||
|
pub enum Linter {
|
||||||
|
/// clippy.
|
||||||
|
Clippy,
|
||||||
|
/// rust.
|
||||||
|
Rust,
|
||||||
|
/// rustdoc.
|
||||||
|
Rustdoc,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Implementation of [`serde::Serialize`] and [`serde::Deserialize`] for [Linter].
|
||||||
|
#[cfg(feature = "serde")]
|
||||||
|
mod serde_impl {
|
||||||
|
use core::str::FromStr as _;
|
||||||
|
|
||||||
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
use strum::{ParseError, VariantNames as _};
|
||||||
|
|
||||||
|
use super::Linter;
|
||||||
|
|
||||||
|
impl Serialize for Linter {
|
||||||
|
#[inline]
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
serializer.serialize_str(self.as_ref())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for Linter {
|
||||||
|
#[inline]
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let value = <&str>::deserialize(deserializer)?;
|
||||||
|
|
||||||
|
Self::from_str(value).map_err(|ParseError::VariantNotFound| {
|
||||||
|
serde::de::Error::unknown_variant(value, Self::VARIANTS)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn deserialize_in_place<D>(deserializer: D, place: &mut Self) -> Result<(), D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
*place = Self::deserialize(deserializer)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
[package]
|
||||||
|
name = "private-crate"
|
||||||
|
version = "0.0.0"
|
||||||
|
# description = ""
|
||||||
|
# repository = ""
|
||||||
|
# keywords = []
|
||||||
|
# categories = []
|
||||||
|
# include = ["/src"]
|
||||||
|
# publish = true
|
||||||
|
|
||||||
|
edition.workspace = true
|
||||||
|
rust-version.workspace = true
|
||||||
|
license-file.workspace = true
|
||||||
|
publish.workspace = true
|
||||||
|
|
||||||
|
[package.metadata.docs.rs]
|
||||||
|
all-features = true
|
||||||
|
rustdoc-args = ["--cfg", "docsrs"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# crate = { workspace = true }
|
||||||
|
|
||||||
|
[lints]
|
||||||
|
workspace = true
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# private-crate
|
||||||
|
|
||||||
|
[](https://crates.io/crates/private-crate)
|
||||||
|
|
||||||
|
Unpublished crate
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
//! Sample Private Crate.
|
||||||
|
|
||||||
|
#![no_std]
|
||||||
|
#![cfg_attr(docsrs, feature(doc_cfg))]
|
||||||
|
// #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
set minimum-version := '1.55.0'
|
||||||
|
set default-list
|
||||||
|
|
||||||
|
alias update := update-min
|
||||||
|
|
||||||
|
all:
|
||||||
|
just all-max
|
||||||
|
just all-min
|
||||||
|
all-min: update-min build lint test example doc format
|
||||||
|
all-max: update-max build lint test example doc format
|
||||||
|
|
||||||
|
update-min:
|
||||||
|
cargo +nightly update -Z minimal-versions
|
||||||
|
cargo update -p is_terminal_polyfill --precise 1.48.2
|
||||||
|
|
||||||
|
update-max:
|
||||||
|
cargo update
|
||||||
|
|
||||||
|
build:
|
||||||
|
cargo hack --feature-powerset build
|
||||||
|
|
||||||
|
lint:
|
||||||
|
cargo hack --feature-powerset clippy -- -D warnings
|
||||||
|
cargo hack --feature-powerset clippy --tests -- -D warnings
|
||||||
|
|
||||||
|
test:
|
||||||
|
cargo hack --feature-powerset test
|
||||||
|
cargo +1.85 hack --feature-powerset test
|
||||||
|
cargo +nightly hack --feature-powerset miri test
|
||||||
|
|
||||||
|
example:
|
||||||
|
# cargo run --example=<example> --features=<req_features>
|
||||||
|
|
||||||
|
doc *args:
|
||||||
|
RUSTDOCFLAGS="--cfg docsrs -D warnings" cargo +nightly doc --all-features {{ args }}
|
||||||
|
|
||||||
|
format:
|
||||||
|
cargo fmt --check
|
||||||
|
|
||||||
|
install:
|
||||||
|
cargo install --path crates/lint-policy-cli
|
||||||
+993
@@ -0,0 +1,993 @@
|
|||||||
|
[workspace.lints.clippy]
|
||||||
|
absolute-paths = "allow"
|
||||||
|
absurd-extreme-comparisons = "deny"
|
||||||
|
alloc-instead-of-core = "allow"
|
||||||
|
allow-attributes = "allow"
|
||||||
|
allow-attributes-without-reason = "allow"
|
||||||
|
almost-complete-range = "warn"
|
||||||
|
almost-swapped = "deny"
|
||||||
|
approx-constant = "deny"
|
||||||
|
arbitrary-source-item-ordering = "allow"
|
||||||
|
arc-with-non-send-sync = "warn"
|
||||||
|
arithmetic-side-effects = "allow"
|
||||||
|
as-conversions = "allow"
|
||||||
|
as-pointer-underscore = "allow"
|
||||||
|
as-ptr-cast-mut = "allow"
|
||||||
|
as-underscore = "allow"
|
||||||
|
assertions-on-constants = "warn"
|
||||||
|
assertions-on-result-states = "allow"
|
||||||
|
assign-op-pattern = "warn"
|
||||||
|
assigning-clones = "allow"
|
||||||
|
async-yields-async = "deny"
|
||||||
|
await-holding-invalid-type = "warn"
|
||||||
|
await-holding-lock = "warn"
|
||||||
|
await-holding-refcell-ref = "warn"
|
||||||
|
bad-bit-mask = "deny"
|
||||||
|
big-endian-bytes = "allow"
|
||||||
|
bind-instead-of-map = "warn"
|
||||||
|
blanket-clippy-restriction-lints = "warn"
|
||||||
|
blocks-in-conditions = "warn"
|
||||||
|
bool-assert-comparison = "warn"
|
||||||
|
bool-comparison = "warn"
|
||||||
|
bool-to-int-with-if = "allow"
|
||||||
|
borrow-as-ptr = "allow"
|
||||||
|
borrow-deref-ref = "warn"
|
||||||
|
borrow-interior-mutable-const = "warn"
|
||||||
|
borrowed-box = "warn"
|
||||||
|
box-collection = "warn"
|
||||||
|
box-default = "warn"
|
||||||
|
boxed-local = "warn"
|
||||||
|
branches-sharing-code = "allow"
|
||||||
|
builtin-type-shadow = "warn"
|
||||||
|
byte-char-slices = "warn"
|
||||||
|
bytes-count-to-len = "warn"
|
||||||
|
bytes-nth = "warn"
|
||||||
|
cargo-common-metadata = "allow"
|
||||||
|
case-sensitive-file-extension-comparisons = "allow"
|
||||||
|
cast-abs-to-unsigned = "warn"
|
||||||
|
cast-enum-constructor = "warn"
|
||||||
|
cast-enum-truncation = "warn"
|
||||||
|
cast-lossless = "allow"
|
||||||
|
cast-nan-to-int = "warn"
|
||||||
|
cast-possible-truncation = "allow"
|
||||||
|
cast-possible-wrap = "allow"
|
||||||
|
cast-precision-loss = "allow"
|
||||||
|
cast-ptr-alignment = "allow"
|
||||||
|
cast-sign-loss = "allow"
|
||||||
|
cast-slice-different-sizes = "deny"
|
||||||
|
cast-slice-from-raw-parts = "warn"
|
||||||
|
cfg-not-test = "allow"
|
||||||
|
char-lit-as-u8 = "warn"
|
||||||
|
chars-last-cmp = "warn"
|
||||||
|
chars-next-cmp = "warn"
|
||||||
|
checked-conversions = "allow"
|
||||||
|
clear-with-drain = "allow"
|
||||||
|
clone-on-copy = "warn"
|
||||||
|
clone-on-ref-ptr = "allow"
|
||||||
|
cloned-instead-of-copied = "allow"
|
||||||
|
cmp-null = "warn"
|
||||||
|
cmp-owned = "warn"
|
||||||
|
cognitive-complexity = "allow"
|
||||||
|
collapsible-else-if = "warn"
|
||||||
|
collapsible-if = "warn"
|
||||||
|
collapsible-match = "warn"
|
||||||
|
collapsible-str-replace = "warn"
|
||||||
|
collection-is-never-read = "allow"
|
||||||
|
comparison-chain = "warn"
|
||||||
|
comparison-to-empty = "warn"
|
||||||
|
const-is-empty = "warn"
|
||||||
|
copy-iterator = "allow"
|
||||||
|
crate-in-macro-def = "warn"
|
||||||
|
create-dir = "allow"
|
||||||
|
crosspointer-transmute = "warn"
|
||||||
|
dbg-macro = "allow"
|
||||||
|
debug-assert-with-mut-call = "allow"
|
||||||
|
decimal-literal-representation = "allow"
|
||||||
|
declare-interior-mutable-const = "warn"
|
||||||
|
default-constructed-unit-structs = "warn"
|
||||||
|
default-instead-of-iter-empty = "warn"
|
||||||
|
default-numeric-fallback = "allow"
|
||||||
|
default-trait-access = "allow"
|
||||||
|
default-union-representation = "allow"
|
||||||
|
deprecated-cfg-attr = "warn"
|
||||||
|
deprecated-clippy-cfg-attr = "warn"
|
||||||
|
deprecated-semver = "deny"
|
||||||
|
deref-addrof = "warn"
|
||||||
|
deref-by-slicing = "allow"
|
||||||
|
derivable-impls = "warn"
|
||||||
|
derive-ord-xor-partial-ord = "deny"
|
||||||
|
derive-partial-eq-without-eq = "allow"
|
||||||
|
derived-hash-with-manual-eq = "deny"
|
||||||
|
disallowed-macros = "warn"
|
||||||
|
disallowed-methods = "warn"
|
||||||
|
disallowed-names = "warn"
|
||||||
|
disallowed-script-idents = "allow"
|
||||||
|
disallowed-types = "warn"
|
||||||
|
diverging-sub-expression = "warn"
|
||||||
|
doc-include-without-cfg = "allow"
|
||||||
|
doc-lazy-continuation = "warn"
|
||||||
|
doc-link-with-quotes = "allow"
|
||||||
|
doc-markdown = "allow"
|
||||||
|
doc-nested-refdefs = "warn"
|
||||||
|
double-comparisons = "warn"
|
||||||
|
double-must-use = "warn"
|
||||||
|
double-neg = "warn"
|
||||||
|
double-parens = "warn"
|
||||||
|
drain-collect = "warn"
|
||||||
|
drop-non-drop = "warn"
|
||||||
|
duplicate-mod = "warn"
|
||||||
|
duplicate-underscore-argument = "warn"
|
||||||
|
duplicated-attributes = "warn"
|
||||||
|
duration-subsec = "warn"
|
||||||
|
eager-transmute = "deny"
|
||||||
|
else-if-without-else = "allow"
|
||||||
|
empty-docs = "warn"
|
||||||
|
empty-drop = "allow"
|
||||||
|
empty-enum = "allow"
|
||||||
|
empty-enum-variants-with-brackets = "allow"
|
||||||
|
empty-line-after-doc-comments = "warn"
|
||||||
|
empty-line-after-outer-attr = "warn"
|
||||||
|
empty-loop = "warn"
|
||||||
|
empty-structs-with-brackets = "allow"
|
||||||
|
enum-clike-unportable-variant = "deny"
|
||||||
|
enum-glob-use = "allow"
|
||||||
|
enum-variant-names = "warn"
|
||||||
|
eq-op = "deny"
|
||||||
|
equatable-if-let = "allow"
|
||||||
|
erasing-op = "deny"
|
||||||
|
err-expect = "warn"
|
||||||
|
error-impl-error = "allow"
|
||||||
|
excessive-nesting = "warn"
|
||||||
|
excessive-precision = "warn"
|
||||||
|
exhaustive-enums = "allow"
|
||||||
|
exhaustive-structs = "allow"
|
||||||
|
exit = "allow"
|
||||||
|
expect-fun-call = "warn"
|
||||||
|
expect-used = "allow"
|
||||||
|
expl-impl-clone-on-copy = "allow"
|
||||||
|
explicit-auto-deref = "warn"
|
||||||
|
explicit-counter-loop = "warn"
|
||||||
|
explicit-deref-methods = "allow"
|
||||||
|
explicit-into-iter-loop = "allow"
|
||||||
|
explicit-iter-loop = "allow"
|
||||||
|
explicit-write = "warn"
|
||||||
|
extend-with-drain = "warn"
|
||||||
|
extra-unused-lifetimes = "warn"
|
||||||
|
extra-unused-type-parameters = "warn"
|
||||||
|
fallible-impl-from = "allow"
|
||||||
|
field-reassign-with-default = "warn"
|
||||||
|
field-scoped-visibility-modifiers = "allow"
|
||||||
|
filetype-is-file = "allow"
|
||||||
|
filter-map-bool-then = "warn"
|
||||||
|
filter-map-identity = "warn"
|
||||||
|
filter-map-next = "allow"
|
||||||
|
filter-next = "warn"
|
||||||
|
flat-map-identity = "warn"
|
||||||
|
flat-map-option = "allow"
|
||||||
|
float-arithmetic = "allow"
|
||||||
|
float-cmp = "allow"
|
||||||
|
float-cmp-const = "allow"
|
||||||
|
float-equality-without-abs = "warn"
|
||||||
|
fn-params-excessive-bools = "allow"
|
||||||
|
fn-to-numeric-cast = "warn"
|
||||||
|
fn-to-numeric-cast-any = "allow"
|
||||||
|
fn-to-numeric-cast-with-truncation = "warn"
|
||||||
|
for-kv-map = "warn"
|
||||||
|
forget-non-drop = "warn"
|
||||||
|
format-collect = "warn"
|
||||||
|
format-in-format-args = "warn"
|
||||||
|
format-push-string = "allow"
|
||||||
|
four-forward-slashes = "warn"
|
||||||
|
from-iter-instead-of-collect = "allow"
|
||||||
|
from-over-into = "warn"
|
||||||
|
from-raw-with-void-ptr = "warn"
|
||||||
|
from-str-radix-10 = "warn"
|
||||||
|
future-not-send = "allow"
|
||||||
|
get-first = "warn"
|
||||||
|
get-last-with-len = "warn"
|
||||||
|
get-unwrap = "allow"
|
||||||
|
host-endian-bytes = "allow"
|
||||||
|
identity-op = "warn"
|
||||||
|
if-let-mutex = "deny"
|
||||||
|
if-not-else = "allow"
|
||||||
|
if-same-then-else = "warn"
|
||||||
|
if-then-some-else-none = "allow"
|
||||||
|
ifs-same-cond = "deny"
|
||||||
|
ignored-unit-patterns = "allow"
|
||||||
|
impl-hash-borrow-with-str-and-bytes = "deny"
|
||||||
|
impl-trait-in-params = "allow"
|
||||||
|
implicit-clone = "allow"
|
||||||
|
implicit-hasher = "allow"
|
||||||
|
implicit-return = "allow"
|
||||||
|
implicit-saturating-add = "warn"
|
||||||
|
implicit-saturating-sub = "warn"
|
||||||
|
implied-bounds-in-impls = "warn"
|
||||||
|
impossible-comparisons = "deny"
|
||||||
|
imprecise-flops = "allow"
|
||||||
|
incompatible-msrv = "warn"
|
||||||
|
inconsistent-digit-grouping = "warn"
|
||||||
|
inconsistent-struct-constructor = "allow"
|
||||||
|
index-refutable-slice = "allow"
|
||||||
|
indexing-slicing = "allow"
|
||||||
|
ineffective-bit-mask = "deny"
|
||||||
|
ineffective-open-options = "warn"
|
||||||
|
inefficient-to-string = "allow"
|
||||||
|
infallible-destructuring-match = "warn"
|
||||||
|
infinite-iter = "deny"
|
||||||
|
infinite-loop = "allow"
|
||||||
|
inherent-to-string = "warn"
|
||||||
|
inherent-to-string-shadow-display = "deny"
|
||||||
|
init-numbered-fields = "warn"
|
||||||
|
inline-always = "allow"
|
||||||
|
inline-asm-x86-att-syntax = "allow"
|
||||||
|
inline-asm-x86-intel-syntax = "allow"
|
||||||
|
inline-fn-without-body = "deny"
|
||||||
|
inspect-for-each = "warn"
|
||||||
|
int-plus-one = "warn"
|
||||||
|
integer-division = "allow"
|
||||||
|
integer-division-remainder-used = "allow"
|
||||||
|
into-iter-on-ref = "warn"
|
||||||
|
into-iter-without-iter = "allow"
|
||||||
|
invalid-null-ptr-usage = "deny"
|
||||||
|
invalid-regex = "deny"
|
||||||
|
invalid-upcast-comparisons = "allow"
|
||||||
|
inverted-saturating-sub = "deny"
|
||||||
|
invisible-characters = "deny"
|
||||||
|
is-digit-ascii-radix = "warn"
|
||||||
|
items-after-statements = "allow"
|
||||||
|
items-after-test-module = "warn"
|
||||||
|
iter-cloned-collect = "warn"
|
||||||
|
iter-count = "warn"
|
||||||
|
iter-filter-is-ok = "allow"
|
||||||
|
iter-filter-is-some = "allow"
|
||||||
|
iter-kv-map = "warn"
|
||||||
|
iter-next-loop = "deny"
|
||||||
|
iter-next-slice = "warn"
|
||||||
|
iter-not-returning-iterator = "allow"
|
||||||
|
iter-nth = "warn"
|
||||||
|
iter-nth-zero = "warn"
|
||||||
|
iter-on-empty-collections = "allow"
|
||||||
|
iter-on-single-items = "allow"
|
||||||
|
iter-out-of-bounds = "warn"
|
||||||
|
iter-over-hash-type = "allow"
|
||||||
|
iter-overeager-cloned = "warn"
|
||||||
|
iter-skip-next = "warn"
|
||||||
|
iter-skip-zero = "deny"
|
||||||
|
iter-with-drain = "allow"
|
||||||
|
iter-without-into-iter = "allow"
|
||||||
|
iterator-step-by-zero = "deny"
|
||||||
|
join-absolute-paths = "warn"
|
||||||
|
just-underscores-and-digits = "warn"
|
||||||
|
large-const-arrays = "warn"
|
||||||
|
large-digit-groups = "allow"
|
||||||
|
large-enum-variant = "warn"
|
||||||
|
large-futures = "allow"
|
||||||
|
large-include-file = "allow"
|
||||||
|
large-stack-arrays = "allow"
|
||||||
|
large-stack-frames = "allow"
|
||||||
|
large-types-passed-by-value = "allow"
|
||||||
|
legacy-numeric-constants = "warn"
|
||||||
|
len-without-is-empty = "warn"
|
||||||
|
len-zero = "warn"
|
||||||
|
let-and-return = "warn"
|
||||||
|
let-underscore-future = "warn"
|
||||||
|
let-underscore-lock = "deny"
|
||||||
|
let-underscore-must-use = "allow"
|
||||||
|
let-underscore-untyped = "allow"
|
||||||
|
let-unit-value = "warn"
|
||||||
|
let-with-type-underscore = "warn"
|
||||||
|
lines-filter-map-ok = "warn"
|
||||||
|
linkedlist = "allow"
|
||||||
|
lint-groups-priority = "deny"
|
||||||
|
literal-string-with-formatting-args = "allow"
|
||||||
|
little-endian-bytes = "allow"
|
||||||
|
lossy-float-literal = "allow"
|
||||||
|
macro-metavars-in-unsafe = "warn"
|
||||||
|
macro-use-imports = "allow"
|
||||||
|
main-recursion = "warn"
|
||||||
|
manual-assert = "allow"
|
||||||
|
manual-async-fn = "warn"
|
||||||
|
manual-bits = "warn"
|
||||||
|
manual-c-str-literals = "warn"
|
||||||
|
manual-clamp = "warn"
|
||||||
|
manual-div-ceil = "warn"
|
||||||
|
manual-filter = "warn"
|
||||||
|
manual-filter-map = "warn"
|
||||||
|
manual-find = "warn"
|
||||||
|
manual-find-map = "warn"
|
||||||
|
manual-flatten = "warn"
|
||||||
|
manual-hash-one = "warn"
|
||||||
|
manual-ignore-case-cmp = "warn"
|
||||||
|
manual-inspect = "warn"
|
||||||
|
manual-instant-elapsed = "allow"
|
||||||
|
manual-is-ascii-check = "warn"
|
||||||
|
manual-is-finite = "warn"
|
||||||
|
manual-is-infinite = "warn"
|
||||||
|
manual-is-power-of-two = "allow"
|
||||||
|
manual-is-variant-and = "allow"
|
||||||
|
manual-let-else = "allow"
|
||||||
|
manual-main-separator-str = "warn"
|
||||||
|
manual-map = "warn"
|
||||||
|
manual-memcpy = "warn"
|
||||||
|
manual-next-back = "warn"
|
||||||
|
manual-non-exhaustive = "warn"
|
||||||
|
manual-ok-or = "allow"
|
||||||
|
manual-pattern-char-comparison = "warn"
|
||||||
|
manual-range-contains = "warn"
|
||||||
|
manual-range-patterns = "warn"
|
||||||
|
manual-rem-euclid = "warn"
|
||||||
|
manual-retain = "warn"
|
||||||
|
manual-rotate = "warn"
|
||||||
|
manual-saturating-arithmetic = "warn"
|
||||||
|
manual-slice-size-calculation = "warn"
|
||||||
|
manual-split-once = "warn"
|
||||||
|
manual-str-repeat = "warn"
|
||||||
|
manual-string-new = "allow"
|
||||||
|
manual-strip = "warn"
|
||||||
|
manual-swap = "warn"
|
||||||
|
manual-try-fold = "warn"
|
||||||
|
manual-unwrap-or = "warn"
|
||||||
|
manual-unwrap-or-default = "warn"
|
||||||
|
manual-while-let-some = "warn"
|
||||||
|
many-single-char-names = "allow"
|
||||||
|
map-all-any-identity = "warn"
|
||||||
|
map-clone = "warn"
|
||||||
|
map-collect-result-unit = "warn"
|
||||||
|
map-entry = "warn"
|
||||||
|
map-err-ignore = "allow"
|
||||||
|
map-flatten = "warn"
|
||||||
|
map-identity = "warn"
|
||||||
|
map-unwrap-or = "allow"
|
||||||
|
map-with-unused-argument-over-ranges = "allow"
|
||||||
|
match-as-ref = "warn"
|
||||||
|
match-bool = "allow"
|
||||||
|
match-like-matches-macro = "warn"
|
||||||
|
match-on-vec-items = "allow"
|
||||||
|
match-overlapping-arm = "warn"
|
||||||
|
match-ref-pats = "warn"
|
||||||
|
match-result-ok = "warn"
|
||||||
|
match-same-arms = "allow"
|
||||||
|
match-single-binding = "warn"
|
||||||
|
match-str-case-mismatch = "deny"
|
||||||
|
match-wild-err-arm = "allow"
|
||||||
|
match-wildcard-for-single-variants = "allow"
|
||||||
|
maybe-infinite-iter = "allow"
|
||||||
|
mem-forget = "allow"
|
||||||
|
mem-replace-option-with-none = "warn"
|
||||||
|
mem-replace-with-default = "warn"
|
||||||
|
mem-replace-with-uninit = "deny"
|
||||||
|
min-ident-chars = "allow"
|
||||||
|
min-max = "deny"
|
||||||
|
mismatching-type-param-order = "allow"
|
||||||
|
misnamed-getters = "warn"
|
||||||
|
misrefactored-assign-op = "warn"
|
||||||
|
missing-assert-message = "allow"
|
||||||
|
missing-asserts-for-indexing = "allow"
|
||||||
|
missing-const-for-fn = "allow"
|
||||||
|
missing-const-for-thread-local = "warn"
|
||||||
|
missing-docs-in-private-items = "allow"
|
||||||
|
missing-enforced-import-renames = "warn"
|
||||||
|
missing-errors-doc = "allow"
|
||||||
|
missing-fields-in-debug = "allow"
|
||||||
|
missing-inline-in-public-items = "allow"
|
||||||
|
missing-panics-doc = "allow"
|
||||||
|
missing-safety-doc = "warn"
|
||||||
|
missing-spin-loop = "warn"
|
||||||
|
missing-trait-methods = "allow"
|
||||||
|
missing-transmute-annotations = "warn"
|
||||||
|
mistyped-literal-suffixes = "deny"
|
||||||
|
mixed-attributes-style = "warn"
|
||||||
|
mixed-case-hex-literals = "warn"
|
||||||
|
mixed-read-write-in-expression = "allow"
|
||||||
|
mod-module-files = "allow"
|
||||||
|
module-inception = "warn"
|
||||||
|
module-name-repetitions = "allow"
|
||||||
|
modulo-arithmetic = "allow"
|
||||||
|
modulo-one = "deny"
|
||||||
|
multi-assignments = "warn"
|
||||||
|
multiple-bound-locations = "warn"
|
||||||
|
multiple-crate-versions = "allow"
|
||||||
|
multiple-inherent-impl = "allow"
|
||||||
|
multiple-unsafe-ops-per-block = "allow"
|
||||||
|
must-use-candidate = "allow"
|
||||||
|
must-use-unit = "warn"
|
||||||
|
mut-from-ref = "deny"
|
||||||
|
mut-mut = "allow"
|
||||||
|
mut-mutex-lock = "warn"
|
||||||
|
mut-range-bound = "warn"
|
||||||
|
mutable-key-type = "warn"
|
||||||
|
mutex-atomic = "allow"
|
||||||
|
mutex-integer = "allow"
|
||||||
|
naive-bytecount = "allow"
|
||||||
|
needless-arbitrary-self-type = "warn"
|
||||||
|
needless-as-bytes = "warn"
|
||||||
|
needless-bitwise-bool = "allow"
|
||||||
|
needless-bool = "warn"
|
||||||
|
needless-bool-assign = "warn"
|
||||||
|
needless-borrow = "warn"
|
||||||
|
needless-borrowed-reference = "warn"
|
||||||
|
needless-borrows-for-generic-args = "warn"
|
||||||
|
needless-character-iteration = "warn"
|
||||||
|
needless-collect = "allow"
|
||||||
|
needless-continue = "allow"
|
||||||
|
needless-doctest-main = "warn"
|
||||||
|
needless-else = "warn"
|
||||||
|
needless-for-each = "allow"
|
||||||
|
needless-if = "warn"
|
||||||
|
needless-late-init = "warn"
|
||||||
|
needless-lifetimes = "warn"
|
||||||
|
needless-match = "warn"
|
||||||
|
needless-maybe-sized = "warn"
|
||||||
|
needless-option-as-deref = "warn"
|
||||||
|
needless-option-take = "warn"
|
||||||
|
needless-parens-on-range-literals = "warn"
|
||||||
|
needless-pass-by-ref-mut = "allow"
|
||||||
|
needless-pass-by-value = "allow"
|
||||||
|
needless-pub-self = "warn"
|
||||||
|
needless-question-mark = "warn"
|
||||||
|
needless-range-loop = "warn"
|
||||||
|
needless-raw-string-hashes = "allow"
|
||||||
|
needless-raw-strings = "allow"
|
||||||
|
needless-return = "warn"
|
||||||
|
needless-return-with-question-mark = "warn"
|
||||||
|
needless-splitn = "warn"
|
||||||
|
needless-update = "warn"
|
||||||
|
neg-cmp-op-on-partial-ord = "warn"
|
||||||
|
neg-multiply = "warn"
|
||||||
|
negative-feature-names = "allow"
|
||||||
|
never-loop = "deny"
|
||||||
|
new-ret-no-self = "warn"
|
||||||
|
new-without-default = "warn"
|
||||||
|
no-effect = "warn"
|
||||||
|
no-effect-replace = "warn"
|
||||||
|
no-effect-underscore-binding = "allow"
|
||||||
|
no-mangle-with-rust-abi = "allow"
|
||||||
|
non-ascii-literal = "allow"
|
||||||
|
non-canonical-clone-impl = "warn"
|
||||||
|
non-canonical-partial-ord-impl = "warn"
|
||||||
|
non-minimal-cfg = "warn"
|
||||||
|
non-octal-unix-permissions = "deny"
|
||||||
|
non-send-fields-in-send-ty = "allow"
|
||||||
|
non-zero-suggestions = "allow"
|
||||||
|
nonminimal-bool = "warn"
|
||||||
|
nonsensical-open-options = "deny"
|
||||||
|
nonstandard-macro-braces = "allow"
|
||||||
|
not-unsafe-ptr-arg-deref = "deny"
|
||||||
|
obfuscated-if-else = "warn"
|
||||||
|
octal-escapes = "warn"
|
||||||
|
ok-expect = "warn"
|
||||||
|
only-used-in-recursion = "warn"
|
||||||
|
op-ref = "warn"
|
||||||
|
option-as-ref-cloned = "allow"
|
||||||
|
option-as-ref-deref = "warn"
|
||||||
|
option-env-unwrap = "deny"
|
||||||
|
option-filter-map = "warn"
|
||||||
|
option-if-let-else = "allow"
|
||||||
|
option-map-or-err-ok = "warn"
|
||||||
|
option-map-or-none = "warn"
|
||||||
|
option-map-unit-fn = "warn"
|
||||||
|
option-option = "allow"
|
||||||
|
or-fun-call = "allow"
|
||||||
|
or-then-unwrap = "warn"
|
||||||
|
out-of-bounds-indexing = "deny"
|
||||||
|
overly-complex-bool-expr = "deny"
|
||||||
|
panic = "allow"
|
||||||
|
panic-in-result-fn = "allow"
|
||||||
|
panicking-overflow-checks = "deny"
|
||||||
|
panicking-unwrap = "deny"
|
||||||
|
partial-pub-fields = "allow"
|
||||||
|
partialeq-ne-impl = "warn"
|
||||||
|
partialeq-to-none = "warn"
|
||||||
|
path-buf-push-overwrite = "allow"
|
||||||
|
path-ends-with-ext = "warn"
|
||||||
|
pathbuf-init-then-push = "allow"
|
||||||
|
pattern-type-mismatch = "allow"
|
||||||
|
permissions-set-readonly-false = "warn"
|
||||||
|
pointers-in-nomem-asm-block = "warn"
|
||||||
|
possible-missing-comma = "deny"
|
||||||
|
precedence = "warn"
|
||||||
|
print-in-format-impl = "warn"
|
||||||
|
print-literal = "warn"
|
||||||
|
print-stderr = "allow"
|
||||||
|
print-stdout = "allow"
|
||||||
|
print-with-newline = "warn"
|
||||||
|
println-empty-string = "warn"
|
||||||
|
ptr-arg = "warn"
|
||||||
|
ptr-as-ptr = "allow"
|
||||||
|
ptr-cast-constness = "allow"
|
||||||
|
ptr-eq = "warn"
|
||||||
|
ptr-offset-with-cast = "warn"
|
||||||
|
pub-underscore-fields = "allow"
|
||||||
|
pub-use = "allow"
|
||||||
|
pub-with-shorthand = "allow"
|
||||||
|
pub-without-shorthand = "allow"
|
||||||
|
question-mark = "warn"
|
||||||
|
question-mark-used = "allow"
|
||||||
|
range-minus-one = "allow"
|
||||||
|
range-plus-one = "allow"
|
||||||
|
range-zip-with-len = "warn"
|
||||||
|
rc-buffer = "allow"
|
||||||
|
rc-clone-in-vec-init = "warn"
|
||||||
|
rc-mutex = "allow"
|
||||||
|
read-line-without-trim = "deny"
|
||||||
|
read-zero-byte-vec = "allow"
|
||||||
|
readonly-write-lock = "warn"
|
||||||
|
recursive-format-impl = "deny"
|
||||||
|
redundant-allocation = "warn"
|
||||||
|
redundant-as-str = "warn"
|
||||||
|
redundant-async-block = "warn"
|
||||||
|
redundant-at-rest-pattern = "warn"
|
||||||
|
redundant-clone = "allow"
|
||||||
|
redundant-closure = "warn"
|
||||||
|
redundant-closure-call = "warn"
|
||||||
|
redundant-closure-for-method-calls = "allow"
|
||||||
|
redundant-comparisons = "deny"
|
||||||
|
redundant-else = "allow"
|
||||||
|
redundant-feature-names = "allow"
|
||||||
|
redundant-field-names = "warn"
|
||||||
|
redundant-guards = "warn"
|
||||||
|
redundant-locals = "deny"
|
||||||
|
redundant-pattern = "warn"
|
||||||
|
redundant-pattern-matching = "warn"
|
||||||
|
redundant-pub-crate = "allow"
|
||||||
|
redundant-slicing = "warn"
|
||||||
|
redundant-static-lifetimes = "warn"
|
||||||
|
redundant-type-annotations = "allow"
|
||||||
|
ref-as-ptr = "allow"
|
||||||
|
ref-binding-to-reference = "allow"
|
||||||
|
ref-option = "allow"
|
||||||
|
ref-option-ref = "allow"
|
||||||
|
ref-patterns = "allow"
|
||||||
|
regex-creation-in-loops = "warn"
|
||||||
|
renamed-function-params = "allow"
|
||||||
|
repeat-once = "warn"
|
||||||
|
repeat-vec-with-capacity = "warn"
|
||||||
|
repr-packed-without-abi = "warn"
|
||||||
|
reserve-after-initialization = "warn"
|
||||||
|
rest-pat-in-fully-bound-structs = "allow"
|
||||||
|
result-filter-map = "warn"
|
||||||
|
result-large-err = "warn"
|
||||||
|
result-map-or-into-option = "warn"
|
||||||
|
result-map-unit-fn = "warn"
|
||||||
|
result-unit-err = "warn"
|
||||||
|
return-self-not-must-use = "allow"
|
||||||
|
reversed-empty-ranges = "deny"
|
||||||
|
same-functions-in-if-condition = "allow"
|
||||||
|
same-item-push = "warn"
|
||||||
|
same-name-method = "allow"
|
||||||
|
search-is-some = "warn"
|
||||||
|
seek-from-current = "warn"
|
||||||
|
seek-to-start-instead-of-rewind = "warn"
|
||||||
|
self-assignment = "deny"
|
||||||
|
self-named-constructors = "warn"
|
||||||
|
self-named-module-files = "allow"
|
||||||
|
semicolon-if-nothing-returned = "allow"
|
||||||
|
semicolon-inside-block = "allow"
|
||||||
|
semicolon-outside-block = "allow"
|
||||||
|
separated-literal-suffix = "allow"
|
||||||
|
serde-api-misuse = "deny"
|
||||||
|
set-contains-or-insert = "allow"
|
||||||
|
shadow-reuse = "allow"
|
||||||
|
shadow-same = "allow"
|
||||||
|
shadow-unrelated = "allow"
|
||||||
|
short-circuit-statement = "warn"
|
||||||
|
should-implement-trait = "warn"
|
||||||
|
should-panic-without-expect = "allow"
|
||||||
|
significant-drop-in-scrutinee = "allow"
|
||||||
|
significant-drop-tightening = "allow"
|
||||||
|
similar-names = "allow"
|
||||||
|
single-call-fn = "allow"
|
||||||
|
single-char-add-str = "warn"
|
||||||
|
single-char-lifetime-names = "allow"
|
||||||
|
single-char-pattern = "allow"
|
||||||
|
single-component-path-imports = "warn"
|
||||||
|
single-element-loop = "warn"
|
||||||
|
single-match = "warn"
|
||||||
|
single-match-else = "allow"
|
||||||
|
single-range-in-vec-init = "warn"
|
||||||
|
size-of-in-element-count = "deny"
|
||||||
|
size-of-ref = "warn"
|
||||||
|
skip-while-next = "warn"
|
||||||
|
slow-vector-initialization = "warn"
|
||||||
|
stable-sort-primitive = "allow"
|
||||||
|
std-instead-of-alloc = "allow"
|
||||||
|
std-instead-of-core = "allow"
|
||||||
|
str-split-at-newline = "allow"
|
||||||
|
str-to-string = "allow"
|
||||||
|
string-add = "allow"
|
||||||
|
string-add-assign = "allow"
|
||||||
|
string-extend-chars = "warn"
|
||||||
|
string-from-utf8-as-bytes = "warn"
|
||||||
|
string-lit-as-bytes = "allow"
|
||||||
|
string-lit-chars-any = "allow"
|
||||||
|
string-slice = "allow"
|
||||||
|
string-to-string = "allow"
|
||||||
|
strlen-on-c-strings = "warn"
|
||||||
|
struct-excessive-bools = "allow"
|
||||||
|
struct-field-names = "allow"
|
||||||
|
suboptimal-flops = "allow"
|
||||||
|
suspicious-arithmetic-impl = "warn"
|
||||||
|
suspicious-assignment-formatting = "warn"
|
||||||
|
suspicious-command-arg-space = "warn"
|
||||||
|
suspicious-doc-comments = "warn"
|
||||||
|
suspicious-else-formatting = "warn"
|
||||||
|
suspicious-map = "warn"
|
||||||
|
suspicious-op-assign-impl = "warn"
|
||||||
|
suspicious-open-options = "warn"
|
||||||
|
suspicious-operation-groupings = "allow"
|
||||||
|
suspicious-splitn = "deny"
|
||||||
|
suspicious-to-owned = "warn"
|
||||||
|
suspicious-unary-op-formatting = "warn"
|
||||||
|
suspicious-xor-used-as-pow = "allow"
|
||||||
|
swap-ptr-to-ref = "warn"
|
||||||
|
tabs-in-doc-comments = "warn"
|
||||||
|
temporary-assignment = "warn"
|
||||||
|
test-attr-in-doctest = "warn"
|
||||||
|
tests-outside-test-module = "allow"
|
||||||
|
to-digit-is-some = "warn"
|
||||||
|
to-string-in-format-args = "warn"
|
||||||
|
to-string-trait-impl = "warn"
|
||||||
|
todo = "allow"
|
||||||
|
too-long-first-doc-paragraph = "allow"
|
||||||
|
too-many-arguments = "warn"
|
||||||
|
too-many-lines = "allow"
|
||||||
|
toplevel-ref-arg = "warn"
|
||||||
|
trailing-empty-array = "allow"
|
||||||
|
trait-duplication-in-bounds = "allow"
|
||||||
|
transmute-bytes-to-str = "warn"
|
||||||
|
transmute-float-to-int = "warn"
|
||||||
|
transmute-int-to-bool = "warn"
|
||||||
|
transmute-int-to-char = "warn"
|
||||||
|
transmute-int-to-float = "warn"
|
||||||
|
transmute-int-to-non-zero = "warn"
|
||||||
|
transmute-null-to-fn = "deny"
|
||||||
|
transmute-num-to-bytes = "warn"
|
||||||
|
transmute-ptr-to-ptr = "allow"
|
||||||
|
transmute-ptr-to-ref = "warn"
|
||||||
|
transmute-undefined-repr = "allow"
|
||||||
|
transmutes-expressible-as-ptr-casts = "warn"
|
||||||
|
transmuting-null = "deny"
|
||||||
|
trim-split-whitespace = "warn"
|
||||||
|
trivial-regex = "allow"
|
||||||
|
trivially-copy-pass-by-ref = "allow"
|
||||||
|
try-err = "allow"
|
||||||
|
tuple-array-conversions = "allow"
|
||||||
|
type-complexity = "warn"
|
||||||
|
type-id-on-box = "warn"
|
||||||
|
type-repetition-in-bounds = "allow"
|
||||||
|
unchecked-duration-subtraction = "allow"
|
||||||
|
unconditional-recursion = "warn"
|
||||||
|
undocumented-unsafe-blocks = "allow"
|
||||||
|
unicode-not-nfc = "allow"
|
||||||
|
unimplemented = "allow"
|
||||||
|
uninhabited-references = "allow"
|
||||||
|
uninit-assumed-init = "deny"
|
||||||
|
uninit-vec = "deny"
|
||||||
|
uninlined-format-args = "allow"
|
||||||
|
unit-arg = "warn"
|
||||||
|
unit-cmp = "deny"
|
||||||
|
unit-hash = "deny"
|
||||||
|
unit-return-expecting-ord = "deny"
|
||||||
|
unnecessary-box-returns = "allow"
|
||||||
|
unnecessary-cast = "warn"
|
||||||
|
unnecessary-clippy-cfg = "warn"
|
||||||
|
unnecessary-fallible-conversions = "warn"
|
||||||
|
unnecessary-filter-map = "warn"
|
||||||
|
unnecessary-find-map = "warn"
|
||||||
|
unnecessary-first-then-check = "warn"
|
||||||
|
unnecessary-fold = "warn"
|
||||||
|
unnecessary-get-then-check = "warn"
|
||||||
|
unnecessary-join = "allow"
|
||||||
|
unnecessary-lazy-evaluations = "warn"
|
||||||
|
unnecessary-literal-bound = "allow"
|
||||||
|
unnecessary-literal-unwrap = "warn"
|
||||||
|
unnecessary-map-on-constructor = "warn"
|
||||||
|
unnecessary-map-or = "warn"
|
||||||
|
unnecessary-min-or-max = "warn"
|
||||||
|
unnecessary-mut-passed = "warn"
|
||||||
|
unnecessary-operation = "warn"
|
||||||
|
unnecessary-owned-empty-strings = "warn"
|
||||||
|
unnecessary-result-map-or-else = "warn"
|
||||||
|
unnecessary-safety-comment = "allow"
|
||||||
|
unnecessary-safety-doc = "allow"
|
||||||
|
unnecessary-self-imports = "allow"
|
||||||
|
unnecessary-sort-by = "warn"
|
||||||
|
unnecessary-struct-initialization = "allow"
|
||||||
|
unnecessary-to-owned = "warn"
|
||||||
|
unnecessary-unwrap = "warn"
|
||||||
|
unnecessary-wraps = "allow"
|
||||||
|
unneeded-field-pattern = "allow"
|
||||||
|
unneeded-wildcard-pattern = "warn"
|
||||||
|
unnested-or-patterns = "allow"
|
||||||
|
unreachable = "allow"
|
||||||
|
unreadable-literal = "allow"
|
||||||
|
unsafe-derive-deserialize = "allow"
|
||||||
|
unsafe-removed-from-name = "warn"
|
||||||
|
unseparated-literal-suffix = "allow"
|
||||||
|
unsound-collection-transmute = "deny"
|
||||||
|
unused-async = "allow"
|
||||||
|
unused-enumerate-index = "warn"
|
||||||
|
unused-format-specs = "warn"
|
||||||
|
unused-io-amount = "deny"
|
||||||
|
unused-peekable = "allow"
|
||||||
|
unused-result-ok = "allow"
|
||||||
|
unused-rounding = "allow"
|
||||||
|
unused-self = "allow"
|
||||||
|
unused-trait-names = "allow"
|
||||||
|
unused-unit = "warn"
|
||||||
|
unusual-byte-groupings = "warn"
|
||||||
|
unwrap-in-result = "allow"
|
||||||
|
unwrap-or-default = "warn"
|
||||||
|
unwrap-used = "allow"
|
||||||
|
upper-case-acronyms = "warn"
|
||||||
|
use-debug = "allow"
|
||||||
|
use-self = "allow"
|
||||||
|
used-underscore-binding = "allow"
|
||||||
|
used-underscore-items = "allow"
|
||||||
|
useless-asref = "warn"
|
||||||
|
useless-attribute = "deny"
|
||||||
|
useless-conversion = "warn"
|
||||||
|
useless-format = "warn"
|
||||||
|
useless-let-if-seq = "allow"
|
||||||
|
useless-transmute = "warn"
|
||||||
|
useless-vec = "warn"
|
||||||
|
vec-box = "warn"
|
||||||
|
vec-init-then-push = "warn"
|
||||||
|
vec-resize-to-zero = "deny"
|
||||||
|
verbose-bit-mask = "allow"
|
||||||
|
verbose-file-reads = "allow"
|
||||||
|
waker-clone-wake = "warn"
|
||||||
|
while-float = "allow"
|
||||||
|
while-immutable-condition = "deny"
|
||||||
|
while-let-loop = "warn"
|
||||||
|
while-let-on-iterator = "warn"
|
||||||
|
wildcard-dependencies = "allow"
|
||||||
|
wildcard-enum-match-arm = "allow"
|
||||||
|
wildcard-imports = "allow"
|
||||||
|
wildcard-in-or-patterns = "warn"
|
||||||
|
write-literal = "warn"
|
||||||
|
write-with-newline = "warn"
|
||||||
|
writeln-empty-string = "warn"
|
||||||
|
wrong-self-convention = "warn"
|
||||||
|
wrong-transmute = "deny"
|
||||||
|
zero-divided-by-zero = "warn"
|
||||||
|
zero-prefixed-literal = "warn"
|
||||||
|
zero-ptr = "warn"
|
||||||
|
zero-repeat-side-effects = "warn"
|
||||||
|
zero-sized-map-values = "allow"
|
||||||
|
zombie-processes = "warn"
|
||||||
|
zst-offset = "deny"
|
||||||
|
|
||||||
|
[workspace.lints.rust]
|
||||||
|
abi-unsupported-vector-types = "warn"
|
||||||
|
absolute-paths-not-starting-with-crate = "allow"
|
||||||
|
ambiguous-associated-items = "deny"
|
||||||
|
ambiguous-glob-imports = "warn"
|
||||||
|
ambiguous-glob-reexports = "warn"
|
||||||
|
ambiguous-negative-literals = "allow"
|
||||||
|
ambiguous-wide-pointer-comparisons = "warn"
|
||||||
|
anonymous-parameters = "warn"
|
||||||
|
arithmetic-overflow = "deny"
|
||||||
|
array-into-iter = "warn"
|
||||||
|
asm-sub-register = "warn"
|
||||||
|
async-fn-in-trait = "warn"
|
||||||
|
bad-asm-style = "warn"
|
||||||
|
bare-trait-objects = "warn"
|
||||||
|
binary-asm-labels = "deny"
|
||||||
|
bindings-with-variant-name = "deny"
|
||||||
|
boxed-slice-into-iter = "warn"
|
||||||
|
break-with-label-and-loop = "warn"
|
||||||
|
cenum-impl-drop-cast = "deny"
|
||||||
|
clashing-extern-declarations = "warn"
|
||||||
|
closure-returning-async-block = "allow"
|
||||||
|
coherence-leak-check = "warn"
|
||||||
|
conflicting-repr-hints = "deny"
|
||||||
|
confusable-idents = "warn"
|
||||||
|
const-evaluatable-unchecked = "warn"
|
||||||
|
const-item-mutation = "warn"
|
||||||
|
dangling-pointers-from-temporaries = "warn"
|
||||||
|
dead-code = "warn"
|
||||||
|
default-overrides-default-fields = "deny"
|
||||||
|
dependency-on-unit-never-type-fallback = "warn"
|
||||||
|
deprecated = "warn"
|
||||||
|
deprecated-in-future = "allow"
|
||||||
|
deprecated-safe-2024 = "allow"
|
||||||
|
deprecated-where-clause-location = "warn"
|
||||||
|
deref-into-dyn-supertrait = "warn"
|
||||||
|
deref-nullptr = "warn"
|
||||||
|
drop-bounds = "warn"
|
||||||
|
dropping-copy-types = "warn"
|
||||||
|
dropping-references = "warn"
|
||||||
|
duplicate-macro-attributes = "warn"
|
||||||
|
dyn-drop = "warn"
|
||||||
|
edition-2024-expr-fragment-specifier = "allow"
|
||||||
|
elided-lifetimes-in-associated-constant = "deny"
|
||||||
|
elided-lifetimes-in-paths = "allow"
|
||||||
|
elided-named-lifetimes = "warn"
|
||||||
|
ellipsis-inclusive-range-patterns = "warn"
|
||||||
|
enum-intrinsics-non-enums = "deny"
|
||||||
|
explicit-builtin-cfgs-in-flags = "deny"
|
||||||
|
explicit-outlives-requirements = "allow"
|
||||||
|
exported-private-dependencies = "warn"
|
||||||
|
ffi-unwind-calls = "allow"
|
||||||
|
for-loops-over-fallibles = "warn"
|
||||||
|
forbidden-lint-groups = "warn"
|
||||||
|
forgetting-copy-types = "warn"
|
||||||
|
forgetting-references = "warn"
|
||||||
|
function-item-references = "warn"
|
||||||
|
fuzzy-provenance-casts = "allow"
|
||||||
|
hidden-glob-reexports = "warn"
|
||||||
|
if-let-rescope = "allow"
|
||||||
|
ill-formed-attribute-input = "deny"
|
||||||
|
impl-trait-overcaptures = "allow"
|
||||||
|
impl-trait-redundant-captures = "allow"
|
||||||
|
improper-ctypes = "warn"
|
||||||
|
improper-ctypes-definitions = "warn"
|
||||||
|
incomplete-features = "warn"
|
||||||
|
incomplete-include = "deny"
|
||||||
|
ineffective-unstable-trait-impl = "deny"
|
||||||
|
inline-no-sanitize = "warn"
|
||||||
|
internal-features = "warn"
|
||||||
|
invalid-atomic-ordering = "deny"
|
||||||
|
invalid-doc-attributes = "deny"
|
||||||
|
invalid-from-utf8 = "warn"
|
||||||
|
invalid-from-utf8-unchecked = "deny"
|
||||||
|
invalid-macro-export-arguments = "warn"
|
||||||
|
invalid-nan-comparisons = "warn"
|
||||||
|
invalid-reference-casting = "deny"
|
||||||
|
invalid-type-param-default = "deny"
|
||||||
|
invalid-value = "warn"
|
||||||
|
irrefutable-let-patterns = "warn"
|
||||||
|
keyword-idents-2018 = "allow"
|
||||||
|
keyword-idents-2024 = "allow"
|
||||||
|
large-assignments = "warn"
|
||||||
|
late-bound-lifetime-arguments = "warn"
|
||||||
|
legacy-derive-helpers = "warn"
|
||||||
|
let-underscore-drop = "allow"
|
||||||
|
let-underscore-lock = "deny"
|
||||||
|
long-running-const-eval = "deny"
|
||||||
|
lossy-provenance-casts = "allow"
|
||||||
|
macro-expanded-macro-exports-accessed-by-absolute-paths = "deny"
|
||||||
|
macro-use-extern-crate = "allow"
|
||||||
|
map-unit-fn = "warn"
|
||||||
|
meta-variable-misuse = "allow"
|
||||||
|
missing-abi = "allow"
|
||||||
|
missing-copy-implementations = "allow"
|
||||||
|
missing-debug-implementations = "allow"
|
||||||
|
missing-docs = "allow"
|
||||||
|
missing-fragment-specifier = "deny"
|
||||||
|
missing-unsafe-on-extern = "allow"
|
||||||
|
mixed-script-confusables = "warn"
|
||||||
|
multiple-supertrait-upcastable = "allow"
|
||||||
|
must-not-suspend = "allow"
|
||||||
|
mutable-transmutes = "deny"
|
||||||
|
named-arguments-used-positionally = "warn"
|
||||||
|
named-asm-labels = "deny"
|
||||||
|
never-type-fallback-flowing-into-unsafe = "warn"
|
||||||
|
no-mangle-const-items = "deny"
|
||||||
|
no-mangle-generic-items = "warn"
|
||||||
|
non-ascii-idents = "allow"
|
||||||
|
non-camel-case-types = "warn"
|
||||||
|
non-contiguous-range-endpoints = "warn"
|
||||||
|
non-exhaustive-omitted-patterns = "allow"
|
||||||
|
non-fmt-panics = "warn"
|
||||||
|
non-local-definitions = "warn"
|
||||||
|
non-shorthand-field-patterns = "warn"
|
||||||
|
non-snake-case = "warn"
|
||||||
|
non-upper-case-globals = "warn"
|
||||||
|
noop-method-call = "warn"
|
||||||
|
opaque-hidden-inferred-bound = "warn"
|
||||||
|
order-dependent-trait-objects = "deny"
|
||||||
|
out-of-scope-macro-calls = "warn"
|
||||||
|
overflowing-literals = "deny"
|
||||||
|
overlapping-range-endpoints = "warn"
|
||||||
|
path-statements = "warn"
|
||||||
|
patterns-in-fns-without-body = "deny"
|
||||||
|
private-bounds = "warn"
|
||||||
|
private-interfaces = "warn"
|
||||||
|
proc-macro-derive-resolution-fallback = "deny"
|
||||||
|
ptr-cast-add-auto-to-object = "warn"
|
||||||
|
ptr-to-integer-transmute-in-consts = "warn"
|
||||||
|
pub-use-of-private-extern-crate = "deny"
|
||||||
|
redundant-imports = "allow"
|
||||||
|
redundant-lifetimes = "allow"
|
||||||
|
redundant-semicolons = "warn"
|
||||||
|
refining-impl-trait-internal = "warn"
|
||||||
|
refining-impl-trait-reachable = "warn"
|
||||||
|
renamed-and-removed-lints = "warn"
|
||||||
|
repr-transparent-external-private-fields = "warn"
|
||||||
|
rust-2021-incompatible-closure-captures = "allow"
|
||||||
|
rust-2021-incompatible-or-patterns = "allow"
|
||||||
|
rust-2021-prefixes-incompatible-syntax = "allow"
|
||||||
|
rust-2021-prelude-collisions = "allow"
|
||||||
|
rust-2024-guarded-string-incompatible-syntax = "allow"
|
||||||
|
rust-2024-incompatible-pat = "allow"
|
||||||
|
rust-2024-prelude-collisions = "allow"
|
||||||
|
self-constructor-from-outer-item = "warn"
|
||||||
|
semicolon-in-expressions-from-macros = "warn"
|
||||||
|
single-use-lifetimes = "allow"
|
||||||
|
soft-unstable = "deny"
|
||||||
|
special-module-name = "warn"
|
||||||
|
stable-features = "warn"
|
||||||
|
static-mut-refs = "warn"
|
||||||
|
suspicious-double-ref-op = "warn"
|
||||||
|
tail-expr-drop-order = "allow"
|
||||||
|
test-unstable-lint = "deny"
|
||||||
|
text-direction-codepoint-in-comment = "deny"
|
||||||
|
text-direction-codepoint-in-literal = "deny"
|
||||||
|
trivial-bounds = "warn"
|
||||||
|
trivial-casts = "allow"
|
||||||
|
trivial-numeric-casts = "allow"
|
||||||
|
type-alias-bounds = "warn"
|
||||||
|
tyvar-behind-raw-pointer = "warn"
|
||||||
|
uncommon-codepoints = "warn"
|
||||||
|
unconditional-panic = "deny"
|
||||||
|
unconditional-recursion = "warn"
|
||||||
|
uncovered-param-in-projection = "warn"
|
||||||
|
undefined-naked-function-abi = "warn"
|
||||||
|
undropped-manually-drops = "deny"
|
||||||
|
unexpected-cfgs = "warn"
|
||||||
|
unfulfilled-lint-expectations = "warn"
|
||||||
|
ungated-async-fn-track-caller = "warn"
|
||||||
|
uninhabited-static = "warn"
|
||||||
|
unit-bindings = "allow"
|
||||||
|
unknown-crate-types = "deny"
|
||||||
|
unknown-lints = "warn"
|
||||||
|
unknown-or-malformed-diagnostic-attributes = "warn"
|
||||||
|
unnameable-test-items = "warn"
|
||||||
|
unnameable-types = "allow"
|
||||||
|
unpredictable-function-pointer-comparisons = "warn"
|
||||||
|
unqualified-local-imports = "allow"
|
||||||
|
unreachable-code = "warn"
|
||||||
|
unreachable-patterns = "warn"
|
||||||
|
unreachable-pub = "allow"
|
||||||
|
unsafe-attr-outside-unsafe = "allow"
|
||||||
|
unsafe-code = "allow"
|
||||||
|
unsafe-op-in-unsafe-fn = "allow"
|
||||||
|
unstable-features = "allow"
|
||||||
|
unstable-name-collisions = "warn"
|
||||||
|
unstable-syntax-pre-expansion = "warn"
|
||||||
|
unsupported-fn-ptr-calling-conventions = "warn"
|
||||||
|
unused-allocation = "warn"
|
||||||
|
unused-assignments = "warn"
|
||||||
|
unused-associated-type-bounds = "warn"
|
||||||
|
unused-attributes = "warn"
|
||||||
|
unused-braces = "warn"
|
||||||
|
unused-comparisons = "warn"
|
||||||
|
unused-crate-dependencies = "allow"
|
||||||
|
unused-doc-comments = "warn"
|
||||||
|
unused-extern-crates = "allow"
|
||||||
|
unused-features = "warn"
|
||||||
|
unused-import-braces = "allow"
|
||||||
|
unused-imports = "warn"
|
||||||
|
unused-labels = "warn"
|
||||||
|
unused-lifetimes = "allow"
|
||||||
|
unused-macro-rules = "allow"
|
||||||
|
unused-macros = "warn"
|
||||||
|
unused-must-use = "warn"
|
||||||
|
unused-mut = "warn"
|
||||||
|
unused-parens = "warn"
|
||||||
|
unused-qualifications = "allow"
|
||||||
|
unused-results = "allow"
|
||||||
|
unused-unsafe = "warn"
|
||||||
|
unused-variables = "warn"
|
||||||
|
useless-deprecated = "deny"
|
||||||
|
useless-ptr-null-checks = "warn"
|
||||||
|
variant-size-differences = "allow"
|
||||||
|
warnings = "warn"
|
||||||
|
wasm-c-abi = "deny"
|
||||||
|
while-true = "warn"
|
||||||
|
|
||||||
|
[workspace.lints.rustdoc]
|
||||||
|
bare-urls = "warn"
|
||||||
|
broken-intra-doc-links = "warn"
|
||||||
|
invalid-codeblock-attributes = "warn"
|
||||||
|
invalid-html-tags = "warn"
|
||||||
|
invalid-rust-codeblocks = "warn"
|
||||||
|
missing-crate-level-docs = "allow"
|
||||||
|
missing-doc-code-examples = "allow"
|
||||||
|
private-doc-tests = "allow"
|
||||||
|
private-intra-doc-links = "warn"
|
||||||
|
redundant-explicit-links = "warn"
|
||||||
|
unescaped-backticks = "allow"
|
||||||
|
unportable-markdown = "warn"
|
||||||
+1008
File diff suppressed because it is too large
Load Diff
+1015
File diff suppressed because it is too large
Load Diff
+1017
File diff suppressed because it is too large
Load Diff
+1025
File diff suppressed because it is too large
Load Diff
+1029
File diff suppressed because it is too large
Load Diff
+1032
File diff suppressed because it is too large
Load Diff
+1036
File diff suppressed because it is too large
Load Diff
+1042
File diff suppressed because it is too large
Load Diff
+1052
File diff suppressed because it is too large
Load Diff
+1062
File diff suppressed because it is too large
Load Diff
+1066
File diff suppressed because it is too large
Load Diff
+1075
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
[toolchain]
|
||||||
|
channel = "1.97"
|
||||||
Reference in New Issue
Block a user