[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: New tree-sitter mode: bison-ts-mode
From: |
Yuan Fu |
Subject: |
Re: New tree-sitter mode: bison-ts-mode |
Date: |
Sun, 24 Sep 2023 14:10:12 -0700 |
> On Sep 21, 2023, at 1:15 PM, Augustin Chéneau (BTuin) <btuin@mailo.com> wrote:
>
> Hello,
> I'd like to propose a new tree-sitter mode for Emacs, bison-ts-mode.
> This is a major mode for GNU Bison grammar files, and it supports the
> embedded languages C, C++ and Java. Bison also supports D, but this language
> is not yet supported in Emacs so this mode does not support it either.
>
> Since Bison is a superset of Yacc, it should work with Yacc without
> modification.
> The grammar is available here: <https://gitlab.com/btuin2/tree-sitter-bison>
>
> This mode auto-detects the embedded language in the file if the directive
> "%language" is set.
>
>
> In addition of the mode, three patches are joined (should I open a bug report
> for those?).
>
>
> The first one is to add some missing rules in c-ts-mode. Currently there is
> no rule if an identifier in a declaration is on a new line.
> In these two cases, "variable_name" is not indented:
>
> static myttype *
> variable_name;
>
> static myttype
> variable_name;
>
> The new behavior is the same as c-mode.
Actually, a second thought. IIUC the reason for this change is that without
these rules, no indentation is done for variable names in code like
static myttype *
variable_name;
static myttype
variable_name;
This is fine in normal C code, since no indentation is the same as
zero indentation, which is what we want. But for C embedded in Bison,
no indentation is not the same as zero indentation. We want it indent
to the top-level indentation of the embedded C. E.g.,
{
static myttype
variable_name;
}
rather than
{
static myttype
variable_name;
}
Right? In that case, we should really add a fallback indent rule for the
embedded c in bison, such that it indents to the top-level of the embedded c.
This is more robust than trying to cover all cases in the c rules. Does that
make sense?
Basically, add something like
(catch-all bison-ts-mode--bison-parent ,bison-ts-mode-indent-offset)
To the end of C’s indent rules.
Yuan
Re: New tree-sitter mode: bison-ts-mode, Stefan Kangas, 2023/09/22
Re: New tree-sitter mode: bison-ts-mode, Yuan Fu, 2023/09/22
Re: New tree-sitter mode: bison-ts-mode,
Yuan Fu <=