aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_cargo_watch/src/lib.rs
Commit message (Collapse)AuthorAgeFilesLines
* Check all crates of the workspaceAleksey Kladov2020-03-131-0/+1
| | | | | | | | | Previously, if the root of the was was a real crate, only this crate was checked. Ideally, we might want some kind of config here (which might be just overriding the whole command), but `--workspace` is def a nicer default.
* Handle diagnostics with multiple primary spansEmil Lauridsen2020-03-121-16/+16
|
* Rework how we send diagnostics to client.Emil Lauridsen2020-02-031-93/+17
| | | | | | | | | | | | The previous way of sending from the thread pool suffered from stale diagnostics due to being canceled before we could clear the old ones. The key change is moving to sending diagnostics from the main loop thread, but doing all the hard work in the thread pool. This should provide the best of both worlds, with little to no of the downsides. This should hopefully fix a lot of issues, but we'll need testing in each individual issue to be sure.
* Prevent child cargo process from messing with our stdinAleksey Kladov2020-02-011-0/+1
| | | | | | | | By default, `spawn` inherits stderr/stdout/stderr of the parent process, and so, if child, for example does fcntl(O_NONBLOCK), weird stuff happens to us. Closes https://github.com/rust-analyzer/lsp-server/pull/10
* Change error output to make a bit more senseEmil Lauridsen2020-01-291-2/+6
|
* Parse cargo output a line at a time.Emil Lauridsen2020-01-291-5/+21
| | | | | | | | | | | | | | | | | | We previously used serde's stream deserializer to read json blobs from the cargo output. It has an issue though: If the deserializer encounters invalid input, it gets stuck reporting the same error again and again because it is unable to foward over the input until it reaches a new valid object. Reading a line at a time and manually deserializing fixes this issue, because cargo makes sure to only outpu one json blob per line, so should we encounter invalid input, we can just skip a line and continue. The main reason this would happen is stray printf-debugging in procedural macros, so we still report that an error occured, but we handle it gracefully now. Fixes #2935
* Merge #2924bors[bot]2020-01-281-2/+4
|\ | | | | | | | | | | | | | | | | | | | | | | | | 2924: Modify ordering of drops in check watcher to only ever have one cargo r=matklad a=kiljacken Due to the way drops are ordered when assigning to a mutable variable we were launching a new cargo sub-process before letting the old one quite. By explicitly replacing the original watcher with a dummy first, we ensure it is dropped and the process is completed, before we start the new process. Co-authored-by: Emil Lauridsen <[email protected]>
| * Modify ordering of drops in check watcher to only ever have one cargoEmil Lauridsen2020-01-281-2/+4
| | | | | | | | | | | | | | | | | | Due to the way drops are ordered when assigning to a mutable variable we were launching a new cargo sub-process before letting the old one quite. By explicitly replacing the original watcher with a dummy first, we ensure it is dropped and the process is completed, before we start the new process.
* | Don't do check progress update for fresh cratesEmil Lauridsen2020-01-281-0/+8
|/
* Buffer reads from cargo check's stdoutLaurențiu Nicola2020-01-271-1/+4
|
* Remove RWLock from check watcher.Emil Lauridsen2020-01-231-5/+4
| | | | | | | | | | | | | | @matklad mentioned this might be a good idea. So the general idea is that we don't really need the lock, as we can just clone the check watcher state when creating a snapshot. We can then use `Arc::get_mut` to get mutable access to the state from `WorldState` when needed. Running with this it seems to improve responsiveness a bit while cargo is running, but I have no hard numbers to prove it. In any case, a serialization point less is always better when we're trying to be responsive.
* Tweak naming slightlyEmil Lauridsen2020-01-151-5/+5
|
* Manage check state updates in main_loop to reduce lock contentionEmil Lauridsen2020-01-151-39/+35
|
* Defer cargo check until after workspace loadEmil Lauridsen2020-01-131-2/+11
|
* Disable cargo checking in workspaces with no cargo projectsEmil Lauridsen2020-01-111-0/+6
|
* Lowercase drive letters when getting paths from cargo checkEmil Lauridsen2019-12-291-0/+2
|
* Reduce visibilityAleksey Kladov2019-12-291-3/+3
|
* Fix busy-waiting issue in main cargo watch threadEmil Lauridsen2019-12-271-3/+5
|
* Don't finish main cargo watch thread when subprocess finishes.Emil Lauridsen2019-12-271-2/+1
|
* Fix shutdown behavoir of main cargo-watch thread.Emil Lauridsen2019-12-271-7/+8
| | | | | Even though this didn't error, it became clear to me that it was closing the wrong channel, resulting in the child thread never finishing.
* Cargo fmt runEmil Lauridsen2019-12-271-7/+1
|
* Shutdown/cancelation story for main cargo watch threadEmil Lauridsen2019-12-271-15/+32
|
* Consistent, hopefully robust, shutdown/cancelation story for cargo check ↵Emil Lauridsen2019-12-271-16/+50
| | | | subprocess
* Move cargo watch functionality to separate crateEmil Lauridsen2019-12-271-0/+345