docstrings and various other tweaks for multi-line

This commit is contained in:
Ivan Malison 2015-11-21 16:14:14 -08:00
parent 03f4dabe6d
commit 598a299021

View File

@ -24,10 +24,11 @@
;;; Commentary:
;; multi-line aims to provide a flexible framework for automatically
;; multi-lining and single-lining function invocations, array and map
;; literals and more. It relies on functions that are defined on a per
;; major mode basis wherever it can so that function correctly across
;; many different programming languages.
;; multi-lining and single-lining function invocations and
;; definitions, array and map literals and more. It relies on
;; functions that are defined on a per major mode basis wherever it
;; can so that it functions correctly across many different
;; programming languages.
;;; Code:
@ -37,13 +38,15 @@
(defvar multi-line-single-line-strategy)
(defun multi-line-lparenthesis-advance ()
"Advance to the beginning of a statement that can be multi-lined."
(re-search-forward "[[{(]"))
(defun multi-line-up-list-back ()
"Go to the beginning of a statement from inside the statement."
(up-list) (backward-sexp))
(defclass multi-line-forward-sexp-enter-strategy ()
((done-regex :initarg :done-regex :initform "[[:space:]]*\[[({]")
((done-regex :initarg :done-regex :initform "[[:space:]]*[[({]")
(advance-fn :initarg :advance-fn :initform 'multi-line-lparenthesis-advance)
(inside-fn :initarg :inside-fn :initform 'multi-line-up-list-back)))
@ -56,12 +59,9 @@
(funcall (oref enter :advance-fn)))
(defun multi-line-comma-advance ()
"Advance to the next comma."
(re-search-forward ","))
(defun multi-line-done-advance ()
(re-search-forward "[)}\]")
(backward-char))
(defclass multi-line-forward-sexp-find-strategy ()
((split-regex :initarg :split-regex :initform "[[:space:]]*,")
(done-regex :initarg :done-regex :initform "[[:space:]]*[})]")
@ -136,6 +136,10 @@
(oref respacer :default-respacer)) index markers))
(defun multi-line-get-markers (enter-strategy find-strategy)
"Get the markers for multi-line candidates for the statement at point.
ENTER-STRATEGY is a class with the method multi-line-enter, and
FIND-STRATEGY is a class with the method multi-line-find-next."
(multi-line-enter enter-strategy)
(let ((markers (list (point-marker))))
(nconc markers
@ -144,13 +148,17 @@
(nconc markers (list (point-marker)))))
(defun multi-line-clear-whitespace-at-point ()
"Erase any surrounding whitespace."
(interactive)
(re-search-backward "[^[:space:]\n]")
(forward-char)
(let ((start (point)))
(re-search-forward "[^[:space:]\n]")
(backward-char)
(kill-region start (point))))
(defun multi-line-adjust-whitespace (respacer)
"Adjust whitespace using the provided RESPACER."
(let ((markers (multi-line-get-markers multi-line-enter-strategy
multi-line-find-strategy)))
(cl-loop for marker being the elements of markers using (index i) do
@ -160,6 +168,7 @@
;;;###autoload
(defun multi-line-set-default-strategies ()
"Set multi-line strategies that work for languages with C-like syntax."
(interactive)
(setq multi-line-find-strategy
(make-instance multi-line-forward-sexp-find-strategy)
@ -172,11 +181,13 @@
;;;###autoload
(defun multi-line-multiline ()
"Multi-line the statement at point."
(interactive)
(multi-line-adjust-whitespace multi-line-multi-line-strategy))
;;;###autoload
(defun multi-line-singleline ()
"Single-line the statement at point."
(interactive)
(multi-line-adjust-whitespace multi-line-single-line-strategy))