forked from sudo-tee/opencode.nvim
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathctx.lua
More file actions
85 lines (79 loc) · 2.31 KB
/
Copy pathctx.lua
File metadata and controls
85 lines (79 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
local RenderState = require('opencode.ui.render_state')
---Shared mutable context for the renderer modules.
---Single instance, shared via Lua's require cache.
---@class RendererCtx
local ctx = {
---@type RenderState
render_state = RenderState.new(),
---@type { part_id: string|nil, formatted_data: Output|nil }
last_part_formatted = { part_id = nil, formatted_data = nil },
---@type table<string, Output>
formatted_parts = {},
---@type table<string, Output>
formatted_messages = {},
pending = {
dirty_message_order = {},
dirty_messages = {},
dirty_part_by_message = {},
dirty_part_order = {},
dirty_parts = {},
removed_part_order = {},
removed_parts = {},
removed_message_order = {},
removed_messages = {},
},
flush_scheduled = false,
markdown_render_scheduled = false,
bulk_mode = false,
bulk_buffer_lines = {},
bulk_extmarks_by_line = {},
bulk_folds = {},
---@type {from: number, to: number}[]
global_folds = {},
---@type table<string, {from: number, to: number}[]>
part_folds = {},
---@type integer|nil Number of messages to render from the end (nil = all)
lazy_render_count = nil,
}
---Reset all renderer caches and pending state.
function ctx:reset()
self.render_state:reset()
self.last_part_formatted = { part_id = nil, formatted_data = nil }
self.formatted_parts = {}
self.formatted_messages = {}
self.pending = {
dirty_message_order = {},
dirty_messages = {},
dirty_part_by_message = {},
dirty_part_order = {},
dirty_parts = {},
removed_part_order = {},
removed_parts = {},
removed_message_order = {},
removed_messages = {},
}
self.flush_scheduled = false
self.markdown_render_scheduled = false
self.global_folds = {}
self.part_folds = {}
self:bulk_reset()
end
---Reset the temporary bulk-render accumulators.
function ctx:bulk_reset()
self.bulk_mode = false
self.bulk_buffer_lines = {}
self.bulk_extmarks_by_line = {}
self.bulk_folds = {}
end
---@param pending? RendererCtx['pending']
---@return boolean
function ctx:has_pending_work(pending)
pending = pending or self.pending
return self.flush_scheduled
or self.bulk_mode
or #pending.dirty_message_order > 0
or #pending.dirty_part_order > 0
or #pending.removed_part_order > 0
or #pending.removed_message_order > 0
end
return ctx