emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Standardizing tree-sitter fontification features


From: Yuan Fu
Subject: Standardizing tree-sitter fontification features
Date: Thu, 24 Nov 2022 14:16:02 -0800

For tree-sitter-based major modes, fontification rules are categorized into 
“features”, which can be individually turned on/off. I think it would be good 
to have a standardized list of common features and their precise meaning 
defined. We’ve been working on these fontification rules for some time and 
arrived at a reasonable baseline, and now it’s a good time to discuss and bless 
it, I think.

Right now we have:

Basic tokens:

delimiter       ,.;
operator        = != ||
bracket         []{}()

constant        true, false, null
number
keyword
comment
string
string-interpolation    f"text {variable}"
escape-sequence         "\n\t\\"
function                every function identifier
variable                every variable identifier
type                    every type identifier
property                a.b  <--- highlight b
key                     { a: b, c: d } <--- highlight a, c
error                   highlight parse error

More abstract ones:

assignment: the LHS of an assignment (thing being assigned to), eg:

a = b    <--- highlight a
a.b = c  <--- highlight b
a[1] = d <--- highlight a

definition: the thing being defined, eg:

int a(int b) { <--- highlight a
  return 0
}

int a;  <-- highlight a

struct a { <--- highlight a
  int b;   <--- highlight b
}

There are also language-specific features, but they are not the focus here.

Once we agree on a list of standard features and their definition, the next 
step would be to figure out how should a major mode introduce its supported 
features to a user (major mode docstring + link to manual for standard 
features?).

Also, some of the features are very busy, it would be good if we can disable 
they by default. The default value of font-lock-maximum-decoration is t, 
meaning use everything, which is not very helpful...

Yuan


reply via email to

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