[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r114738: * lisp/progmodes/ruby-mode.el (ruby-smie-gr
From: |
Dmitry Gutov |
Subject: |
[Emacs-diffs] trunk r114738: * lisp/progmodes/ruby-mode.el (ruby-smie-grammar): Remove outdated |
Date: |
Mon, 21 Oct 2013 22:26:04 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 114738
revision-id: address@hidden
parent: address@hidden
committer: Dmitry Gutov <address@hidden>
branch nick: trunk
timestamp: Tue 2013-10-22 02:25:59 +0400
message:
* lisp/progmodes/ruby-mode.el (ruby-smie-grammar): Remove outdated
TODO. Add "." after " @ ".
(ruby-smie--at-dot-call): New function. Checks if point at method
call with explicit target.
(ruby-smie--forward-token, ruby-smie--backward-token): Prepend "."
to the method name tokens when it precedes them.
(ruby-smie--backward-id, ruby-smie--forward-id): Remove.
(ruby-smie-rules): Add rule for indentation before and after "."
token.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/progmodes/ruby-mode.el
rubymode.el-20091113204419-o5vbwnq5f7feedwu-8804
test/indent/ruby.rb ruby.rb-20120424165921-h044139hbrd7snvw-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2013-10-21 14:15:13 +0000
+++ b/lisp/ChangeLog 2013-10-21 22:25:59 +0000
@@ -1,3 +1,15 @@
+2013-10-21 Dmitry Gutov <address@hidden>
+
+ * progmodes/ruby-mode.el (ruby-smie-grammar): Remove outdated
+ TODO. Add "." after " @ ".
+ (ruby-smie--at-dot-call): New function. Checks if point at method
+ call with explicit target.
+ (ruby-smie--forward-token, ruby-smie--backward-token): Prepend "."
+ to the method name tokens when it precedes them.
+ (ruby-smie--backward-id, ruby-smie--forward-id): Remove.
+ (ruby-smie-rules): Add rule for indentation before and after "."
+ token.
+
2013-10-21 Stefan Monnier <address@hidden>
* textmodes/remember.el (remember-diary-extract-entries):
=== modified file 'lisp/progmodes/ruby-mode.el'
--- a/lisp/progmodes/ruby-mode.el 2013-10-21 13:34:13 +0000
+++ b/lisp/progmodes/ruby-mode.el 2013-10-21 22:25:59 +0000
@@ -251,7 +251,6 @@
;; Here's a simplified BNF grammar, for reference:
;; http://www.cse.buffalo.edu/~regan/cse305/RubyBNF.pdf
(defconst ruby-smie-grammar
- ;; FIXME: Add support for Cucumber.
(smie-prec2->grammar
(smie-merge-prec2s
(smie-bnf->prec2
@@ -259,7 +258,8 @@
(insts (inst) (insts ";" insts))
(inst (exp) (inst "iuwu-mod" exp))
(exp (exp1) (exp "," exp) (exp "=" exp)
- (id " @ " exp))
+ (id " @ " exp)
+ (exp "." exp))
(exp1 (exp2) (exp2 "?" exp1 ":" exp1))
(exp2 ("def" insts "end")
("begin" insts-rescue-insts "end")
@@ -288,7 +288,7 @@
(ielsei (itheni) (itheni "else" insts))
(if-body (ielsei) (if-body "elsif" if-body)))
'((nonassoc "in") (assoc ";") (right " @ ")
- (assoc ",") (right "="))
+ (assoc ",") (right "=") (assoc "."))
'((assoc "when"))
'((assoc "elsif"))
'((assoc "rescue" "ensure"))
@@ -354,14 +354,10 @@
(eq (char-syntax (char-before (1- (point)))) '?w)))
(memq (char-syntax (char-after pos)) '(?w ?\"))))
-(defun ruby-smie--forward-id ()
- (when (and (not (eobp))
- (eq ?w (char-syntax (char-after))))
- (let ((tok (smie-default-forward-token)))
- (when (eq ?. (char-after))
- (forward-char 1)
- (setq tok (concat tok "." (ruby-smie--forward-id))))
- tok)))
+(defun ruby-smie--at-dot-call ()
+ (and (eq ?w (char-syntax (char-after)))
+ (eq (char-before) ?.)
+ (not (eq (char-before (1- (point))) ?.))))
(defun ruby-smie--forward-token ()
(let ((pos (point)))
@@ -382,7 +378,10 @@
(ruby-smie--args-separator-p (prog1 (point) (goto-char pos)))))
" @ ")
(t
- (let ((tok (smie-default-forward-token)))
+ (let ((dot (ruby-smie--at-dot-call))
+ (tok (smie-default-forward-token)))
+ (when dot
+ (setq tok (concat "." tok)))
(cond
((member tok '("unless" "if" "while" "until"))
(if (save-excursion (forward-word -1) (ruby-smie--bosp))
@@ -398,18 +397,8 @@
(line-end-position))
(ruby-smie--forward-token)) ;Fully redundant.
(t ";")))
- ((equal tok ".") (concat tok (ruby-smie--forward-id)))
(t tok)))))))))
-(defun ruby-smie--backward-id ()
- (when (and (not (bobp))
- (eq ?w (char-syntax (char-before))))
- (let ((tok (smie-default-backward-token)))
- (when (eq ?. (char-before))
- (forward-char -1)
- (setq tok (concat (ruby-smie--backward-id) "." tok)))
- tok)))
-
(defun ruby-smie--backward-token ()
(let ((pos (point)))
(forward-comment (- (point)))
@@ -424,9 +413,9 @@
;; In some textbooks, "e1 @ e2" is used to mean "call e1 with arg e2".
" @ ")
(t
- (let ((tok (smie-default-backward-token)))
- (when (eq ?. (char-before))
- (forward-char -1)
+ (let ((tok (smie-default-backward-token))
+ (dot (ruby-smie--at-dot-call)))
+ (when dot
(setq tok (concat "." tok)))
(when (and (eq ?: (char-before)) (string-match "\\`\\s." tok))
(forward-char -1) (setq tok (concat ":" tok))) ;; bug#15208.
@@ -446,11 +435,6 @@
(line-end-position))
(ruby-smie--backward-token)) ;Fully redundant.
(t ";")))
- ;; FIXME: We shouldn't merge the dot with preceding token here
- ;; either, but not doing that breaks indentation of hanging
- ;; method calls with dot on the first line.
- ((equal tok ".")
- (concat (ruby-smie--backward-id) tok))
(t tok)))))))
(defun ruby-smie-rules (kind token)
@@ -495,6 +479,9 @@
(`(:after . ,(or "=" "iuwu-mod")) 2)
(`(:after . " @ ") (smie-rule-parent))
(`(:before . "do") (smie-rule-parent))
+ (`(,(or :before :after) . ".")
+ (unless (smie-rule-parent-p ".")
+ (smie-rule-parent ruby-indent-level)))
(`(:before . ,(or `"else" `"then" `"elsif" `"rescue" `"ensure")) 0)
(`(:before . ,(or `"when"))
(if (not (smie-rule-sibling-p)) 0)) ;; ruby-indent-level
=== modified file 'test/indent/ruby.rb'
--- a/test/indent/ruby.rb 2013-10-21 13:34:13 +0000
+++ b/test/indent/ruby.rb 2013-10-21 22:25:59 +0000
@@ -189,15 +189,16 @@
foo +
bar
+foo_bar_tee(1, 2, 3)
+ .qux
+ .bar
+
# Examples below still fail with `ruby-use-smie' on:
foo = [1, 2, 3].map do |i|
i + 1
end
-foo_bar_tee(1, 2, 3)
- .qux
-
method !arg1,
arg2
@@ -209,3 +210,13 @@
method (a + b),
c
+
+foo do
+ bar
+ .tee
+end
+
+def bar
+ foo
+ .baz
+end
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r114738: * lisp/progmodes/ruby-mode.el (ruby-smie-grammar): Remove outdated,
Dmitry Gutov <=