From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#61369: Problem with keeping tree-sitter parse tree up-to-date Date: Thu, 16 Feb 2023 00:44:07 +0200 Message-ID: References: <1AC63591-F4EF-411F-B554-7CD38B4B4888@gmail.com> <9c4e551b-42b3-8202-ccff-fb8170b616a6@yandex.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34108"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Cc: theo@thornhill.no, 61369@debbugs.gnu.org To: Yuan Fu Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Feb 15 23:45:29 2023 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 1pSQWn-0008kU-2e for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 15 Feb 2023 23:45:29 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pSQWZ-0001k2-8s; Wed, 15 Feb 2023 17:45:15 -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 1pSQWM-0001j7-V0 for bug-gnu-emacs@gnu.org; Wed, 15 Feb 2023 17:45:08 -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 1pSQWM-0000rd-HI for bug-gnu-emacs@gnu.org; Wed, 15 Feb 2023 17:45:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pSQWM-0008Cb-9h for bug-gnu-emacs@gnu.org; Wed, 15 Feb 2023 17:45:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 15 Feb 2023 22:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61369 X-GNU-PR-Package: emacs Original-Received: via spool by 61369-submit@debbugs.gnu.org id=B61369.167650105731454 (code B ref 61369); Wed, 15 Feb 2023 22:45:02 +0000 Original-Received: (at 61369) by debbugs.gnu.org; 15 Feb 2023 22:44:17 +0000 Original-Received: from localhost ([127.0.0.1]:34377 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pSQVc-0008BF-Hj for submit@debbugs.gnu.org; Wed, 15 Feb 2023 17:44:16 -0500 Original-Received: from mail-ed1-f46.google.com ([209.85.208.46]:34592) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pSQVb-0008B2-Bq for 61369@debbugs.gnu.org; Wed, 15 Feb 2023 17:44:15 -0500 Original-Received: by mail-ed1-f46.google.com with SMTP id fj20so427595edb.1 for <61369@debbugs.gnu.org>; Wed, 15 Feb 2023 14:44:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:mime-version:date:message-id :sender:from:to:cc:subject:date:message-id:reply-to; bh=pJyLwPsnS29X5WSWI3oj2I39UujXbowb/bqXSSZqdJE=; b=XxuEx7/agpq+ibZ9+KnIhKAD93XNzhL9VJYYzr7bKYKmyu3nIs402JTVNY34QeHWWl p2Vw/QB99hQFRgl6kCmiWyR+3vPQ9KG4ED5UnzvxkXJQZi6xF9vOw03N89AD4QcWWBWG PTcC+ZOen+BdBOdJnD5V2A33CF6F+RWPf9t1xjuucG5e++ywYQr4K/JJ7Bq4NqFAojgt Ez1mIM8HHcc8y2/YXqAQfNbku7gtuzwGz8v5k2Dn/DSxJ4S5jXo+QeOrUKOImHY2YPUC TjQE4EUY3AnNlii5QMsLxwOzYXSP3LeKpgX7OfcQ2Pen4uuo2BnfZWKFt8ZFwyCS1uSq pEbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:mime-version:date:message-id :sender:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=pJyLwPsnS29X5WSWI3oj2I39UujXbowb/bqXSSZqdJE=; b=Q7iTtbYCN+Hu+RvaW3rxrXkmpNc1tUlhsE0WZly4sV0AAS1+Wfy1qvJAxEwOfF6YLG b6xW0Bn3wyMNwD55obeVpuFXEqgp8zS12V6uojU2ATApB+v/K9zc2EWA/+iN/obQxqzK TCj4eGJxZHnPE+XWaN5ZxcQvpSLZtljT2PoKWspArF/XgDOw2eApAzWtUjyYPROy2V9q 0U0MOQrc5GNrOPBuINsEa7CqXpkFJpewopPZEyYEnG2ejzvV3XMZMQOi7RX5/1PuYxIe cg2GoV9BavaplTpPaxfSbELNTyhAXrAJ3ajk1nKuQLxcIATrgAi3fOnuKY9L/jcC3fIT 2sIw== X-Gm-Message-State: AO0yUKWkgJel0rBVI9cdTljJom/OYx8ibTILXg3/sUkal2IvpipLd2mp zC2gO6W4FTQHvn23jNptoGs= X-Google-Smtp-Source: AK7set+uoV/J6C5sZ/ymG8OQNRpJtQWugFAyyEljotZ2i5n+YBLmcqBJ2fmubWVxCTI6xuF9Tg8DHQ== X-Received: by 2002:a05:6402:32f:b0:4ab:4be9:5dcf with SMTP id q15-20020a056402032f00b004ab4be95dcfmr3954460edw.4.1676501049578; Wed, 15 Feb 2023 14:44:09 -0800 (PST) Original-Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id t14-20020a50d70e000000b004acb890553fsm37775edi.26.2023.02.15.14.44.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 15 Feb 2023 14:44:08 -0800 (PST) Content-Language: en-US In-Reply-To: <9c4e551b-42b3-8202-ccff-fb8170b616a6@yandex.ru> 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:255777 Archived-At: On 15/02/2023 04:17, Dmitry Gutov wrote: > Seems like treesit_record_change turns new_end_byte=69 into > new_end_byte=67 inside treesit_tree_edit_1. > > It seems to fail in this calculation: > >   ptrdiff_t new_end_offset = (min (visible_end, >                    max (visible_end, new_end_byte)) >                   - visible_beg); > > because visible_end is still 68 there. It value gets updated later, > closer to the end of this function. So FWIW the patch below fixes the problem. But I'm not sure about change's clipping by the current restriction, or how it should be handled exactly. diff --git a/src/treesit.c b/src/treesit.c index cab2f0d5354..9f15b88a8bd 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -794,9 +794,7 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte, ptrdiff_t old_end_offset = (min (visible_end, max (visible_beg, old_end_byte)) - visible_beg); - ptrdiff_t new_end_offset = (min (visible_end, - max (visible_beg, new_end_byte)) - - visible_beg); + ptrdiff_t new_end_offset = max (visible_beg, new_end_byte) - visible_beg; eassert (start_offset <= old_end_offset); eassert (start_offset <= new_end_offset);