Commit a012ec76 authored by Alexander Gramiak's avatar Alexander Gramiak

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.
parent b7c4aa95
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment