Fix <> syntax in rust-ts-mode
Similar to bug#60351, the angle brackets in rust-ts-mode are not recognized as pairs when they should be. This change copies the function used by c++-ts-mode and adapts it to rust-ts-mode. * lisp/progmodes/rust-ts-mode.el: (rust-ts-mode--syntax-propertize): New function. (rust-ts-mode): Set up syntax-propertize-function.
This commit is contained in:
parent
56e8607dc9
commit
1c3ca3bb64
1 changed files with 26 additions and 0 deletions
|
@ -275,6 +275,28 @@ Return nil if there is no name or if NODE is not a defun node."
|
|||
(treesit-node-text
|
||||
(treesit-node-child-by-field-name node "name") t))))
|
||||
|
||||
(defun rust-ts-mode--syntax-propertize (beg end)
|
||||
"Apply syntax text property to template delimiters between BEG and END.
|
||||
|
||||
< and > are usually punctuation, e.g., as greater/less-than. But
|
||||
when used for types, they should be considered pairs.
|
||||
|
||||
This function checks for < and > in the changed RANGES and apply
|
||||
appropriate text property to alter the syntax of template
|
||||
delimiters < and >'s."
|
||||
(goto-char beg)
|
||||
(while (re-search-forward (rx (or "<" ">")) end t)
|
||||
(pcase (treesit-node-type
|
||||
(treesit-node-parent
|
||||
(treesit-node-at (match-beginning 0))))
|
||||
("type_arguments"
|
||||
(put-text-property (match-beginning 0)
|
||||
(match-end 0)
|
||||
'syntax-table
|
||||
(pcase (char-before)
|
||||
(?< '(4 . ?>))
|
||||
(?> '(5 . ?<))))))))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode rust-ts-mode prog-mode "Rust"
|
||||
"Major mode for editing Rust, powered by tree-sitter."
|
||||
|
@ -284,6 +306,10 @@ Return nil if there is no name or if NODE is not a defun node."
|
|||
(when (treesit-ready-p 'rust)
|
||||
(treesit-parser-create 'rust)
|
||||
|
||||
;; Syntax.
|
||||
(setq-local syntax-propertize-function
|
||||
#'rust-ts-mode--syntax-propertize)
|
||||
|
||||
;; Comments.
|
||||
(c-ts-common-comment-setup)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue