GNU bug report logs - #60025
[PATCH] Add go-ts-mode and go-mod-ts-mode

Previous Next

Package: emacs;

Reported by: Randy Taylor <dev <at> rjt.dev>

Date: Tue, 13 Dec 2022 02:15:01 UTC

Severity: normal

Tags: patch

Done: Randy Taylor <dev <at> rjt.dev>

Bug is archived. No further changes may be made.

Full log


Message #26 received at 60025 <at> debbugs.gnu.org (full text, mbox):

From: Randy Taylor <dev <at> rjt.dev>
To: Yuan Fu <casouri <at> gmail.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, theo <at> thornhill.no, 60025 <at> debbugs.gnu.org
Subject: Re: bug#60025: [PATCH] Add go-ts-mode and go-mod-ts-mode
Date: Wed, 14 Dec 2022 20:54:39 +0000
[Message part 1 (text/plain, inline)]
On Wednesday, December 14th, 2022 at 14:55, Yuan Fu <casouri <at> gmail.com> wrote:
> 
> > I am having a tiny bit of trouble with a go.mod indentation rule. Using the patch, create a go.mod file anywhere, activate go-mod-ts-mode and add the following:
> > 
> > require ()
> > 
> > Place point inside the parens, and then hit enter. The expectation is that point will end up indented inside that block. If you add the text "test v1.0.0" and hit TAB, it will indent properly (and if you hit enter after that text it will indent properly for the next entry). If you go to the end of the line for the top paren and hit enter, it will not indent (and we want it to). It seems to give us no-node in that circumstance. Is there a simple indent rule that can match exactly that that I'm missing?
> 
> 
> I think you can just test for the parent? In C, if point is at an empty line after a statement in a block, like this:
> 
> int main() {
> return 0;
> |
> }
> 
> The matched rule is (parent-is “compond_statement”), where compound_statement is the block. In your case, I guess you can test if parent is the argument list.
> 
> Yuan

I do match for the parent, but it doesn't seem to help.
Here's what tree-sitter explorer shows for the following:
require (

)

(require_directive require ( \n ) \n)

If I put point on the line right below r and do C-S-a, tree-sitter explorer shows:
(require_directive require (*\n ) \n)
The * indicates that part is highlighted.

The second I make it "proper" like so:
require (
test v1
)

I can hit TAB and it will indent properly (but not anything above it, only that line and anything below).

I would think that checking parent-is for require_directive would be enough but it's not somehow???
It's instead matching my no-node rule...

(Also I attached a new patch which contains a few more indent rules for go.mod I forgot about).
[0001-Add-go-ts-mode-and-go-mod-ts-mode-Bug-60025.patch (text/x-patch, attachment)]

This bug report was last modified 2 years and 215 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.