rust-lang / rust-analyzer

A Rust compiler front-end for IDEs
https://rust-analyzer.github.io/
Apache License 2.0
14.29k stars 1.61k forks source link

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

Open ARKye03 opened 4 months ago

ARKye03 commented 4 months ago

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: ```txt 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 ```txt 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 ```txt 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: ```rust 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, ) -> ComponentParts { let model = NavBar; // Insert the code generation of the view! macro here let widgets = view_output!(); ComponentParts { model, widgets } } } struct Main { navbar: Controller, } #[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, ) -> ComponentParts { 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::
(()); } ```
Cargo Toml ```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"] } ```
mqudsi commented 4 months ago

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