Don't fill keywords after Emacs Lisp docstring
This approach does mean that keywords that have spaces before them inside of docstrings aren't filled, but I think this is should be fine until Bug#28937 is fixed. * lisp/emacs-lisp/lisp-mode.el (lisp-fill-paragraph): Add a colon to paragraph-start unconditionally, but require that it follows at least one space. (Bug#24622) * test/lisp/emacs-lisp/lisp-tests.el: New tests for Bug#24622 and Bug#7751.
This commit is contained in:
parent
b7c4aa951c
commit
a012ec766c
2 changed files with 34 additions and 8 deletions
|
@ -1267,7 +1267,8 @@ and initial semicolons."
|
|||
;; case). The `;' and `:' stop the paragraph being filled at following
|
||||
;; comment lines and at keywords (e.g., in `defcustom'). Left parens are
|
||||
;; escaped to keep font-locking, filling, & paren matching in the source
|
||||
;; file happy.
|
||||
;; file happy. The `:' must be preceded by whitespace so that keywords
|
||||
;; inside of the docstring don't start new paragraphs (Bug#7751).
|
||||
;;
|
||||
;; `paragraph-separate': A clever regexp distinguishes the first line of
|
||||
;; a docstring and identifies it as a paragraph separator, so that it
|
||||
|
@ -1280,13 +1281,7 @@ and initial semicolons."
|
|||
;; `emacs-lisp-docstring-fill-column' if that value is an integer.
|
||||
(let ((paragraph-start
|
||||
(concat paragraph-start
|
||||
(format "\\|\\s-*\\([(;%s\"]\\|`(\\|#'(\\)"
|
||||
;; If we're inside a string (like the doc
|
||||
;; string), don't consider a colon to be
|
||||
;; a paragraph-start character.
|
||||
(if (nth 3 (syntax-ppss))
|
||||
""
|
||||
":"))))
|
||||
"\\|\\s-*\\([(;\"]\\|\\s-:\\|`(\\|#'(\\)"))
|
||||
(paragraph-separate
|
||||
(concat paragraph-separate "\\|\\s-*\".*[,\\.]$"))
|
||||
(fill-column (if (and (integerp emacs-lisp-docstring-fill-column)
|
||||
|
|
|
@ -589,5 +589,36 @@ region."
|
|||
(should (= (point) before))
|
||||
(should (= (mark) after))))
|
||||
|
||||
(ert-deftest lisp-fill-paragraph-colon ()
|
||||
"Keywords below Emacs Lisp docstrings should not be filled (Bug#24622).
|
||||
Keywords inside docstrings should be filled (Bug#7751)."
|
||||
(elisp-tests-with-temp-buffer
|
||||
"
|
||||
\(defcustom custom value
|
||||
\"First\n
|
||||
Second\n
|
||||
=!inside=Third line\"
|
||||
=!keywords=:type 'sexp
|
||||
:version \"26.1\"
|
||||
:group 'lisp-tests)"
|
||||
(goto-char inside)
|
||||
(fill-paragraph)
|
||||
(goto-char keywords)
|
||||
(beginning-of-line)
|
||||
(should (looking-at " :type 'sexp\n :version \"26.1\"\n :")))
|
||||
(elisp-tests-with-temp-buffer
|
||||
"
|
||||
\(defun foo ()
|
||||
\"Summary.
|
||||
=!inside=Testing keywords: :one :two :three\"
|
||||
(body))" ; FIXME: Remove parens around body to test Bug#28937 once it's fixed
|
||||
(goto-char inside)
|
||||
(let ((emacs-lisp-docstring-fill-column 30))
|
||||
(fill-paragraph))
|
||||
(forward-line)
|
||||
(should (looking-at ":three"))
|
||||
(end-of-line)
|
||||
(should-not (eq (preceding-char) ?\)))))
|
||||
|
||||
(provide 'lisp-tests)
|
||||
;;; lisp-tests.el ends here
|
||||
|
|
Loading…
Add table
Reference in a new issue