|
49 | 49 | :type 'string |
50 | 50 | :group 'rustic-cargo) |
51 | 51 |
|
| 52 | +(defcustom rustic-cargo-populate-package-name nil |
| 53 | + "Populate package name automatically when used with universal argument." |
| 54 | + :type 'boolean |
| 55 | + :group 'rustic-cargo) |
| 56 | + |
| 57 | +(defvar rustic--package-names (make-hash-table :test #'equal)) |
| 58 | + |
| 59 | +(defun rustic-cargo-cached-package-name () |
| 60 | + (let ((package-name (gethash default-directory rustic--package-names))) |
| 61 | + (if package-name |
| 62 | + package-name |
| 63 | + (progn |
| 64 | + (let ((pkg-name (rustic-cargo-package-name))) |
| 65 | + (setf (gethash default-directory rustic--package-names) pkg-name)) |
| 66 | + (gethash default-directory rustic--package-names))))) |
| 67 | + |
| 68 | +(defun rustic-cargo-package-argument () |
| 69 | + (if rustic-cargo-populate-package-name |
| 70 | + (let ((package-name (rustic-cargo-cached-package-name))) |
| 71 | + (when package-name |
| 72 | + (format "--package %s" package-name))))) |
| 73 | + |
| 74 | +(defun rustic-cargo-package-name () |
| 75 | + (let ((buffer (get-buffer "*cargo-manifest*"))) |
| 76 | + (if buffer |
| 77 | + (kill-buffer buffer))) |
| 78 | + (let* ((buffer (get-buffer-create "*cargo-manifest*")) |
| 79 | + (exit-code (call-process (rustic-cargo-bin) nil buffer nil "read-manifest"))) |
| 80 | + (if (eq exit-code 0) |
| 81 | + (with-current-buffer buffer |
| 82 | + (let ((json-parsed-data (json-read-from-string (buffer-string)))) |
| 83 | + (cdr (assoc 'name json-parsed-data)))) |
| 84 | + nil))) |
| 85 | + |
52 | 86 | (defun rustic-cargo-bin () |
53 | 87 | (if (file-remote-p (or (buffer-file-name) "")) |
54 | 88 | rustic-cargo-bin-remote |
@@ -186,7 +220,8 @@ If ARG is not nil, use value as argument and store it in |
186 | 220 | (setq rustic-test-arguments |
187 | 221 | (read-from-minibuffer "Cargo test arguments: " |
188 | 222 | (rustic--populate-minibuffer |
189 | | - (list rustic-test-arguments |
| 223 | + (list (rustic-cargo-package-argument) |
| 224 | + rustic-test-arguments |
190 | 225 | rustic-cargo-build-arguments |
191 | 226 | rustic-default-test-arguments))))) |
192 | 227 | (rustic-cargo-test-run rustic-test-arguments)) |
@@ -685,7 +720,7 @@ in your project like `pwd'" |
685 | 720 | (interactive "P") |
686 | 721 | (when arg |
687 | 722 | (setq rustic-cargo-build-arguments |
688 | | - (read-string "Cargo build arguments: " (rustic--populate-minibuffer (list rustic-cargo-build-arguments))))) |
| 723 | + (read-string "Cargo build arguments: " (rustic--populate-minibuffer (list (rustic-cargo-package-argument) rustic-cargo-build-arguments))))) |
689 | 724 | (rustic-run-cargo-command `(,(rustic-cargo-bin) |
690 | 725 | ,rustic-cargo-build-exec-command |
691 | 726 | ,@(split-string rustic-cargo-build-arguments)) |
|
0 commit comments