Skip to content

Commit

Permalink
Merge pull request #449 from rust-lang/remote-crate-path
Browse files Browse the repository at this point in the history
use rust-buffer-crate to get remote crate path
  • Loading branch information
brotzeit committed Jun 24, 2022
2 parents af4aa18 3e73d67 commit 56e5c3a
Showing 1 changed file with 25 additions and 18 deletions.
43 changes: 25 additions & 18 deletions rust-cargo.el
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 30,31 @@

(defun rust-buffer-project ()
"Get project root if possible."
;; Copy environment variables into the new buffer, since
;; with-temp-buffer will re-use the variables' defaults, even if
;; they have been changed in this variable using e.g. envrc-mode.
;; See https://github.com/purcell/envrc/issues/12.
(let ((env process-environment)
(path exec-path))
(with-temp-buffer
;; Copy the entire environment just in case there's something we
;; don't know we need.
(setq-local process-environment env)
;; Set PATH so we can find cargo.
(setq-local exec-path path)
(let ((ret (call-process rust-cargo-bin nil t nil "locate-project")))
(when (/= ret 0)
(error "`cargo locate-project' returned %s status: %s" ret (buffer-string)))
(goto-char 0)
(let ((output (json-read)))
(cdr (assoc-string "root" output)))))))
(if (file-remote-p default-directory)
(rust-buffer-crate)
;; Copy environment variables into the new buffer, since
;; with-temp-buffer will re-use the variables' defaults, even if
;; they have been changed in this variable using e.g. envrc-mode.
;; See https://github.com/purcell/envrc/issues/12.
(let ((env process-environment)
(path exec-path))
(with-temp-buffer
;; Copy the entire environment just in case there's something we
;; don't know we need.
(setq-local process-environment env)
;; Set PATH so we can find cargo.
(setq-local exec-path path)
(let ((ret (call-process rust-cargo-bin nil t nil "locate-project")))
(when (/= ret 0)
(error "`cargo locate-project' returned %s status: %s" ret (buffer-string)))
(goto-char 0)
(let ((output (json-read)))
(cdr (assoc-string "root" output))))))))

(defun rust-buffer-crate ()
"Try to locate Cargo.toml using `locate-dominating-file'."
(let ((dir (locate-dominating-file default-directory "Cargo.toml")))
(if dir dir default-directory)))

(defun rust-update-buffer-project ()
(setq-local rust-buffer-project (rust-buffer-project)))
Expand Down

0 comments on commit 56e5c3a

Please sign in to comment.