* bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal
@ 2016-08-08 3:50 Ryo Furue
2016-08-11 3:10 ` Dmitry Gutov
0 siblings, 1 reply; 6+ messages in thread
From: Ryo Furue @ 2016-08-08 3:50 UTC (permalink / raw)
To: 24181
Hi emacs maintainers,
1. Open an empty Ruby source code, say "tmp.rb".
2. Type the following:
#!/usr/bin/ruby
base = ?a.ord - 1
On hitting the return key at the end of the second line, the cursor
moves below "a", not to the top of the third line. The indentation
state seems to be confused. I did this test with "emacs -q" .
?a is a valid Ruby syntax for string literal. After writing this, I learned
that "a".ord is equivalent (I think), so I already have a workaround.
Hope this helps,
Ryo
In GNU Emacs 25.1.50.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47
Version 10.11.6 (Build 15G31))
of 2016-07-27 built on furufuru-mac.yes.jamstec.go.jp
Repository revision: 682fdae7efe5a36636539b953a657445f2f3382b
Windowing system distributor 'Apple', version 10.3.1404
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
(New file)
C-h C-g is undefined
Making completion list... [2 times]
Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/usr/local/share/emacs/site-lisp
--infodir=/usr/local/Cellar/emacs/HEAD-682fdae/share/info/emacs
--prefix=/usr/local/Cellar/emacs/HEAD-682fdae --with-xml2
--without-dbus --with-gnutls --with-rsvg --with-imagemagick --with-ns
--disable-ns-self-contained'
Configured features:
JPEG RSVG IMAGEMAGICK NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS
NS
Important settings:
value of $LC_COLLATE: C
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Ruby
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message subr-x puny seq byte-opt gv
bytecomp byte-compile cl-extra help-mode cconv cl-loaddefs pcase cl-lib
dired dired-loaddefs format-spec rfc822 mml mml-sec password-cache epa
derived epg epg-config gnus-util rmail rmail-loaddefs mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
ruby-mode smie easymenu time-date mule-util tooltip eldoc electric
uniquify ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win
ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core term/tty-colors frame cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese charscript case-table epa-hook
jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote kqueue cocoa ns multi-tty
make-network-process emacs)
Memory information:
((conses 16 208190 9578)
(symbols 48 20842 0)
(miscs 40 74 216)
(strings 32 19355 5290)
(string-bytes 1 615360)
(vectors 16 34870)
(vector-slots 8 670676 5823)
(floats 8 177 312)
(intervals 56 241 2)
(buffers 976 14))
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal
2016-08-08 3:50 bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal Ryo Furue
@ 2016-08-11 3:10 ` Dmitry Gutov
2016-08-11 6:41 ` Ryo Furue
0 siblings, 1 reply; 6+ messages in thread
From: Dmitry Gutov @ 2016-08-11 3:10 UTC (permalink / raw)
To: Ryo Furue, 24181
Hi!
On 08/08/2016 06:50 AM, Ryo Furue wrote:
> 1. Open an empty Ruby source code, say "tmp.rb".
> 2. Type the following:
>
> #!/usr/bin/ruby
> base = ?a.ord - 1
>
> On hitting the return key at the end of the second line, the cursor
> moves below "a", not to the top of the third line. The indentation
> state seems to be confused. I did this test with "emacs -q" .
Thanks for the report. I'd like to fix it sometime, but it's not a big
priority, considering this syntax is usually discouraged:
https://github.com/bbatsov/ruby-style-guide#no-character-literals
> ?a is a valid Ruby syntax for string literal. After writing this, I learned
> that "a".ord is equivalent (I think)
Yes, in Ruby 1.9 and newer, it's a full equivalent.
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal
2016-08-11 3:10 ` Dmitry Gutov
@ 2016-08-11 6:41 ` Ryo Furue
2021-01-02 3:06 ` Dmitry Gutov
0 siblings, 1 reply; 6+ messages in thread
From: Ryo Furue @ 2016-08-11 6:41 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: 24181
Hi,
> Thanks for the report. I'd like to fix it sometime, but it's not a big
> priority, considering this syntax is usually discouraged:
>
> https://github.com/bbatsov/ruby-style-guide#no-character-literals
Thank you for the link! It seems very comprehensive and must be useful
for many other issues, too.
I agree the bug I reported isn't a big issue.
>> ?a is a valid Ruby syntax for string literal. After writing this, I
>> learned
>> that "a".ord is equivalent (I think)
>
> Yes, in Ruby 1.9 and newer, it's a full equivalent.
After my last message, I learned that Ruby has abandoned the idea of
"character type" and instead of elevating ?a to a proper character
literal, it has made it equivalent to a single-character string "a".
So, a String is no longer a sequence of individual characters (because
"character" has no representation in the language). "a".ord returns
the character code of this single-character string but "abc".ord
ignores the "bc" part. I don't think that's a clean design, but
perhaps it's the simplest, practical one, in the face of various
character encodings. . . . That makes me wonder how Haskell handles
unicode. In that language, "String" is an alias for "[Char]" (list
of Char's). . . . I digressed.
Cheers,
Ryo
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal
2016-08-11 6:41 ` Ryo Furue
@ 2021-01-02 3:06 ` Dmitry Gutov
2021-08-15 12:26 ` Lars Ingebrigtsen
0 siblings, 1 reply; 6+ messages in thread
From: Dmitry Gutov @ 2021-01-02 3:06 UTC (permalink / raw)
To: Ryo Furue; +Cc: 24181
Sorry for digging this up, just looking through old issues.
On 11.08.2016 09:41, Ryo Furue wrote:
>>> ?a is a valid Ruby syntax for string literal. After writing this, I
>>> learned
>>> that "a".ord is equivalent (I think)
>>
>> Yes, in Ruby 1.9 and newer, it's a full equivalent.
>
> After my last message, I learned that Ruby has abandoned the idea of
> "character type" and instead of elevating ?a to a proper character
> literal, it has made it equivalent to a single-character string "a".
> So, a String is no longer a sequence of individual characters (because
> "character" has no representation in the language). "a".ord returns
> the character code of this single-character string but "abc".ord
> ignores the "bc" part. I don't think that's a clean design, but
> perhaps it's the simplest, practical one, in the face of various
> character encodings. . . .
This syntax there is purely for compatibility, I believe.
> That makes me wonder how Haskell handles
> unicode. In that language, "String" is an alias for "[Char]" (list
> of Char's). . . . I digressed.
Types in a statically typed language are a bit of a different beast.
E.g., you can eliminate a lot of associated overhead during compilation.
Not so with a dynamically typed langues.
For posterity, a fix for the reported problem should look like the patch
at the end of this message. I'm not going to commit it, though (or, at
least, not in its current form) because Ruby makes it non-trivial to
distinguish between these literals and the ternary operator:
> abc ?( 1+ 2) : 4
=> 3
> def dee(arg);
> dee ?( 1+ 2) : 4
SyntaxError ((irb):27: syntax error, unexpected tINTEGER, expecting end)
dee ?( 1+ 2) : 4
Hopefully, the syntax will just be removed in some near future version
of Ruby and save us the trouble. But here's the patch. To go in, it
would have to be accompanied by some extra code looking around to
determine the context.
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 3effb6ed66..bd74e71f6a 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -1854,9 +1854,9 @@ ruby-syntax-propertize
(syntax-propertize-rules
;; $' $" $` .... are variables.
;; ?' ?" ?` are character literals (one-char strings in 1.9+).
- ("\\([?$]\\)[#\"'`:?]"
+ ("\\([?$]\\)[#\"'`:?[:alnum:]]"
(1 (if (save-excursion
- (nth 3 (syntax-ppss (match-beginning 0))))
+ (nth 8 (syntax-ppss (match-beginning 0))))
;; Within a string, skip.
(ignore
(goto-char (match-end 1)))
^ permalink raw reply related [flat|nested] 6+ messages in thread
* bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal
2021-01-02 3:06 ` Dmitry Gutov
@ 2021-08-15 12:26 ` Lars Ingebrigtsen
2021-08-15 22:21 ` Dmitry Gutov
0 siblings, 1 reply; 6+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-15 12:26 UTC (permalink / raw)
To: Dmitry Gutov; +Cc: 24181, Ryo Furue
Dmitry Gutov <dgutov@yandex.ru> writes:
> Hopefully, the syntax will just be removed in some near future version
> of Ruby and save us the trouble. But here's the patch. To go in, it
> would have to be accompanied by some extra code looking around to
> determine the context.
So it sounds like the conclusion here is that we're not going to change
the behaviour here, and I'm closing this bug.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal
2021-08-15 12:26 ` Lars Ingebrigtsen
@ 2021-08-15 22:21 ` Dmitry Gutov
0 siblings, 0 replies; 6+ messages in thread
From: Dmitry Gutov @ 2021-08-15 22:21 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 24181, Ryo Furue
On 15.08.2021 15:26, Lars Ingebrigtsen wrote:
> Dmitry Gutov<dgutov@yandex.ru> writes:
>
>> Hopefully, the syntax will just be removed in some near future version
>> of Ruby and save us the trouble. But here's the patch. To go in, it
>> would have to be accompanied by some extra code looking around to
>> determine the context.
> So it sounds like the conclusion here is that we're not going to change
> the behaviour here, and I'm closing this bug.
For now, at least. Since there's not much apparent user demand for it.
Whether that's just because there are not too many Emacs users doing
Ruby these days, or because the syntax really fell out of favor, I don't
know.
Hope it's the latter.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-08-15 22:21 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-08 3:50 bug#24181: 25.1.50; ruby mode: wrong auto indent after "?" string literal Ryo Furue
2016-08-11 3:10 ` Dmitry Gutov
2016-08-11 6:41 ` Ryo Furue
2021-01-02 3:06 ` Dmitry Gutov
2021-08-15 12:26 ` Lars Ingebrigtsen
2021-08-15 22:21 ` Dmitry Gutov
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.