spacemacs/layers/+lang/rust/funcs.el

106 lines
3.4 KiB
EmacsLisp
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; funcs.el --- rust Layer functions File for Spacemacs
;;
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
;;
;; Author: NJBS <DoNotTrackMeUsingThis@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
(defun spacemacs//rust-backend ()
"Returns selected backend."
(if rust-backend
rust-backend
(cond
((configuration-layer/layer-used-p 'lsp) 'lsp)
(t 'racer))))
(defun spacemacs//rust-setup-backend ()
"Conditionally setup rust backend."
(pcase (spacemacs//rust-backend)
(`racer (spacemacs//rust-setup-racer))
(`lsp (spacemacs//rust-setup-lsp))))
(defun spacemacs//rust-setup-company ()
"Conditionally setup company based on backend."
(pcase (spacemacs//rust-backend)
(`racer (spacemacs//rust-setup-racer-company))
(`lsp (spacemacs//rust-setup-lsp-company))))
(defun spacemacs//rust-setup-dap ()
"Conditionally setup elixir DAP integration."
;; currently DAP is only available using LSP
(pcase (spacemacs//rust-backend)
(`lsp (spacemacs//rust-setup-lsp-dap))))
;; lsp
(defun spacemacs//rust-setup-lsp ()
"Setup lsp backend"
(if (configuration-layer/layer-used-p 'lsp)
(lsp)
(message "`lsp' layer is not installed, please add `lsp' layer to your dotfile.")))
(defun spacemacs//rust-setup-lsp-company ()
"Setup lsp auto-completion."
(if (configuration-layer/layer-used-p 'lsp)
(progn
(spacemacs|add-company-backends
:backends company-lsp
:modes rust-mode))
(message "`lsp' layer is not installed, please add `lsp' layer to your dotfile.")))
(defun spacemacs//rust-setup-lsp-dap ()
"Setup DAP integration."
(require 'dap-gdb-lldb))
;; racer
(defun spacemacs//rust-setup-racer ()
"Setup racer backend"
(progn
(racer-mode)))
(defun spacemacs//rust-setup-racer-company ()
"Setup racer auto-completion."
(spacemacs|add-company-backends
:backends company-capf
:modes rust-mode
:variables company-tooltip-align-annotations t))
(defun spacemacs/racer-describe ()
"Show a *Racer Help* buffer for the function or type at point.
If `help-window-select' is non-nil, also select the help window."
(interactive)
(let ((window (racer-describe)))
(when help-window-select
(select-window window))))
;; Misc
(defun spacemacs/rust-quick-run ()
"Quickly run a Rust file using rustc.
Meant for a quick-prototype flow only - use `spacemacs/open-junk-file' to
open a junk Rust file, type in some code and quickly run it.
If you want to use third-party crates, create a new project using `cargo-process-new' and run
using `cargo-process-run'."
(interactive)
(lexical-let ((input-file-name (buffer-file-name))
(output-file-name (concat temporary-file-directory
(file-name-nondirectory (buffer-file-name))
"-"
(md5 (buffer-file-name)))))
(add-to-list 'compilation-finish-functions
(lambda (buffer status)
(if (string-match "finished" status)
(shell-command (shell-quote-argument output-file-name) buffer)
(message "Compilation failed with: %s" status))))
(compile
(format "rustc -o %s %s"
(shell-quote-argument output-file-name)
(shell-quote-argument input-file-name)))))