aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/extmark.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-11-18 22:38:27 +0100
committerGitHub <noreply@github.com>2023-11-18 22:38:27 +0100
commitdebad0020c06180e275e158995aa5757ed56ae2d (patch)
treee585d403deb21e2a8a6166cc385c9e398aeb195f /src/nvim/extmark.c
parentbec2ebebdacd494117ce41b31e208577ddeef510 (diff)
parentec283e6b4ba85dcb61e97e089605e006e85cc273 (diff)
downloadrneovim-debad0020c06180e275e158995aa5757ed56ae2d.tar.gz
rneovim-debad0020c06180e275e158995aa5757ed56ae2d.tar.bz2
rneovim-debad0020c06180e275e158995aa5757ed56ae2d.zip
Merge pull request #26104 from bfredl/noextmarkinfo
refactor(extmark): redundant ExtmarkInfo delenda est, use MTPair instead
Diffstat (limited to 'src/nvim/extmark.c')
-rw-r--r--src/nvim/extmark.c45
1 files changed, 10 insertions, 35 deletions
diff --git a/src/nvim/extmark.c b/src/nvim/extmark.c
index ff9fa55388..3481f44064 100644
--- a/src/nvim/extmark.c
+++ b/src/nvim/extmark.c
@@ -257,7 +257,7 @@ ExtmarkInfoArray extmark_get(buf_T *buf, uint32_t ns_id, int l_row, colnr_T l_co
MTPair pair;
while (marktree_itr_step_overlap(buf->b_marktree, itr, &pair)) {
- push_mark(&array, ns_id, type_filter, pair.start, pair.end_pos, pair.end_right_gravity);
+ push_mark(&array, ns_id, type_filter, pair);
}
} else {
// Find all the marks beginning with the start position
@@ -278,7 +278,7 @@ ExtmarkInfoArray extmark_get(buf_T *buf, uint32_t ns_id, int l_row, colnr_T l_co
}
MTKey end = marktree_get_alt(buf->b_marktree, mark, NULL);
- push_mark(&array, ns_id, type_filter, mark, end.pos, mt_right(end));
+ push_mark(&array, ns_id, type_filter, mtpair_from(mark, end));
next_mark:
if (reverse) {
marktree_itr_prev(buf->b_marktree, itr);
@@ -289,15 +289,14 @@ next_mark:
return array;
}
-static void push_mark(ExtmarkInfoArray *array, uint32_t ns_id, ExtmarkType type_filter, MTKey mark,
- MTPos end_pos, bool end_right)
+static void push_mark(ExtmarkInfoArray *array, uint32_t ns_id, ExtmarkType type_filter, MTPair mark)
{
- if (!(ns_id == UINT32_MAX || mark.ns == ns_id)) {
+ if (!(ns_id == UINT32_MAX || mark.start.ns == ns_id)) {
return;
}
uint16_t type_flags = kExtmarkNone;
if (type_filter != kExtmarkNone) {
- Decoration *decor = mark.decor_full;
+ Decoration *decor = mark.start.decor_full;
if (decor && (decor->sign_text || decor->number_hl_id)) {
type_flags |= (kExtmarkSignHL|kExtmarkSign);
}
@@ -310,7 +309,7 @@ static void push_mark(ExtmarkInfoArray *array, uint32_t ns_id, ExtmarkType type_
if (decor && decor->virt_lines.size) {
type_flags |= kExtmarkVirtLines;
}
- if (mark.hl_id) {
+ if (mark.start.hl_id) {
type_flags |= kExtmarkHighlight;
}
@@ -319,44 +318,20 @@ static void push_mark(ExtmarkInfoArray *array, uint32_t ns_id, ExtmarkType type_
}
}
- kv_push(*array, ((ExtmarkInfo) { .ns_id = mark.ns,
- .mark_id = mark.id,
- .row = mark.pos.row, .col = mark.pos.col,
- .end_row = end_pos.row,
- .end_col = end_pos.col,
- .invalidate = mt_invalidate(mark),
- .invalid = mt_invalid(mark),
- .right_gravity = mt_right(mark),
- .end_right_gravity = end_right,
- .no_undo = mt_no_undo(mark),
- .decor = get_decor(mark) }));
+ kv_push(*array, mark);
}
/// Lookup an extmark by id
-ExtmarkInfo extmark_from_id(buf_T *buf, uint32_t ns_id, uint32_t id)
+MTPair extmark_from_id(buf_T *buf, uint32_t ns_id, uint32_t id)
{
- ExtmarkInfo ret = EXTMARKINFO_INIT;
MTKey mark = marktree_lookup_ns(buf->b_marktree, ns_id, id, false, NULL);
if (!mark.id) {
- return ret;
+ return mtpair_from(mark, mark); // invalid
}
assert(mark.pos.row >= 0);
MTKey end = marktree_get_alt(buf->b_marktree, mark, NULL);
- ret.ns_id = ns_id;
- ret.mark_id = id;
- ret.row = mark.pos.row;
- ret.col = mark.pos.col;
- ret.end_row = end.pos.row;
- ret.end_col = end.pos.col;
- ret.right_gravity = mt_right(mark);
- ret.end_right_gravity = mt_right(end);
- ret.no_undo = mt_no_undo(mark);
- ret.invalidate = mt_invalidate(mark);
- ret.invalid = mt_invalid(mark);
- ret.decor = get_decor(mark);
-
- return ret;
+ return mtpair_from(mark, end);
}
/// free extmarks from the buffer