Function: rust-ts-mode
rust-ts-mode is an autoloaded, interactive and byte-compiled function
defined in rust-ts-mode.el.gz.
Signature
(rust-ts-mode)
Documentation
Major mode for editing Rust, powered by tree-sitter.
In addition to any hooks its parent mode prog-mode might have run,
this mode runs the hook rust-ts-mode-hook, as the final or penultimate
step during initialization.
Probably introduced at or before Emacs version 29.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/rust-ts-mode.el.gz
;;;###autoload
(define-derived-mode rust-ts-mode prog-mode "Rust"
"Major mode for editing Rust, powered by tree-sitter."
:group 'rust
:syntax-table rust-ts-mode--syntax-table
;; `treesit-ready-p' also checks for buffer size.
(when (and (treesit-ensure-installed 'rust)
(treesit-ready-p 'rust))
(setq treesit-primary-parser (treesit-parser-create 'rust))
;; Syntax.
(setq-local syntax-propertize-function
#'rust-ts-mode--syntax-propertize)
;; Comments.
(c-ts-common-comment-setup)
;; Font-lock.
(setq-local treesit-font-lock-settings rust-ts-mode--font-lock-settings)
(setq-local treesit-font-lock-feature-list
'(( comment definition)
( keyword string)
( assignment attribute builtin constant escape-sequence
number type)
( bracket delimiter error function operator property variable)))
;; Prettify configuration
(setq prettify-symbols-alist rust-ts-mode-prettify-symbols-alist)
(setq prettify-symbols-compose-predicate
#'rust-ts-mode--prettify-symbols-compose-p)
;; Imenu.
(setq-local treesit-simple-imenu-settings
`(("Module" "\\`mod_item\\'" nil nil)
("Enum" "\\`enum_item\\'" nil nil)
("Impl" "\\`impl_item\\'" nil nil)
("Type" "\\`type_item\\'" nil nil)
("Struct" "\\`struct_item\\'" nil nil)
("Fn" "\\`function_item\\'" nil nil)))
;; Outline.
(setq-local treesit-outline-predicate
(rx bos (or "mod_item"
"enum_item"
"impl_item"
"type_item"
"struct_item"
"function_item"
"trait_item")
eos))
;; Indent.
(setq-local indent-tabs-mode nil
treesit-simple-indent-rules rust-ts-mode--indent-rules)
;; Electric.
(setq-local electric-indent-chars
(append "{}():;,#" electric-indent-chars))
;; Flymake.
(add-hook 'flymake-diagnostic-functions #'rust-ts-flymake nil 'local)
;; Navigation.
(setq-local treesit-defun-type-regexp
(regexp-opt '("enum_item"
"function_item"
"impl_item"
"struct_item")))
(setq-local treesit-defun-name-function #'rust-ts-mode--defun-name)
(setq-local treesit-thing-settings
`((rust
(list
,(rx bos (or "token_tree_pattern"
"token_tree"
"attribute_item"
"inner_attribute_item"
"declaration_list"
"enum_variant_list"
"field_declaration_list"
"ordered_field_declaration_list"
"type_parameters"
"use_list"
"parameters"
"bracketed_type"
"array_type"
"for_lifetimes"
"tuple_type"
"unit_type"
"use_bounds"
"type_arguments"
"delim_token_tree"
"arguments"
"array_expression"
"parenthesized_expression"
"tuple_expression"
"unit_expression"
"field_initializer_list"
"match_block"
"block"
"tuple_pattern"
"slice_pattern")
eos)))))
(treesit-major-mode-setup)))