From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Yuan Fu Newsgroups: gmane.emacs.bugs Subject: bug#61235: 30.0.50; tree-sit: `treesit-node-check' lacks a way to tell if a node belongs to a deleted parser Date: Sun, 5 Feb 2023 20:24:27 -0800 Message-ID: References: <87h6w3hmu6.fsf@masteringemacs.org> Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.300.101.1.3\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_6AFB3945-DC39-407B-BB3E-755BC1D363A3" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="30496"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , 61235@debbugs.gnu.org To: Mickey Petersen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Feb 06 05:25:13 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 1pOt44-0007iU-5j for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 06 Feb 2023 05:25:12 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pOt3v-000584-Hy; Sun, 05 Feb 2023 23:25:03 -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 1pOt3u-00057h-DY for bug-gnu-emacs@gnu.org; Sun, 05 Feb 2023 23:25: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 1pOt3t-0007Jn-TL for bug-gnu-emacs@gnu.org; Sun, 05 Feb 2023 23:25:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pOt3t-0007Mq-OL for bug-gnu-emacs@gnu.org; Sun, 05 Feb 2023 23:25:01 -0500 X-Loop: help-debbugs@gnu.org In-Reply-To: <87h6w3hmu6.fsf@masteringemacs.org> Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 06 Feb 2023 04:25:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61235 X-GNU-PR-Package: emacs Original-Received: via spool by 61235-submit@debbugs.gnu.org id=B61235.167565748728282 (code B ref 61235); Mon, 06 Feb 2023 04:25:01 +0000 Original-Received: (at 61235) by debbugs.gnu.org; 6 Feb 2023 04:24:47 +0000 Original-Received: from localhost ([127.0.0.1]:47122 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pOt3f-0007M6-Ce for submit@debbugs.gnu.org; Sun, 05 Feb 2023 23:24:47 -0500 Original-Received: from mail-pj1-f51.google.com ([209.85.216.51]:55082) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pOt3d-0007Ll-VH for 61235@debbugs.gnu.org; Sun, 05 Feb 2023 23:24:46 -0500 Original-Received: by mail-pj1-f51.google.com with SMTP id mi9so10458560pjb.4 for <61235@debbugs.gnu.org>; Sun, 05 Feb 2023 20:24:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:cc:date:message-id:subject:mime-version:from:from:to:cc:subject :date:message-id:reply-to; bh=41iM6mgiUkQwqyHfSO5HQVfUI6NNBepwrUtxTFaLwgc=; b=LoiG3r3PWaa70FcVhbmitlkTGFq7s+rsMFtcR6utrETihjedvwk4JGuviiStcb+cEh OK7w0pf50MEXOIKw4Jamp+XzBhE2lSTJQfGA7yMKnGiwly3Ism3Z9lwIGSIDq9Wzc5qt bIpFW8+X1yoFZgCfgAInsDS2AWP4wrp2014FbOOCMMnzr4pFPld/k/exOEoM43y0gFET IP8+WAbNZOl7zNP83DK9jIWzgoWNcFR676G8oTtpVLjJ7a3XctC/zgvuKHgPzOmkSudR l3WfV7tgr0DdnqblZuUdDxJ+5lGn9HW5yf2avaTFZU/0E2WZSgveRswfGDYHuOvoIE35 arqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:cc:date:message-id:subject:mime-version:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=41iM6mgiUkQwqyHfSO5HQVfUI6NNBepwrUtxTFaLwgc=; b=IO9K6mdvrYZfqUI+dteQCxvdLe4xZpF1ikF8VvfK2LxWfaL2zazdh8RKa+jKw4bd0c pYiH2Z5+GAskxd6zrHbj3gltiixmF8GfR8Vkh/qzTz9bNsxSCs+yOT5qP9Qp1VuL4FXb SY0/o0v+Cao1kRNh2hwCvv3GD4oYU2bDCQHX1nrmS7DwwNArmv7LIz8PmXQt9TxvXnhZ Qcjc7/2BGH0nS1Vj6GS39rHNdCI0VnSXjDnZbq8t9bKywOZx3Hw7Z7QThukPwq3qfofA jCPfrBft5kzss1By91jObtRF+CYeFzjRRoSs1dgU/qCB46gq9qklAEfLcF61nP9bQsBd XeQA== X-Gm-Message-State: AO0yUKW+g5Cs9n+zMbSyb7KvKqQBxQRUsBEa/EnwFydReiZfvsx7iDsc rRSo4BrXKKq/p/3CvtUvn54= X-Google-Smtp-Source: AK7set9mmsZiJ7HhN5zm6W6RxWAQzJeAu7NMSM9NivWWuqbbrDY0E7e4k6xCJmwnzHNimmkpDMEtLA== X-Received: by 2002:a17:903:24e:b0:196:5472:c115 with SMTP id j14-20020a170903024e00b001965472c115mr22002157plh.41.1675657479895; Sun, 05 Feb 2023 20:24:39 -0800 (PST) Original-Received: from smtpclient.apple (cpe-172-117-161-177.socal.res.rr.com. [172.117.161.177]) by smtp.gmail.com with ESMTPSA id e6-20020a170902d38600b00192aa53a7d5sm721117pld.8.2023.02.05.20.24.37 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 05 Feb 2023 20:24:38 -0800 (PST) X-Mailer: Apple Mail (2.3731.300.101.1.3) 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:254929 Archived-At: --Apple-Mail=_6AFB3945-DC39-407B-BB3E-755BC1D363A3 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Mickey Petersen writes: > There's no way to tell if a node belongs to a now-deleted > parser. Checking if it is `missing' or `outdated' returns nil; there > is no way to ascertain this state except by catching an error if you > try to get its node text, type, etc. That sounds reasonable. I can add treesit-parser-live-p, and add a "live" PROPERTY to treesit-node-check. treesit-parser-live-p only returns t when the parser is not deleted AND its buffer is live. I assume that=E2=80=99s more useful than just = checking whether the parser is deleted, for whatever usecase you have? Eli, should we add this in the release branch or Emacs 30? This functionality is possible to implement in Elisp, albeit a bit clunky. I attached a patch of how would it look like (without documentation/test). Yuan --Apple-Mail=_6AFB3945-DC39-407B-BB3E-755BC1D363A3 Content-Disposition: attachment; filename=livep.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="livep.patch" Content-Transfer-Encoding: quoted-printable =46rom=209d7651bb7b97faff034186a2667d90e42f6f9e5b=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Sun,=20= 5=20Feb=202023=2020:22:52=20-0800=0ASubject:=20[PATCH]=20Demo=0A=0A---=0A= =20src/treesit.c=20|=2027=20++++++++++++++++++++++++---=0A=201=20file=20= changed,=2024=20insertions(+),=203=20deletions(-)=0A=0Adiff=20--git=20= a/src/treesit.c=20b/src/treesit.c=0Aindex=208e772523cc7..94c523950d1=20= 100644=0A---=20a/src/treesit.c=0A+++=20b/src/treesit.c=0A@@=20-1471,6=20= +1471,20=20@@=20DEFUN=20("treesit-parser-language",=0A=20=20=20return=20= XTS_PARSER=20(parser)->language_symbol;=0A=20}=0A=20=0A+DEFUN=20= ("treesit-parser-live-p",=0A+=20=20=20=20=20=20=20= Ftreesit_parser_live_p,=20Streesit_parser_live_p,=201,=201,=200,=0A+=20=20= =20=20=20=20=20doc:=20/*=20Check=20whether=20PARSER=20is=20not=20deleted=20= and=20its=20buffer=20is=20live.=20=20*/)=0A+=20=20(Lisp_Object=20parser)=0A= +{=0A+=20=20treesit_check_parser=20(parser);=0A+=20=20if=20(XTS_PARSER=20= (parser)->deleted)=0A+=20=20=20=20return=20Qnil;=0A+=20=20else=20if=20= (NILP=20(Fbuffer_live_p=20(XTS_PARSER=20(parser)->buffer)))=0A+=20=20=20=20= return=20Qnil;=0A+=20=20else=0A+=20=20=20=20return=20Qt;=0A+}=0A+=0A=20= /***=20Parser=20API=20*/=0A=20=0A=20DEFUN=20("treesit-parser-root-node",=0A= @@=20-1904,7=20+1918,8=20@@=20DEFUN=20("treesit-node-check",=0A=20=20=20=20= =20=20=20=20Ftreesit_node_check,=20Streesit_node_check,=202,=202,=200,=0A= =20=20=20=20=20=20=20=20doc:=20/*=20Return=20non-nil=20if=20NODE=20has=20= PROPERTY,=20nil=20otherwise.=0A=20=0A-PROPERTY=20could=20be=20`named',=20= `missing',=20`extra',=20`outdated',=20or=20`has-error'.=0A+PROPERTY=20= could=20be=20`named',=20`missing',=20`extra',=20`outdated',=0A= +`has-error',=20or=20`live'.=0A=20=0A=20Named=20nodes=20correspond=20to=20= named=20rules=20in=20the=20language=20definition,=0A=20whereas=20= "anonymous"=20nodes=20correspond=20to=20string=20literals=20in=20the=0A= @@=20-1920,7=20+1935,9=20@@=20DEFUN=20("treesit-node-check",=0A=20the=20= node=20was=20created.=0A=20=0A=20A=20node=20"has=20error"=20if=20itself=20= is=20a=20syntax=20error=20or=20contains=20any=20syntax=0A-errors.=20=20= */)=0A+errors.=0A+=0A+A=20node=20is=20"live"=20if=20its=20parser=20is=20= live=20(i.e.,=20not=20deleted).=20=20*/)=0A=20=20=20(Lisp_Object=20node,=20= Lisp_Object=20property)=0A=20{=0A=20=20=20if=20(NILP=20(node))=20return=20= Qnil;=0A@@=20-1943,9=20+1960,11=20@@=20DEFUN=20("treesit-node-check",=0A=20= =20=20=20=20result=20=3D=20ts_node_is_extra=20(treesit_node);=0A=20=20=20= else=20if=20(EQ=20(property,=20Qhas_error))=0A=20=20=20=20=20result=20=3D=20= ts_node_has_error=20(treesit_node);=0A+=20=20else=20if=20(EQ=20= (property,=20Qlive))=0A+=20=20=20=20result=20=3D=20= Ftreesit_parser_live_p=20(XTS_NODE=20(node)->parser);=0A=20=20=20else=0A=20= =20=20=20=20signal_error=20("Expecting=20`named',=20`missing',=20= `extra',=20"=0A-=09=09=20=20"`outdated',=20or=20`has-error',=20but=20= got",=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= "`outdated',=20`has-error',=20or=20`deleted',=20but=20got",=0A=20=09=09=20= =20property);=0A=20=20=20return=20result=20?=20Qt=20:=20Qnil;=0A=20}=0A= @@=20-3444,6=20+3463,7=20@@=20syms_of_treesit=20(void)=0A=20=20=20DEFSYM=20= (Qextra,=20"extra");=0A=20=20=20DEFSYM=20(Qoutdated,=20"outdated");=0A=20= =20=20DEFSYM=20(Qhas_error,=20"has-error");=0A+=20=20DEFSYM=20(Qlive,=20= "live");=0A=20=0A=20=20=20DEFSYM=20(QCanchor,=20":anchor");=0A=20=20=20= DEFSYM=20(QCequal,=20":equal");=0A@@=20-3577,6=20+3597,7=20@@=20= syms_of_treesit=20(void)=0A=20=20=20defsubr=20(&Streesit_parser_list);=0A= =20=20=20defsubr=20(&Streesit_parser_buffer);=0A=20=20=20defsubr=20= (&Streesit_parser_language);=0A+=20=20defsubr=20= (&Streesit_parser_live_p);=0A=20=0A=20=20=20defsubr=20= (&Streesit_parser_root_node);=0A=20=20=20/*=20defsubr=20= (&Streesit_parse_string);=20*/=0A--=20=0A2.33.1=0A=0A= --Apple-Mail=_6AFB3945-DC39-407B-BB3E-755BC1D363A3--