diff --git a/crates/turborepo-filewatch/src/optional_watch.rs b/crates/turborepo-filewatch/src/optional_watch.rs index 7e891d115a68b..853bd45c0fcfb 100644 --- a/crates/turborepo-filewatch/src/optional_watch.rs +++ b/crates/turborepo-filewatch/src/optional_watch.rs @@ -48,7 +48,7 @@ impl OptionalWatch { pub struct SomeRef<'a, T>(pub(crate) Ref<'a, Option>); -impl<'a, T> std::ops::Deref for SomeRef<'a, T> { +impl std::ops::Deref for SomeRef<'_, T> { type Target = T; fn deref(&self) -> &Self::Target { diff --git a/crates/turborepo-filewatch/src/scm_resource.rs b/crates/turborepo-filewatch/src/scm_resource.rs index d0113b2812e6e..db9784e285129 100644 --- a/crates/turborepo-filewatch/src/scm_resource.rs +++ b/crates/turborepo-filewatch/src/scm_resource.rs @@ -41,7 +41,7 @@ impl SCMResource { } } -impl<'a> Deref for SCMPermit<'a> { +impl Deref for SCMPermit<'_> { type Target = SCM; fn deref(&self) -> &Self::Target { diff --git a/crates/turborepo-lib/src/lib.rs b/crates/turborepo-lib/src/lib.rs index 5584fa4ba0c83..f27e511c404d3 100644 --- a/crates/turborepo-lib/src/lib.rs +++ b/crates/turborepo-lib/src/lib.rs @@ -2,13 +2,14 @@ #![feature(box_patterns)] #![feature(error_generic_member_access)] #![feature(hash_extract_if)] -#![feature(option_get_or_insert_default)] #![feature(once_cell_try)] #![feature(try_blocks)] #![feature(impl_trait_in_assoc_type)] #![deny(clippy::all)] // Clippy's needless mut lint is buggy: https://github.com/rust-lang/rust-clippy/issues/11299 #![allow(clippy::needless_pass_by_ref_mut)] +// Code generated by tonic-build don't follow this lint +#![allow(clippy::needless_lifetimes)] #![allow(dead_code)] mod child; diff --git a/crates/turborepo-lib/src/task_graph/visitor/mod.rs b/crates/turborepo-lib/src/task_graph/visitor/mod.rs index 2797d693d3de6..32b0207a03e8b 100644 --- a/crates/turborepo-lib/src/task_graph/visitor/mod.rs +++ b/crates/turborepo-lib/src/task_graph/visitor/mod.rs @@ -368,7 +368,6 @@ impl<'a> Visitor<'a> { /// Finishes visiting the tasks, creates the run summary, and either /// prints, saves, or sends it to spaces. - #[allow(clippy::too_many_arguments)] #[tracing::instrument(skip( self, diff --git a/crates/turborepo-lockfiles/src/berry/identifiers.rs b/crates/turborepo-lockfiles/src/berry/identifiers.rs index 2eaed5aa75dec..6914bc915bc2e 100644 --- a/crates/turborepo-lockfiles/src/berry/identifiers.rs +++ b/crates/turborepo-lockfiles/src/berry/identifiers.rs @@ -64,7 +64,7 @@ pub struct Locator<'a> { pub reference: Cow<'a, str>, } -impl<'a> Ident<'a> { +impl Ident<'_> { /// Clones underlying strings and changes lifetime to represent this pub fn to_owned(&self) -> Ident<'static> { let Ident { scope, name } = self; @@ -91,7 +91,7 @@ impl<'a> TryFrom<&'a str> for Ident<'a> { } } -impl<'a> fmt::Display for Ident<'a> { +impl fmt::Display for Ident<'_> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::fmt::Result { if let Some(scope) = self.scope.as_deref() { f.write_fmt(format_args!("@{scope}/"))?; @@ -114,7 +114,7 @@ impl<'a> TryFrom<&'a str> for Descriptor<'a> { } } -impl<'a> fmt::Display for Descriptor<'a> { +impl fmt::Display for Descriptor<'_> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_fmt(format_args!("{}@{}", self.ident, self.range)) } @@ -186,7 +186,7 @@ impl<'a> TryFrom<&'a str> for Locator<'a> { } } -impl<'a> fmt::Display for Locator<'a> { +impl fmt::Display for Locator<'_> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_fmt(format_args!("{}@{}", self.ident, self.reference)) } diff --git a/crates/turborepo-microfrontends/src/lib.rs b/crates/turborepo-microfrontends/src/lib.rs index 73b043683c279..74272c49d4474 100644 --- a/crates/turborepo-microfrontends/src/lib.rs +++ b/crates/turborepo-microfrontends/src/lib.rs @@ -108,7 +108,9 @@ impl Config { }) } - pub fn development_tasks<'a>(&'a self) -> Box)> + 'a> { + pub fn development_tasks<'a>( + &'a self, + ) -> Box)> + 'a> { match &self.inner { ConfigInner::V1(config_v1) => Box::new(config_v1.development_tasks()), ConfigInner::V2(config_v2) => Box::new(config_v2.development_tasks()), diff --git a/crates/turborepo-repository/src/change_mapper/package.rs b/crates/turborepo-repository/src/change_mapper/package.rs index f6aa3645a2bca..d09094992414b 100644 --- a/crates/turborepo-repository/src/change_mapper/package.rs +++ b/crates/turborepo-repository/src/change_mapper/package.rs @@ -45,7 +45,7 @@ impl<'a> DefaultPackageChangeMapper<'a> { } } -impl<'a> PackageChangeMapper for DefaultPackageChangeMapper<'a> { +impl PackageChangeMapper for DefaultPackageChangeMapper<'_> { fn detect_package(&self, file: &AnchoredSystemPath) -> PackageMapping { for (name, entry) in self.pkg_dep_graph.packages() { if name == &PackageName::Root { @@ -105,7 +105,7 @@ impl<'a> GlobalDepsPackageChangeMapper<'a> { } } -impl<'a> PackageChangeMapper for GlobalDepsPackageChangeMapper<'a> { +impl PackageChangeMapper for GlobalDepsPackageChangeMapper<'_> { fn detect_package(&self, path: &AnchoredSystemPath) -> PackageMapping { // If we have a lockfile change, we consider this as a root package change, // since there's a chance that the root package uses a workspace package diff --git a/crates/turborepo-repository/src/package_graph/builder.rs b/crates/turborepo-repository/src/package_graph/builder.rs index ec6f2c17b5122..2180844f0da47 100644 --- a/crates/turborepo-repository/src/package_graph/builder.rs +++ b/crates/turborepo-repository/src/package_graph/builder.rs @@ -163,7 +163,7 @@ enum ResolvedWorkspaces {} // Allows us to collect all transitive deps enum ResolvedLockfile {} -impl<'a, S, T> BuildState<'a, S, T> { +impl BuildState<'_, S, T> { fn add_node(&mut self, node: PackageNode) -> NodeIndex { let idx = self.workspace_graph.add_node(node.clone()); self.node_lookup.insert(node, idx); diff --git a/crates/turborepo-repository/src/package_graph/dep_splitter.rs b/crates/turborepo-repository/src/package_graph/dep_splitter.rs index 615ddaab6daea..03ae1aba7f70c 100644 --- a/crates/turborepo-repository/src/package_graph/dep_splitter.rs +++ b/crates/turborepo-repository/src/package_graph/dep_splitter.rs @@ -192,7 +192,7 @@ impl<'a> DependencyVersion<'a> { } } -impl<'a> fmt::Display for DependencyVersion<'a> { +impl fmt::Display for DependencyVersion<'_> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self.protocol { Some(protocol) => f.write_fmt(format_args!("{}:{}", protocol, self.version)), diff --git a/crates/turborepo-repository/src/package_manager/bun.rs b/crates/turborepo-repository/src/package_manager/bun.rs index 4ed64cb207d46..a78e15f0fb34a 100644 --- a/crates/turborepo-repository/src/package_manager/bun.rs +++ b/crates/turborepo-repository/src/package_manager/bun.rs @@ -18,7 +18,7 @@ impl<'a> BunDetector<'a> { } } -impl<'a> Iterator for BunDetector<'a> { +impl Iterator for BunDetector<'_> { type Item = Result; fn next(&mut self) -> Option { diff --git a/crates/turborepo-repository/src/package_manager/npm.rs b/crates/turborepo-repository/src/package_manager/npm.rs index 969e2dd3cb820..638d38c6d285e 100644 --- a/crates/turborepo-repository/src/package_manager/npm.rs +++ b/crates/turborepo-repository/src/package_manager/npm.rs @@ -18,7 +18,7 @@ impl<'a> NpmDetector<'a> { } } -impl<'a> Iterator for NpmDetector<'a> { +impl Iterator for NpmDetector<'_> { type Item = Result; fn next(&mut self) -> Option { diff --git a/crates/turborepo-repository/src/package_manager/pnpm.rs b/crates/turborepo-repository/src/package_manager/pnpm.rs index e89bea7163fff..7b0d6b6b315eb 100644 --- a/crates/turborepo-repository/src/package_manager/pnpm.rs +++ b/crates/turborepo-repository/src/package_manager/pnpm.rs @@ -36,7 +36,7 @@ impl<'a> PnpmDetector<'a> { } } -impl<'a> Iterator for PnpmDetector<'a> { +impl Iterator for PnpmDetector<'_> { type Item = Result; fn next(&mut self) -> Option { diff --git a/crates/turborepo-repository/src/package_manager/yarn.rs b/crates/turborepo-repository/src/package_manager/yarn.rs index f81d31d145dc0..b7a83e948735b 100644 --- a/crates/turborepo-repository/src/package_manager/yarn.rs +++ b/crates/turborepo-repository/src/package_manager/yarn.rs @@ -75,7 +75,7 @@ pub(crate) fn prune_patches>( pruned_json } -impl<'a> Iterator for YarnDetector<'a> { +impl Iterator for YarnDetector<'_> { type Item = Result; fn next(&mut self) -> Option { diff --git a/crates/turborepo-ui/src/output.rs b/crates/turborepo-ui/src/output.rs index 4b9d26140fe7f..8027270808d70 100644 --- a/crates/turborepo-ui/src/output.rs +++ b/crates/turborepo-ui/src/output.rs @@ -238,7 +238,7 @@ impl OutputClient { } } -impl<'a, W: Write> Write for OutputWriter<'a, W> { +impl Write for OutputWriter<'_, W> { fn write(&mut self, buf: &[u8]) -> io::Result { for line in buf.split_inclusive(|b| *b == b'\n') { self.buffer.extend_from_slice(line); diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index 950bc3e76dade..9332fb5ed2e87 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -158,7 +158,7 @@ impl App { let active_task = self.active_task()?.to_owned(); self.tasks .get_mut(&active_task) - .ok_or_else(|| Error::TaskNotFound { name: active_task }) + .ok_or(Error::TaskNotFound { name: active_task }) } fn persist_active_task(&mut self) -> Result<(), Error> { diff --git a/crates/turborepo-ui/src/tui/clipboard.rs b/crates/turborepo-ui/src/tui/clipboard.rs index e1572c646c78f..ec95d624b18f2 100644 --- a/crates/turborepo-ui/src/tui/clipboard.rs +++ b/crates/turborepo-ui/src/tui/clipboard.rs @@ -86,6 +86,8 @@ fn copy_impl(s: &str, provider: &Provider) -> std::io::Result<()> { } Provider::Exec(prog, args) => { + // Child::wait is run after writing `s` into stdin + #[allow(clippy::zombie_processes)] let mut child = std::process::Command::new(prog) .args(args) .stdin(Stdio::piped()) diff --git a/crates/turborepo-ui/src/tui/input.rs b/crates/turborepo-ui/src/tui/input.rs index e82aed682597f..3806bdb798a38 100644 --- a/crates/turborepo-ui/src/tui/input.rs +++ b/crates/turborepo-ui/src/tui/input.rs @@ -31,7 +31,7 @@ pub fn start_crossterm_stream(tx: mpsc::Sender) -> Opti })) } -impl<'a> InputOptions<'a> { +impl InputOptions<'_> { /// Maps a crossterm::event::Event to a tui::Event pub fn handle_crossterm_event(self, event: crossterm::event::Event) -> Option { match event { diff --git a/crates/turborepo-ui/src/tui/pane.rs b/crates/turborepo-ui/src/tui/pane.rs index e8f6ac0f4db61..6b06d832aabe4 100644 --- a/crates/turborepo-ui/src/tui/pane.rs +++ b/crates/turborepo-ui/src/tui/pane.rs @@ -68,7 +68,7 @@ impl<'a, W> TerminalPane<'a, W> { } } -impl<'a, W> Widget for &TerminalPane<'a, W> { +impl Widget for &TerminalPane<'_, W> { fn render(self, area: ratatui::prelude::Rect, buf: &mut ratatui::prelude::Buffer) where Self: Sized, diff --git a/crates/turborepo-vt100/src/perform.rs b/crates/turborepo-vt100/src/perform.rs index ecf0aa4361b76..e6f183061341f 100644 --- a/crates/turborepo-vt100/src/perform.rs +++ b/crates/turborepo-vt100/src/perform.rs @@ -237,8 +237,8 @@ impl<'a, T: crate::callbacks::Callbacks> WrappedScreenWithCallbacks<'a, T> { } } -impl<'a, T: crate::callbacks::Callbacks> vte::Perform - for WrappedScreenWithCallbacks<'a, T> +impl vte::Perform + for WrappedScreenWithCallbacks<'_, T> { fn print(&mut self, c: char) { if c == '\u{fffd}' || ('\u{80}'..'\u{a0}').contains(&c) { @@ -272,7 +272,7 @@ impl<'a, T: crate::callbacks::Callbacks> vte::Perform ignore: bool, c: char, ) { - if intermediates.first().is_none() && c == 't' { + if intermediates.is_empty() && c == 't' { let mut iter = params.iter(); let op = iter.next().and_then(|x| x.first().copied()); if op == Some(8) { diff --git a/crates/turborepo-vt100/src/term.rs b/crates/turborepo-vt100/src/term.rs index 33a9d18c7a953..cfc50fe38b709 100644 --- a/crates/turborepo-vt100/src/term.rs +++ b/crates/turborepo-vt100/src/term.rs @@ -400,7 +400,7 @@ impl<'a> ChangeTitle<'a> { } } -impl<'a> BufWrite for ChangeTitle<'a> { +impl BufWrite for ChangeTitle<'_> { fn write_buf(&self, buf: &mut Vec) { if self.icon_name == self.title && (self.icon_name != self.prev_icon_name diff --git a/crates/turborepo-vt100/src/tui_term.rs b/crates/turborepo-vt100/src/tui_term.rs index c94b4cb65249c..c1b5354d42a8a 100644 --- a/crates/turborepo-vt100/src/tui_term.rs +++ b/crates/turborepo-vt100/src/tui_term.rs @@ -16,7 +16,7 @@ impl tui_term::widget::Screen for crate::Screen { } } -impl<'a> tui_term::widget::Screen for crate::EntireScreen<'a> { +impl tui_term::widget::Screen for crate::EntireScreen<'_> { type C = crate::Cell; fn cell(&self, row: u16, col: u16) -> Option<&Self::C> { diff --git a/crates/turborepo-wax/src/walk/mod.rs b/crates/turborepo-wax/src/walk/mod.rs index 3afe288f37987..0a5300647f9b8 100644 --- a/crates/turborepo-wax/src/walk/mod.rs +++ b/crates/turborepo-wax/src/walk/mod.rs @@ -111,7 +111,8 @@ where // `AsRef` or similar. This does not require dynamic // dispatch, but places more restrictive constraints on entry types. // Revisit this. - type Substituent<'a> = &'a dyn Entry + type Substituent<'a> + = &'a dyn Entry where Self: 'a; diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f540fb88506e7..780177141c9aa 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2024-08-30" +channel = "nightly-2024-10-11" components = ["rustfmt", "clippy"] profile = "minimal"