mirror of
https://github.com/neovim/neovim.git
synced 2025-09-30 23:18:33 +00:00
vim-patch:8.2.0865 syntax: Add command to control how foldlevel is computed
Problem: Syntax foldlevel is taken from the start of the line.
Solution: Add ":syn foldlevel" to be able to use the minimal foldlevel in the line.
e35a52aee7
With `foldmethod=syntax` the foldlevel of a line is computed based
on syntax items on the line. Previously we always used the level
of the syntax item containing the start of the line. This works
well in cases such as:
if (...) {
...
}
else if (...) {
...
}
else {
...
}
which folds like this:
+--- 3 lines: if (...) {---------------------------
+--- 3 lines: else if (...) {----------------------
+--- 3 lines: else {-------------------------------
However, the code:
if (...) {
...
} else if (...) {
...
} else {
...
}
folds like this:
+--- 7 lines: if (...) {---------------------------
We can make the latter case fold like this:
+--- 2 lines: if (...) {---------------------------
+--- 2 lines: } else if (...) {--------------------
+--- 3 lines: } else {-----------------------------
by choosing on each line the lowest fold level that is followed
by a higher fold level.
Add a syntax command
:syntax foldlevel [start | minimum]
to choose between these two methods of computing the foldlevel of
a line.
This commit is contained in:
@@ -373,6 +373,10 @@ struct stl_hlrec {
|
||||
#define SYNSPL_TOP 1 // spell check toplevel text
|
||||
#define SYNSPL_NOTOP 2 // don't spell check toplevel text
|
||||
|
||||
// values for b_syn_foldlevel: how to compute foldlevel on a line
|
||||
#define SYNFLD_START 0 // use level of item at start of line
|
||||
#define SYNFLD_MINIMUM 1 // use lowest local minimum level on line
|
||||
|
||||
// avoid #ifdefs for when b_spell is not available
|
||||
# define B_SPELL(buf) ((buf)->b_spell)
|
||||
|
||||
@@ -398,6 +402,7 @@ typedef struct {
|
||||
int b_syn_error; // TRUE when error occurred in HL
|
||||
bool b_syn_slow; // true when 'redrawtime' reached
|
||||
int b_syn_ic; // ignore case for :syn cmds
|
||||
int b_syn_foldlevel; // how to compute foldlevel on a line
|
||||
int b_syn_spell; // SYNSPL_ values
|
||||
garray_T b_syn_patterns; // table for syntax patterns
|
||||
garray_T b_syn_clusters; // table for syntax clusters
|
||||
|
Reference in New Issue
Block a user