From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: Help understanding ruby.el percent literal syntax Date: Wed, 19 Jun 2019 09:20:05 -0400 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="105005"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Jun 19 15:21:46 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hdaWz-000R5o-7q for ged-emacs-devel@m.gmane.org; Wed, 19 Jun 2019 15:21:41 +0200 Original-Received: from localhost ([::1]:38246 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdaWy-00038Y-6P for ged-emacs-devel@m.gmane.org; Wed, 19 Jun 2019 09:21:40 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:39774) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdaVc-00031W-C1 for emacs-devel@gnu.org; Wed, 19 Jun 2019 09:20:17 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdaVb-0004zN-0I for emacs-devel@gnu.org; Wed, 19 Jun 2019 09:20:16 -0400 Original-Received: from [195.159.176.226] (port=54920 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hdaVa-0004xM-Pk for emacs-devel@gnu.org; Wed, 19 Jun 2019 09:20:14 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.89) (envelope-from ) id 1hdaVY-000PKa-Cu for emacs-devel@gnu.org; Wed, 19 Jun 2019 15:20:12 +0200 X-Injected-Via-Gmane: http://gmane.org/ Cancel-Lock: sha1:MSXsSDgcPLoZERL07Ql3HDe9BHQ= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 195.159.176.226 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:237891 Archived-At: > We are trying to solve a bug in evil-surround at > https://github.com/emacs-evil/evil-surround/issues/154. The bug is that > percent literals refuse to be replaced when you try to replace a pair of > "{}" with "()" using evil-surround, because ruby.el modifies the percent > literal syntax table in a special way (when we use `fundamental-mode' then > things works as expected). ruby-mode uses syntax-propertize to make it so that config.allow_sites = %w{twitter facebook pinterest linkedin} is treated somewhat like config.allow_sites = "w{twitter facebook pinterest linkedin" So if you go to the end of the line and try to skip back over the previous `sexp` you'll end up in front of the `%` rather than in front of the `{`. The purpose is probably to handle things like: config.allow_sites = %w{twitter facebook # pinterest linkedin} where the `#` would otherwise be taken as the beginning of a comment. > If I comment out the call to `ruby-syntax-propertize-percent-literal', then > the bug in evil-surround is gone, and everything just looks the same > visually (the percent literals are correctly highlighted). Not sure what "comment out the call" means exactly, but from my reading of the code, it would result in mayhem (the %w{ above would probably be highlighted as if he extended to the end of the buffer). In order to interact better with things like Evil's delimiter-replacement, ruby-mode.el could be changed so that instead of marking the opening `%` and the closing `}` with the `|` syntax, it would mark the `%` and `w` part with `'` syntax and then arrange to mark the inside of the delimited text with an ad-hoc syntax table that doesn't treat `#` as a comment started nor `"` as a string delimiter (i.e., the same syntax-table used by the `with-syntax-table` in `ruby-syntax-propertize-percent-literal`). Or alternatively, it could look for things like `#` and `"` and give them a `.` syntax. Stefan