diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index 4aac46df0..5c52bef94 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -1,44 +1,73 @@ ;;; lang/rust/config.el -*- lexical-binding: t; -*- -(after! rust-mode - (set-docsets! 'rust-mode "Rust") +(def-package! rust-mode + :mode ("\\.rs$" . +rust|init) + :config (setq rust-indent-method-chain t) + (defun +rust|init () + "Use `rustic-mode' if possible, otherwise fall back to `rust-mode'." + (if (and EMACS26+ (require 'rustic nil t)) + (rustic-mode) + (rust-mode))) + + (set-docsets! '(rust-mode rustic-mode) "Rust") (when (featurep! +lsp) (add-hook 'rust-mode-local-vars-hook #'lsp!)) - (def-package! cargo - :defer t - :init - (map! :map rust-mode-map - :localleader - (:prefix "b" - :desc "cargo add" "a" #'cargo-process-add - :desc "cargo build" "b" #'cargo-process-build - :desc "cargo bench" "B" #'cargo-process-bench - :desc "cargo check" "c" #'cargo-process-check - :desc "cargo clippy" "C" #'cargo-process-clippy - :desc "cargo doc" "d" #'cargo-process-doc - :desc "cargo run" "r" #'cargo-process-run - :desc "cargo search" "s" #'cargo-process-search - :desc "cargo update" "u" #'cargo-process-update) - (:prefix ("t" . "cargo test") - :desc "all" "a" #'cargo-process-test - :desc "current file" "f" #'cargo-process-current-file-tests - :desc "current test" "t" #'cargo-process-current-test)))) + ;; TODO PR these upstream + (after! dtrt-indent + (pushnew! dtrt-indent-hook-mapping-list + '(rust-mode default rust-indent-offset) + '(rustic-mode default rustic-indent-offset))) + (when (featurep! :tools editorconfig) + (after! editorconfig + (pushnew! editorconfig-indentation-alist + '(rust-mode rust-indent-offset) + '(rustic-mode rustic-indent-offset))))) (def-package! racer :unless (featurep! +lsp) - :after rust-mode + :hook ((rust-mode rustic-mode) . racer-mode) :config - (add-hook 'rust-mode-hook #'racer-mode) (set-lookup-handlers! 'rust-mode :definition '(racer-find-definition :async t) :documentation '+rust-racer-lookup-documentation)) -(def-package! flycheck-rust - :when (featurep! :tools flycheck) +(def-package! rustic + :when EMACS26+ :after rust-mode - :config (add-hook 'rust-mode-hook #'flycheck-rust-setup)) + :config + (setq rustic-indent-method-chain rust-indent-method-chain + rustic-flycheck-setup-mode-line-p nil + rustic-rls-pkg (featurep! +lsp))) + + +;; +;;; Tools + +(def-package! cargo + :after rust-mode + :config + (defvar +rust-keymap + (if (boundp 'rustic-mode-map) + rustic-mode-map + rust-mode-map)) + (map! :map +rust-keymap + :localleader + (:prefix "b" + :desc "cargo add" "a" #'cargo-process-add + :desc "cargo build" "b" #'cargo-process-build + :desc "cargo bench" "B" #'cargo-process-bench + :desc "cargo check" "c" #'cargo-process-check + :desc "cargo clippy" "C" #'cargo-process-clippy + :desc "cargo doc" "d" #'cargo-process-doc + :desc "cargo run" "r" #'cargo-process-run + :desc "cargo search" "s" #'cargo-process-search + :desc "cargo update" "u" #'cargo-process-update) + (:prefix ("t" . "cargo test") + :desc "all" "a" #'cargo-process-test + :desc "current file" "f" #'cargo-process-current-file-tests + :desc "current test" "t" #'cargo-process-current-test))) diff --git a/modules/lang/rust/packages.el b/modules/lang/rust/packages.el index caec95715..c93336763 100644 --- a/modules/lang/rust/packages.el +++ b/modules/lang/rust/packages.el @@ -1,11 +1,13 @@ ;; -*- no-byte-compile: t; -*- ;;; lang/rust/packages.el +(when EMACS26+ + (package! rustic)) (package! rust-mode) -(package! cargo) - (when (featurep! :tools flycheck) (package! flycheck-rust)) - (unless (featurep! +lsp) (package! racer)) + +;; +(package! cargo)