From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Wilhelm H Kirschbaum Newsgroups: gmane.emacs.bugs Subject: bug#60355: 29.0.60; Tree sitter incorrectly handles of PRED for treesit-defun-type-regexp Date: Tue, 27 Dec 2022 14:09:29 +0200 Organization: Personal Message-ID: <87cz85yqx2.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; format=flowed Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="873"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: mu4e 1.9.3; emacs 29.0.60 To: 60355@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Dec 27 13:26:16 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pA928-000AZC-8f for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 27 Dec 2022 13:26:16 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pA91x-0007OK-Oa; Tue, 27 Dec 2022 07:26:05 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pA91u-0007Np-OK for bug-gnu-emacs@gnu.org; Tue, 27 Dec 2022 07:26:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pA91u-0005sB-Cs for bug-gnu-emacs@gnu.org; Tue, 27 Dec 2022 07:26:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pA91t-0000zH-Tf for bug-gnu-emacs@gnu.org; Tue, 27 Dec 2022 07:26:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Wilhelm H Kirschbaum Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 27 Dec 2022 12:26:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 60355 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.16721439423767 (code B ref -1); Tue, 27 Dec 2022 12:26:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 27 Dec 2022 12:25:42 +0000 Original-Received: from localhost ([127.0.0.1]:54866 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pA91a-0000yh-HC for submit@debbugs.gnu.org; Tue, 27 Dec 2022 07:25:42 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:41144) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pA91Y-0000yY-BX for submit@debbugs.gnu.org; Tue, 27 Dec 2022 07:25:40 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pA91V-0007G6-NA for bug-gnu-emacs@gnu.org; Tue, 27 Dec 2022 07:25:38 -0500 Original-Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pA91U-0005oY-1E for bug-gnu-emacs@gnu.org; Tue, 27 Dec 2022 07:25:37 -0500 Original-Received: by mail-wm1-x32c.google.com with SMTP id o15so9208727wmr.4 for ; Tue, 27 Dec 2022 04:25:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:message-id:organization:date:subject:to:from :user-agent:from:to:cc:subject:date:message-id:reply-to; bh=JomhKnD+UqtboOAFfhZM71Z79uoo7yOBX09Tbp8X2FE=; b=K8M9X0EKtHlxEsZoJQN1BFFuV2mElGCIOgqJckF4ODeFLkwRfOSeJxcHkNUWpwkUEa iT+015G6DQYxiYUhriJwB0Uw9NWnGJdd2//WCOhsvw7Hv2y9VSsAFQOrF1WdEvm/4d61 8Zp1DvaWBCiRKRHULT9fgG52umhJYfkpqXosQCo9CROKOZy6Xbtp9+rSt+A3vD+rN7Nx chFeJbggvsE1VYz6cvTxOuDzp/uLDFbknTH/lbIs6YxE6ITnJheX7gxOuo7vJjkbM1Dl UTKD3q+N0QpkaOqGAhUBpr6Cqm90+mViHOCEa/zmCGEUzVhJTOfkbKEKSCMBrMC2rgQd F5aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:organization:date:subject:to:from :user-agent:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=JomhKnD+UqtboOAFfhZM71Z79uoo7yOBX09Tbp8X2FE=; b=jQ7SyAHqH2Q7v/TxnHPZACrItbE8xzhboG/nCP9BdzW+PrnbQVpRSRfSTf/y0DoQPX Mw3pu8sXs4pNP4PkJ3ma88yI4hYLbqfK9BHDluwfN0WnQqPID+97UqQS9U5Fe4US3VEm f4DbbDZFpf9f2m6Fywx1nO6de8LKNe4JRgK6gWVEfFjyosmJPbcKo0n4616Q3OUTD6G5 qUVWgtMhUJWDu9c66mNs1tJcdbirtxMXiIM/zhtHhseZGAFqfPjftPvUeHVq+E66+U3B F6MDFBjUuuylwP0o9CS22uTpnaORryHcaPCkLQ/AFzmmnbzfI6Nsxm/CYJtK6BLrlVg8 K94A== X-Gm-Message-State: AFqh2kovMwTSgB5mnlv40VMB0eSD+pYH8v9ZTZYBEAwijoq2vMG5LKJe Nt2gGnRSAqGcN5w/UmbVgKg3G1JzDkM= X-Google-Smtp-Source: AMrXdXvDmFRjwlHKA7qEm5TNiyMTl7LXQn60vdG9P79JwyZ7qyHhx8JkLIokOwjeErqfBKu/2qlrQA== X-Received: by 2002:a05:600c:42d4:b0:3d0:6d39:c62e with SMTP id j20-20020a05600c42d400b003d06d39c62emr15278359wme.12.1672143932969; Tue, 27 Dec 2022 04:25:32 -0800 (PST) Original-Received: from melissa.local ([2c0f:ef18:1431:0:b09:9616:db04:c248]) by smtp.gmail.com with ESMTPSA id m28-20020a05600c3b1c00b003d1e3b1624dsm23641223wms.2.2022.12.27.04.25.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Dec 2022 04:25:32 -0800 (PST) Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=wkirschbaum@gmail.com; helo=mail-wm1-x32c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:251949 Archived-At: When `treesit-defun-type-regexp` is set with a cons cell (regexp . some-pred) the following case does not get handled as expected when calling (end-of-defun): ```elixir defmodule Example do def foo() do ; regexp match, pred match end ;; @impl true ; regexp match, pred does not match def bar() do ; regexp match, pred match end ;; def baz() do end end ;; ``` The function `treesit--things-around` only looks at the PRED after it searches forward and would then not be aware of the non matching node. The following change works for my case where search-forward takes in the PRED, not just the regexp: diff --git a/lisp/treesit.el b/lisp/treesit.el index 2130cd0061..7997509f50 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1776,7 +1776,13 @@ treesit--things-around node "" nil nil t)) node)) (result (list nil nil nil)) - (pred (or pred (lambda (_) t)))) + (pred (if (null pred) + (lambda (node) + (string-match-p regexp (treesit-node-type node))) + (lambda (node) + (and (string-match-p regexp (treesit-node-type node)) + (funcall pred node)))))) + ;; 1. Find previous and next sibling defuns. (cl-loop for idx from 0 to 1 @@ -1798,12 +1804,10 @@ treesit--things-around do (cl-loop for cursor = (when node (save-excursion (treesit-search-forward - node regexp backward backward))) + node pred backward backward))) then (treesit-node-parent cursor) while cursor - if (and (string-match-p - regexp (treesit-node-type cursor)) - (funcall pred cursor) + if (and (funcall pred cursor) (funcall pos-pred cursor)) do (setf (nth idx result) cursor))) ;; 2. Find the parent defun. Hope this makes sense, Wilhelm ps. Sorry about the email swapping, think it should be fixed now.