[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 1b2a881: * lisp/emacs-lisp/lisp-mode.el: Add new indentation conv
From: |
Stefan Monnier |
Subject: |
master 1b2a881: * lisp/emacs-lisp/lisp-mode.el: Add new indentation convention |
Date: |
Fri, 29 May 2020 00:26:17 -0400 (EDT) |
branch: master
commit 1b2a881c9b3ef9158cbf28a65b9e94c2dbc6cec2
Author: akater <nuclearspace@gmail.com>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* lisp/emacs-lisp/lisp-mode.el: Add new indentation convention
(calculate-lisp-indent): To distinguish code and data when indenting,
introduce the convention that a space between an open paren and
a symbol indicate that this should be indented as a simple data list.
---
etc/NEWS | 4 ++++
lisp/emacs-lisp/lisp-mode.el | 8 ++++++--
test/manual/indent/elisp.el | 5 +++++
test/manual/indent/lisp.lisp | 5 +++++
4 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index cb17a93..64cf0ab 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -128,6 +128,10 @@ displayed and which are kept hidden.
** Emacs Lisp mode
*** The mode-line now indicates whether we're using lexical or dynamic scoping.
+*** A space between an open paren and a symbol changes the indentation rule.
+The presence of a space between an open paren and a symbol now is
+taken as a statement by the programmer that this should be indented
+as a data list rather than as a piece of code.
** Dired
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 7098a41..1311d94 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -956,6 +956,7 @@ is the buffer position of the start of the containing
expression."
;; setting this to a number inhibits calling hook
(desired-indent nil)
(retry t)
+ whitespace-after-open-paren
calculate-lisp-indent-last-sexp containing-sexp)
(cond ((or (markerp parse-start) (integerp parse-start))
(goto-char parse-start))
@@ -985,6 +986,7 @@ is the buffer position of the start of the containing
expression."
nil
;; Innermost containing sexp found
(goto-char (1+ containing-sexp))
+ (setq whitespace-after-open-paren (looking-at (rx whitespace)))
(if (not calculate-lisp-indent-last-sexp)
;; indent-point immediately follows open paren.
;; Don't call hook.
@@ -999,9 +1001,11 @@ is the buffer position of the start of the containing
expression."
calculate-lisp-indent-last-sexp)
;; This is the first line to start within the containing sexp.
;; It's almost certainly a function call.
- (if (= (point) calculate-lisp-indent-last-sexp)
+ (if (or (= (point) calculate-lisp-indent-last-sexp)
+ whitespace-after-open-paren)
;; Containing sexp has nothing before this line
- ;; except the first element. Indent under that element.
+ ;; except the first element, or the first element is
+ ;; preceded by whitespace. Indent under that element.
nil
;; Skip the first element, find start of second (the first
;; argument of the function call) and indent under.
diff --git a/test/manual/indent/elisp.el b/test/manual/indent/elisp.el
new file mode 100644
index 0000000..f3874b5
--- /dev/null
+++ b/test/manual/indent/elisp.el
@@ -0,0 +1,5 @@
+(defun x ()
+ (print (quote ( thingy great
+ stuff)))
+ (print (quote (thingy great
+ stuff))))
diff --git a/test/manual/indent/lisp.lisp b/test/manual/indent/lisp.lisp
new file mode 100644
index 0000000..f3874b5
--- /dev/null
+++ b/test/manual/indent/lisp.lisp
@@ -0,0 +1,5 @@
+(defun x ()
+ (print (quote ( thingy great
+ stuff)))
+ (print (quote (thingy great
+ stuff))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 1b2a881: * lisp/emacs-lisp/lisp-mode.el: Add new indentation convention,
Stefan Monnier <=