* 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.