Run rustfmt and clippy in CI (#9616)

* Add machine-readable MSRV to Cargo.toml
* Fix clippy warnings
* CI: add rustfmt and clippy checks
This commit is contained in:
Xiretza 2023-02-26 20:20:20 +01:00 committed by GitHub
parent 562eeac43e
commit dff7db2f16
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 48 additions and 8 deletions

42
.github/workflows/rust_checks.yml vendored Normal file
View file

@ -0,0 +1,42 @@
name: Rust checks
on: [push, pull_request]
permissions:
contents: read
jobs:
rustfmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: SetupRust
uses: ATiltedTree/setup-rust@v1
with:
rust-version: stable
- name: cargo fmt
run: |
cd fish-rust
cargo fmt --check --all
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: SetupRust
uses: ATiltedTree/setup-rust@v1
with:
rust-version: stable
- name: Install deps
run: |
sudo apt install gettext libncurses5-dev libpcre2-dev python3-pip tmux
sudo pip3 install pexpect
- name: cmake
run: |
cmake -B build
- name: cargo clippy
run: |
cd fish-rust
cargo clippy --workspace --all-targets -- --deny=warnings

View file

@ -60,6 +60,7 @@ The basic development loop for this port:
4. Decide whether any existing C++ callers should invoke the Rust implementation, or whether we should keep the C++ one. 4. Decide whether any existing C++ callers should invoke the Rust implementation, or whether we should keep the C++ one.
- Utility functions may have both a Rust and C++ implementation. An example is `FLOG` where interop is too hard. - Utility functions may have both a Rust and C++ implementation. An example is `FLOG` where interop is too hard.
- Major components (e.g. builtin implementations) should _not_ be duplicated; instead the Rust should call C++ or vice-versa. - Major components (e.g. builtin implementations) should _not_ be duplicated; instead the Rust should call C++ or vice-versa.
5. Remember to run `cargo fmt` and `cargo clippy` to keep the codebase somewhat clean (otherwise CI will fail). If you use rust-analyzer, you can run clippy automatically by setting `rust-analyzer.checkOnSave.command = "clippy"`.
You will likely run into limitations of [`autocxx`](https://google.github.io/autocxx/) and to a lesser extent [`cxx`](https://cxx.rs/). See the [FFI sections](#ffi) below. You will likely run into limitations of [`autocxx`](https://google.github.io/autocxx/) and to a lesser extent [`cxx`](https://cxx.rs/). See the [FFI sections](#ffi) below.

View file

@ -2,6 +2,7 @@
name = "fish-rust" name = "fish-rust"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
rust-version = "1.67"
[dependencies] [dependencies]

View file

@ -112,10 +112,6 @@ pub fn valid_func_name(name: &wstr) -> bool {
true true
} }
pub const fn assert_send<T: Send>() -> () { pub const fn assert_send<T: Send>() {}
()
}
pub const fn assert_sync<T: Sync>() -> () { pub const fn assert_sync<T: Sync>() {}
()
}

View file

@ -1,4 +1,4 @@
use self::job_group::pgid_t; use self::ffi::pgid_t;
use crate::common::{assert_send, assert_sync}; use crate::common::{assert_send, assert_sync};
use crate::wchar_ffi::{WCharFromFFI, WCharToFFI}; use crate::wchar_ffi::{WCharFromFFI, WCharToFFI};
use cxx::{CxxWString, UniquePtr}; use cxx::{CxxWString, UniquePtr};
@ -8,7 +8,7 @@ use std::sync::Mutex;
use widestring::WideUtfString; use widestring::WideUtfString;
#[cxx::bridge] #[cxx::bridge]
mod job_group { mod ffi {
// Not only does cxx bridge not recognize libc::pid_t, it doesn't even recognize i32 as a POD // Not only does cxx bridge not recognize libc::pid_t, it doesn't even recognize i32 as a POD
// type! :sadface: // type! :sadface:
struct pgid_t { struct pgid_t {