summaryrefslogtreecommitdiff
path: root/rust-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-mode.el
parent8bbe70b72fde8046e12e6a41ffbee6c9f6b4ddd7 (diff)
downloadrust-mode-f74dd1cd87987ea7faf0cfc6240c2284ef9133cb.tar.gz
provide alternative rust-mode that derives from rust-ts-mode
Diffstat (limited to 'rust-mode.el')
-rw-r--r--rust-mode.el70
1 files changed, 10 insertions, 60 deletions
diff --git a/rust-mode.el b/rust-mode.el
index 4bb1bcb..0c68c43 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -88,6 +88,13 @@ to the function arguments. When nil, `->' will be indented one level."
:group 'rust-mode
:safe #'booleanp)
+(defcustom rust-mode-treesitter-derive nil
+ "Whether rust-mode should derive from the new treesitter mode `rust-ts-mode'
+instead of `prog-mode'. This option requires emacs29+."
+ :version "29.1"
+ :type 'boolean
+ :group 'rustic)
+
;;; Faces
(define-obsolete-face-alias 'rust-unsafe-face
@@ -250,66 +257,9 @@ See `prettify-symbols-compose-predicate'."
map)
"Keymap for Rust major mode.")
-;;;###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))
+(if (and (version<= "29.1" emacs-version) rust-mode-treesitter-derive)
+ (require 'rust-mode-treesitter)
+ (require 'rust-prog-mode))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode))