diff --git a/algorithms/src/lib.rs b/algorithms/src/lib.rs index 62413f59..3257aedf 100644 --- a/algorithms/src/lib.rs +++ b/algorithms/src/lib.rs @@ -1,4 +1,9 @@ -#![feature(generic_associated_types)] +#![feature(generic_associated_types, label_break_value)] +#![allow( + clippy::mem_replace_with_default, + clippy::comparison_chain, + clippy::needless_lifetimes +)] pub mod qoi; pub mod rect; diff --git a/algorithms/src/rect/region.rs b/algorithms/src/rect/region.rs index ebca5597..863a08c3 100644 --- a/algorithms/src/rect/region.rs +++ b/algorithms/src/rect/region.rs @@ -7,7 +7,7 @@ use { }; pub fn union(left: &Container, right: &Container) -> Container { - op::(left, &right) + op::(left, right) } pub fn subtract(left: &Container, right: &Container) -> Container { @@ -393,11 +393,11 @@ pub fn rects_to_bands(rects_tmp: &[RectRaw]) -> Container { let mut res = Container::new(); for &[y1, y2] in ys.array_windows_ext::<2>() { - loop { + 'bands: { macro_rules! check_rect { ($rect:expr) => {{ if $rect.y1 != y1 { - break; + break 'bands; } rects.pop(); if y2 < $rect.y2 { @@ -422,7 +422,6 @@ pub fn rects_to_bands(rects_tmp: &[RectRaw]) -> Container { } res.push(RectRaw { x1, x2, y1, y2 }); } - break; } } diff --git a/jay-config/src/lib.rs b/jay-config/src/lib.rs index 051e910d..9a79920d 100644 --- a/jay-config/src/lib.rs +++ b/jay-config/src/lib.rs @@ -34,6 +34,8 @@ //! config!(configure); //! ``` +#![allow(clippy::zero_prefixed_literal, clippy::manual_range_contains)] + use { crate::keyboard::ModifiedKeySym, bincode::{Decode, Encode}, diff --git a/src/acceptor.rs b/src/acceptor.rs index 77f82531..dcb23281 100644 --- a/src/acceptor.rs +++ b/src/acceptor.rs @@ -148,17 +148,14 @@ impl Acceptor { } } let acc = Rc::new(Acceptor { socket }); - let mut futures = vec![]; - futures.push( + let futures = vec![ state .eng .spawn(accept(acc.socket.secure.clone(), state.clone(), true)), - ); - futures.push( state .eng .spawn(accept(acc.socket.insecure.clone(), state.clone(), false)), - ); + ]; state.acceptor.set(Some(acc.clone())); Ok((acc, futures)) } diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index 4c4ed3a5..1864d29b 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -641,17 +641,15 @@ fn create_connector_display_data( } }; manufacturer = edid.base_block.id_manufacturer_name.to_string(); - for descriptor in &edid.base_block.descriptors { - if let Some(d) = descriptor { - match d { - Descriptor::DisplayProductSerialNumber(s) => { - serial_number = s.clone(); - } - Descriptor::DisplayProductName(s) => { - name = s.clone(); - } - _ => {} + for descriptor in edid.base_block.descriptors.iter().flatten() { + match descriptor { + Descriptor::DisplayProductSerialNumber(s) => { + serial_number = s.clone(); } + Descriptor::DisplayProductName(s) => { + name = s.clone(); + } + _ => {} } } if name.is_empty() { @@ -936,7 +934,7 @@ impl MetalBackend { dev: &Rc, preserve_any: bool, ) -> Result<(), MetalError> { - if let Err(e) = self.update_device_properties(&dev) { + if let Err(e) = self.update_device_properties(dev) { return Err(MetalError::UpdateProperties(e)); } let res = dev.dev.master.get_resources()?; @@ -1002,7 +1000,7 @@ impl MetalBackend { dev.futures.set(c, future); dev.connectors.set(c, connector); } - self.init_drm_device(&dev, &mut preserve)?; + self.init_drm_device(dev, &mut preserve)?; for connector in dev.connectors.lock().values() { if connector.connected() { if !preserve.connectors.contains(&connector.id) { @@ -1010,7 +1008,7 @@ impl MetalBackend { } let dd = connector.display.borrow_mut(); if !connector.connect_sent.get() { - self.send_connected(&connector, &dd); + self.send_connected(connector, &dd); } self.start_connector(connector, &dd); } @@ -1122,7 +1120,7 @@ impl MetalBackend { } } - let (connectors, futures) = get_connectors(&self, &dev, &resources.connectors)?; + let (connectors, futures) = get_connectors(self, &dev, &resources.connectors)?; let slf = Rc::new(MetalDrmDeviceData { dev: dev.clone(), @@ -1143,7 +1141,7 @@ impl MetalBackend { .push(BackendEvent::NewConnector(connector.clone())); if connector.connected() { let dd = connector.display.borrow_mut(); - self.send_connected(&connector, &dd); + self.send_connected(connector, &dd); self.start_connector(connector, &dd); } } diff --git a/src/cli/idle.rs b/src/cli/idle.rs index 279e3283..730d3cd4 100644 --- a/src/cli/idle.rs +++ b/src/cli/idle.rs @@ -169,7 +169,7 @@ fn parse_components(args: &[String]) -> Vec { args.push_front(arg[pos..].to_string()); arg = &arg[..pos]; } - let comp = match &arg[..] { + let comp = match arg { "minutes" | "minute" | "min" | "m" => Component::Minutes(arg.to_string()), "seconds" | "second" | "sec" | "s" => Component::Seconds(arg.to_string()), _ => fatal!("Could not parse `{}`", arg), diff --git a/src/cli/screenshot.rs b/src/cli/screenshot.rs index 7c9d5469..0794ca70 100644 --- a/src/cli/screenshot.rs +++ b/src/cli/screenshot.rs @@ -43,10 +43,10 @@ async fn run(screenshot: Rc) { id: sid, }); let result = Rc::new(AsyncQueue::new()); - Error::handle(&tc, sid, result.clone(), |res, err| { + Error::handle(tc, sid, result.clone(), |res, err| { res.push(Err(err.msg.to_owned())); }); - Dmabuf::handle(&tc, sid, result.clone(), |res, buf| { + Dmabuf::handle(tc, sid, result.clone(), |res, buf| { res.push(Ok(buf)); }); let buf = match result.pop().await { diff --git a/src/cli/seat_test.rs b/src/cli/seat_test.rs index 6e3d2715..b391d48c 100644 --- a/src/cli/seat_test.rs +++ b/src/cli/seat_test.rs @@ -44,7 +44,7 @@ async fn run(seat_test: Rc) { let tc = &seat_test.tc; let comp = tc.jay_compositor().await; tc.send(GetSeats { self_id: comp }); - Seat::handle(&tc, comp, seat_test.clone(), |st, seat| { + Seat::handle(tc, comp, seat_test.clone(), |st, seat| { st.names .borrow_mut() .insert(seat.id, Rc::new(seat.name.to_string())); diff --git a/src/compositor.rs b/src/compositor.rs index 8d6d2dff..294e10f9 100644 --- a/src/compositor.rs +++ b/src/compositor.rs @@ -275,19 +275,18 @@ fn start_global_event_handlers( backend: &Rc, ) -> Vec> { let eng = &state.eng; - let mut res = vec![]; - res.push(eng.spawn(tasks::handle_backend_events(state.clone()))); - res.push(eng.spawn(tasks::handle_slow_clients(state.clone()))); - res.push(eng.spawn(tasks::handle_hardware_cursor_tick(state.clone()))); - res.push(eng.spawn2(Phase::Layout, container_layout(state.clone()))); - res.push(eng.spawn2(Phase::PostLayout, container_render_data(state.clone()))); - res.push(eng.spawn2(Phase::PostLayout, output_render_data(state.clone()))); - res.push(eng.spawn2(Phase::Layout, float_layout(state.clone()))); - res.push(eng.spawn2(Phase::PostLayout, float_titles(state.clone()))); - res.push(eng.spawn2(Phase::PostLayout, idle(state.clone(), backend.clone()))); - - res + vec![ + eng.spawn(tasks::handle_backend_events(state.clone())), + eng.spawn(tasks::handle_slow_clients(state.clone())), + eng.spawn(tasks::handle_hardware_cursor_tick(state.clone())), + eng.spawn2(Phase::Layout, container_layout(state.clone())), + eng.spawn2(Phase::PostLayout, container_render_data(state.clone())), + eng.spawn2(Phase::PostLayout, output_render_data(state.clone())), + eng.spawn2(Phase::Layout, float_layout(state.clone())), + eng.spawn2(Phase::PostLayout, float_titles(state.clone())), + eng.spawn2(Phase::PostLayout, idle(state.clone(), backend.clone())), + ] } async fn create_backend( diff --git a/src/cursor.rs b/src/cursor.rs index 462d9c37..c4bb76be 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -130,7 +130,7 @@ impl ServerCursorTemplate { paths: &[BString], ctx: &Rc, ) -> Result { - match open_cursor(name, theme, &scales, sizes, paths) { + match open_cursor(name, theme, scales, sizes, paths) { Ok(cs) => { if cs.images.len() == 1 { let mut sizes = SmallMapMut::new(); diff --git a/src/dbus/incoming.rs b/src/dbus/incoming.rs index 4e9235a5..4563ab5d 100644 --- a/src/dbus/incoming.rs +++ b/src/dbus/incoming.rs @@ -117,7 +117,7 @@ impl Incoming { member: member.deref(), }; method_handler = object.methods.get(&key); - method_handler.as_ref().map(|mh| mh.deref()) + method_handler.as_deref() }; if let Some(handler) = handler { let sig = headers.signature.as_deref().unwrap_or(""); @@ -133,7 +133,7 @@ impl Incoming { if let Err(e) = handler.handle( &object, &self.socket, - &sender, + sender, serial, reply_expected, &mut parser, diff --git a/src/edid.rs b/src/edid.rs index 2a2094bf..7d976cb6 100644 --- a/src/edid.rs +++ b/src/edid.rs @@ -920,8 +920,8 @@ impl<'a> EdidParser<'a> { fn parse_descriptors(&mut self, revision: u8) -> Result<[Option; 4], EdidError> { let _ctx = self.push_ctx(EdidParseContext::Descriptors); let mut res = [None, None, None, None]; - for i in 0..4 { - res[i] = self.parse_descriptor(revision)?; + for res in &mut res { + *res = self.parse_descriptor(revision)?; } Ok(res) } diff --git a/src/io_uring.rs b/src/io_uring.rs index e02266a4..991e8925 100644 --- a/src/io_uring.rs +++ b/src/io_uring.rs @@ -96,7 +96,7 @@ impl IoUring { let mut params = io_uring_params::default(); let fd = match io_uring_setup(entries, &mut params) { Ok(f) => f, - Err(e) => return Err(IoUringError::CreateUring(e.into())), + Err(e) => return Err(IoUringError::CreateUring(e)), }; if !params.features.contains(IORING_FEAT_NODROP) { return Err(IoUringError::NoDrop); @@ -342,7 +342,7 @@ impl IoUringData { self.cqhead.deref().store(head, Release); if let Some(pending) = self.tasks.remove(&entry.user_data) { self.pending_in_kernel.remove(&entry.user_data); - pending.complete(&self, entry.res); + pending.complete(self, entry.res); } } self.cqhead.deref().store(head, Release); diff --git a/src/macros.rs b/src/macros.rs index 57524d96..c905c10f 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -596,11 +596,12 @@ macro_rules! bitflags { } impl std::fmt::Debug for $name { + #[allow(clippy::bad_bit_mask)] fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let mut any = false; let mut v = self.0; $( - if v & $val == $val { + if $val != 0 && v & $val == $val { if any { write!(f, "|")?; } diff --git a/src/main.rs b/src/main.rs index 58c89c15..ec6dcdab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,18 @@ clippy::option_map_unit_fn, clippy::wrong_self_convention, clippy::single_char_add_str, - clippy::ptr_eq + clippy::ptr_eq, + clippy::zero_prefixed_literal, + clippy::unnecessary_unwrap, + clippy::needless_return, + clippy::missing_safety_doc, + clippy::collapsible_if, + clippy::mut_from_ref, + clippy::bool_comparison, + clippy::collapsible_match, + clippy::field_reassign_with_default, + clippy::new_ret_no_self, + clippy::or_fun_call )] #[macro_use] diff --git a/src/render/renderer/renderer.rs b/src/render/renderer/renderer.rs index c6c270d8..1fac30b6 100644 --- a/src/render/renderer/renderer.rs +++ b/src/render/renderer/renderer.rs @@ -166,7 +166,7 @@ impl Renderer<'_> { let x = x + (pos.width() - tex.width()) / 2; let y = y + (pos.height() - tex.height()) / 2; self.base - .render_texture(&tex, x, y, &ARGB8888, None, None, self.base.scale); + .render_texture(&tex, x, y, ARGB8888, None, None, self.base.scale); } } diff --git a/src/state.rs b/src/state.rs index 9b3d1b04..5c5a9056 100644 --- a/src/state.rs +++ b/src/state.rs @@ -411,7 +411,7 @@ impl State { } } else { let container = - ContainerNode::new(self, &ws, ws.clone(), node, ContainerSplit::Horizontal); + ContainerNode::new(self, ws, ws.clone(), node, ContainerSplit::Horizontal); ws.set_container(&container); } } @@ -484,7 +484,7 @@ impl State { return output.ensure_workspace(); } } - if let Some(output) = self.root.outputs.lock().values().cloned().next() { + if let Some(output) = self.root.outputs.lock().values().next().cloned() { return output.ensure_workspace(); } self.dummy_output.get().unwrap().ensure_workspace() diff --git a/src/tasks/drmdev.rs b/src/tasks/drmdev.rs index 02742ec7..2703a67a 100644 --- a/src/tasks/drmdev.rs +++ b/src/tasks/drmdev.rs @@ -101,6 +101,7 @@ impl DrvDevHandler { config.new_drm_dev(self.id); } 'outer: loop { + #[allow(clippy::never_loop)] while let Some(event) = self.data.dev.event() { match event { DrmEvent::Removed => break 'outer, diff --git a/src/tools/tool_client.rs b/src/tools/tool_client.rs index a4adc8fc..57bc70cd 100644 --- a/src/tools/tool_client.rs +++ b/src/tools/tool_client.rs @@ -213,7 +213,7 @@ impl ToolClient { { let slf = self.clone(); let mut handlers = self.handlers.borrow_mut(); - handlers.entry(id.into()).or_default().insert( + handlers.entry(id).or_default().insert( T::ID, Rc::new(move |parser| { let val = match as RequestParser<'_>>::parse(parser) { @@ -368,7 +368,7 @@ struct Outgoing { } impl Outgoing { - async fn run(mut self: Self) { + async fn run(mut self) { loop { self.tc.flush_request.triggered().await; if let Err(e) = self.flush().await { @@ -399,7 +399,7 @@ struct Incoming { } impl Incoming { - async fn run(mut self: Self) { + async fn run(mut self) { loop { if let Err(e) = self.handle_msg().await { fatal!("Could not process an incoming message: {}", ErrorFmt(e)); diff --git a/src/tree/toplevel.rs b/src/tree/toplevel.rs index 8d8cfbaf..8b754be5 100644 --- a/src/tree/toplevel.rs +++ b/src/tree/toplevel.rs @@ -279,7 +279,7 @@ impl ToplevelData { self.is_fullscreen.set(true); ws.fullscreen.set(Some(node.clone())); node.tl_set_parent(ws.clone()); - node.clone().tl_set_workspace(&ws); + node.clone().tl_set_workspace(ws); node.clone() .tl_change_extents(&ws.output.get().global.pos.get()); for seat in kb_foci { diff --git a/src/udev.rs b/src/udev.rs index fe4e32ce..6f534a1c 100644 --- a/src/udev.rs +++ b/src/udev.rs @@ -167,7 +167,7 @@ impl Udev { }) } - pub fn create_device_from_devnum<'a>( + pub fn create_device_from_devnum( self: &Rc, ty: UdevDeviceType, devnum: c::dev_t, diff --git a/src/utils/buffd/buf_in.rs b/src/utils/buffd/buf_in.rs index 54077ebd..41fba091 100644 --- a/src/utils/buffd/buf_in.rs +++ b/src/utils/buffd/buf_in.rs @@ -78,7 +78,7 @@ impl BufFdIn { match self.ring.recvmsg(&self.fd, &mut iov, &mut self.in_fd).await { Ok(0) => return Err(BufFdError::Closed), Ok(n) => self.in_right += n, - Err(e) => return Err(BufFdError::Ring(e.into())), + Err(e) => return Err(BufFdError::Ring(e)), } if self.in_fd.len() > MAX_IN_FD { return Err(BufFdError::TooManyFds); diff --git a/src/utils/smallmap.rs b/src/utils/smallmap.rs index b93b58d3..e00ccb4e 100644 --- a/src/utils/smallmap.rs +++ b/src/utils/smallmap.rs @@ -64,7 +64,7 @@ impl SmallMap { pub fn clear(&self) { unsafe { - let _v = self.m.get().deref_mut().clear(); + self.m.get().deref_mut().clear(); } } diff --git a/src/video/gbm.rs b/src/video/gbm.rs index 44a1a246..c9df1cff 100644 --- a/src/video/gbm.rs +++ b/src/video/gbm.rs @@ -187,7 +187,7 @@ impl GbmDevice { if dev.is_null() { Err(GbmError::CreateDevice) } else { - Ok(Self { drm: drm, dev }) + Ok(Self { drm, dev }) } } @@ -222,10 +222,7 @@ impl GbmDevice { } let bo = BoHolder { bo }; let dma = export_bo(bo.bo)?; - Ok(GbmBo { - bo: bo, - dmabuf: dma, - }) + Ok(GbmBo { bo, dmabuf: dma }) } } @@ -257,7 +254,7 @@ impl GbmDevice { } let bo = BoHolder { bo }; Ok(GbmBo { - bo: bo, + bo, dmabuf: dmabuf.clone(), }) } diff --git a/src/wire_xcon.rs b/src/wire_xcon.rs index 36e05117..033263b0 100644 --- a/src/wire_xcon.rs +++ b/src/wire_xcon.rs @@ -3,7 +3,7 @@ unused_variables, dead_code, unused_assignments, - clippy::eval_order_dependence, + clippy::mixed_read_write_in_expression, clippy::double_parens, clippy::unnecessary_cast )] diff --git a/src/wl_usr.rs b/src/wl_usr.rs index 96458867..aa7d2719 100644 --- a/src/wl_usr.rs +++ b/src/wl_usr.rs @@ -272,7 +272,7 @@ struct Outgoing { } impl Outgoing { - async fn run(mut self: Self) { + async fn run(mut self) { loop { self.con.flush_request.triggered().await; if let Err(e) = self.flush().await { @@ -310,7 +310,7 @@ struct Incoming { } impl Incoming { - async fn run(mut self: Self) { + async fn run(mut self) { loop { if let Err(e) = self.handle_msg().await { log::error!( diff --git a/src/xcon/incoming.rs b/src/xcon/incoming.rs index f940e08b..188bcc0e 100644 --- a/src/xcon/incoming.rs +++ b/src/xcon/incoming.rs @@ -37,6 +37,7 @@ impl Incoming { } } + #[allow(clippy::await_holding_refcell_ref)] // false positive async fn handle_msg(&mut self) -> Result<(), XconError> { const MAX_LENGTH_UNITS: usize = 0x4000 / 4; const MIN_MSG_SIZE: usize = 32; @@ -147,6 +148,7 @@ impl Incoming { } } ev => 'handle_event: { + drop(reply_handlers); let (ext, code) = if ev == XGE_EVENT { let length = u32::from_ne_bytes([msg_buf[4], msg_buf[5], msg_buf[6], msg_buf[7]]) diff --git a/src/xwayland/xwm.rs b/src/xwayland/xwm.rs index 13aff519..6bf63c11 100644 --- a/src/xwayland/xwm.rs +++ b/src/xwayland/xwm.rs @@ -1,3 +1,5 @@ +#![allow(clippy::await_holding_refcell_ref)] // all borrows are to data that is only used by this task + use { crate::{ async_engine::SpawnedFuture, @@ -281,7 +283,7 @@ impl Wm { socket: OwnedFd, shared: &Rc, ) -> Result { - let c = match Xcon::connect_to_fd(&state, &Rc::new(socket), &[], &[]).await { + let c = match Xcon::connect_to_fd(state, &Rc::new(socket), &[], &[]).await { Ok(c) => c, Err(e) => return Err(XWaylandError::Connect(e)), };