Enforce no dbg! and todo! in Rust code via clippy lints in the CI job (#4005)

Kirill Bulatov created

Release Notes:

- N/A

Change summary

.github/actions/check_formatting/action.yml    | 15 -----
.github/actions/check_style/action.yml         | 17 +++++
.github/actions/run_tests/action.yml           | 41 ++++++-------
.github/workflows/ci.yml                       | 19 ++----
.github/workflows/randomized_tests.yml         | 59 +++++++++----------
.github/workflows/release_nightly.yml          | 19 ++----
crates/collab/src/tests/channel_guest_tests.rs | 10 +--
crates/vim/src/editor_events.rs                |  1 
rust-toolchain.toml                            |  3 
9 files changed, 81 insertions(+), 103 deletions(-)

Detailed changes

.github/actions/check_formatting/action.yml 🔗

@@ -1,15 +0,0 @@
-name: 'Check formatting'
-description: 'Checks code formatting use cargo fmt'
-
-runs:
-  using: "composite"
-  steps:
-    - name: Install Rust
-      shell: bash -euxo pipefail {0}
-      run: |
-        rustup set profile minimal
-        rustup update stable
-
-    - name: cargo fmt
-      shell: bash -euxo pipefail {0}
-      run: cargo fmt --all -- --check

.github/actions/check_style/action.yml 🔗

@@ -0,0 +1,17 @@
+name: "Check formatting"
+description: "Checks code formatting use cargo fmt"
+
+runs:
+    using: "composite"
+    steps:
+        - name: cargo fmt
+          shell: bash -euxo pipefail {0}
+          run: cargo fmt --all -- --check
+
+        - name: cargo clippy
+          shell: bash -euxo pipefail {0}
+          # clippy.toml is not currently supporting specifying allowed lints
+          # so specify those here, and disable the rest until Zed's workspace
+          # will have more fixes & suppression for the standard lint set
+          run: |
+              cargo clippy --workspace --all-features --all-targets -- -A clippy::all -D clippy::dbg_macro -D clippy::todo

.github/actions/run_tests/action.yml 🔗

@@ -2,29 +2,26 @@ name: "Run tests"
 description: "Runs the tests"
 
 runs:
-  using: "composite"
-  steps:
-    - name: Install Rust
-      shell: bash -euxo pipefail {0}
-      run: |
-        rustup set profile minimal
-        rustup update stable
-        rustup target add wasm32-wasi
-        cargo install cargo-nextest
+    using: "composite"
+    steps:
+        - name: Install Rust
+          shell: bash -euxo pipefail {0}
+          run: |
+              cargo install cargo-nextest
 
-    - name: Install Node
-      uses: actions/setup-node@v3
-      with:
-        node-version: "18"
+        - name: Install Node
+          uses: actions/setup-node@v3
+          with:
+              node-version: "18"
 
-    - name: Limit target directory size
-      shell: bash -euxo pipefail {0}
-      run: script/clear-target-dir-if-larger-than 100
+        - name: Limit target directory size
+          shell: bash -euxo pipefail {0}
+          run: script/clear-target-dir-if-larger-than 100
 
-    - name: Run check
-      shell: bash -euxo pipefail {0}
-      run: cargo check --tests --workspace
+        - name: Run check
+          shell: bash -euxo pipefail {0}
+          run: cargo check --tests --workspace
 
-    - name: Run tests
-      shell: bash -euxo pipefail {0}
-      run: cargo nextest run --workspace --no-fail-fast
+        - name: Run tests
+          shell: bash -euxo pipefail {0}
+          run: cargo nextest run --workspace --no-fail-fast

.github/workflows/ci.yml 🔗

@@ -22,8 +22,8 @@ env:
     RUST_BACKTRACE: 1
 
 jobs:
-    rustfmt:
-        name: Check formatting
+    style:
+        name: Check formatting and Clippy lints
         runs-on:
             - self-hosted
             - test
@@ -33,19 +33,20 @@ jobs:
               with:
                   clean: false
                   submodules: "recursive"
+                  fetch-depth: 0
 
             - name: Set up default .cargo/config.toml
               run: cp ./.cargo/ci-config.toml ~/.cargo/config.toml
 
-            - name: Run rustfmt
-              uses: ./.github/actions/check_formatting
+            - name: Run style checks
+              uses: ./.github/actions/check_style
 
     tests:
         name: Run tests
         runs-on:
             - self-hosted
             - test
-        needs: rustfmt
+        needs: style
         steps:
             - name: Checkout repo
               uses: actions/checkout@v3
@@ -75,14 +76,6 @@ jobs:
             APPLE_NOTARIZATION_USERNAME: ${{ secrets.APPLE_NOTARIZATION_USERNAME }}
             APPLE_NOTARIZATION_PASSWORD: ${{ secrets.APPLE_NOTARIZATION_PASSWORD }}
         steps:
-            - name: Install Rust
-              run: |
-                  rustup set profile minimal
-                  rustup update stable
-                  rustup target add aarch64-apple-darwin
-                  rustup target add x86_64-apple-darwin
-                  rustup target add wasm32-wasi
-
             - name: Install Node
               uses: actions/setup-node@v3
               with:

.github/workflows/randomized_tests.yml 🔗

@@ -3,41 +3,36 @@ name: Randomized Tests
 concurrency: randomized-tests
 
 on:
-  push:
-    branches:
-      - randomized-tests-runner
-  # schedule:
-  #    - cron: '0 * * * *'
+    push:
+        branches:
+            - randomized-tests-runner
+    # schedule:
+    #    - cron: '0 * * * *'
 
 env:
-  CARGO_TERM_COLOR: always
-  CARGO_INCREMENTAL: 0
-  RUST_BACKTRACE: 1
-  ZED_SERVER_URL: https://zed.dev
-  ZED_CLIENT_SECRET_TOKEN: ${{ secrets.ZED_CLIENT_SECRET_TOKEN }}
+    CARGO_TERM_COLOR: always
+    CARGO_INCREMENTAL: 0
+    RUST_BACKTRACE: 1
+    ZED_SERVER_URL: https://zed.dev
+    ZED_CLIENT_SECRET_TOKEN: ${{ secrets.ZED_CLIENT_SECRET_TOKEN }}
 
 jobs:
-  tests:
-    name: Run randomized tests
-    runs-on:
-      - self-hosted
-      - randomized-tests
-    steps:
-      - name: Install Rust
-        run: |
-          rustup set profile minimal
-          rustup update stable
+    tests:
+        name: Run randomized tests
+        runs-on:
+            - self-hosted
+            - randomized-tests
+        steps:
+            - name: Install Node
+              uses: actions/setup-node@v3
+              with:
+                  node-version: "18"
 
-      - name: Install Node
-        uses: actions/setup-node@v3
-        with:
-          node-version: '18'
+            - name: Checkout repo
+              uses: actions/checkout@v3
+              with:
+                  clean: false
+                  submodules: "recursive"
 
-      - name: Checkout repo
-        uses: actions/checkout@v3
-        with:
-          clean: false
-          submodules: 'recursive'
-
-      - name: Run randomized tests
-        run: script/randomized-test-ci
+            - name: Run randomized tests
+              run: script/randomized-test-ci

.github/workflows/release_nightly.yml 🔗

@@ -14,8 +14,8 @@ env:
     RUST_BACKTRACE: 1
 
 jobs:
-    rustfmt:
-        name: Check formatting
+    style:
+        name: Check formatting and Clippy lints
         runs-on:
             - self-hosted
             - test
@@ -25,16 +25,17 @@ jobs:
               with:
                   clean: false
                   submodules: "recursive"
+                  fetch-depth: 0
 
-            - name: Run rustfmt
-              uses: ./.github/actions/check_formatting
+            - name: Run style checks
+              uses: ./.github/actions/check_style
 
     tests:
         name: Run tests
         runs-on:
             - self-hosted
             - test
-        needs: rustfmt
+        needs: style
         steps:
             - name: Checkout repo
               uses: actions/checkout@v3
@@ -59,14 +60,6 @@ jobs:
             DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
             DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
         steps:
-            - name: Install Rust
-              run: |
-                  rustup set profile minimal
-                  rustup update stable
-                  rustup target add aarch64-apple-darwin
-                  rustup target add x86_64-apple-darwin
-                  rustup target add wasm32-wasi
-
             - name: Install Node
               uses: actions/setup-node@v3
               with:

crates/collab/src/tests/channel_guest_tests.rs 🔗

@@ -104,12 +104,10 @@ async fn test_channel_guest_promotion(cx_a: &mut TestAppContext, cx_b: &mut Test
     });
     assert!(project_b.read_with(cx_b, |project, _| project.is_read_only()));
     assert!(editor_b.update(cx_b, |e, cx| e.read_only(cx)));
-    assert!(dbg!(
-        room_b
-            .update(cx_b, |room, cx| room.share_microphone(cx))
-            .await
-    )
-    .is_err());
+    assert!(room_b
+        .update(cx_b, |room, cx| room.share_microphone(cx))
+        .await
+        .is_err());
 
     // B is promoted
     active_call_a

crates/vim/src/editor_events.rs 🔗

@@ -111,7 +111,6 @@ mod test {
 
         let mut cx1 = VisualTestContext::from_window(cx.window, &cx);
         let editor1 = cx.editor.clone();
-        dbg!(editor1.entity_id());
 
         let buffer = cx.new_model(|_| Buffer::new(0, 0, "a = 1\nb = 2\n"));
         let (editor2, cx2) = cx.add_window_view(|cx| Editor::for_buffer(buffer, None, cx));

rust-toolchain.toml 🔗

@@ -1,4 +1,5 @@
 [toolchain]
 channel = "1.75"
-components = [ "rustfmt" ]
+profile = "minimal"
+components = [ "rustfmt", "clippy" ]
 targets = [ "x86_64-apple-darwin", "aarch64-apple-darwin", "wasm32-wasi" ]