Skip to content

markdown shenanigans #226

markdown shenanigans

markdown shenanigans #226

Triggered via push June 28, 2024 14:24
Status Failure
Total duration 4m 7s
Artifacts 2

build.yml

on: push
Matrix: build
Fit to window
Zoom out
Zoom in

Annotations

42 errors and 166 warnings
useless use of `vec!`: src/api/sources/buildtools/mod.rs#L21
error: useless use of `vec!` --> src/api/sources/buildtools/mod.rs:21:8 | 21 | Ok(vec![jar, exec].concat()) | ^^^^^^^^^^^^^^^ help: you can use an array directly: `[jar, exec]` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec = note: `-D clippy::useless-vec` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::useless_vec)]`
this expression creates a reference which is immediately dereferenced by the compiler: src/commands/build.rs#L18
error: this expression creates a reference which is immediately dereferenced by the compiler --> src/commands/build.rs:18:31 | 18 | app.action_install_addons(&base) | ^^^^^ help: change this to: `base` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression creates a reference which is immediately dereferenced by the compiler: src/commands/build.rs#L15
error: this expression creates a reference which is immediately dereferenced by the compiler --> src/commands/build.rs:15:28 | 15 | app.action_install_jar(&base) | ^^^^^ help: change this to: `base` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
the borrowed expression implements the required traits: src/api/utils/mod.rs#L36
error: the borrowed expression implements the required traits --> src/api/utils/mod.rs:36:59 | 36 | let data: T = toml::from_str(&std::fs::read_to_string(&path)?)?; | ^^^^^ help: change this to: `path` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args = note: `-D clippy::needless-borrows-for-generic-args` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::needless_borrows_for_generic_args)]`
redundant guard: src/api/utils/pathdiff.rs#L72
error: redundant guard --> src/api/utils/pathdiff.rs:72:39 | 72 | (Some(_), Some(b)) if b == Component::ParentDir => return None, | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_guards help: try | 72 - (Some(_), Some(b)) if b == Component::ParentDir => return None, 72 + (Some(_), Some(Component::ParentDir)) => return None, |
redundant guard: src/api/utils/pathdiff.rs#L71
error: redundant guard --> src/api/utils/pathdiff.rs:71:39 | 71 | (Some(a), Some(b)) if b == Component::CurDir => comps.push(a), | ^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_guards = note: `-D clippy::redundant-guards` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::redundant_guards)]` help: try | 71 - (Some(a), Some(b)) if b == Component::CurDir => comps.push(a), 71 + (Some(a), Some(Component::CurDir)) => comps.push(a), |
using `clone` on type `HashFormat` which implements the `Copy` trait: src/api/utils/hashing/mod.rs#L58
error: using `clone` on type `HashFormat` which implements the `Copy` trait --> src/api/utils/hashing/mod.rs:58:24 | 58 | .map(|(k, v)| (k.clone(), v.clone())) | ^^^^^^^^^ help: try dereferencing it: `*k` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
writing `&Vec` instead of `&[_]` involves a new object where a slice will do: src/api/sources/buildtools/mod.rs#L44
error: writing `&Vec` instead of `&[_]` involves a new object where a slice will do --> src/api/sources/buildtools/mod.rs:44:18 | 44 | custom_args: &Vec<String>, | ^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg help: change this to | 44 ~ custom_args: &[String], 45 | mc_version: &str, ... 61 | 62 ~ args.extend(custom_args.to_owned()); |
question mark operator is useless here: src/api/sources/spigot/mod.rs#L23
error: question mark operator is useless here --> src/api/sources/spigot/mod.rs:23:9 | 23 | Ok(self.0.http_get_json(format!("{}/{url}", self.0.options.api_urls.spiget)).await?) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing question mark and `Ok()`: `self.0.http_get_json(format!("{}/{url}", self.0.options.api_urls.spiget)).await` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark
empty doc comment: src/api/sources/hangar/models.rs#L268
error: empty doc comment --> src/api/sources/hangar/models.rs:268:1 | 268 | /// | ^^^ | = help: consider removing or filling it = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_docs = note: `-D clippy::empty-docs` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::empty_docs)]`
direct implementation of `ToString`: src/api/sources/hangar/models.rs#L180
error: direct implementation of `ToString` --> src/api/sources/hangar/models.rs:180:1 | 180 | / impl ToString for Platform { 181 | | fn to_string(&self) -> String { 182 | | match self { 183 | | Self::Paper => "PAPER".to_owned(), ... | 187 | | } 188 | | } | |_^ | = help: prefer implementing `Display` instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl
direct implementation of `ToString`: src/api/sources/hangar/models.rs#L12
error: direct implementation of `ToString` --> src/api/sources/hangar/models.rs:12:1 | 12 | / impl ToString for Namespace { 13 | | fn to_string(&self) -> String { 14 | | format!("{}/{}", self.owner, self.slug) 15 | | } 16 | | } | |_^ | = help: prefer implementing `Display` instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl
this expression creates a reference which is immediately dereferenced by the compiler: src/api/sources/papermc/mod.rs#L71
error: this expression creates a reference which is immediately dereferenced by the compiler --> src/api/sources/papermc/mod.rs:71:56 | 71 | let resolved_build = self.fetch_build(project, &version, build).await?; | ^^^^^^^^ help: change this to: `version` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
methods called `into_*` usually take `self` by value: src/api/sources/vanilla/mod.rs#L20
error: methods called `into_*` usually take `self` by value --> src/api/sources/vanilla/mod.rs:20:22 | 20 | pub fn into_step(&self, ty: DownloadType) -> Option<Vec<Step>> { | ^^^^^ | = help: consider choosing a less ambiguous name = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention
useless conversion to the same type: `std::string::String`: src/api/sources/url/mod.rs#L25
error: useless conversion to the same type: `std::string::String` --> src/api/sources/url/mod.rs:25:14 | 25 | url: url.into(), | ^^^^^^^^^^ help: consider removing `.into()`: `url` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion = note: `-D clippy::useless-conversion` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::useless_conversion)]`
called `map(..).flatten()` on `Option`: src/api/sources/modrinth/mod.rs#L53
error: called `map(..).flatten()` on `Option` --> src/api/sources/modrinth/mod.rs:53:42 | 53 | if let Some(id) = store.as_ref().map(|ids| ids.get(slug)).flatten() { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(|ids| ids.get(slug))` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten
question mark operator is useless here: src/api/sources/modrinth/mod.rs#L33
error: question mark operator is useless here --> src/api/sources/modrinth/mod.rs:33:9 | 33 | Ok(self.fetch_all_versions(id).await?) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing question mark and `Ok()`: `self.fetch_all_versions(id).await` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark
direct implementation of `ToString`: src/api/models/markdown/mod.rs#L52
error: direct implementation of `ToString` --> src/api/models/markdown/mod.rs:52:1 | 52 | / impl ToString for MdColumn { 53 | | fn to_string(&self) -> String { 54 | | match self { 55 | | MdColumn::Icon => String::from("."), ... | 61 | | } 62 | | } | |_^ | = help: prefer implementing `Display` instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl
name `HTML` contains a capitalized acronym: src/api/models/markdown/mod.rs#L11
error: name `HTML` contains a capitalized acronym --> src/api/models/markdown/mod.rs:11:5 | 11 | HTML, | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Html` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms
name `ASCII` contains a capitalized acronym: src/api/models/markdown/mod.rs#L10
error: name `ASCII` contains a capitalized acronym --> src/api/models/markdown/mod.rs:10:5 | 10 | ASCII, | ^^^^^ help: consider making the acronym lowercase, except the initial letter (notice the capitalization): `Ascii` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms = note: `-D clippy::upper-case-acronyms` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::upper_case_acronyms)]`
using `clone` on type `ServerFlavor` which implements the `Copy` trait: src/api/models/server/server_type.rs#L103
error: using `clone` on type `ServerFlavor` which implements the `Copy` trait --> src/api/models/server/server_type.rs:103:50 | 103 | ServerType::Custom { flavor, .. } => flavor.clone(), | ^^^^^^^^^^^^^^ help: try dereferencing it: `*flavor` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy = note: `-D clippy::clone-on-copy` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::clone_on_copy)]`
direct implementation of `ToString`: src/api/models/server/server_type.rs#L21
error: direct implementation of `ToString` --> src/api/models/server/server_type.rs:21:1 | 21 | / impl ToString for PaperMCProject { 22 | | fn to_string(&self) -> String { 23 | | match self { 24 | | Self::Paper => "paper".to_owned(), ... | 28 | | } 29 | | } | |_^ | = help: prefer implementing `Display` instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl
match expression looks like `matches!` macro: src/api/models/server/server_flavor.rs#L22
error: match expression looks like `matches!` macro --> src/api/models/server/server_flavor.rs:22:9 | 22 | / match self { 23 | | ServerFlavor::Modded => true, 24 | | _ => false, 25 | | } | |_________^ help: try: `matches!(self, ServerFlavor::Modded)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro
match expression looks like `matches!` macro: src/api/models/server/server_flavor.rs#L15
error: match expression looks like `matches!` macro --> src/api/models/server/server_flavor.rs:15:9 | 15 | / match self { 16 | | ServerFlavor::Proxy => false, 17 | | _ => true, 18 | | } | |_________^ help: try: `!matches!(self, ServerFlavor::Proxy)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro = note: `-D clippy::match-like-matches-macro` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::match_like_matches_macro)]`
methods called `into_*` usually take `self` by value: src/api/models/packwiz/mod.rs#L66
error: methods called `into_*` usually take `self` by value --> src/api/models/packwiz/mod.rs:66:29 | 66 | pub async fn into_addon(&self, app: &App, target: AddonTarget) -> Result<Addon> { | ^^^^^ | = help: consider choosing a less ambiguous name = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention
writing `&Vec` instead of `&[_]` involves a new object where a slice will do: src/api/models/packwiz/mod.rs#L45
error: writing `&Vec` instead of `&[_]` involves a new object where a slice will do --> src/api/models/packwiz/mod.rs:45:36 | 45 | pub async fn from_steps(steps: &Vec<Step>) -> Self { | ^^^^^^^^^^ help: change this to: `&[Step]` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg
methods called `into_*` usually take `self` by value: src/api/models/mrpack/mod.rs#L28
error: methods called `into_*` usually take `self` by value --> src/api/models/mrpack/mod.rs:28:29 | 28 | pub async fn into_addon(&self) -> Result<Addon> { | ^^^^^ | = help: consider choosing a less ambiguous name = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention
methods called `into_*` usually take `self` by value: src/api/models/addon/addon_metadata.rs#L43
error: methods called `into_*` usually take `self` by value --> src/api/models/addon/addon_metadata.rs:43:21 | 43 | pub fn into_str(&self) -> &'static str { | ^^^^^ | = help: consider choosing a less ambiguous name = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention = note: `-D clippy::wrong-self-convention` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::wrong_self_convention)]`
module has the same name as its containing module: src/api/models/addon/mod.rs#L1
error: module has the same name as its containing module --> src/api/models/addon/mod.rs:1:1 | 1 | mod addon; | ^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception = note: `-D clippy::module-inception` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::module_inception)]`
question mark operator is useless here: src/api/models/modpack_source.rs#L27
error: question mark operator is useless here --> src/api/models/modpack_source.rs:27:9 | 27 | Ok(Accessor::from(str)?) | ^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing question mark and `Ok()`: `Accessor::from(str)` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark = note: `-D clippy::needless-question-mark` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::needless_question_mark)]`
direct implementation of `ToString`: src/api/models/env.rs#L16
error: direct implementation of `ToString` --> src/api/models/env.rs:16:1 | 16 | / impl ToString for Environment { 17 | | fn to_string(&self) -> String { 18 | | match self { 19 | | Environment::Both => String::from("both"), ... | 23 | | } 24 | | } | |_^ | = help: prefer implementing `Display` instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_trait_impl = note: `-D clippy::to-string-trait-impl` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::to_string_trait_impl)]`
useless use of `format!`: src/api/app/step/mod.rs#L36
error: useless use of `format!` --> src/api/app/step/mod.rs:36:38 | 36 | .with_context(|| format!("Downloading a file")) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Downloading a file".to_string()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format = note: `-D clippy::useless-format` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::useless_format)]`
writing `&Vec` instead of `&[_]` involves a new object where a slice will do: src/api/app/step/execute_java.rs#L11
error: writing `&Vec` instead of `&[_]` involves a new object where a slice will do --> src/api/app/step/execute_java.rs:11:15 | 11 | args: &Vec<String>, | ^^^^^^^^^^^^ help: change this to: `&[String]` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg = note: `-D clippy::ptr-arg` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::ptr_arg)]`
this expression creates a reference which is immediately dereferenced by the compiler: src/api/app/io.rs#L27
error: this expression creates a reference which is immediately dereferenced by the compiler --> src/api/app/io.rs:27:24 | 27 | write_toml(&path, NETWORK_TOML, &network)?; | ^^^^^ help: change this to: `path` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression creates a reference which is immediately dereferenced by the compiler: src/api/app/io.rs#L23
error: this expression creates a reference which is immediately dereferenced by the compiler --> src/api/app/io.rs:23:24 | 23 | write_toml(&path, SERVER_TOML, &server)?; | ^^^^^ help: change this to: `path` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression creates a reference which is immediately dereferenced by the compiler: src/api/app/collect.rs#L22
error: this expression creates a reference which is immediately dereferenced by the compiler --> src/api/app/collect.rs:22:61 | 22 | addons.extend_from_slice(&source.resolve_addons(&self).await?); | ^^^^^ help: change this to: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
this expression creates a reference which is immediately dereferenced by the compiler: src/api/app/actions/build/mod.rs#L15
error: this expression creates a reference which is immediately dereferenced by the compiler --> src/api/app/actions/build/mod.rs:15:43 | 15 | let steps = jar.resolve_steps(&self, Environment::Server).await?; | ^^^^^ help: change this to: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow = note: `-D clippy::needless-borrow` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::needless_borrow)]`
called `map(..).flatten()` on `Option`: src/api/app/actions/build/mod.rs#L10
error: called `map(..).flatten()` on `Option` --> src/api/app/actions/build/mod.rs:10:62 | 10 | if let Some(jar) = self.server.read().await.as_ref().map(|(_, server)| { | ______________________________________________________________^ 11 | | server.jar.clone() 12 | | }).flatten() { | |____________________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten = note: `-D clippy::map-flatten` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::map_flatten)]` help: try replacing `map` with `and_then` and remove the `.flatten()` | 10 ~ if let Some(jar) = self.server.read().await.as_ref().and_then(|(_, server)| { 11 + server.jar.clone() 12 ~ }) { |
lint group `pedantic` has the same priority (0) as a lint: Cargo.toml#L24
error: lint group `pedantic` has the same priority (0) as a lint --> Cargo.toml:24:1 | 24 | pedantic = "warn" | ^^^^^^^^ ------ has an implicit priority of 0 25 | missing_docs_in_private_items = "allow" | ----------------------------- has the same priority as this lint | = note: the order of the lints in the table is ignored by Cargo = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#lint_groups_priority help: to have lints override the group set `pedantic` to a lower priority | 24 | pedantic = { level = "warn", priority = -1 } | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lint group `all` has the same priority (0) as a lint: Cargo.toml#L23
error: lint group `all` has the same priority (0) as a lint --> Cargo.toml:23:1 | 23 | all = "deny" | ^^^ ------ has an implicit priority of 0 24 | pedantic = "warn" 25 | missing_docs_in_private_items = "allow" | ----------------------------- has the same priority as this lint | = note: the order of the lints in the table is ignored by Cargo = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#lint_groups_priority = note: `-D clippy::lint-groups-priority` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::lint_groups_priority)]` help: to have lints override the group set `all` to a lower priority | 23 | all = { level = "deny", priority = -1 } | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
unneeded unit return type: src/api/tools/java/mod.rs#L45
error: unneeded unit return type --> src/api/tools/java/mod.rs:45:37 | 45 | pub fn lines<F>(&mut self, f: F) -> () | ^^^^^^ help: remove the `-> ()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_unit = note: `-D clippy::unused-unit` implied by `-D clippy::all` = help: to override `-D clippy::all` add `#[allow(clippy::unused_unit)]`
clippy
Clippy had exited with the 101 exit code
unused `async` for function with no await statements: src/commands/markdown/json.rs#L13
warning: unused `async` for function with no await statements --> src/commands/markdown/json.rs:13:1 | 13 | / pub async fn run(app: Arc<App>, args: Args) -> Result<()> { 14 | | 15 | | 16 | | Ok(()) 17 | | } | |_^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/commands/markdown/render.rs#L10
warning: unused `async` for function with no await statements --> src/commands/markdown/render.rs:10:1 | 10 | / pub async fn run(app: Arc<App>, args: Args) -> Result<()> { 11 | | 12 | | 13 | | Ok(()) 14 | | } | |_^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/utils/accessor.rs#L35
warning: unused `async` for function with no await statements --> src/api/utils/accessor.rs:35:5 | 35 | / pub async fn dir(&self) -> Result<Vec<String>> { 36 | | match self { 37 | | Accessor::ZipLocal(zip) => Ok(zip.file_names().map(ToOwned::to_owned).collect()), 38 | | Accessor::Local(path) => Ok(path ... | 44 | | } 45 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/sources/quilt/mod.rs#L59
warning: unused `async` for function with no await statements --> src/api/sources/quilt/mod.rs:59:5 | 59 | / pub async fn resolve_steps_build( 60 | | &self, 61 | | jar_name: &str, 62 | | mc_version: &str, ... | 92 | | ]) 93 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/sources/buildtools/mod.rs#L40
warning: unused `async` for function with no await statements --> src/api/sources/buildtools/mod.rs:40:1 | 40 | / pub async fn resolve_steps_build( 41 | | _app: &App, 42 | | jar_name: &str, 43 | | craftbukkit: bool, ... | 78 | | ]) 79 | | } | |_^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/sources/spigot/mod.rs#L51
warning: unused `async` for function with no await statements --> src/api/sources/spigot/mod.rs:51:5 | 51 | / pub async fn resolve_steps(&self, id: &str, version: &str) -> Result<Vec<Step>> { 52 | | let url = format!( 53 | | "{}/resources/{}/versions/{}/download/proxy", 54 | | self.0.options.api_urls.spiget, ... | 68 | | ]) 69 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/sources/fabric/mod.rs#L25
warning: unused `async` for function with no await statements --> src/api/sources/fabric/mod.rs:25:5 | 25 | / pub async fn resolve_steps( 26 | | &self, 27 | | mc_version: &str, 28 | | loader: &str, ... | 64 | | Ok(steps) 65 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/sources/maven/mod.rs#L83
warning: unused `async` for function with no await statements --> src/api/sources/maven/mod.rs:83:5 | 83 | / pub async fn resolve_steps( 84 | | &self, 85 | | url: &str, 86 | | group_id: &str, ... | 119 | | ]) 120 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/models/packwiz/mod.rs#L66
warning: unused `async` for function with no await statements --> src/api/models/packwiz/mod.rs:66:5 | 66 | / pub async fn into_addon(&self, app: &App, target: AddonTarget) -> Result<Addon> { 67 | | let addon_type = if let Some(update) = &self.update { 68 | | match update { 69 | | PackwizModUpdate::Modrinth { mod_id, version } => AddonType::Modrinth { ... | 95 | | Ok(addon) 96 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/models/packwiz/mod.rs#L45
warning: unused `async` for function with no await statements --> src/api/models/packwiz/mod.rs:45:5 | 45 | / pub async fn from_steps(steps: &Vec<Step>) -> Self { 46 | | todo!() 47 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/models/mrpack/mod.rs#L28
warning: unused `async` for function with no await statements --> src/api/models/mrpack/mod.rs:28:5 | 28 | / pub async fn into_addon(&self) -> Result<Addon> { 29 | | Ok(Addon { 30 | | environment: self.env.as_ref().map(|e| e.clone().into()), 31 | | addon_type: AddonType::Url { ... | 39 | | }) 40 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async
unused `async` for function with no await statements: src/api/app/actions/init/mod.rs#L46
warning: unused `async` for function with no await statements --> src/api/app/actions/init/mod.rs:46:5 | 46 | / pub async fn action_init_network(&self) -> Result<()> { 47 | | cliclack::intro("initializing network")?; 48 | | 49 | | let name: String = cliclack::input("Name of the network?").interact()?; ... | 55 | | Ok(()) 56 | | } | |_____^ | = help: consider removing the `async` from this function = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_async = note: `-W clippy::unused-async` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::unused_async)]`
called `.collect::<Vec<String>>().join("")` on an iterator: src/api/utils/markdown/mod.rs#L96
warning: called `.collect::<Vec<String>>().join("")` on an iterator --> src/api/utils/markdown/mod.rs:96:16 | 96 | li.collect::<Vec<_>>().join("") | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using: `collect::<String>()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_join = note: `-W clippy::unnecessary-join` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::unnecessary_join)]`
this argument is passed by value, but not consumed in the function body: src/api/utils/markdown/mod.rs#L91
warning: this argument is passed by value, but not consumed in the function body --> src/api/utils/markdown/mod.rs:91:45 | 91 | fn wrap(tag: &'static str, content: String) -> String { | ^^^^^^ help: consider changing the type to: `&str` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_pass_by_value
unnecessary `!=` operation: src/api/utils/pathdiff.rs#L51
warning: unnecessary `!=` operation --> src/api/utils/pathdiff.rs:51:5 | 51 | / if path.is_absolute() != base.is_absolute() { 52 | | if path.is_absolute() { 53 | | Some(PathBuf::from(path)) 54 | | } else { ... | 84 | | Some(comps.iter().map(|c| c.as_os_str()).collect()) 85 | | } | |_____^ | = help: change to `==` and swap the blocks of the `if`/`else` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_not_else
usage of wildcard import: src/api/utils/pathdiff.rs#L23
warning: usage of wildcard import --> src/api/utils/pathdiff.rs:23:5 | 23 | use std::path::*; | ^^^^^^^^^^^^ help: try: `std::path::{Component, Path, PathBuf}` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wildcard_imports
you should put bare URLs between `<`/`>` or make a proper Markdown link: src/api/utils/pathdiff.rs#L1
warning: you should put bare URLs between `<`/`>` or make a proper Markdown link --> src/api/utils/pathdiff.rs:1:5 | 1 | //! https://github.com/Manishearth/pathdiff | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/utils/hashing/mod.rs#L25
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/utils/hashing/mod.rs:25:23 | 25 | pub fn get_digest(&self) -> Box<dyn DynDigest + Send> { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
consider adding a `;` to the last statement for consistent formatting: src/api/utils/hashing/curseforge.rs#L24
warning: consider adding a `;` to the last statement for consistent formatting --> src/api/utils/hashing/curseforge.rs:24:9 | 24 | self.0 = Vec::new() | ^^^^^^^^^^^^^^^^^^^ help: add a `;` here: `self.0 = Vec::new();` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#semicolon_if_nothing_returned
consider adding a `;` to the last statement for consistent formatting: src/api/utils/hashing/curseforge.rs#L14
warning: consider adding a `;` to the last statement for consistent formatting --> src/api/utils/hashing/curseforge.rs:14:9 | 14 | / self.0.extend( 15 | | data.iter() 16 | | .copied() 17 | | .filter(|&e| e != 9 && e != 10 && e != 13 && e != 32), 18 | | ) | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#semicolon_if_nothing_returned = note: `-W clippy::semicolon-if-nothing-returned` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::semicolon_if_nothing_returned)]` help: add a `;` here | 14 ~ self.0.extend( 15 + data.iter() 16 + .copied() 17 + .filter(|&e| e != 9 && e != 10 && e != 13 && e != 32), 18 + ); |
redundant closure: src/api/utils/accessor.rs#L40
warning: redundant closure --> src/api/utils/accessor.rs:40:29 | 40 | .filter_map(|r| r.ok()) | ^^^^^^^^^^ help: replace the closure with the method itself: `std::result::Result::ok` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure_for_method_calls = note: `-W clippy::redundant-closure-for-method-calls` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::redundant_closure_for_method_calls)]`
case-sensitive file extension comparison: src/api/utils/accessor.rs#L26
warning: case-sensitive file extension comparison --> src/api/utils/accessor.rs:26:19 | 26 | } else if str.ends_with(".zip") || str.ends_with(".mrpack") { | ^^^^^^^^^^^^^^^^^^^^^ | = help: consider using a case-insensitive comparison instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#case_sensitive_file_extension_comparisons help: use std::path::Path | 26 ~ } else if std::path::Path::new(str) 27 + .extension() 28 ~ .map_or(false, |ext| ext.eq_ignore_ascii_case("zip")) || str.ends_with(".mrpack") { |
unnecessary `!=` operation: src/api/tools/java/check.rs#L10
warning: unnecessary `!=` operation --> src/api/tools/java/check.rs:10:16 | 10 | let path = if path.file_name()?.to_str()? != JAVA_BIN { | ________________^ 11 | | path.join(JAVA_BIN) 12 | | } else { 13 | | path.clone() 14 | | }; | |_____^ | = help: change to `==` and swap the blocks of the `if`/`else` = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#if_not_else = note: `-W clippy::if-not-else` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::if_not_else)]`
this match arm has an identical body to another arm: src/api/tools/java/installation.rs#L21
warning: this match arm has an identical body to another arm --> src/api/tools/java/installation.rs:21:13 | 21 | (Some("1"), Some(ver)) => ver, | ----------------------^^^^^^^ | | | help: try merging the arm patterns: `(Some("1"), Some(ver)) | (Some(ver), _)` | = help: or try changing either arm body note: other arm here --> src/api/tools/java/installation.rs:22:13 | 22 | (Some(ver), _) => ver, | ^^^^^^^^^^^^^^^^^^^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_same_arms
wildcard matches only a single variant and will also match any future added variants: src/api/sources/quilt/mod.rs#L83
warning: wildcard matches only a single variant and will also match any future added variants --> src/api/sources/quilt/mod.rs:83:13 | 83 | _ => {}, | ^ help: try: `Environment::Both` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wildcard_for_single_variants
item in documentation is missing backticks: src/api/sources/buildtools/mod.rs#L39
warning: item in documentation is missing backticks --> src/api/sources/buildtools/mod.rs:39:29 | 39 | /// Resolve steps for using BuildTools to compile a server jar | ^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown help: try | 39 | /// Resolve steps for using `BuildTools` to compile a server jar | ~~~~~~~~~~~~
wildcard matches only a single variant and will also match any future added variants: src/api/sources/vanilla/mod.rs#L57
warning: wildcard matches only a single variant and will also match any future added variants --> src/api/sources/vanilla/mod.rs:57:13 | 57 | _ => bail!("You cant have both smh"), | ^ help: try: `Environment::Both` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_wildcard_for_single_variants = note: `-W clippy::match-wildcard-for-single-variants` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::match_wildcard_for_single_variants)]`
item in documentation is missing backticks: src/api/sources/vanilla/version.rs#L179
warning: item in documentation is missing backticks --> src/api/sources/vanilla/version.rs:179:10 | 179 | /// (AssetIndex only) The size of the game version's assets | ^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown help: try | 179 | /// (`AssetIndex` only) The size of the game version's assets | ~~~~~~~~~~~~
item in documentation is missing backticks: src/api/sources/vanilla/version.rs#L177
warning: item in documentation is missing backticks --> src/api/sources/vanilla/version.rs:177:10 | 177 | /// (AssetIndex only) The game version ID the assets are for | ^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown help: try | 177 | /// (`AssetIndex` only) The game version ID the assets are for | ~~~~~~~~~~~~
item in documentation is missing backticks: src/api/sources/vanilla/version.rs#L149
warning: item in documentation is missing backticks --> src/api/sources/vanilla/version.rs:149:13 | 149 | /// The HashMap key specifies a classifier as additional information for downloading files | ^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_markdown = note: `-W clippy::doc-markdown` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::doc_markdown)]` help: try | 149 | /// The `HashMap` key specifies a classifier as additional information for downloading files | ~~~~~~~~~
possible intra-doc link using quotes instead of backticks: src/api/sources/vanilla/version.rs#L87
warning: possible intra-doc link using quotes instead of backticks --> src/api/sources/vanilla/version.rs:87:25 | 87 | /// "exclude": ["META-INF/"], | ^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_link_with_quotes = note: `-W clippy::doc-link-with-quotes` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::doc_link_with_quotes)]`
this argument is passed by value, but not consumed in the function body: src/api/models/markdown/render.rs#L6
warning: this argument is passed by value, but not consumed in the function body --> src/api/models/markdown/render.rs:6:32 | 6 | pub fn render(&self, list: Vec<AddonMetadata>, output: MarkdownOutput) -> MarkdownTable { | ^^^^^^^^^^^^^^^^^^ help: consider changing the type to: `&[AddonMetadata]` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_pass_by_value = note: `-W clippy::needless-pass-by-value` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::needless_pass_by_value)]`
this match arm has an identical body to another arm: src/api/models/server/server_type.rs#L162
warning: this match arm has an identical body to another arm --> src/api/models/server/server_type.rs:162:13 | 162 | ServerType::BuildTools { .. } => Ok(false), | -----------------------------^^^^^^^^^^^^^ | | | help: try merging the arm patterns: `ServerType::BuildTools { .. } | ServerType::Vanilla { }` | = help: or try changing either arm body note: other arm here --> src/api/models/server/server_type.rs:136:13 | 136 | ServerType::Vanilla { } => Ok(false), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_same_arms
usage of wildcard import: src/api/models/server/server_type.rs#L2
warning: usage of wildcard import --> src/api/models/server/server_type.rs:2:102 | 2 | app::App, models::{Addon, AddonTarget, AddonType, Environment}, sources::buildtools, step::Step, utils::serde::* | ^^^^^^^^^^^^^^^ help: try: `utils::serde::str_latest` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wildcard_imports = note: `-W clippy::wildcard-imports` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::wildcard_imports)]`
this match arm has an identical body to another arm: src/api/models/server/server_flavor.rs#L32
warning: this match arm has an identical body to another arm --> src/api/models/server/server_flavor.rs:32:13 | 32 | ServerFlavor::Patched => true, | ---------------------^^^^^^^^ | | | help: try merging the arm patterns: `ServerFlavor::Patched | ServerFlavor::Proxy` | = help: or try changing either arm body note: other arm here --> src/api/models/server/server_flavor.rs:33:13 | 33 | ServerFlavor::Proxy => true, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_same_arms
this match arm has an identical body to another arm: src/api/models/server/server_flavor.rs#L31
warning: this match arm has an identical body to another arm --> src/api/models/server/server_flavor.rs:31:13 | 31 | ServerFlavor::Modded => false, | --------------------^^^^^^^^^ | | | help: try merging the arm patterns: `ServerFlavor::Modded | ServerFlavor::Vanilla` | = help: or try changing either arm body note: other arm here --> src/api/models/server/server_flavor.rs:30:13 | 30 | ServerFlavor::Vanilla => false, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_same_arms
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/server/server_flavor.rs#L28
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/server/server_flavor.rs:28:29 | 28 | pub fn supports_plugins(&self) -> bool { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/server/server_flavor.rs#L21
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/server/server_flavor.rs:21:26 | 21 | pub fn supports_mods(&self) -> bool { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/server/server_flavor.rs#L14
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/server/server_flavor.rs:14:31 | 14 | pub fn supports_datapacks(&self) -> bool { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
called `map(<f>).unwrap_or(<a>)` on an `Option` value: src/api/models/addon/addon_target.rs#L37
warning: called `map(<f>).unwrap_or(<a>)` on an `Option` value --> src/api/models/addon/addon_target.rs:37:14 | 37 | &Path::new(path) | ______________^ 38 | | .parent() 39 | | .map(|p| p.to_string_lossy().into_owned()) 40 | | .unwrap_or(".".to_owned()), | |__________________________________________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_unwrap_or help: use `map_or(<a>, <f>)` instead | 39 - .map(|p| p.to_string_lossy().into_owned()) 39 + .map_or(".".to_owned(), |p| p.to_string_lossy().into_owned()), |
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/addon/addon_metadata.rs#L64
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/addon/addon_metadata.rs:64:21 | 64 | pub fn icon_url(&self) -> String { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/addon/addon_metadata.rs#L60
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/addon/addon_metadata.rs:60:17 | 60 | pub fn html(&self) -> String { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/addon/addon_metadata.rs#L56
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/addon/addon_metadata.rs:56:25 | 56 | pub fn markdown_tag(&self) -> String { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/addon/addon_metadata.rs#L43
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/addon/addon_metadata.rs:43:21 | 43 | pub fn into_str(&self) -> &'static str { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
field name starts with the struct's name: src/api/models/addon/addon.rs#L12
warning: field name starts with the struct's name --> src/api/models/addon/addon.rs:12:5 | 12 | pub addon_type: AddonType, | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#struct_field_names = note: `-W clippy::struct-field-names` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::struct_field_names)]`
case-sensitive file extension comparison: src/api/models/source.rs#L30
warning: case-sensitive file extension comparison --> src/api/models/source.rs:30:71 | 30 | let file: AddonListFile = read_toml(&PathBuf::from(if path.ends_with(".toml") { | ^^^^^^^^^^^^^^^^^^^^^^^ | = help: consider using a case-insensitive comparison instead = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#case_sensitive_file_extension_comparisons = note: `-W clippy::case-sensitive-file-extension-comparisons` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::case_sensitive_file_extension_comparisons)]` help: use std::path::Path | 30 ~ let file: AddonListFile = read_toml(&PathBuf::from(if std::path::Path::new(path) 31 + .extension() 32 ~ .map_or(false, |ext| ext.eq_ignore_ascii_case("toml")) { |
this match arm has an identical body to another arm: src/api/models/modpack_source.rs#L33
warning: this match arm has an identical body to another arm --> src/api/models/modpack_source.rs:33:13 | 33 | Self::Remote { modpack_type, .. } => *modpack_type, | ---------------------------------^^^^^^^^^^^^^^^^^ | | | help: try merging the arm patterns: `Self::Remote { modpack_type, .. } | Self::Local { modpack_type, .. }` | = help: or try changing either arm body note: other arm here --> src/api/models/modpack_source.rs:32:13 | 32 | Self::Local { modpack_type, .. } => *modpack_type, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_same_arms = note: `-W clippy::match-same-arms` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::match_same_arms)]`
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/env.rs#L31
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/env.rs:31:19 | 31 | pub fn client(&self) -> bool { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref
this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte): src/api/models/env.rs#L27
warning: this argument (1 byte) is passed by reference, but would be more efficient if passed by value (limit: 8 byte) --> src/api/models/env.rs:27:19 | 27 | pub fn server(&self) -> bool { | ^^^^^ help: consider passing by value instead: `self` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref = note: `-W clippy::trivially-copy-pass-by-ref` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::trivially_copy_pass_by_ref)]`
called `map(<f>).unwrap_or(<a>)` on an `Option` value: src/api/app/step/execute_java.rs#L36
warning: called `map(<f>).unwrap_or(<a>)` on an `Option` value --> src/api/app/step/execute_java.rs:36:55 | 36 | bail!("Java process exited with code {}", res.code().map(|x| x.to_string()).unwrap_or("unknown".to_owned())); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_unwrap_or help: use `map_or(<a>, <f>)` instead | 36 - bail!("Java process exited with code {}", res.code().map(|x| x.to_string()).unwrap_or("unknown".to_owned())); 36 + bail!("Java process exited with code {}", res.code().map_or("unknown".to_owned(), |x| x.to_string())); |
called `map(<f>).unwrap_or(<a>)` on an `Option` value: src/api/app/step/execute_java.rs#L21
warning: called `map(<f>).unwrap_or(<a>)` on an `Option` value --> src/api/app/step/execute_java.rs:21:88 | 21 | ...or higher not found, cannot proceed", version.map(|v| v.to_string()).unwrap_or("any".to_owned())))?; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_unwrap_or = note: `-W clippy::map-unwrap-or` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::map_unwrap_or)]` help: use `map_or(<a>, <f>)` instead | 21 - .ok_or(anyhow!("Java with version {} or higher not found, cannot proceed", version.map(|v| v.to_string()).unwrap_or("any".to_owned())))?; 21 + .ok_or(anyhow!("Java with version {} or higher not found, cannot proceed", version.map_or("any".to_owned(), |v| v.to_string())))?; |
adding items after statements is confusing, since items exist from the start of the scope: src/api/app/step/execute_java.rs#L27
warning: adding items after statements is confusing, since items exist from the start of the scope --> src/api/app/step/execute_java.rs:27:9 | 27 | / fn on_line(line: &str) { 28 | | println!("| {line}"); 29 | | } | |_________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#items_after_statements
adding items after statements is confusing, since items exist from the start of the scope: src/api/app/actions/build/mod.rs#L29
warning: adding items after statements is confusing, since items exist from the start of the scope --> src/api/app/actions/build/mod.rs:29:9 | 29 | const MAX_CONCURRENT_TASKS: usize = 20; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#items_after_statements = note: `-W clippy::items-after-statements` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::items_after_statements)]`
methods `render`, `render_html`, and `render_ascii` are never used: src/api/utils/markdown/mod.rs#L83
warning: methods `render`, `render_html`, and `render_ascii` are never used --> src/api/utils/markdown/mod.rs:83:12 | 82 | impl MarkdownTable { | ------------------ methods in this implementation 83 | pub fn render(&self, output: MarkdownOutput) -> String { | ^^^^^^ ... 90 | pub fn render_html(&self) -> String { | ^^^^^^^^^^^ ... 113 | pub fn render_ascii(&self) -> String { | ^^^^^^^^^^^^
associated items `new` and `add_row` are never used: src/api/utils/markdown/mod.rs#L70
warning: associated items `new` and `add_row` are never used --> src/api/utils/markdown/mod.rs:70:12 | 69 | impl MarkdownTable { | ------------------ associated items in this implementation 70 | pub fn new() -> Self { | ^^^ ... 77 | pub fn add_row(&mut self, row: Vec<String>) { | ^^^^^^^
struct `MarkdownTable` is never constructed: src/api/utils/markdown/mod.rs#L64
warning: struct `MarkdownTable` is never constructed --> src/api/utils/markdown/mod.rs:64:12 | 64 | pub struct MarkdownTable { | ^^^^^^^^^^^^^
struct `MarkdownHeader` is never constructed: src/api/utils/markdown/mod.rs#L62
warning: struct `MarkdownHeader` is never constructed --> src/api/utils/markdown/mod.rs:62:12 | 62 | pub struct MarkdownHeader(pub String, pub HeaderAlignment); | ^^^^^^^^^^^^^^
variants `Left` and `Right` are never constructed: src/api/utils/markdown/mod.rs#L56
warning: variants `Left` and `Right` are never constructed --> src/api/utils/markdown/mod.rs:56:5 | 55 | pub enum HeaderAlignment { | --------------- variants in this enum 56 | Left, | ^^^^ ... 59 | Right, | ^^^^^ | = note: `HeaderAlignment` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
associated items `new` and `generate` are never used: src/api/utils/markdown/mod.rs#L17
warning: associated items `new` and `generate` are never used --> src/api/utils/markdown/mod.rs:17:12 | 13 | / impl<T> MarkdownTableGenerator<T> 14 | | where 15 | | T: Serialize + std::fmt::Debug | |__________________________________- associated items in this implementation 16 | { 17 | pub fn new(items: Vec<T>) -> Self { | ^^^ ... 21 | pub fn generate(self) -> Result<MarkdownTable> { | ^^^^^^^^
struct `MarkdownTableGenerator` is never constructed: src/api/utils/markdown/mod.rs#L7
warning: struct `MarkdownTableGenerator` is never constructed --> src/api/utils/markdown/mod.rs:7:12 | 7 | pub struct MarkdownTableGenerator<T> | ^^^^^^^^^^^^^^^^^^^^^^
method `dir` is never used: src/api/utils/accessor.rs#L35
warning: method `dir` is never used --> src/api/utils/accessor.rs:35:18 | 22 | impl Accessor { | ------------- method in this implementation ... 35 | pub async fn dir(&self) -> Result<Vec<String>> { | ^^^
function `write_toml` is never used: src/api/utils/mod.rs#L41
warning: function `write_toml` is never used --> src/api/utils/mod.rs:41:8 | 41 | pub fn write_toml<T: Serialize>(path: &Path, filename: &str, value: &T) -> Result<()> { | ^^^^^^^^^^
function `get_java_installation_for` is never used: src/api/tools/java/mod.rs#L78
warning: function `get_java_installation_for` is never used --> src/api/tools/java/mod.rs:78:14 | 78 | pub async fn get_java_installation_for(ver: JavaVersion) -> Option<JavaInstallation> { | ^^^^^^^^^^^^^^^^^^^^^^^^^
methods `fetch_api`, `fetch_resource`, `fetch_versions`, and `fetch_version` are never used: src/api/sources/spigot/mod.rs#L22
warning: methods `fetch_api`, `fetch_resource`, `fetch_versions`, and `fetch_version` are never used --> src/api/sources/spigot/mod.rs:22:18 | 21 | impl<'a> SpigotAPI<'a> { | ---------------------- methods in this implementation 22 | pub async fn fetch_api<T: DeserializeOwned>(&self, url: &str) -> Result<T> { | ^^^^^^^^^ ... 26 | pub async fn fetch_resource(&self, id: &str) -> Result<SpigotResource> { | ^^^^^^^^^^^^^^ ... 35 | pub async fn fetch_versions(&self, id: &str) -> Result<Vec<SpigotVersionDetailed>> { | ^^^^^^^^^^^^^^ ... 43 | pub async fn fetch_version(&self, id: &str, version: &str) -> Result<SpigotVersionDetailed> { | ^^^^^^^^^^^^^
method `fetch_description` is never used: src/api/sources/jenkins/mod.rs#L141
warning: method `fetch_description` is never used --> src/api/sources/jenkins/mod.rs:141:18 | 21 | impl<'a> JenkinsAPI<'a> { | ----------------------- method in this implementation ... 141 | pub async fn fetch_description(&self, url: &str, job: &str) -> Result<Option<String>> { | ^^^^^^^^^^^^^^^^^
methods `fetch_project`, `fetch_project_versions`, and `get_download_url` are never used: src/api/sources/hangar/mod.rs#L18
warning: methods `fetch_project`, `fetch_project_versions`, and `get_download_url` are never used --> src/api/sources/hangar/mod.rs:18:18 | 13 | impl<'a> HangarAPI<'a> { | ---------------------- methods in this implementation ... 18 | pub async fn fetch_project(&self, id: &str) -> Result<Project> { | ^^^^^^^^^^^^^ ... 22 | pub async fn fetch_project_versions(&self, id: &str) -> Result<ProjectVersionsResponse> { | ^^^^^^^^^^^^^^^^^^^^^^ ... 30 | pub fn get_download_url(&self, id: &str, version: &str, platform: &str) -> String { | ^^^^^^^^^^^^^^^^
methods `fetch_loaders`, `fetch_versions`, and `fetch_installers` are never used: src/api/sources/fabric/mod.rs#L13
warning: methods `fetch_loaders`, `fetch_versions`, and `fetch_installers` are never used --> src/api/sources/fabric/mod.rs:13:18 | 12 | impl<'a> FabricAPI<'a> { | ---------------------- methods in this implementation 13 | pub async fn fetch_loaders(&self) -> Result<Vec<FabricLoader>> { | ^^^^^^^^^^^^^ ... 17 | pub async fn fetch_versions(&self) -> Result<Vec<FabricVersion>> { | ^^^^^^^^^^^^^^ ... 21 | pub async fn fetch_installers(&self) -> Result<Vec<FabricInstaller>> { | ^^^^^^^^^^^^^^^^
field `0` is never read: src/api/sources/fabric/mod.rs#L10
warning: field `0` is never read --> src/api/sources/fabric/mod.rs:10:26 | 10 | pub struct FabricAPI<'a>(pub &'a App); | --------- ^^^^^^^^^^^ | | | field in this struct | help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field | 10 | pub struct FabricAPI<'a>(()); | ~~
method `find_url` is never used: src/api/sources/maven/models.rs#L43
warning: method `find_url` is never used --> src/api/sources/maven/models.rs:43:12 | 42 | impl MavenMetadata { | ------------------ method in this implementation 43 | pub fn find_url(&self, url: &str) -> Option<(String, String)> { | ^^^^^^^^
methods `get_text` and `get_text_all` are never used: src/api/sources/maven/models.rs#L4
warning: methods `get_text` and `get_text_all` are never used --> src/api/sources/maven/models.rs:4:8 | 3 | pub trait XMLExt { | ------ methods in this trait 4 | fn get_text(&self, k: &str) -> Result<String>; | ^^^^^^^^ 5 | fn get_text_all(&self, k: &str) -> Vec<String>; | ^^^^^^^^^^^^
methods `find_maven_artifact`, `fetch_metadata`, and `fetch_metadata_url` are never used: src/api/sources/maven/mod.rs#L50
warning: methods `find_maven_artifact`, `fetch_metadata`, and `fetch_metadata_url` are never used --> src/api/sources/maven/mod.rs:50:18 | 49 | impl<'a> MavenAPI<'a> { | --------------------- methods in this implementation 50 | pub async fn find_maven_artifact(&self, url: &str) -> Result<MavenMetadata> { | ^^^^^^^^^^^^^^^^^^^ ... 60 | pub async fn fetch_metadata( | ^^^^^^^^^^^^^^ ... 70 | pub async fn fetch_metadata_url(&self, url: &str) -> Result<MavenMetadata> { | ^^^^^^^^^^^^^^^^^^
function `guess_maven_metadata_url` is never used: src/api/sources/maven/mod.rs#L25
warning: function `guess_maven_metadata_url` is never used --> src/api/sources/maven/mod.rs:25:8 | 25 | pub fn guess_maven_metadata_url(url: &str) -> Result<String> { | ^^^^^^^^^^^^^^^^^^^^^^^^
function `maven_metadata_url` is never used: src/api/sources/maven/mod.rs#L17
warning: function `maven_metadata_url` is never used --> src/api/sources/maven/mod.rs:17:8 | 17 | pub fn maven_metadata_url(url: &str, group_id: &str, artifact_id: &str) -> String { | ^^^^^^^^^^^^^^^^^^
function `maven_artifact_url` is never used: src/api/sources/maven/mod.rs#L10
warning: function `maven_artifact_url` is never used --> src/api/sources/maven/mod.rs:10:8 | 10 | pub fn maven_artifact_url(url: &str, group_id: &str, artifact_id: &str) -> String { | ^^^^^^^^^^^^^^^^^^
field `0` is never read: src/api/sources/maven/mod.rs#L8
warning: field `0` is never read --> src/api/sources/maven/mod.rs:8:25 | 8 | pub struct MavenAPI<'a>(pub &'a App); | -------- ^^^^^^^^^^^ | | | field in this struct | help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field | 8 | pub struct MavenAPI<'a>(()); | ~~
method `fetch_versions` is never used: src/api/sources/papermc/mod.rs#L21
warning: method `fetch_versions` is never used --> src/api/sources/papermc/mod.rs:21:18 | 13 | impl<'a> PaperMCAPI<'a> { | ----------------------- method in this implementation ... 21 | pub async fn fetch_versions(&self, project: &str) -> Result<Vec<String>> { | ^^^^^^^^^^^^^^
method `paste_log` is never used: src/api/sources/mclogs/mod.rs#L16
warning: method `paste_log` is never used --> src/api/sources/mclogs/mod.rs:16:18 | 15 | impl<'a> MCLogsAPI<'a> { | ---------------------- method in this implementation 16 | pub async fn paste_log(&self, content: &str) -> Result<LogFileMetadata> { | ^^^^^^^^^
function `dollar_repl` is never used: src/api/sources/vanilla/rulematcher.rs#L187
warning: function `dollar_repl` is never used --> src/api/sources/vanilla/rulematcher.rs:187:4 | 187 | fn dollar_repl<F>(input: &str, replacer: F) -> String | ^^^^^^^^^^^
multiple associated items are never used: src/api/sources/vanilla/rulematcher.rs#L20
warning: multiple associated items are never used --> src/api/sources/vanilla/rulematcher.rs:20:12 | 17 | impl PistonRuleMatcher { | ---------------------- associated items in this implementation ... 20 | pub fn new(os_name: String, os_arch: String, os_version: String) -> Self { | ^^^ ... 33 | pub fn empty() -> Self { | ^^^^^ ... 47 | pub fn from_os() -> Self { | ^^^^^^^ ... 71 | pub fn should_download_library(&self, library: &PistonLibrary) -> bool { | ^^^^^^^^^^^^^^^^^^^^^^^ ... 79 | pub fn get_native_library(&self, library: &PistonLibrary) -> Option<PistonFile> { | ^^^^^^^^^^^^^^^^^^ ... 93 | pub fn match_rules(&self, rules: &Vec<PistonRule>) -> bool { | ^^^^^^^^^^^ ... 107 | pub fn match_rule(&self, rule: &PistonRule) -> bool { | ^^^^^^^^^^ ... 117 | pub fn match_constraint(&self, constraint: &PistonRuleConstraints) -> bool { | ^^^^^^^^^^^^^^^^ ... 145 | pub fn build_args( | ^^^^^^^^^^ ... 172 | pub fn process_string(&self, map: &HashMap<String, String>, input: &str) -> String { | ^^^^^^^^^^^^^^
struct `PistonRuleMatcher` is never constructed: src/api/sources/vanilla/rulematcher.rs#L12
warning: struct `PistonRuleMatcher` is never constructed --> src/api/sources/vanilla/rulematcher.rs:12:12 | 12 | pub struct PistonRuleMatcher { | ^^^^^^^^^^^^^^^^^
method `find` is never used: src/api/sources/vanilla/manifest.rs#L16
warning: method `find` is never used --> src/api/sources/vanilla/manifest.rs:16:12 | 13 | impl VersionManifest { | -------------------- method in this implementation ... 16 | pub fn find(&self, id: &str) -> Option<VersionIndex> { | ^^^^
methods `get_url` and `get_path` are never used: src/api/sources/vanilla/assets.rs#L21
warning: methods `get_url` and `get_path` are never used --> src/api/sources/vanilla/assets.rs:21:12 | 18 | impl MCAsset { | ------------ methods in this implementation ... 21 | pub fn get_url(&self) -> String { | ^^^^^^^ ... 27 | pub fn get_path(&self) -> String { | ^^^^^^^^
constant `RESOURCES_URL` is never used: src/api/sources/vanilla/assets.rs#L4
warning: constant `RESOURCES_URL` is never used --> src/api/sources/vanilla/assets.rs:4:11 | 4 | pub const RESOURCES_URL: &str = "https://resources.download.minecraft.net"; | ^^^^^^^^^^^^^
method `fetch_latest_mcver` is never used: src/api/sources/vanilla/mod.rs#L49
warning: method `fetch_latest_mcver` is never used --> src/api/sources/vanilla/mod.rs:49:18 | 44 | impl<'a> VanillaAPI<'a> { | ----------------------- method in this implementation ... 49 | pub async fn fetch_latest_mcver(&self) -> Result<String> { | ^^^^^^^^^^^^^^^^^^
methods `fetch_project`, `fetch_versions`, and `version_from_hash` are never used: src/api/sources/modrinth/mod.rs#L24
warning: methods `fetch_project`, `fetch_versions`, and `version_from_hash` are never used --> src/api/sources/modrinth/mod.rs:24:18 | 19 | impl<'a> ModrinthAPI<'a> { | ------------------------ methods in this implementation ... 24 | pub async fn fetch_project(&self, id: &str) -> Result<ModrinthProject> { | ^^^^^^^^^^^^^ ... 32 | pub async fn fetch_versions(&self, id: &str) -> Result<Vec<ModrinthVersion>> { | ^^^^^^^^^^^^^^ ... 104 | pub async fn version_from_hash(&self, hash: &str, algo: &str) -> Result<ModrinthVersion> { | ^^^^^^^^^^^^^^^^^
method `fetch_repo_description` is never used: src/api/sources/github/mod.rs#L73
warning: method `fetch_repo_description` is never used --> src/api/sources/github/mod.rs:73:18 | 27 | impl<'a> GithubAPI<'a> { | ---------------------- method in this implementation ... 73 | pub async fn fetch_repo_description(&self, repo: &str) -> Result<String> { | ^^^^^^^^^^^^^^^^^^^^^^
method `fetch_api` is never used: src/api/sources/curseforge/mod.rs#L13
warning: method `fetch_api` is never used --> src/api/sources/curseforge/mod.rs:13:18 | 12 | impl<'a> CurseforgeAPI<'a> { | -------------------------- method in this implementation 13 | pub async fn fetch_api<T: DeserializeOwned>(&self, url: String) -> Result<T> { | ^^^^^^^^^
struct `CurseforgeAPI` is never constructed: src/api/sources/curseforge/mod.rs#L10
warning: struct `CurseforgeAPI` is never constructed --> src/api/sources/curseforge/mod.rs:10:12 | 10 | pub struct CurseforgeAPI<'a>(pub &'a App); | ^^^^^^^^^^^^^
constant `CURSEFORGE_API_URL` is never used: src/api/sources/curseforge/mod.rs#L8
warning: constant `CURSEFORGE_API_URL` is never used --> src/api/sources/curseforge/mod.rs:8:11 | 8 | pub const CURSEFORGE_API_URL: &str = "https://api.curse.tools/v1/cf"; | ^^^^^^^^^^^^^^^^^^
method `render` is never used: src/api/models/markdown/render.rs#L6
warning: method `render` is never used --> src/api/models/markdown/render.rs:6:12 | 5 | impl MarkdownOptions { | -------------------- method in this implementation 6 | pub fn render(&self, list: Vec<AddonMetadata>, output: MarkdownOutput) -> MarkdownTable { | ^^^^^^
methods `flavor` and `update` are never used: src/api/models/server/server_type.rs#L98
warning: methods `flavor` and `update` are never used --> src/api/models/server/server_type.rs:98:12 | 97 | impl ServerJar { | -------------- methods in this implementation 98 | pub fn flavor(&self) -> ServerFlavor { | ^^^^^^ ... 134 | pub async fn update(&mut self, app: &App) -> Result<bool> { | ^^^^^^
methods `supports_datapacks`, `supports_mods`, and `supports_plugins` are never used: src/api/models/server/server_flavor.rs#L14
warning: methods `supports_datapacks`, `supports_mods`, and `supports_plugins` are never used --> src/api/models/server/server_flavor.rs:14:12 | 13 | impl ServerFlavor { | ----------------- methods in this implementation 14 | pub fn supports_datapacks(&self) -> bool { | ^^^^^^^^^^^^^^^^^^ ... 21 | pub fn supports_mods(&self) -> bool { | ^^^^^^^^^^^^^ ... 28 | pub fn supports_plugins(&self) -> bool { | ^^^^^^^^^^^^^^^^
associated function `from_addon` is never used: src/api/models/packwiz/mod.rs#L52
warning: associated function `from_addon` is never used --> src/api/models/packwiz/mod.rs:52:18 | 50 | impl PackwizMod { | --------------- associated function in this implementation 51 | // TODO: incomplete 52 | pub async fn from_addon(app: &App, addon: &Addon) -> Result<(PathBuf, Self)> { | ^^^^^^^^^^
associated function `from_steps` is never used: src/api/models/packwiz/mod.rs#L45
warning: associated function `from_steps` is never used --> src/api/models/packwiz/mod.rs:45:18 | 44 | impl PackwizModDownload { | ----------------------- associated function in this implementation 45 | pub async fn from_steps(steps: &Vec<Step>) -> Self { | ^^^^^^^^^^
associated function `from_addon_type` is never used: src/api/models/packwiz/mod.rs#L35
warning: associated function `from_addon_type` is never used --> src/api/models/packwiz/mod.rs:35:12 | 34 | impl PackwizModUpdate { | --------------------- associated function in this implementation 35 | pub fn from_addon_type(addon_type: &AddonType) -> Result<Option<Self>> { | ^^^^^^^^^^^^^^^
struct `Lockfile` is never constructed: src/api/models/lockfile/mod.rs#L1
warning: struct `Lockfile` is never constructed --> src/api/models/lockfile/mod.rs:1:12 | 1 | pub struct Lockfile {} | ^^^^^^^^
method `to_path` is never used: src/api/models/addon/addon_target.rs#L44
warning: method `to_path` is never used --> src/api/models/addon/addon_target.rs:44:12 | 18 | impl AddonTarget { | ---------------- method in this implementation ... 44 | pub fn to_path(&self) -> PathBuf { | ^^^^^^^
method `resolve_metadata` is never used: src/api/models/addon/addon_metadata.rs#L80
warning: method `resolve_metadata` is never used --> src/api/models/addon/addon_metadata.rs:80:18 | 79 | impl Addon { | ---------- method in this implementation 80 | pub async fn resolve_metadata(&self, app: &App) -> Result<AddonMetadata> { | ^^^^^^^^^^^^^^^^
associated items `all`, `get_markdown_header`, `into_str`, `markdown_tag`, `html`, and `icon_url` are never used: src/api/models/addon/addon_metadata.rs#L22
warning: associated items `all`, `get_markdown_header`, `into_str`, `markdown_tag`, `html`, and `icon_url` are never used --> src/api/models/addon/addon_metadata.rs:22:12 | 21 | impl AddonMetadataSource { | ------------------------ associated items in this implementation 22 | pub fn all() -> Vec<Self> { | ^^^ ... 35 | pub fn get_markdown_header() -> String { | ^^^^^^^^^^^^^^^^^^^ ... 43 | pub fn into_str(&self) -> &'static str { | ^^^^^^^^ ... 56 | pub fn markdown_tag(&self) -> String { | ^^^^^^^^^^^^ ... 60 | pub fn html(&self) -> String { | ^^^^ ... 64 | pub fn icon_url(&self) -> String { | ^^^^^^^^
fields `modrinth`, `cursetools`, `curserinth`, and `mclogs` are never read: src/api/app/options/mod.rs#L20
warning: fields `modrinth`, `cursetools`, `curserinth`, and `mclogs` are never read --> src/api/app/options/mod.rs:20:9 | 16 | pub struct ApiUrls { | ------- fields in this struct ... 20 | pub modrinth: String, | ^^^^^^^^ 21 | #[config(default = "https://curse.tools", env = "API_URL_CURSETOOLS")] 22 | pub cursetools: String, | ^^^^^^^^^^ 23 | #[config(default = "", env = "API_URL_CURSERINTH")] 24 | pub curserinth: String, | ^^^^^^^^^^ ... 30 | pub mclogs: String, | ^^^^^^
field `github_token` is never read: src/api/app/options/mod.rs#L12
warning: field `github_token` is never read --> src/api/app/options/mod.rs:12:9 | 4 | pub struct AppOptions { | ---------- field in this struct ... 12 | pub github_token: Option<String>, | ^^^^^^^^^^^^
method `save_changes` is never used: src/api/app/io.rs#L21
warning: method `save_changes` is never used --> src/api/app/io.rs:21:18 | 10 | impl App { | -------- method in this implementation ... 21 | pub async fn save_changes(&self) -> Result<()> { | ^^^^^^^^^^^^
method `http_get_json_with` is never used: src/api/app/http.rs#L57
warning: method `http_get_json_with` is never used --> src/api/app/http.rs:57:18 | 10 | impl App { | -------- method in this implementation ... 57 | pub async fn http_get_json_with<T: DeserializeOwned, F: FnOnce(reqwest::RequestBuilder) -> reqwest::RequestBuilder>(&self, url: impl ... | ^^^^^^^^^^^^^^^^^^
methods `get_markdown_options`, `get_all_metadata`, `render_markdown_with`, and `render_markdown_and_save` are never used: src/api/app/actions/markdown/mod.rs#L8
warning: methods `get_markdown_options`, `get_all_metadata`, `render_markdown_with`, and `render_markdown_and_save` are never used --> src/api/app/actions/markdown/mod.rs:8:18 | 7 | impl App { | -------- methods in this implementation 8 | pub async fn get_markdown_options(&self) -> Option<MarkdownOptions> { | ^^^^^^^^^^^^^^^^^^^^ ... 16 | pub async fn get_all_metadata(self: Arc<Self>) -> Result<Vec<AddonMetadata>> { | ^^^^^^^^^^^^^^^^ ... 31 | pub async fn render_markdown_with(&self, metadata: Vec<AddonMetadata>) -> Result<String> { | ^^^^^^^^^^^^^^^^^^^^ ... 39 | pub async fn render_markdown_and_save(self: Arc<Self>) -> Result<()> { | ^^^^^^^^^^^^^^^^^^^^^^^^
method `action_init_network` is never used: src/api/app/actions/init/mod.rs#L46
warning: method `action_init_network` is never used --> src/api/app/actions/init/mod.rs:46:18 | 10 | impl App { | -------- method in this implementation ... 46 | pub async fn action_init_network(&self) -> Result<()> { | ^^^^^^^^^^^^^^^^^^^
field `ci` is never read: src/api/app/mod.rs#L32
warning: field `ci` is never read --> src/api/app/mod.rs:32:9 | 26 | pub struct App { | --- field in this struct ... 32 | pub ci: bool, | ^^ | = note: `#[warn(dead_code)]` on by default
unreachable pattern: src/api/models/markdown/render.rs#L36
warning: unreachable pattern --> src/api/models/markdown/render.rs:36:25 | 36 | _ => meta.source.into_str().to_owned(), | ^ | = note: `#[warn(unreachable_patterns)]` on by default
unused import: `Digest`: src/api/utils/hashing/curseforge.rs#L1
warning: unused import: `Digest` --> src/api/utils/hashing/curseforge.rs:1:14 | 1 | use digest::{Digest, DynDigest, FixedOutput, FixedOutputReset, OutputSizeUser, Reset, Update}; | ^^^^^^
unused variable: `args`: src/commands/markdown/json.rs#L13
warning: unused variable: `args` --> src/commands/markdown/json.rs:13:33 | 13 | pub async fn run(app: Arc<App>, args: Args) -> Result<()> { | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
unused variable: `app`: src/commands/markdown/json.rs#L13
warning: unused variable: `app` --> src/commands/markdown/json.rs:13:18 | 13 | pub async fn run(app: Arc<App>, args: Args) -> Result<()> { | ^^^ help: if this is intentional, prefix it with an underscore: `_app`
unused variable: `args`: src/commands/markdown/render.rs#L10
warning: unused variable: `args` --> src/commands/markdown/render.rs:10:33 | 10 | pub async fn run(app: Arc<App>, args: Args) -> Result<()> { | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
unused variable: `app`: src/commands/markdown/render.rs#L10
warning: unused variable: `app` --> src/commands/markdown/render.rs:10:18 | 10 | pub async fn run(app: Arc<App>, args: Args) -> Result<()> { | ^^^ help: if this is intentional, prefix it with an underscore: `_app`
unused variable: `args`: src/commands/sources/list.rs#L10
warning: unused variable: `args` --> src/commands/sources/list.rs:10:33 | 10 | pub async fn run(app: Arc<App>, args: Args) -> Result<()> { | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
unused variable: `args`: src/commands/init.rs#L14
warning: unused variable: `args` --> src/commands/init.rs:14:33 | 14 | pub async fn run(app: Arc<App>, args: Args) -> Result<()> { | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
unused variable: `args`: src/commands/build.rs#L12
warning: unused variable: `args` --> src/commands/build.rs:12:33 | 12 | pub async fn run(app: Arc<App>, args: Args) -> Result<()> { | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
unused variable: `flavor`: src/api/models/server/server_type.rs#L163
warning: unused variable: `flavor` --> src/api/models/server/server_type.rs:163:41 | 163 | ServerType::Custom { inner, flavor } => todo!(), | ^^^^^^ help: try ignoring the field: `flavor: _`
unused variable: `inner`: src/api/models/server/server_type.rs#L163
warning: unused variable: `inner` --> src/api/models/server/server_type.rs:163:34 | 163 | ServerType::Custom { inner, flavor } => todo!(), | ^^^^^ help: try ignoring the field: `inner: _`
unused variable: `loader`: src/api/models/server/server_type.rs#L161
warning: unused variable: `loader` --> src/api/models/server/server_type.rs:161:33 | 161 | ServerType::Forge { loader } => todo!(), | ^^^^^^ help: try ignoring the field: `loader: _`
unused variable: `loader`: src/api/models/server/server_type.rs#L160
warning: unused variable: `loader` --> src/api/models/server/server_type.rs:160:36 | 160 | ServerType::NeoForge { loader } => todo!(), | ^^^^^^ help: try ignoring the field: `loader: _`
unused variable: `installer`: src/api/models/server/server_type.rs#L159
warning: unused variable: `installer` --> src/api/models/server/server_type.rs:159:41 | 159 | ServerType::Quilt { loader, installer } => todo!(), | ^^^^^^^^^ help: try ignoring the field: `installer: _`
unused variable: `loader`: src/api/models/server/server_type.rs#L159
warning: unused variable: `loader` --> src/api/models/server/server_type.rs:159:33 | 159 | ServerType::Quilt { loader, installer } => todo!(), | ^^^^^^ help: try ignoring the field: `loader: _`
unused variable: `build`: src/api/models/server/server_type.rs#L150
warning: unused variable: `build` --> src/api/models/server/server_type.rs:150:34 | 150 | ServerType::Purpur { build } => todo!(), | ^^^^^ help: try ignoring the field: `build: _`
unused variable: `steps`: src/api/models/packwiz/mod.rs#L53
warning: unused variable: `steps` --> src/api/models/packwiz/mod.rs:53:13 | 53 | let steps = addon.resolve_steps(app).await?; | ^^^^^ help: if this is intentional, prefix it with an underscore: `_steps`
unused variable: `steps`: src/api/models/packwiz/mod.rs#L45
warning: unused variable: `steps` --> src/api/models/packwiz/mod.rs:45:29 | 45 | pub async fn from_steps(steps: &Vec<Step>) -> Self { | ^^^^^ help: if this is intentional, prefix it with an underscore: `_steps`
unused variable: `options`: src/api/app/actions/markdown/mod.rs#L42
warning: unused variable: `options` --> src/api/app/actions/markdown/mod.rs:42:13 | 42 | let options = self.get_markdown_options().await.unwrap_or_default(); | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_options`
unused variable: `content`: src/api/app/actions/markdown/mod.rs#L41
warning: unused variable: `content` --> src/api/app/actions/markdown/mod.rs:41:13 | 41 | let content = self.render_markdown_with(metadata).await?; | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_content`
unused variable: `version`: src/api/models/addon/addon_metadata.rs#L101
warning: unused variable: `version` --> src/api/models/addon/addon_metadata.rs:101:37 | 101 | AddonType::Spigot { id, version } => todo!(), | ^^^^^^^ help: try ignoring the field: `version: _`
unused variable: `id`: src/api/models/addon/addon_metadata.rs#L101
warning: unused variable: `id` --> src/api/models/addon/addon_metadata.rs:101:33 | 101 | AddonType::Spigot { id, version } => todo!(), | ^^ help: try ignoring the field: `id: _`
unused variable: `version`: src/api/models/addon/addon_metadata.rs#L100
warning: unused variable: `version` --> src/api/models/addon/addon_metadata.rs:100:41 | 100 | AddonType::Curseforge { id, version } => bail!("Unimplemented"), | ^^^^^^^ help: try ignoring the field: `version: _`
unused variable: `id`: src/api/models/addon/addon_metadata.rs#L100
warning: unused variable: `id` --> src/api/models/addon/addon_metadata.rs:100:37 | 100 | AddonType::Curseforge { id, version } => bail!("Unimplemented"), | ^^ help: try ignoring the field: `id: _`
variable does not need to be mutable: src/api/app/actions/init/mod.rs#L51
warning: variable does not need to be mutable --> src/api/app/actions/init/mod.rs:51:13 | 51 | let mut nw = Network { name }; | ----^^ | | | help: remove this `mut`
unused variable: `nw`: src/api/app/actions/init/mod.rs#L51
warning: unused variable: `nw` --> src/api/app/actions/init/mod.rs:51:17 | 51 | let mut nw = Network { name }; | ^^ help: if this is intentional, prefix it with an underscore: `_nw`
variable does not need to be mutable: src/api/app/actions/init/mod.rs#L31
warning: variable does not need to be mutable --> src/api/app/actions/init/mod.rs:31:13 | 31 | let mut server = Server { | ----^^^^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default
unused variable: `app`: src/api/models/packwiz/mod.rs#L66
warning: unused variable: `app` --> src/api/models/packwiz/mod.rs:66:36 | 66 | pub async fn into_addon(&self, app: &App, target: AddonTarget) -> Result<Addon> { | ^^^ help: if this is intentional, prefix it with an underscore: `_app`
unused variable: `path`: src/api/models/source.rs#L38
warning: unused variable: `path` --> src/api/models/source.rs:38:30 | 38 | Source::Folder { path } => Ok(vec![]), | ^^^^ help: try ignoring the field: `path: _`
unused variable: `label`: src/api/app/step/execute_java.rs#L13
warning: unused variable: `label` --> src/api/app/step/execute_java.rs:13:9 | 13 | label: &str, | ^^^^^ help: if this is intentional, prefix it with an underscore: `_label`
unused variable: `format`: src/api/app/step/cache_check.rs#L51
warning: unused variable: `format` --> src/api/app/step/cache_check.rs:51:30 | 51 | if let Some((format, mut hasher, content)) = hasher { | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_format`
unused variable: `app`: src/api/sources/url/mod.rs#L10
warning: unused variable: `app` --> src/api/sources/url/mod.rs:10:5 | 10 | app: &App, | ^^^ help: if this is intentional, prefix it with an underscore: `_app`
unused variable: `version`: src/api/models/addon/addon.rs#L21
warning: unused variable: `version` --> src/api/models/addon/addon.rs:21:41 | 21 | AddonType::Curseforge { id, version } => Ok(vec![]), | ^^^^^^^ help: try ignoring the field: `version: _`
unused variable: `id`: src/api/models/addon/addon.rs#L21
warning: unused variable: `id` --> src/api/models/addon/addon.rs:21:37 | 21 | AddonType::Curseforge { id, version } => Ok(vec![]), | ^^ help: try ignoring the field: `id: _`
unused variable: `loader`: src/api/models/server/server_type.rs#L120
warning: unused variable: `loader` --> src/api/models/server/server_type.rs:120:33 | 120 | ServerType::Forge { loader } => todo!(), | ^^^^^^ help: try ignoring the field: `loader: _`
unused variable: `loader`: src/api/models/server/server_type.rs#L119
warning: unused variable: `loader` --> src/api/models/server/server_type.rs:119:36 | 119 | ServerType::NeoForge { loader } => todo!(), | ^^^^^^ help: try ignoring the field: `loader: _`
unused variable: `build`: src/api/models/server/server_type.rs#L116
warning: unused variable: `build` --> src/api/models/server/server_type.rs:116:34 | 116 | ServerType::Purpur { build } => todo!(), | ^^^^^ help: try ignoring the field: `build: _` | = note: `#[warn(unused_variables)]` on by default
unused import: `path::Path`: src/commands/init.rs#L1
warning: unused import: `path::Path` --> src/commands/init.rs:1:11 | 1 | use std::{path::Path, sync::Arc}; | ^^^^^^^^^^
binding's name is too similar to existing binding: src/api/utils/pathdiff.rs#L59
warning: binding's name is too similar to existing binding --> src/api/utils/pathdiff.rs:59:17 | 59 | let mut itb = base.components(); | ^^^ | note: existing binding defined here --> src/api/utils/pathdiff.rs:58:17 | 58 | let mut ita = path.components(); | ^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#similar_names
unused import: `DynDigest`: src/api/utils/hashing/curseforge.rs#L1
warning: unused import: `DynDigest` --> src/api/utils/hashing/curseforge.rs:1:22 | 1 | use digest::{Digest, DynDigest, FixedOutput, FixedOutputReset, OutputSizeUser, Reset, Update}; | ^^^^^^^^^
unused imports: `Read`, `Seek`: src/api/utils/accessor.rs#L2
warning: unused imports: `Read`, `Seek` --> src/api/utils/accessor.rs:2:10 | 2 | io::{Read, Seek}, | ^^^^ ^^^^
unused import: `diff_paths`: src/api/tools/java/mod.rs#L15
warning: unused import: `diff_paths` --> src/api/tools/java/mod.rs:15:35 | 15 | use crate::api::utils::pathdiff::{diff_paths, DiffTo}; | ^^^^^^^^^^
unused import: `Future`: src/api/tools/java/mod.rs#L10
warning: unused import: `Future` --> src/api/tools/java/mod.rs:10:15 | 10 | use futures::{Future, StreamExt}; | ^^^^^^
unused import: `bail`: src/api/sources/quilt/mod.rs#L1
warning: unused import: `bail` --> src/api/sources/quilt/mod.rs:1:14 | 1 | use anyhow::{bail, Result}; | ^^^^
unused import: `anyhow::Result`: src/api/sources/hangar/models.rs#L3
warning: unused import: `anyhow::Result` --> src/api/sources/hangar/models.rs:3:5 | 3 | use anyhow::Result; | ^^^^^^^^^^^^^^
unused imports: `assets::*`, `rulematcher::*`: src/api/sources/vanilla/mod.rs#L17
warning: unused imports: `assets::*`, `rulematcher::*` --> src/api/sources/vanilla/mod.rs:17:16 | 17 | pub use self::{assets::*, manifest::*, rulematcher::*, version::*}; | ^^^^^^^^^ ^^^^^^^^^^^^^^
unused import: `Context`: src/api/sources/github/mod.rs#L1
warning: unused import: `Context` --> src/api/sources/github/mod.rs:1:22 | 1 | use anyhow::{anyhow, Context, Result}; | ^^^^^^^
unused import: `models::*`: src/api/sources/curseforge/mod.rs#L3
warning: unused import: `models::*` --> src/api/sources/curseforge/mod.rs:3:9 | 3 | pub use models::*; | ^^^^^^^^^
unused import: `url::get_filename_from_url`: src/api/models/packwiz/mod.rs#L10
warning: unused import: `url::get_filename_from_url` --> src/api/models/packwiz/mod.rs:10:87 | 10 | use crate::api::{app::App, models::AddonType, step::Step, utils::{accessor::Accessor, url::get_filename_from_url}}; | ^^^^^^^^^^^^^^^^^^^^^^^^^^
unused import: `Path`: src/api/models/packwiz/mod.rs#L4
warning: unused import: `Path` --> src/api/models/packwiz/mod.rs:4:17 | 4 | use std::path::{Path, PathBuf}; | ^^^^
unused import: `Environment`: src/api/models/mrpack/mod.rs#L13
warning: unused import: `Environment` --> src/api/models/mrpack/mod.rs:13:44 | 13 | use super::{Addon, AddonTarget, AddonType, Environment}; | ^^^^^^^^^^^
unused import: `models::Environment`: src/api/models/mrpack/mrpack_file.rs#L5
warning: unused import: `models::Environment` --> src/api/models/mrpack/mrpack_file.rs:5:18 | 5 | use crate::api::{models::Environment, utils::hashing::HashFormat}; | ^^^^^^^^^^^^^^^^^^^
redundant else block: src/api/app/step/cache_check.rs#L69
warning: redundant else block --> src/api/app/step/cache_check.rs:69:28 | 69 | } else { | ____________________________^ 70 | | // hash mismatch 71 | | // TODO: print warning 72 | | println!("WARNING Hash mismatch: {}", metadata.filename); 73 | | tokio::fs::remove_file(&output_path).await?; 74 | | } | |_____________________^ | = help: remove the `else` block and move the contents out = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_else = note: `-W clippy::redundant-else` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::redundant_else)]`
binding's name is too similar to existing binding: src/api/app/http.rs#L20
warning: binding's name is too similar to existing binding --> src/api/app/http.rs:20:13 | 20 | let res = req.send().await?.error_for_status()?; | ^^^ | note: existing binding defined here --> src/api/app/http.rs:16:13 | 16 | let req = self.http_client.get(url.as_str()); | ^^^ = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#similar_names = note: `-W clippy::similar-names` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::similar_names)]`
unused imports: `AddonMetadataSource`, `MarkdownOutput`: src/api/app/actions/markdown/mod.rs#L5
warning: unused imports: `AddonMetadataSource`, `MarkdownOutput` --> src/api/app/actions/markdown/mod.rs:5:65 | 5 | use crate::api::{app::App, models::{markdown::{MarkdownOptions, MarkdownOutput}, AddonMetadata, AddonMetadataSource}}; | ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
clippy
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3, actions-rs/clippy-check@v1. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
clippy
The following actions uses node12 which is deprecated and will be forced to run on node16: actions-rs/clippy-check@v1. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/
build (ubuntu-latest)
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3, actions/upload-artifact@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
build (windows-latest)
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3, actions/upload-artifact@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
Deprecation notice: v1, v2, and v3 of the artifact actions
The following artifacts were uploaded using a version of actions/upload-artifact that is scheduled for deprecation: "mcman-ubuntu-latest", "mcman-windows-latest". Please update your workflow to use v4 of the artifact actions. Learn more: https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/

Artifacts

Produced during runtime
Name Size
mcman-ubuntu-latest Expired
5.13 MB
mcman-windows-latest Expired
8.38 MB