Improve yaml-ts-mode fill-paragraph (bug#68226)
When using fill-paragraph on a block_scalar (the element within a block_node) fill the paragraph such that the contents remain within the block_node. This fixes the previous behavior that would clobber a block_node. * lisp/textmodes/yaml-ts-mode.el: Add yaml-ts-mode--fill-paragraph
This commit is contained in:
parent
1081e975c9
commit
1d40c601b3
1 changed files with 22 additions and 0 deletions
|
@ -117,6 +117,26 @@
|
|||
'((ERROR) @font-lock-warning-face))
|
||||
"Tree-sitter font-lock settings for `yaml-ts-mode'.")
|
||||
|
||||
(defun yaml-ts-mode--fill-paragraph (&optional justify)
|
||||
"Fill paragraph.
|
||||
Behaves like `fill-paragraph', but respects block node
|
||||
boundaries. JUSTIFY is passed to `fill-paragraph'."
|
||||
(interactive "*P")
|
||||
(save-restriction
|
||||
(widen)
|
||||
(let ((node (treesit-node-at (point))))
|
||||
(when (string= "block_scalar" (treesit-node-type node))
|
||||
(let* ((start (treesit-node-start node))
|
||||
(end (treesit-node-end node))
|
||||
(start-marker (point-marker))
|
||||
(fill-paragraph-function nil))
|
||||
(save-excursion
|
||||
(goto-char start)
|
||||
(forward-line)
|
||||
(move-marker start-marker (point))
|
||||
(narrow-to-region (point) end))
|
||||
(fill-region start-marker end justify))))))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode yaml-ts-mode text-mode "YAML"
|
||||
"Major mode for editing YAML, powered by tree-sitter."
|
||||
|
@ -141,6 +161,8 @@
|
|||
(constant escape-sequence number property)
|
||||
(bracket delimiter error misc-punctuation)))
|
||||
|
||||
(setq-local fill-paragraph-function #'yaml-ts-mode--fill-paragraph)
|
||||
|
||||
(treesit-major-mode-setup)))
|
||||
|
||||
(if (treesit-ready-p 'yaml)
|
||||
|
|
Loading…
Add table
Reference in a new issue