emacs-devel
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]