2017-06-08 11:47:56 +02:00
|
|
|
;;; lang/rust/config.el -*- lexical-binding: t; -*-
|
2015-09-30 12:28:52 -04:00
|
|
|
|
2019-10-19 15:25:29 -04:00
|
|
|
(after! projectile
|
|
|
|
(add-to-list 'projectile-project-root-files "Cargo.toml"))
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;; Packages
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! rustic
|
2019-11-07 12:49:30 -05:00
|
|
|
:mode ("\\.rs$" . rustic-mode)
|
2019-11-23 16:00:14 -05:00
|
|
|
:commands rustic-run-cargo-command rustic-cargo-outdated
|
2019-07-09 17:54:18 +02:00
|
|
|
:config
|
2019-11-07 12:49:30 -05:00
|
|
|
(set-docsets! 'rustic-mode "Rust")
|
2020-02-27 21:55:12 -05:00
|
|
|
(set-popup-rule! "^\\*rustic-compilation" :vslot -1)
|
2019-11-07 12:49:30 -05:00
|
|
|
|
2019-07-11 01:09:30 +02:00
|
|
|
(setq rustic-indent-method-chain t
|
2019-07-12 01:14:16 +02:00
|
|
|
;; use :editor format instead
|
2019-12-01 22:57:13 -05:00
|
|
|
rustic-format-trigger nil
|
2019-10-22 19:36:32 -04:00
|
|
|
;; REVIEW `rust-ordinary-lt-gt-p' is terribly expensive in large rust
|
|
|
|
;; buffers, so we disable it, but only for evil users, because it
|
|
|
|
;; affects `forward-sexp' and its ilk. See
|
|
|
|
;; https://github.com/rust-lang/rust-mode/issues/288.
|
2020-02-20 18:13:22 -05:00
|
|
|
rustic-match-angle-brackets (not (featurep! :editor evil)))
|
2019-07-09 18:50:50 +02:00
|
|
|
|
2019-09-15 12:06:27 -04:00
|
|
|
(add-hook 'rustic-mode-hook #'rainbow-delimiters-mode)
|
|
|
|
|
2020-02-06 14:48:05 -05:00
|
|
|
(if (featurep! +lsp)
|
|
|
|
(add-hook 'rustic-mode-local-vars-hook #'lsp!)
|
2020-02-20 18:13:22 -05:00
|
|
|
(setq rustic-lsp-server nil)
|
2020-02-06 14:48:05 -05:00
|
|
|
(after! rustic-flycheck
|
|
|
|
(add-to-list 'flycheck-checkers 'rustic-clippy)))
|
2019-11-23 16:00:14 -05:00
|
|
|
|
|
|
|
(map! :map rustic-mode-map
|
|
|
|
:localleader
|
|
|
|
(:prefix ("b" . "build")
|
|
|
|
:desc "cargo audit" "a" #'+rust/cargo-audit
|
|
|
|
:desc "cargo build" "b" #'rustic-cargo-build
|
|
|
|
:desc "cargo bench" "B" #'rustic-cargo-bench
|
|
|
|
:desc "cargo check" "c" #'rustic-cargo-check
|
|
|
|
:desc "cargo clippy" "C" #'rustic-cargo-clippy
|
|
|
|
:desc "cargo doc" "d" #'rustic-cargo-doc
|
|
|
|
:desc "cargo fmt" "f" #'rustic-cargo-fmt
|
|
|
|
:desc "cargo new" "n" #'rustic-cargo-new
|
|
|
|
:desc "cargo outdated" "o" #'rustic-cargo-outdated
|
|
|
|
:desc "cargo run" "r" #'rustic-cargo-run)
|
|
|
|
(:prefix ("t" . "cargo test")
|
|
|
|
:desc "all" "a" #'rustic-cargo-test
|
2019-12-21 14:08:57 -05:00
|
|
|
:desc "current test" "t" #'rustic-cargo-current-test))
|
|
|
|
|
2020-02-20 18:19:59 -05:00
|
|
|
;; HACK Fixes #2541: RLS doesn't appear to support documentSymbol, but
|
|
|
|
;; lsp-rust thinks it does, and so yields imenu population to the server.
|
|
|
|
;; The result is an empty imenu list. Until RLS supports documentSymbol,
|
|
|
|
;; we disable `lsp-enable-imenu' is rust+RLS buffers.
|
|
|
|
(defadvice! +rust--disable-imenu-for-lsp-mode-a (&rest _)
|
|
|
|
:before #'rustic-lsp-mode-setup
|
|
|
|
(when (eq rustic-lsp-server 'rls)
|
|
|
|
(setq-local lsp-enable-imenu nil)))
|
|
|
|
|
2020-01-28 20:37:51 -05:00
|
|
|
;; If lsp/elgot isn't available, it attempts to install lsp-mode via
|
2020-02-20 18:13:22 -05:00
|
|
|
;; package.el. Doom manages its own dependencies through straight so disable
|
|
|
|
;; this behavior to avoid package-not-initialized errors.
|
2020-02-20 18:19:59 -05:00
|
|
|
(defadvice! +rust--dont-install-packages-a (&rest _)
|
2020-01-28 20:37:51 -05:00
|
|
|
:override #'rustic-install-lsp-client-p
|
|
|
|
(message "No LSP server running")))
|
2019-11-07 12:49:30 -05:00
|
|
|
|
|
|
|
|
|
|
|
(use-package! racer
|
|
|
|
:unless (featurep! +lsp)
|
|
|
|
:hook (rustic-mode . racer-mode)
|
2019-12-02 16:34:11 -05:00
|
|
|
:init
|
2019-12-30 18:23:56 -05:00
|
|
|
;; HACK Fix #2132: `racer' depends on `rust-mode', which tries to modify
|
|
|
|
;; `auto-mode-alist'. We make extra sure that doesn't stick, especially
|
|
|
|
;; when a buffer is reverted, as it is after rustfmt is done wiht it.
|
2019-12-02 16:34:11 -05:00
|
|
|
(after! rust-mode
|
2019-12-03 20:41:17 -05:00
|
|
|
(setq auto-mode-alist (delete '("\\.rs\\'" . rust-mode) auto-mode-alist)))
|
2019-11-07 12:49:30 -05:00
|
|
|
:config
|
|
|
|
(set-lookup-handlers! 'rustic-mode
|
|
|
|
:definition '(racer-find-definition :async t)
|
|
|
|
:documentation '+rust-racer-lookup-documentation))
|