summaryrefslogtreecommitdiff
path: root/rust-mode.el
diff options
context:
space:
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))