From aa2d9fe3744737fa7143b8e1060a9797a0e214c6 Mon Sep 17 00:00:00 2001 From: "daniel.eades" Date: Fri, 17 Nov 2023 07:04:57 +0000 Subject: [PATCH] add linting CI jobs --- .github/dependabot.yml | 6 +++ .github/workflows/ci.yml | 29 ++++++++++ .gitignore | 2 +- cosmic-app-list/src/app.rs | 4 +- cosmic-applet-audio/src/mpris_subscription.rs | 53 +++++++++---------- cosmic-applet-audio/src/pulse.rs | 14 ++--- cosmic-applet-network/src/app.rs | 12 ++--- .../src/network_manager/current_networks.rs | 2 +- .../src/components/app.rs | 3 +- cosmic-applet-tiling/src/window.rs | 2 +- .../src/components/app.rs | 12 ++--- cosmic-panel-button/src/main.rs | 27 +++++----- 12 files changed, 98 insertions(+), 68 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..71607d0c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..568d20f9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +name: Continuous Integration + +on: [push, pull_request] + +jobs: + formatting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + components: rustfmt + - name: Run rustfmt + run: cargo +nightly fmt --all -- --check + + linting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2023-11-18 + components: clippy + - name: install dependencies + run: sudo apt install -y libxkbcommon-dev libwayland-dev libdbus-1-dev libpulse-dev + - uses: actions-rs-plus/clippy-check@v2 + with: + toolchain: nightly-2023-11-18 + args: --all --all-targets --all-features diff --git a/.gitignore b/.gitignore index 2a17cbc6..3978425d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ build-aux/.flatpak-builder/ flatpak_app .flatpak-builder -.* +.vscode/ debian/* !debian/*install !debian/*postinst diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index f4df2df6..91823789 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -336,9 +336,7 @@ fn index_in_list( } let total_len = list_len as f32 * (item_size + divider_size) - divider_size; let pos_in_list = pos_in_list * total_len; - let index = if list_len == 0 { - 0 - } else if pos_in_list < item_size / 2.0 { + let index = if (list_len == 0) || (pos_in_list < item_size / 2.0) { 0 } else { let mut i = 1; diff --git a/cosmic-applet-audio/src/mpris_subscription.rs b/cosmic-applet-audio/src/mpris_subscription.rs index 82bd411a..bf387705 100644 --- a/cosmic-applet-audio/src/mpris_subscription.rs +++ b/cosmic-applet-audio/src/mpris_subscription.rs @@ -27,10 +27,10 @@ pub struct PlayerStatus { impl PlayerStatus { async fn new(player: Player) -> Self { let metadata = player.metadata().await.unwrap(); - let title = metadata.title().map(|t| Cow::from(t)); + let title = metadata.title().map(Cow::from); let artists = metadata .artists() - .map(|a| a.into_iter().map(|a| Cow::from(a)).collect::>()); + .map(|a| a.into_iter().map(Cow::from).collect::>()); let icon = metadata .art_url() .and_then(|u| url::Url::parse(&u).ok()) @@ -53,7 +53,7 @@ impl PlayerStatus { icon, title, artists, - status: playback_status.unwrap_or_else(|_| PlaybackStatus::Stopped), + status: playback_status.unwrap_or(PlaybackStatus::Stopped), can_pause: can_pause.unwrap_or_default(), can_play: can_play.unwrap_or_default(), can_go_previous: can_go_previous.unwrap_or_default(), @@ -109,33 +109,32 @@ async fn update(state: State, output: &mut futures::channel::mpsc::Sender Self { let (to_pulse, mut to_pulse_recv) = tokio::sync::mpsc::channel(10); - let (mut from_pulse_send, from_pulse) = tokio::sync::mpsc::channel(10); + let (from_pulse_send, from_pulse) = tokio::sync::mpsc::channel(10); // get initial connection status to_pulse .try_send(Message::UpdateConnection) @@ -195,7 +195,7 @@ impl PulseHandle { .send(Message::SetDefaultSink(sink)) .await .unwrap(), - Err(_) => Self::send_disconnected(&mut from_pulse_send).await, + Err(_) => Self::send_disconnected(&from_pulse_send).await, } } Message::GetDefaultSource => { @@ -210,7 +210,7 @@ impl PulseHandle { .unwrap(), Err(e) => { tracing::error!("ERROR! {:?}", e); - Self::send_disconnected(&mut from_pulse_send).await; + Self::send_disconnected(&from_pulse_send).await; } } } @@ -224,7 +224,7 @@ impl PulseHandle { .send(Message::SetSinks(sinks)) .await .unwrap(), - Err(_) => Self::send_disconnected(&mut from_pulse_send).await, + Err(_) => Self::send_disconnected(&from_pulse_send).await, } } Message::GetSources => { @@ -237,7 +237,7 @@ impl PulseHandle { .send(Message::SetSources(sinks)) .await .unwrap(), - Err(_) => Self::send_disconnected(&mut from_pulse_send).await, + Err(_) => Self::send_disconnected(&from_pulse_send).await, } } Message::SetSinkVolumeByName(name, channel_volumes) => { @@ -263,7 +263,7 @@ impl PulseHandle { tracing::trace!("getting server info..."); if cur_server.get_server_info().is_err() { tracing::warn!("got error, server must be disconnected..."); - Self::send_disconnected(&mut from_pulse_send).await; + Self::send_disconnected(&from_pulse_send).await; } else { tracing::trace!("got server info, still connected..."); server = Some(cur_server); @@ -272,7 +272,7 @@ impl PulseHandle { match PulseServer::connect().and_then(|server| server.init()) { Ok(new_server) => { tracing::info!("Connected to server"); - Self::send_connected(&mut from_pulse_send).await; + Self::send_connected(&from_pulse_send).await; server = Some(new_server); } Err(err) => { diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 4482debc..13855dc2 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -63,15 +63,15 @@ impl NewConnectionState { } } -impl Into for NewConnectionState { - fn into(self) -> AccessPoint { - match self { - Self::EnterPassword { +impl From for AccessPoint { + fn from(connection_state: NewConnectionState) -> Self { + match connection_state { + NewConnectionState::EnterPassword { access_point, password: _, } => access_point, - Self::Waiting(access_point) => access_point, - Self::Failure(access_point) => access_point, + NewConnectionState::Waiting(access_point) => access_point, + NewConnectionState::Failure(access_point) => access_point, } } } diff --git a/cosmic-applet-network/src/network_manager/current_networks.rs b/cosmic-applet-network/src/network_manager/current_networks.rs index 271759c3..c6f7d5aa 100644 --- a/cosmic-applet-network/src/network_manager/current_networks.rs +++ b/cosmic-applet-network/src/network_manager/current_networks.rs @@ -21,7 +21,7 @@ pub async fn active_connections( let state = connection .state() .await - .unwrap_or_else(|_| ActiveConnectionState::Unknown); + .unwrap_or(ActiveConnectionState::Unknown); if connection.vpn().await.unwrap_or_default() { info.push(ActiveConnectionInfo::Vpn { diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index ae1eee3c..4b085ef8 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -114,8 +114,7 @@ impl cosmic::Application for App { ]) } status_notifier_watcher::Event::Unregistered(name) => { - if let Some((id, _)) = - self.menus.iter().find(|(_id, menu)| menu.name() == &name) + if let Some((id, _)) = self.menus.iter().find(|(_id, menu)| menu.name() == name) { let id = *id; self.menus.remove(&id); diff --git a/cosmic-applet-tiling/src/window.rs b/cosmic-applet-tiling/src/window.rs index e5acc2d3..b3271c2c 100644 --- a/cosmic-applet-tiling/src/window.rs +++ b/cosmic-applet-tiling/src/window.rs @@ -16,7 +16,7 @@ use std::time::Instant; use tracing::error; const ID: &str = "com.system76.CosmicAppletTiling"; -const ON: &str = "com.system76.CosmicAppletTiling.On"; +//const ON: &str = "com.system76.CosmicAppletTiling.On"; const OFF: &str = "com.system76.CosmicAppletTiling.Off"; static TILE_WINDOWS: Lazy = Lazy::new(id::Toggler::unique); diff --git a/cosmic-applet-workspaces/src/components/app.rs b/cosmic-applet-workspaces/src/components/app.rs index b8dedf83..44cac4a3 100644 --- a/cosmic-applet-workspaces/src/components/app.rs +++ b/cosmic-applet-workspaces/src/components/app.rs @@ -158,7 +158,7 @@ impl cosmic::Application for IcedWorkspacesApplet { cosmic::theme::iced::Button::Primary } Some(zcosmic_workspace_handle_v1::State::Urgent) => { - let appearence = |theme: &Theme| button::Appearance { + let appearance = |theme: &Theme| button::Appearance { background: Some(Background::Color( theme.cosmic().palette.neutral_3.into(), )), @@ -167,29 +167,29 @@ impl cosmic::Application for IcedWorkspacesApplet { ..button::Appearance::default() }; cosmic::theme::iced::Button::Custom { - active: Box::new(appearence), + active: Box::new(appearance), hover: Box::new(move |theme| button::Appearance { background: Some(Background::Color( theme.current_container().component.hover.into(), )), - ..appearence(theme) + ..appearance(theme) }), } } None => { - let appearence = |theme: &Theme| button::Appearance { + let appearance = |theme: &Theme| button::Appearance { background: None, border_radius: theme.cosmic().radius_xl().into(), text_color: theme.current_container().component.on.into(), ..button::Appearance::default() }; cosmic::theme::iced::Button::Custom { - active: Box::new(appearence), + active: Box::new(appearance), hover: Box::new(move |theme| button::Appearance { background: Some(Background::Color( theme.current_container().component.hover.into(), )), - ..appearence(theme) + ..appearance(theme) }), } } diff --git a/cosmic-panel-button/src/main.rs b/cosmic-panel-button/src/main.rs index 9a24310a..7d732ace 100644 --- a/cosmic-panel-button/src/main.rs +++ b/cosmic-panel-button/src/main.rs @@ -71,23 +71,22 @@ pub fn main() -> iced::Result { path.push(&filename); if let Ok(bytes) = fs::read_to_string(&path) { if let Ok(entry) = DesktopEntry::decode(&path, &bytes) { - desktop = Some(Desktop { - name: entry - .name(None) - .map(|x| x.to_string()) - .expect(&format!("Desktop file '{filename}' doesn't have `Name`")), - icon: entry.icon().map(|x| x.to_string()), - exec: entry - .exec() - .map(|x| x.to_string()) - .expect(&format!("Desktop file '{filename}' doesn't have `Exec`")), - }); + desktop = + Some(Desktop { + name: entry.name(None).map(|x| x.to_string()).unwrap_or_else(|| { + panic!("Desktop file '{filename}' doesn't have `Name`") + }), + icon: entry.icon().map(|x| x.to_string()), + exec: entry.exec().map(|x| x.to_string()).unwrap_or_else(|| { + panic!("Desktop file '{filename}' doesn't have `Exec`") + }), + }); break; } } } - let desktop = desktop.expect(&format!( - "Failed to find valid desktop file '{filename}' in search paths" - )); + let desktop = desktop.unwrap_or_else(|| { + panic!("Failed to find valid desktop file '{filename}' in search paths") + }); cosmic::applet::run::