diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 000000000..dcec9d87f --- /dev/null +++ b/clippy.toml @@ -0,0 +1 @@ +too-many-arguments-threshold = 8 \ No newline at end of file diff --git a/src/child.rs b/src/child.rs index e312c2053..8c1705f7c 100644 --- a/src/child.rs +++ b/src/child.rs @@ -23,7 +23,7 @@ enum OutputFragment { /// given sender. fn read_and_send( mut reader: R, - sender: mpsc::Sender, + sender: &mpsc::Sender, mut map: F, ) -> io::Result<()> where @@ -86,10 +86,7 @@ where .rev() .find(|(_, ch)| *ch == b'\n') { - let next_in_progress: Vec = self.in_progress[last_newline + 1..] - .iter() - .cloned() - .collect(); + let next_in_progress: Vec = self.in_progress[last_newline + 1..].to_vec(); let mut these_lines = mem::replace(&mut self.in_progress, next_in_progress); these_lines.truncate(last_newline + 1); let these_lines = String::from_utf8(these_lines)?; @@ -139,9 +136,9 @@ pub fn run( // waiting on the child process. let stdout_handle = - thread::spawn(move || read_and_send(stdout, stdout_send, OutputFragment::Stdout)); + thread::spawn(move || read_and_send(stdout, &stdout_send, OutputFragment::Stdout)); let stderr_handle = - thread::spawn(move || read_and_send(stderr, stderr_send, OutputFragment::Stderr)); + thread::spawn(move || read_and_send(stderr, &stderr_send, OutputFragment::Stderr)); let mut stdout = OutputAccumulator::new(|line| { info!(logger, "{} (stdout): {}", command_name, line); @@ -168,7 +165,7 @@ pub fn run( let exit = child.wait()?; if exit.success() { - return Ok(stdout); + Ok(stdout) } else { drop((stdout, stderr)); bail!("failed to execute `{}`: exited with {}", command_name, exit) diff --git a/src/command/build.rs b/src/command/build.rs index 0fbbff3e9..47eb57450 100644 --- a/src/command/build.rs +++ b/src/command/build.rs @@ -179,7 +179,7 @@ impl Build { /// Execute this `Build` command. pub fn run(&mut self, log: &Logger) -> Result<(), Error> { - let process_steps = Build::get_process_steps(&self.mode); + let process_steps = Build::get_process_steps(self.mode); let mut step_counter = Step::new(process_steps.len()); @@ -208,7 +208,7 @@ impl Build { Ok(()) } - fn get_process_steps(mode: &BuildMode) -> Vec<(&'static str, BuildStep)> { + fn get_process_steps(mode: BuildMode) -> Vec<(&'static str, BuildStep)> { macro_rules! steps { ($($name:ident),+) => { { diff --git a/src/command/login.rs b/src/command/login.rs index a660cb9e3..7e206e95d 100644 --- a/src/command/login.rs +++ b/src/command/login.rs @@ -5,12 +5,12 @@ use PBAR; pub fn login( registry: Option, - scope: Option, + scope: &Option, always_auth: bool, - auth_type: Option, + auth_type: &Option, log: &Logger, ) -> result::Result<(), failure::Error> { - let registry = registry.unwrap_or(npm::DEFAULT_NPM_REGISTRY.to_string()); + let registry = registry.unwrap_or_else(|| npm::DEFAULT_NPM_REGISTRY.to_string()); info!(&log, "Logging in to npm..."); info!( @@ -25,6 +25,6 @@ pub fn login( npm::npm_login(log, ®istry, &scope, always_auth, &auth_type)?; info!(&log, "Logged you in!"); - PBAR.message(&format!("👋 logged you in!")); + PBAR.message(&"👋 logged you in!".to_string()); Ok(()) } diff --git a/src/command/mod.rs b/src/command/mod.rs index 06353ec1d..a6794a1b4 100644 --- a/src/command/mod.rs +++ b/src/command/mod.rs @@ -90,7 +90,7 @@ pub enum Command { pub fn run_wasm_pack(command: Command, log: &Logger) -> result::Result<(), Error> { // Run the correct command based off input and store the result of it so that we can clear // the progress bar then return it - let status = match command { + match command { Command::Build(build_opts) => { info!(&log, "Running build command..."); Build::try_from_opts(build_opts).and_then(|mut b| b.run(&log)) @@ -107,7 +107,7 @@ pub fn run_wasm_pack(command: Command, log: &Logger) -> result::Result<(), Error } => { info!(&log, "Running publish command..."); info!(&log, "Path: {:?}", &path); - publish(target, path, access, &log) + publish(&target, path, access, &log) } Command::Login { registry, @@ -124,14 +124,11 @@ pub fn run_wasm_pack(command: Command, log: &Logger) -> result::Result<(), Error &always_auth, &auth_type ); - login(registry, scope, always_auth, auth_type, &log) + login(registry, &scope, always_auth, &auth_type, &log) } Command::Test(test_opts) => { info!(&log, "Running test command..."); Test::try_from_opts(test_opts).and_then(|t| t.run(&log)) } - }; - - // Return the actual status of the program to the main function - status + } } diff --git a/src/command/publish/mod.rs b/src/command/publish/mod.rs index b2c0916d7..50e9ac824 100644 --- a/src/command/publish/mod.rs +++ b/src/command/publish/mod.rs @@ -15,7 +15,7 @@ use PBAR; /// Creates a tarball from a 'pkg' directory /// and publishes it to the NPM registry pub fn publish( - _target: String, + _target: &str, path: Option, access: Option, log: &Logger, diff --git a/src/command/utils.rs b/src/command/utils.rs index f17111508..5a29a7477 100644 --- a/src/command/utils.rs +++ b/src/command/utils.rs @@ -11,7 +11,7 @@ use PBAR; /// If an explicit path is given, then use it, otherwise assume the current /// directory is the crate path. pub fn set_crate_path(path: Option) -> Result { - Ok(path.unwrap_or(PathBuf::from("."))) + Ok(path.unwrap_or_else(|| PathBuf::from("."))) } /// Construct our `pkg` directory in the crate. diff --git a/src/installer.rs b/src/installer.rs index b2e42ad20..ce89667c3 100644 --- a/src/installer.rs +++ b/src/installer.rs @@ -114,7 +114,7 @@ fn confirm_can_overwrite(dst: &Path) -> Result<(), failure::Error> { .read_line(&mut line) .with_context(|_| "failed to read stdin")?; - if line.starts_with("y") || line.starts_with("Y") { + if line.starts_with('y') || line.starts_with('Y') { return Ok(()); } diff --git a/src/lockfile.rs b/src/lockfile.rs index d174f6a08..3edd6cff6 100644 --- a/src/lockfile.rs +++ b/src/lockfile.rs @@ -1,5 +1,7 @@ //! Reading Cargo.lock lock file. +#![allow(clippy::new_ret_no_self)] + use std::fs; use std::path::PathBuf; diff --git a/src/logger.rs b/src/logger.rs index 08add5de0..78442a0f9 100644 --- a/src/logger.rs +++ b/src/logger.rs @@ -38,11 +38,7 @@ fn log_file_path(cmd: &Command) -> PathBuf { let path = match cmd { Command::Build(build_opts) => &build_opts.path, Command::Pack { path } => path, - Command::Publish { - target: _, - path, - access: _, - } => path, + Command::Publish { path, .. } => path, Command::Test(test_opts) => &test_opts.path, Command::Login { .. } => &None, }; diff --git a/src/manifest/mod.rs b/src/manifest/mod.rs index 92f03cd49..0d8802a92 100644 --- a/src/manifest/mod.rs +++ b/src/manifest/mod.rs @@ -1,5 +1,7 @@ //! Reading and writing Cargo.toml and package.json manifests. +#![allow(clippy::new_ret_no_self, clippy::needless_pass_by_value)] + mod npm; use std::fs; @@ -20,7 +22,7 @@ use strsim::levenshtein; use toml; use PBAR; -const WASM_PACK_METADATA_KEY: &'static str = "package.metadata.wasm-pack"; +const WASM_PACK_METADATA_KEY: &str = "package.metadata.wasm-pack"; /// Store for metadata learned about a crate pub struct CrateData { @@ -145,7 +147,7 @@ impl CargoWasmPackProfile { D: serde::Deserializer<'de>, { let mut profile = >::deserialize(deserializer)?.unwrap_or_default(); - profile.update_with_defaults(Self::default_dev()); + profile.update_with_defaults(&Self::default_dev()); Ok(profile) } @@ -154,7 +156,7 @@ impl CargoWasmPackProfile { D: serde::Deserializer<'de>, { let mut profile = >::deserialize(deserializer)?.unwrap_or_default(); - profile.update_with_defaults(Self::default_release()); + profile.update_with_defaults(&Self::default_release()); Ok(profile) } @@ -163,11 +165,11 @@ impl CargoWasmPackProfile { D: serde::Deserializer<'de>, { let mut profile = >::deserialize(deserializer)?.unwrap_or_default(); - profile.update_with_defaults(Self::default_profiling()); + profile.update_with_defaults(&Self::default_profiling()); Ok(profile) } - fn update_with_defaults(&mut self, defaults: Self) { + fn update_with_defaults(&mut self, defaults: &Self) { macro_rules! d { ( $( $path:ident ).* ) => { self. $( $path ).* .get_or_insert(defaults. $( $path ).* .unwrap()); @@ -248,7 +250,7 @@ impl CrateData { for e in errors[..errors.len() - 1].iter().rev() { err = err.context(e.to_string()).into(); } - return err; + err } } diff --git a/src/npm.rs b/src/npm.rs index 76fe84171..b1f17bee7 100644 --- a/src/npm.rs +++ b/src/npm.rs @@ -7,7 +7,7 @@ use slog::Logger; use std::process::{Command, Stdio}; /// The default npm registry used when we aren't working with a custom registry. -pub const DEFAULT_NPM_REGISTRY: &'static str = "https://registry.npmjs.org/"; +pub const DEFAULT_NPM_REGISTRY: &str = "https://registry.npmjs.org/"; /// Run the `npm pack` command. pub fn npm_pack(log: &Logger, path: &str) -> Result<(), failure::Error> { @@ -24,7 +24,7 @@ pub fn npm_publish(log: &Logger, path: &str, access: Option) -> Result<( Some(a) => cmd .current_dir(path) .arg("publish") - .arg(&format!("{}", a.to_string())) + .arg(&a.to_string()) .stdin(Stdio::inherit()) .stdout(Stdio::inherit()), None => cmd @@ -41,7 +41,7 @@ pub fn npm_publish(log: &Logger, path: &str, access: Option) -> Result<( /// Run the `npm login` command. pub fn npm_login( log: &Logger, - registry: &String, + registry: &str, scope: &Option, always_auth: bool, auth_type: &Option, @@ -54,7 +54,7 @@ pub fn npm_login( args.push_str(&format!(" --scope={}", scope)); } - if always_auth == true { + if always_auth { args.push_str(" --always_auth"); } diff --git a/src/progressbar.rs b/src/progressbar.rs index 24a894777..fa51cc659 100644 --- a/src/progressbar.rs +++ b/src/progressbar.rs @@ -75,7 +75,7 @@ impl ProgressOutput { } /// Add an error message. - pub fn error(&self, message: String) { + pub fn error(&self, message: &str) { let err = format!( "{} {}: {}", emoji::ERROR, @@ -135,3 +135,9 @@ impl Drop for ProgressOutput { self.done(); } } + +impl Default for ProgressOutput { + fn default() -> Self { + Self::new() + } +} diff --git a/src/readme.rs b/src/readme.rs index 83a4b10c8..2eec06087 100644 --- a/src/readme.rs +++ b/src/readme.rs @@ -23,8 +23,8 @@ pub fn copy_from_crate(path: &Path, out_dir: &Path, step: &Step) -> Result<(), f PBAR.step(step, &msg); let crate_readme_path = path.join("README.md"); let new_readme_path = out_dir.join("README.md"); - if let Err(_) = fs::copy(&crate_readme_path, &new_readme_path) { + if fs::copy(&crate_readme_path, &new_readme_path).is_err() { PBAR.warn("origin crate has no README"); - }; + } Ok(()) }