From unknown Sun Jun 22 17:11:07 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#33487 <33487@debbugs.gnu.org> To: bug#33487 <33487@debbugs.gnu.org> Subject: Status: [PATCH] bug of ruby-forward-sexp and ruby-backward-sexp Reply-To: bug#33487 <33487@debbugs.gnu.org> Date: Mon, 23 Jun 2025 00:11:07 +0000 retitle 33487 [PATCH] bug of ruby-forward-sexp and ruby-backward-sexp reassign 33487 emacs submitter 33487 Nobuyoshi Nakada severity 33487 normal tag 33487 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 24 11:23:37 2018 Received: (at submit) by debbugs.gnu.org; 24 Nov 2018 16:23:37 +0000 Received: from localhost ([127.0.0.1]:45763 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gQaiW-00052X-Jk for submit@debbugs.gnu.org; Sat, 24 Nov 2018 11:23:36 -0500 Received: from eggs.gnu.org ([208.118.235.92]:33278) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gQaiU-00052K-Tm for submit@debbugs.gnu.org; Sat, 24 Nov 2018 11:23:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQaiN-0008Dw-H3 for submit@debbugs.gnu.org; Sat, 24 Nov 2018 11:23:29 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:50094) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gQaiN-0008DP-BR for submit@debbugs.gnu.org; Sat, 24 Nov 2018 11:23:27 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42781) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gQaiI-0005OZ-FV for bug-gnu-emacs@gnu.org; Sat, 24 Nov 2018 11:23:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gQafN-0002AI-KG for bug-gnu-emacs@gnu.org; Sat, 24 Nov 2018 11:20:24 -0500 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:36375) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gQafN-00028x-C6 for bug-gnu-emacs@gnu.org; Sat, 24 Nov 2018 11:20:21 -0500 Received: by mail-pg1-x530.google.com with SMTP id n2so4257732pgm.3 for ; Sat, 24 Nov 2018 08:20:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:to:from:subject:message-id:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=rLxaExMoCfGkMV3dAKTNuNC3di68ErOLR0hxGZ5HJr4=; b=MNl/p2BKW3+OgzVM/Ux6bD3vK/AFygoLrwxSyiYRPLqnLFHs8jGX6Wof4Ax9/dgwDB d9v9PP9tZ9j+VmD3KxLMNyFHQU/wSdnQIkRSEjQvmVcLlgzfpW+TVpsYtVMhmlMi7zjs Vk1dMyExVRJJBIo6CYJJoA12JCM8xK3gZ5KXaXkFN0CvmMsCBi/BZaHZgrQAnbt++1+t s+arECj+ktwhscty3dfxqzqx6GK7IR6AjyY7bujNdJOWq+4xYuoemDIaLwcfDF81bakR xG8xoZWm9feBXrYNv4rV8fQbxn2vwCr1VzLWytyXCT/LP2MMPGhRNLdV2f7W13GDRk4v 8QuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:to:from:subject:message-id:date :user-agent:mime-version:content-transfer-encoding:content-language; bh=rLxaExMoCfGkMV3dAKTNuNC3di68ErOLR0hxGZ5HJr4=; b=OV7FP84OY1KpaqRsN9SzD4HMxlRpRz60/7ScGI2vaB0Y4UxL9EestO201fci9o35l5 2PMwljG7JW0dnR5vAQp0BPPd/hwc3VmfmjP46GOMH/6QoNtBLZmpbZB+ww5EywXOkJbt S5N3BKl5JrUz3vHzYR4R8DFMeNqukAxIZV2aHXOqACv4wlEs5kQvj0FvIIrtlS9y4gu+ oR0o0KzpFDzv+LjqXor6GIqvzqTMb0U0KhmdyER6ptnpalWGgTWVrANjmY4xIFglNyeF KCsD8FFPjSjD8b+/BJIqLElAZEeZWo0dn2OEOPHUQqXbjszxzpFAvdJn+6tG92WAnaHS eERQ== X-Gm-Message-State: AA+aEWYYqX9IKQSwYxnreDtIiGROrwINvU+rzsOE4AGx8e6MqeRQ/JkB tvePKUJbzK9rvUjQG1wCcvqMxOTt X-Google-Smtp-Source: AFSGD/UzL31fwVW7f3lUFcmq4oiD7kK+5BDjLByI3CwmT7eG4vbk/AYYNvKllRw3jjmL0Nfi+/kurA== X-Received: by 2002:a63:4101:: with SMTP id o1mr18179756pga.447.1543076419561; Sat, 24 Nov 2018 08:20:19 -0800 (PST) Received: from ruby.local (202-127-188-079.users.bc9.ne.jp. [202.127.188.79]) by smtp.gmail.com with ESMTPSA id w136sm50870943pfd.169.2018.11.24.08.20.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Nov 2018 08:20:18 -0800 (PST) To: bug-gnu-emacs@gnu.org From: Nobuyoshi Nakada Subject: [PATCH] bug of ruby-forward-sexp and ruby-backward-sexp Message-ID: <7c08da24-8c8d-4021-8456-acbe60ec3767@gmail.com> Date: Sun, 25 Nov 2018 01:20:16 +0900 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.3.1 MIME-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -3.8 (---) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.8 (----) Hello, With lisp/progmodes/ruby-mode.el in Emacs 26.1, `ruby-forward-sexp' and `ruby-backward-sexp' cannot work with block arguments which end without argument name. i.e.,     proc do |a,|     end or     proc do |a,*|     end The reason is that `smie-default-forward-token' and `smie-default-backward-token' just scan punctuation and the closing bar together, and return ",|" or ",*|" in the above examples, then the "opening-|" cannot find "matching closing-|". The following patch trims the token and adjust the cursor position in those cases. From 318324f49f9bd0934bec691ed958a6776f190f09 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 25 Nov 2018 00:49:57 +0900 Subject: [PATCH] Fix ruby-mode sexp at block arguments Block arguments can end with ',' or '*' and a '|' may just follow with no spaces.  At that arguments, `smie-default-forward-token' and `smie-default-backward-token' just scan punctuations, and do not extract the closing '|', which matches the opening '|'. This also affected the indentation inside such blocks. ---  lisp/progmodes/ruby-mode.el            |   4 +  test/lisp/progmodes/ruby-mode-tests.el | 154 +++++++++++++++++++++++++  2 files changed, 158 insertions(+) diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 9256dfc..c860393 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -517,6 +517,9 @@ ruby-smie--forward-token               ((ruby-smie--opening-pipe-p) "opening-|")               ((ruby-smie--closing-pipe-p) "closing-|")               (t tok))) +           ((string-match "\\`\\([^|]+\\)|+\\'" tok) +            (forward-char (- (match-end 1))) +            (match-string 1 tok))             ((and (equal tok "") (looking-at "\\\\\n"))              (goto-char (match-end 0)) (ruby-smie--forward-token))             ((equal tok "do") @@ -559,6 +562,7 @@ ruby-smie--backward-token             ((ruby-smie--opening-pipe-p) "opening-|")             ((ruby-smie--closing-pipe-p) "closing-|")             (t tok))) +         ((string-match-p "\\`\\([^|]+\\)|+\\'" tok) "closing-|")           ((string-match-p "\\`|[*&]\\'" tok)            (forward-char 1)            (substring tok 1)) diff --git a/test/lisp/progmodes/ruby-mode-tests.el b/test/lisp/progmodes/ruby-mode-tests.el index 72d83af..7520b17 100644 --- a/test/lisp/progmodes/ruby-mode-tests.el +++ b/test/lisp/progmodes/ruby-mode-tests.el @@ -718,6 +718,160 @@ ruby-sexp-test-example      (ruby-backward-sexp)      (should (= 2 (line-number-at-pos))))) +(ert-deftest ruby-forward-sexp-skips-do-end-block-with-no-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do +     |end") +    (goto-char (point-min)) +    (forward-word 1) +    (ruby-forward-sexp) +    (should (= 2 (line-number-at-pos))) +    (should (eolp)))) + +(ert-deftest ruby-backward-sexp-skips-do-end-block-with-no-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do +     |end") +    (goto-char (point-min)) +    (end-of-line 2) +    (ruby-backward-sexp) +    (should (= 1 (line-number-at-pos))) +    (should (looking-at "do$")))) + +(ert-deftest ruby-forward-sexp-skips-do-end-block-with-empty-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do || +     |end") +    (goto-char (point-min)) +    (forward-word 1) +    (ruby-forward-sexp) +    (should (= 2 (line-number-at-pos))) +    (should (eolp)))) + +(ert-deftest ruby-backward-sexp-skips-do-end-block-with-empty-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do || +     |end") +    (goto-char (point-min)) +    (end-of-line 2) +    (ruby-backward-sexp) +    (should (= 1 (line-number-at-pos))) +    (should (looking-at "do ")))) + +(ert-deftest ruby-forward-sexp-skips-do-end-block-with-single-arg () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a| +     |end") +    (goto-char (point-min)) +    (forward-word 1) +    (ruby-forward-sexp) +    (should (= 2 (line-number-at-pos))) +    (should (eolp)))) + +(ert-deftest ruby-backward-sexp-skips-do-end-block-with-single-arg () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a| +     |end") +    (goto-char (point-min)) +    (end-of-line 2) +    (ruby-backward-sexp) +    (should (= 1 (line-number-at-pos))) +    (should (looking-at "do ")))) + +(ert-deftest ruby-forward-sexp-skips-do-end-block-with-multiple-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a,b| +     |end") +    (goto-char (point-min)) +    (forward-word 1) +    (ruby-forward-sexp) +    (should (= 2 (line-number-at-pos))) +    (should (eolp)))) + +(ert-deftest ruby-backward-sexp-skips-do-end-block-with-multiple-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a,b| +     |end") +    (goto-char (point-min)) +    (end-of-line 2) +    (ruby-backward-sexp) +    (should (= 1 (line-number-at-pos))) +    (should (looking-at "do ")))) + +(ert-deftest ruby-forward-sexp-skips-do-end-block-with-any-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |*| +     |end") +    (goto-char (point-min)) +    (forward-word 1) +    (ruby-forward-sexp) +    (should (= 2 (line-number-at-pos))) +    (should (eolp)))) + +(ert-deftest ruby-backward-sexp-skips-do-end-block-with-any-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |*| +     |end") +    (goto-char (point-min)) +    (end-of-line 2) +    (ruby-backward-sexp) +    (should (= 1 (line-number-at-pos))) +    (should (looking-at "do ")))) + +(ert-deftest ruby-forward-sexp-skips-do-end-block-with-one-and-any-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a,*| +     |end") +    (goto-char (point-min)) +    (forward-word 1) +    (ruby-forward-sexp) +    (should (= 2 (line-number-at-pos))) +    (should (eolp)))) + +(ert-deftest ruby-backward-sexp-skips-do-end-block-with-one-and-any-args () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a,*| +     |end") +    (goto-char (point-min)) +    (end-of-line 2) +    (ruby-backward-sexp) +    (should (= 1 (line-number-at-pos))) +    (should (looking-at "do ")))) + +(ert-deftest ruby-forward-sexp-skips-do-end-block-with-expanded-one-arg () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a,| +     |end") +    (goto-char (point-min)) +    (forward-word 1) +    (ruby-forward-sexp) +    (should (= 2 (line-number-at-pos))) +    (should (eolp)))) + +(ert-deftest ruby-backward-sexp-skips-do-end-block-with-expanded-one-arg () +  (ruby-with-temp-buffer +    (ruby-test-string +     "proc do |a,| +     |end") +    (goto-char (point-min)) +    (end-of-line 2) +    (ruby-backward-sexp) +    (should (= 1 (line-number-at-pos))) +    (should (looking-at "do ")))) +  (ert-deftest ruby-toggle-string-quotes-quotes-correctly ()    (let ((pairs           '(("puts '\"foo\"\\''" . "puts \"\\\"foo\\\"'\"") -- 2.19.1 From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 10 20:18:50 2018 Received: (at 33487-done) by debbugs.gnu.org; 11 Dec 2018 01:18:50 +0000 Received: from localhost ([127.0.0.1]:42514 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gWWhF-0001Z0-TY for submit@debbugs.gnu.org; Mon, 10 Dec 2018 20:18:50 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:46693) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gWWhC-0001Yk-LK for 33487-done@debbugs.gnu.org; Mon, 10 Dec 2018 20:18:48 -0500 Received: by mail-wr1-f68.google.com with SMTP id l9so12339849wrt.13 for <33487-done@debbugs.gnu.org>; Mon, 10 Dec 2018 17:18:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=pG+gKZwibowlKtH+wN4sL+p028sjAJ0yxoK2apREs3U=; b=sK6QK/xvfAAvpx+dkx7PQe9GgK3LNu2vJONgvx/5qFZs+8p6XspiVROuGPD9TUi9Zx ukJr5ZFA0eW2XnMwn/MJ9j2SQVe7dVjI/RpS26Yq9KaNDg9cWBAbzPjP6QsKd8TyEK6c S2WvpaEB3dS/cKH5yPI5gyQsKgK/4YIPypKWTOFfgdtg7Z/VVP0dEU1+APdg4Eeww6Y8 OHN5ronHMpNtN2hvJdVyo1+o5v0T3/I4F4+sw3sF+DcCAu69VJ7LJ1M0vP15aBmXmS4s jpmFTSlUG+6J5JTWEGhUVwgeA8ug1AzAH6ogD7t8UnErol5nxk0Vb7MtGbt+QUdNyDoo CRWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=pG+gKZwibowlKtH+wN4sL+p028sjAJ0yxoK2apREs3U=; b=fkdDHRRA6sshiX8bWABV1Lf2a2LhoHzAsP8AsIY8wuVCNb2oEwdQkgQKFWuRlUl3G/ UXzY7HW2bgvn5rtsxBgPYnWo6lPi8dhIcKASL/9eVnk1p8Vt2pKUM4x7buWizvZmlta8 iJbcsN0urv2Dp63Nq/axjqrCsuM/FGqKjIEdJpyZaxLtLq4cDWPoEWKjUuluTz4LC+Yh V+y8x/qlOiKKrevBDhTvqC84RX6+Z/lDPQrKTJrP3HCrNmd0yPZk+4ta2R3HVT8iq0lB idgClL3Hi5cwMIuWA31wA8pLAzLHH2lb6I5TMYjixD1CmsBJDE1qMYyvCOyVLxujTxIQ u5JQ== X-Gm-Message-State: AA+aEWZHWgZos4h8cDqbedi+ZkCaj+ST2JpZQzB9PtdpUeBnTb31Tnl6 N2odrv38PR7dXFQJCnidPlSFEB/R X-Google-Smtp-Source: AFSGD/XWbeTOE8XIFuA1d58UssuWhBHKtJk8wq6MdYHSZF7QY7QV+dRcrYWnksg57NAib15N60J6sQ== X-Received: by 2002:adf:9bda:: with SMTP id e26mr11150562wrc.295.1544491120405; Mon, 10 Dec 2018 17:18:40 -0800 (PST) Received: from [192.168.1.3] ([185.105.174.23]) by smtp.googlemail.com with ESMTPSA id p14sm9037195wrt.37.2018.12.10.17.18.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Dec 2018 17:18:39 -0800 (PST) Subject: Re: bug#33487: [PATCH] bug of ruby-forward-sexp and ruby-backward-sexp To: Nobuyoshi Nakada , 33487-done@debbugs.gnu.org References: <7c08da24-8c8d-4021-8456-acbe60ec3767@gmail.com> From: Dmitry Gutov Message-ID: Date: Tue, 11 Dec 2018 03:18:37 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:64.0) Gecko/20100101 Thunderbird/64.0 MIME-Version: 1.0 In-Reply-To: <7c08da24-8c8d-4021-8456-acbe60ec3767@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-Spam-Score: 0.1 (/) X-Debbugs-Envelope-To: 33487-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.9 (/) Version: 27.0 Hi Nobuyoshi, On 24.11.2018 18:20, Nobuyoshi Nakada wrote: > With lisp/progmodes/ruby-mode.el in Emacs 26.1, `ruby-forward-sexp' and > `ruby-backward-sexp' cannot work with block arguments which end without > argument name. > > i.e., > >     proc do |a,| > >     end > > > or > > >     proc do |a,*| > >     end > > > The reason is that `smie-default-forward-token' and > `smie-default-backward-token' just scan punctuation and the closing bar > together, and return ",|" or ",*|" in the above examples, then the > "opening-|" cannot find "matching closing-|". > > The following patch trims the token and adjust the cursor position in > those cases. Thank you for the patch. I've simplified it a little: regexps smaller, tests shorter, and removed a few of the latter (seemed redundant), and pushed. Please let me know if there is anything amiss in the resulting patch: http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=3729a3f88fd7ce1d8a1a7f2ea61e8c4d05e954ab From unknown Sun Jun 22 17:11:07 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Tue, 08 Jan 2019 12:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator