[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r115560: Fix bug#16116
From: |
Dmitry Gutov |
Subject: |
[Emacs-diffs] trunk r115560: Fix bug#16116 |
Date: |
Tue, 17 Dec 2013 01:32:01 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 115560
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/16116
committer: Dmitry Gutov <address@hidden>
branch nick: trunk
timestamp: Tue 2013-12-17 03:31:55 +0200
message:
Fix bug#16116
* lisp/emacs-lisp/smie.el (smie-indent--rule): Extract `smie-indent--rule-1'.
(smie-indent-close): Call `smie-indent--rule-1' with METHOD
:close-all, to see which indentation method to use.
(smie-rules-function): Document the method :close-all.
* test/indent/ruby.rb: Update examples according to the change
in `smie-indent-close'.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/emacs-lisp/smie.el smie.el-20100517192034-xap3ihmey43772vj-1
test/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-8588
test/indent/ruby.rb ruby.rb-20120424165921-h044139hbrd7snvw-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2013-12-16 23:40:17 +0000
+++ b/lisp/ChangeLog 2013-12-17 01:31:55 +0000
@@ -1,3 +1,10 @@
+2013-12-17 Dmitry Gutov <address@hidden>
+
+ * emacs-lisp/smie.el (smie-indent--rule): Extract `smie-indent--rule-1'.
+ (smie-indent-close): Call `smie-indent--rule-1' with METHOD
+ :close-all, to see which indentation method to use (Bug#16116).
+ (smie-rules-function): Document the method :close-all.
+
2013-12-16 Lars Magne Ingebrigtsen <address@hidden>
* net/shr.el (shr-tag-a): Support zero-length <a name="foo"> elements.
=== modified file 'lisp/emacs-lisp/smie.el'
--- a/lisp/emacs-lisp/smie.el 2013-12-11 15:59:27 +0000
+++ b/lisp/emacs-lisp/smie.el 2013-12-17 01:31:55 +0000
@@ -1135,6 +1135,10 @@
- :list-intro, in which case ARG is a token and the function should return
non-nil if TOKEN is followed by a list of expressions (not separated by any
token) rather than an expression.
+- :close-all, in which case ARG is a close-paren token at indentation and
+ the function should return non-nil if it should be aligned with the opener
+ of the last close-paren token on the same line, if there are multiple.
+ Otherwise, it will be aligned with its own opener.
When ARG is a token, the function is called with point just before that token.
A return value of nil always means to fallback on the default behavior, so the
@@ -1316,8 +1320,8 @@
(defun smie-indent--rule (method token
;; FIXME: Too many parameters.
&optional after parent base-pos)
- "Compute indentation column according to `indent-rule-functions'.
-METHOD and TOKEN are passed to `indent-rule-functions'.
+ "Compute indentation column according to `smie-rules-function'.
+METHOD and TOKEN are passed to `smie-rules-function'.
AFTER is the position after TOKEN, if known.
PARENT is the parent info returned by `smie-backward-sexp', if known.
BASE-POS is the position relative to which offsets should be applied."
@@ -1330,11 +1334,7 @@
;; - :after tok, where
;; ; after is set; parent=nil; base-pos=point;
(save-excursion
- (let ((offset
- (let ((smie--parent parent)
- (smie--token token)
- (smie--after after))
- (funcall smie-rules-function method token))))
+ (let ((offset (smie-indent--rule-1 method token after parent)))
(cond
((not offset) nil)
((eq (car-safe offset) 'column) (cdr offset))
@@ -1355,6 +1355,12 @@
(smie-indent-virtual) (current-column)))))
(t (error "Unknown indentation offset %s" offset))))))
+(defun smie-indent--rule-1 (method token &optional after parent)
+ (let ((smie--parent parent)
+ (smie--token token)
+ (smie--after after))
+ (funcall smie-rules-function method token)))
+
(defun smie-indent-forward-token ()
"Skip token forward and return it, along with its levels."
(let ((tok (funcall smie-forward-token-function)))
@@ -1423,8 +1429,13 @@
(save-excursion
;; (forward-comment (point-max))
(when (looking-at "\\s)")
- (while (not (zerop (skip-syntax-forward ")")))
- (skip-chars-forward " \t"))
+ (if (smie-indent--rule-1 :close-all
+ (buffer-substring-no-properties
+ (point) (1+ (point)))
+ (1+ (point)))
+ (while (not (zerop (skip-syntax-forward ")")))
+ (skip-chars-forward " \t"))
+ (forward-char 1))
(condition-case nil
(progn
(backward-sexp 1)
=== modified file 'test/ChangeLog'
--- a/test/ChangeLog 2013-12-14 06:46:13 +0000
+++ b/test/ChangeLog 2013-12-17 01:31:55 +0000
@@ -1,3 +1,8 @@
+2013-12-17 Dmitry Gutov <address@hidden>
+
+ * indent/ruby.rb: Update examples according to the change
+ in `smie-indent-close'.
+
2013-12-14 Dmitry Gutov <address@hidden>
* indent/ruby.rb: New examples.
=== modified file 'test/indent/ruby.rb'
--- a/test/indent/ruby.rb 2013-12-14 06:46:13 +0000
+++ b/test/indent/ruby.rb 2013-12-17 01:31:55 +0000
@@ -48,8 +48,7 @@
foo({ # bug#16118
a: b,
c: d
- }
- ) # bug#16116
+ })
bar = foo(
a, [
@@ -57,8 +56,7 @@
],
:qux => [
3
- ]
- )
+ ])
foo(
[
@@ -78,8 +76,7 @@
b: 3
},
4
- ]
- )
+ ])
foo = [ # ruby-deep-indent-disabled
1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r115560: Fix bug#16116,
Dmitry Gutov <=