treesitter: cleanup some luahl stuff

This commit is contained in:
Björn Linse
2020-02-09 20:21:23 +01:00
parent 95fd28f4a1
commit 7d7adf7acc
5 changed files with 47 additions and 55 deletions

View File

@@ -2612,5 +2612,6 @@ void nvim__put_attr(Integer id, Integer start_row, Integer start_col,
if (attr == 0) { if (attr == 0) {
return; return;
} }
decoration_state_add_tmp(attr, start_row, start_col, end_row, end_col); decorations_add_luahl_attr(attr, (int)start_row, (colnr_T)start_col,
(int)end_row, (colnr_T)end_col);
} }

View File

@@ -296,10 +296,7 @@ void buf_updates_send_splice(buf_T *buf,
BufUpdateCallbacks cb = kv_A(buf->update_callbacks, i); BufUpdateCallbacks cb = kv_A(buf->update_callbacks, i);
bool keep = true; bool keep = true;
if (cb.on_bytes != LUA_NOREF) { if (cb.on_bytes != LUA_NOREF) {
Array args = ARRAY_DICT_INIT; FIXED_TEMP_ARRAY(args, 8);
Object items[8];
args.size = 8;
args.items = items;
// the first argument is always the buffer handle // the first argument is always the buffer handle
args.items[0] = BUFFER_OBJ(buf->handle); args.items[0] = BUFFER_OBJ(buf->handle);

View File

@@ -756,17 +756,16 @@ VirtText *extmark_find_virttext(buf_T *buf, int row, uint64_t ns_id)
return NULL; return NULL;
} }
// TODO: use decoration_state prefix bool decorations_redraw_reset(buf_T *buf, DecorationRedrawState *state)
bool extmark_decorations_reset(buf_T *buf, DecorationState *state)
{ {
state->row = -1; state->row = -1;
kv_size(state->active) = 0; kv_size(state->active) = 0;
// TODO: for tmp decorations! return buf->b_extmark_index || buf->b_luahl;
return buf->b_extmark_index || true;
} }
bool extmark_decorations_start(buf_T *buf, int top_row, DecorationState *state) bool decorations_redraw_start(buf_T *buf, int top_row,
DecorationRedrawState *state)
{ {
state->top_row = top_row; state->top_row = top_row;
marktree_itr_get(buf->b_marktree, top_row, 0, state->itr); marktree_itr_get(buf->b_marktree, top_row, 0, state->itr);
@@ -818,17 +817,17 @@ next_mark:
return true; // TODO(bfredl): check if available in the region return true; // TODO(bfredl): check if available in the region
} }
bool extmark_decorations_line(buf_T *buf, int row, DecorationState *state) bool decorations_redraw_line(buf_T *buf, int row, DecorationRedrawState *state)
{ {
if (state->row == -1) { if (state->row == -1) {
extmark_decorations_start(buf, row, state); decorations_redraw_start(buf, row, state);
} }
state->row = row; state->row = row;
state->col_until = -1; state->col_until = -1;
return true; // TODO(bfredl): be more precise return true; // TODO(bfredl): be more precise
} }
int extmark_decorations_col(buf_T *buf, int col, DecorationState *state) int decorations_redraw_col(buf_T *buf, int col, DecorationRedrawState *state)
{ {
if (col <= state->col_until) { if (col <= state->col_until) {
return state->current; return state->current;
@@ -907,9 +906,9 @@ next_mark:
return attr; return attr;
} }
VirtText *extmark_decorations_virt_text(buf_T *buf, DecorationState *state) VirtText *decorations_redraw_virt_text(buf_T *buf, DecorationRedrawState *state)
{ {
extmark_decorations_col(buf, MAXCOL, state); decorations_redraw_col(buf, MAXCOL, state);
for (size_t i = 0; i < kv_size(state->active); i++) { for (size_t i = 0; i < kv_size(state->active); i++) {
HlRange item = kv_A(state->active, i); HlRange item = kv_A(state->active, i);
if (item.start_row == state->row && item.virt_text) { if (item.start_row == state->row && item.virt_text) {

View File

@@ -83,7 +83,7 @@ typedef struct {
int col_until; int col_until;
int current; int current;
VirtText *virt_text; VirtText *virt_text;
} DecorationState; } DecorationRedrawState;
#ifdef INCLUDE_GENERATED_DECLARATIONS #ifdef INCLUDE_GENERATED_DECLARATIONS

View File

@@ -634,11 +634,10 @@ bool win_cursorline_standout(const win_T *wp)
|| (wp->w_p_cole > 0 && (VIsual_active || !conceal_cursor_line(wp))); || (wp->w_p_cole > 0 && (VIsual_active || !conceal_cursor_line(wp)));
} }
static DecorationState decorations; static DecorationRedrawState decorations;
bool decorations_active = false; bool decorations_active = false;
// VERY ad-hoc, should be in mark_extended.c? void decorations_add_luahl_attr(int attr_id,
void decoration_state_add_tmp(int attr_id,
int start_row, int start_col, int start_row, int start_col,
int end_row, int end_col) int end_row, int end_col)
{ {
@@ -1237,6 +1236,8 @@ static void win_update(win_T *wp)
srow = 0; srow = 0;
lnum = wp->w_topline; // first line shown in window lnum = wp->w_topline; // first line shown in window
decorations_active = decorations_redraw_reset(buf, &decorations);
if (buf->b_luahl && buf->b_luahl_window != LUA_NOREF) { if (buf->b_luahl && buf->b_luahl_window != LUA_NOREF) {
Error err = ERROR_INIT; Error err = ERROR_INIT;
FIXED_TEMP_ARRAY(args, 4); FIXED_TEMP_ARRAY(args, 4);
@@ -1257,7 +1258,6 @@ static void win_update(win_T *wp)
} }
} }
decorations_active = extmark_decorations_reset(buf, &decorations);
for (;; ) { for (;; ) {
/* stop updating when reached the end of the window (check for _past_ /* stop updating when reached the end of the window (check for _past_
@@ -2343,10 +2343,9 @@ win_line (
} }
} }
if (decorations_active) {
if (buf->b_luahl && buf->b_luahl_line != LUA_NOREF) { if (buf->b_luahl && buf->b_luahl_line != LUA_NOREF) {
Error err = ERROR_INIT; Error err = ERROR_INIT;
// TODO(bfredl): build a macro for the "static array" pattern
// in buf_updates_send_changes?
FIXED_TEMP_ARRAY(args, 3); FIXED_TEMP_ARRAY(args, 3);
args.items[0] = WINDOW_OBJ(wp->handle); args.items[0] = WINDOW_OBJ(wp->handle);
args.items[1] = BUFFER_OBJ(buf->handle); args.items[1] = BUFFER_OBJ(buf->handle);
@@ -2366,12 +2365,9 @@ win_line (
luatext = err.msg; luatext = err.msg;
do_virttext = true; do_virttext = true;
} }
decorations_active = true; // TODO: huff!
} }
has_decorations = decorations_redraw_line(wp->w_buffer, lnum-1,
if (decorations_active) {
has_decorations = extmark_decorations_line(wp->w_buffer, lnum-1,
&decorations); &decorations);
if (has_decorations) { if (has_decorations) {
extra_check = true; extra_check = true;
@@ -3541,7 +3537,7 @@ win_line (
} }
if (has_decorations && v > 0) { if (has_decorations && v > 0) {
int extmark_attr = extmark_decorations_col(wp->w_buffer, (colnr_T)v-1, int extmark_attr = decorations_redraw_col(wp->w_buffer, (colnr_T)v-1,
&decorations); &decorations);
if (extmark_attr != 0) { if (extmark_attr != 0) {
if (!attr_pri) { if (!attr_pri) {
@@ -4036,8 +4032,7 @@ win_line (
kv_push(virt_text, ((VirtTextChunk){ .text = luatext, .hl_id = 0 })); kv_push(virt_text, ((VirtTextChunk){ .text = luatext, .hl_id = 0 }));
do_virttext = true; do_virttext = true;
} else if (has_decorations) { } else if (has_decorations) {
VirtText *vp = extmark_decorations_virt_text(wp->w_buffer, VirtText *vp = decorations_redraw_virt_text(wp->w_buffer, &decorations);
&decorations);
if (vp) { if (vp) {
virt_text = *vp; virt_text = *vp;
do_virttext = true; do_virttext = true;