summaryrefslogtreecommitdiff
path: root/rust-prog-mode.el
diff options
context:
space:
mode:
authorbrotzeit <brotzeitmacher@gmail.com>2022-12-27 19:16:44 +0100
committerSibi Prabakaran <sibi@psibi.in>2024-02-17 11:12:16 +0530
commitf74dd1cd87987ea7faf0cfc6240c2284ef9133cb (patch)
tree1601fe6d9dab4a84a89a4e4be1fcf5b933591815 /rust-prog-mode.el
parent8bbe70b72fde8046e12e6a41ffbee6c9f6b4ddd7 (diff)
downloadrust-mode-f74dd1cd87987ea7faf0cfc6240c2284ef9133cb.tar.gz
provide alternative rust-mode that derives from rust-ts-mode
Diffstat (limited to 'rust-prog-mode.el')
-rw-r--r--rust-prog-mode.el70
1 files changed, 70 insertions, 0 deletions
diff --git a/rust-prog-mode.el b/rust-prog-mode.el
new file mode 100644
index 0000000..f443da8
--- /dev/null
+++ b/rust-prog-mode.el
@@ -0,0 +1,70 @@
+;;; rust-prog-mode.el --- old rust-mode without treesitter -*-lexical-binding: t-*-
+;;; Commentary:
+
+;; rust-mode code deriving from prog-mode instead of rust-ts-mode
+
+;;; Code:
+
+;;;###autoload
+(define-derived-mode rust-mode prog-mode "Rust"
+ "Major mode for Rust code.
+
+\\{rust-mode-map}"
+ :group 'rust-mode
+ :syntax-table rust-mode-syntax-table
+
+ ;; Syntax
+ (setq-local syntax-propertize-function #'rust-syntax-propertize)
+
+ ;; Indentation
+ (setq-local indent-line-function 'rust-mode-indent-line)
+
+ ;; Fonts
+ (setq-local font-lock-defaults
+ '(rust-font-lock-keywords
+ nil nil nil nil
+ (font-lock-syntactic-face-function
+ . rust-mode-syntactic-face-function)))
+
+ ;; Misc
+ (setq-local comment-start "// ")
+ (setq-local comment-end "")
+ (setq-local open-paren-in-column-0-is-defun-start nil)
+
+ ;; Auto indent on }
+ (setq-local electric-indent-chars
+ (cons ?} (and (boundp 'electric-indent-chars)
+ electric-indent-chars)))
+
+ ;; Allow paragraph fills for comments
+ (setq-local comment-start-skip "\\(?://[/!]*\\|/\\*[*!]?\\)[[:space:]]*")
+ (setq-local paragraph-start
+ (concat "[[:space:]]*\\(?:"
+ comment-start-skip
+ "\\|\\*/?[[:space:]]*\\|\\)$"))
+ (setq-local paragraph-separate paragraph-start)
+ (setq-local normal-auto-fill-function #'rust-do-auto-fill)
+ (setq-local fill-paragraph-function #'rust-fill-paragraph)
+ (setq-local fill-forward-paragraph-function #'rust-fill-forward-paragraph)
+ (setq-local adaptive-fill-function #'rust-find-fill-prefix)
+ (setq-local adaptive-fill-first-line-regexp "")
+ (setq-local comment-multi-line t)
+ (setq-local comment-line-break-function #'rust-comment-indent-new-line)
+ (setq-local imenu-generic-expression rust-imenu-generic-expression)
+ (setq-local imenu-syntax-alist '((?! . "w"))) ; For macro_rules!
+ (setq-local beginning-of-defun-function #'rust-beginning-of-defun)
+ (setq-local end-of-defun-function #'rust-end-of-defun)
+ (setq-local parse-sexp-lookup-properties t)
+ (setq-local electric-pair-inhibit-predicate
+ #'rust-electric-pair-inhibit-predicate-wrap)
+ (add-function :before-until (local 'electric-pair-skip-self)
+ #'rust-electric-pair-skip-self)
+ ;; Configure prettify
+ (setq prettify-symbols-alist rust-prettify-symbols-alist)
+ (setq prettify-symbols-compose-predicate #'rust--prettify-symbols-compose-p)
+
+ (add-hook 'before-save-hook rust-before-save-hook nil t)
+ (add-hook 'after-save-hook rust-after-save-hook nil t))
+
+(provide 'rust-prog-mode)
+;;; rust-prog-mode.el ends here \ No newline at end of file