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:
Graham Marlow 2024-01-02 13:58:22 -08:00 committed by Yuan Fu
parent 1081e975c9
commit 1d40c601b3
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -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)