Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I'm using a proc_macro, rust-analyzer makes cargo recompile every dependencies #17482

Open
ARKye03 opened this issue Jun 23, 2024 · 1 comment
Labels
C-bug Category: bug

Comments

@ARKye03
Copy link

ARKye03 commented Jun 23, 2024

Similar to this case.

Rust-Analyzer runs a slow cargo check every time I save, which takes about half a minute to complete.

This prevents me from running cargo run/build, as the lock file is being used. Additionally, because I'm using some macros, it forces my project to recompile every crate I'm using, making my workflow a horrible experience. When I want to change a single character, I have to wait up to 2 minutes to see the changes. This is just a testing file and not even the project itself, which will be much larger and I cannot imagine how this issue will scale.

What can I do to workaround this, my current setup deactivates cargo check on save, removing some ""quality of life"" that I had on other projects, nevertheless, this is almost the only way to do something, that or removing the extension.

Note

I tried using rust_analyzer (Pre-Release) to fix the issue, but it didn't help. I also tried other relevant solutions, but they didn't change the behavior.

$ rustc -V
rustc 1.76.0 (07dca489a 2024-02-04)

VSCode's about:
Version: 1.90.2
Commit: 5437499feb04f7a586f677b155b039bc2b3669eb
Date: 2024-06-18T22:33:48.698Z
Electron: 29.4.0
ElectronBuildId: 9728852
Chromium: 122.0.6261.156
Node.js: 20.9.0
V8: 12.2.281.27-electron.0
OS: Linux x64 6.8.9-zen1-2-zen
Rust Analyzer
Name: rust-analyzer
Id: rust-lang.rust-analyzer
Description: Rust language support for Visual Studio Code
Version: 0.3.2002
Publisher: The Rust Programming Language 
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer
My PC's specs
OS: Arch Linux x86_64
Host: B560M DS3H AC
Kernel: Linux 6.8.9-zen1-2-zen
Packages: 1603 (pacman), 34 (nix-user)
Shell: zsh 5.9
Display (S24D300): 1920x1080 @ 60Hz [External]
WM: Hyprland (Wayland)
CPU: Intel(R) Core(TM) i5-10400 (12) @ 4.30 GHz
GPU: NVIDIA Geforce RTX 3050 [Discrete]
Memory: 15.49 GiB

No environment variable for rust, but:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib

used for my gtk4 project.

Links to the libraries I'm using:

Code that I'm testing with:
use gtk::prelude::*;
use gtk4_layer_shell::{Edge, Layer, LayerShell}; // Import the additional types
use relm4::prelude::*;
use std::convert::identity;

struct NavBar;

#[relm4::component]
impl SimpleComponent for NavBar {
    type Init = ();
    type Input = ();
    type Output = ();

    view! {
        gtk::Window {
            init_layer_shell: (), // Do gtk4_layer_shell stuff here
            set_layer: Layer::Overlay,
            auto_exclusive_zone_enable: (),
            set_margin: (Edge::Left, 10),
            set_margin: (Edge::Right, 10),
            set_anchor: (Edge::Top, true),
            set_anchor: (Edge::Right, true),
            set_anchor: (Edge::Left, true),
            set_title: Some("Master-Bar"),
            set_default_size: (300, 100),

            gtk::Box {
                gtk::Label{
                    set_label: "Hello navbar here!!"
                }
            }
        }
    }

    // Initialize the component.
    fn init(
        _counter: Self::Init,
        root: Self::Root,
        _sender: ComponentSender<Self>,
    ) -> ComponentParts<Self> {
        let model = NavBar;

        // Insert the code generation of the view! macro here
        let widgets = view_output!();

        ComponentParts { model, widgets }
    }
}
struct Main {
    navbar: Controller<NavBar>,
}
#[relm4::component]
impl SimpleComponent for Main {
    type Init = ();
    type Input = ();
    type Output = ();
    view! {
        gtk::Window{
            gtk::Label{
                set_label: "Hello"
            }
        }
    }
    fn init(
        init: Self::Init,
        root: Self::Root,
        sender: ComponentSender<Self>,
    ) -> ComponentParts<Self> {
        let navbarx = NavBar::builder()
            .launch(())
            .forward(sender.input_sender(), identity);

        if let Some(window) = navbarx.widget().root() {
            window.show();
        }

        let model = Main { navbar: navbarx };
        let widgets = view_output!();

        ComponentParts { model, widgets }
    }
}
fn main() {
    let app = RelmApp::new("relm4.example.simple");
    app.run::<Main>(());
}
Cargo Toml
[package]
name = "relm4-layer"
version = "0.1.0"
edition = "2021"

[dependencies]
gtk4-layer-shell = "0.3.0"
mpris = "2.0.1"
relm4 = "0.8.1"
relm4-components = "0.8.1"
tokio = { version = "1.38.0", features = ["full"] }
@ARKye03 ARKye03 added the C-bug Category: bug label Jun 23, 2024
@mqudsi
Copy link

mqudsi commented Jun 24, 2024

I recommend using a different target directory for RA, that should solve all your lock file and incremental rebuild issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: bug
Projects
None yet
Development

No branches or pull requests

2 participants