Skip to content

Commit 8494070

Browse files
committed
feat(diff): use max width for gutter size instead
1 parent 2c946cc commit 8494070

10 files changed

Lines changed: 9836 additions & 9834 deletions

lua/opencode/ui/formatter.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -960,19 +960,19 @@ local function parse_diff_line_numbers(lines)
960960
max_line_number = math.max(max_line_number, old_line, new_line)
961961
old_line = old_line + 1
962962
new_line = new_line + 1
963-
elseif first_char == '+' and not line:match('^%+%+%+') then
963+
elseif first_char == '+' and not line:match('^%+%+%+%s') then
964964
numbered_lines[idx] = { old = nil, new = new_line }
965965
max_line_number = math.max(max_line_number, new_line)
966966
new_line = new_line + 1
967-
elseif first_char == '-' and not line:match('^%-%-%-') then
967+
elseif first_char == '-' and not line:match('^%-%-%-%s') then
968968
numbered_lines[idx] = { old = old_line, new = nil }
969969
max_line_number = math.max(max_line_number, old_line)
970970
old_line = old_line + 1
971971
end
972972
end
973973
end
974974

975-
return numbered_lines, math.max(#tostring(max_line_number), 4)
975+
return numbered_lines, #tostring(max_line_number)
976976
end
977977

978978
local function build_diff_gutter(line_numbers, width)

lua/opencode/ui/highlight.lua

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ function M.setup()
1515
vim.api.nvim_set_hl(0, 'OpencodeDiffDelete', { bg = '#FFEBEE', default = true })
1616
vim.api.nvim_set_hl(0, 'OpencodeDiffAddText', { link = 'Added', default = true })
1717
vim.api.nvim_set_hl(0, 'OpencodeDiffDeleteText', { link = 'Removed', default = true })
18-
vim.api.nvim_set_hl(0, 'OpencodeDiffLineNumber', { link = 'Comment', default = true })
1918
vim.api.nvim_set_hl(0, 'OpencodeDiffGutter', { fg = '#757575', bg = '#F5F5F5', default = true })
2019
vim.api.nvim_set_hl(0, 'OpencodeDiffAddGutter', { fg = '#2E7D32', bg = '#F1FAF1', default = true })
2120
vim.api.nvim_set_hl(0, 'OpencodeDiffDeleteGutter', { fg = '#C62828', bg = '#FFF1F3', default = true })
@@ -62,7 +61,6 @@ function M.setup()
6261
vim.api.nvim_set_hl(0, 'OpencodeDiffDelete', { bg = '#43242B', default = true })
6362
vim.api.nvim_set_hl(0, 'OpencodeDiffAddText', { link = 'Added', default = true })
6463
vim.api.nvim_set_hl(0, 'OpencodeDiffDeleteText', { link = 'Removed', default = true })
65-
vim.api.nvim_set_hl(0, 'OpencodeDiffLineNumber', { link = 'Comment', default = true })
6664
vim.api.nvim_set_hl(0, 'OpencodeDiffGutter', { fg = '#6B7280', bg = '#252631', default = true })
6765
vim.api.nvim_set_hl(0, 'OpencodeDiffAddGutter', { fg = '#A5D6A7', bg = '#344032', default = true })
6866
vim.api.nvim_set_hl(0, 'OpencodeDiffDeleteGutter', { fg = '#EF9A9A', bg = '#52303A', default = true })

tests/data/apply-patch.expected.json

Lines changed: 74 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -6,192 +6,192 @@
66
1,
77
0,
88
{
9+
"ns_id": 3,
10+
"virt_text_hide": false,
11+
"priority": 10,
12+
"right_gravity": true,
13+
"virt_text_pos": "win_col",
14+
"virt_text_win_col": -3,
15+
"virt_text_repeat_linebreak": false,
916
"virt_text": [
1017
["▌󰭻 ", "OpencodeMessageRoleUser"],
1118
[" "],
1219
["USER", "OpencodeMessageRoleUser"],
1320
["", "OpencodeHint"],
1421
[" [msg_user001]", "OpencodeHint"]
15-
],
16-
"ns_id": 3,
17-
"virt_text_win_col": -3,
18-
"right_gravity": true,
19-
"priority": 10,
20-
"virt_text_repeat_linebreak": false,
21-
"virt_text_pos": "win_col",
22-
"virt_text_hide": false
22+
]
2323
}
2424
],
2525
[
2626
2,
2727
4,
2828
0,
2929
{
30+
"ns_id": 3,
31+
"virt_text_hide": false,
32+
"priority": 10,
33+
"right_gravity": true,
34+
"virt_text_pos": "win_col",
35+
"virt_text_win_col": -3,
36+
"virt_text_repeat_linebreak": false,
3037
"virt_text": [
3138
["", "OpencodeMessageRoleAssistant"],
3239
[" "],
3340
["BUILD", "OpencodeMessageRoleAssistant"],
3441
["", "OpencodeHint"],
3542
[" [msg_asst001]", "OpencodeHint"]
36-
],
37-
"ns_id": 3,
38-
"virt_text_win_col": -3,
39-
"right_gravity": true,
40-
"priority": 10,
41-
"virt_text_repeat_linebreak": false,
42-
"virt_text_pos": "win_col",
43-
"virt_text_hide": false
43+
]
4444
}
4545
],
4646
[
4747
3,
4848
6,
4949
0,
5050
{
51-
"virt_text": [["", "OpencodeToolBorder"]],
5251
"ns_id": 3,
53-
"virt_text_win_col": -1,
54-
"right_gravity": true,
52+
"virt_text_hide": false,
5553
"priority": 4096,
56-
"virt_text_repeat_linebreak": true,
54+
"right_gravity": true,
5755
"virt_text_pos": "win_col",
58-
"virt_text_hide": false
56+
"virt_text_win_col": -1,
57+
"virt_text_repeat_linebreak": true,
58+
"virt_text": [["", "OpencodeToolBorder"]]
5959
}
6060
],
6161
[
6262
4,
6363
7,
6464
0,
6565
{
66-
"virt_text": [["", "OpencodeToolBorder"]],
6766
"ns_id": 3,
68-
"virt_text_win_col": -1,
69-
"right_gravity": true,
67+
"virt_text_hide": false,
7068
"priority": 4096,
71-
"virt_text_repeat_linebreak": true,
69+
"right_gravity": true,
7270
"virt_text_pos": "win_col",
73-
"virt_text_hide": false
71+
"virt_text_win_col": -1,
72+
"virt_text_repeat_linebreak": true,
73+
"virt_text": [["", "OpencodeToolBorder"]]
7474
}
7575
],
7676
[
7777
5,
7878
8,
7979
0,
8080
{
81-
"virt_text": [["", "OpencodeToolBorder"]],
8281
"ns_id": 3,
83-
"virt_text_win_col": -1,
84-
"right_gravity": true,
82+
"virt_text_hide": false,
8583
"priority": 4096,
86-
"virt_text_repeat_linebreak": true,
84+
"right_gravity": true,
8785
"virt_text_pos": "win_col",
88-
"virt_text_hide": false
86+
"virt_text_win_col": -1,
87+
"virt_text_repeat_linebreak": true,
88+
"virt_text": [["", "OpencodeToolBorder"]]
8989
}
9090
],
9191
[
9292
6,
9393
9,
9494
0,
9595
{
96-
"virt_text": [
97-
["1 ", "OpencodeDiffAddGutter"],
98-
["+", "OpencodeDiffAddGutter"],
99-
[" ", "OpencodeDiffAddGutter"]
100-
],
96+
"end_col": 0,
97+
"hl_group": "OpencodeDiffAdd",
98+
"right_gravity": true,
10199
"virt_text_pos": "overlay",
102100
"priority": 5000,
103-
"end_col": 0,
104-
"end_row": 10,
105101
"ns_id": 3,
102+
"end_row": 10,
106103
"end_right_gravity": false,
107-
"right_gravity": true,
108104
"virt_text_hide": false,
105+
"virt_text": [
106+
["1", "OpencodeDiffAddGutter"],
107+
["+", "OpencodeDiffAddGutter"],
108+
[" ", "OpencodeDiffAddGutter"]
109+
],
109110
"virt_text_repeat_linebreak": false,
110-
"hl_eol": true,
111-
"hl_group": "OpencodeDiffAdd"
111+
"hl_eol": true
112112
}
113113
],
114114
[
115115
7,
116116
9,
117117
0,
118118
{
119-
"virt_text": [["", "OpencodeToolBorder"]],
120119
"ns_id": 3,
121-
"virt_text_win_col": -1,
122-
"right_gravity": true,
120+
"virt_text_hide": false,
123121
"priority": 4096,
124-
"virt_text_repeat_linebreak": true,
122+
"right_gravity": true,
125123
"virt_text_pos": "win_col",
126-
"virt_text_hide": false
124+
"virt_text_win_col": -1,
125+
"virt_text_repeat_linebreak": true,
126+
"virt_text": [["", "OpencodeToolBorder"]]
127127
}
128128
],
129129
[
130130
8,
131131
10,
132132
0,
133133
{
134-
"virt_text": [
135-
["2 ", "OpencodeDiffAddGutter"],
136-
["+", "OpencodeDiffAddGutter"],
137-
[" ", "OpencodeDiffAddGutter"]
138-
],
134+
"end_col": 0,
135+
"hl_group": "OpencodeDiffAdd",
136+
"right_gravity": true,
139137
"virt_text_pos": "overlay",
140138
"priority": 5000,
141-
"end_col": 0,
142-
"end_row": 11,
143139
"ns_id": 3,
140+
"end_row": 11,
144141
"end_right_gravity": false,
145-
"right_gravity": true,
146142
"virt_text_hide": false,
143+
"virt_text": [
144+
["2", "OpencodeDiffAddGutter"],
145+
["+", "OpencodeDiffAddGutter"],
146+
[" ", "OpencodeDiffAddGutter"]
147+
],
147148
"virt_text_repeat_linebreak": false,
148-
"hl_eol": true,
149-
"hl_group": "OpencodeDiffAdd"
149+
"hl_eol": true
150150
}
151151
],
152152
[
153153
9,
154154
10,
155155
0,
156156
{
157-
"virt_text": [["", "OpencodeToolBorder"]],
158157
"ns_id": 3,
159-
"virt_text_win_col": -1,
160-
"right_gravity": true,
158+
"virt_text_hide": false,
161159
"priority": 4096,
162-
"virt_text_repeat_linebreak": true,
160+
"right_gravity": true,
163161
"virt_text_pos": "win_col",
164-
"virt_text_hide": false
162+
"virt_text_win_col": -1,
163+
"virt_text_repeat_linebreak": true,
164+
"virt_text": [["", "OpencodeToolBorder"]]
165165
}
166166
],
167167
[
168168
10,
169169
11,
170170
0,
171171
{
172-
"virt_text": [["", "OpencodeToolBorder"]],
173172
"ns_id": 3,
174-
"virt_text_win_col": -1,
175-
"right_gravity": true,
173+
"virt_text_hide": false,
176174
"priority": 4096,
177-
"virt_text_repeat_linebreak": true,
175+
"right_gravity": true,
178176
"virt_text_pos": "win_col",
179-
"virt_text_hide": false
177+
"virt_text_win_col": -1,
178+
"virt_text_repeat_linebreak": true,
179+
"virt_text": [["", "OpencodeToolBorder"]]
180180
}
181181
],
182182
[
183183
11,
184184
12,
185185
0,
186186
{
187-
"virt_text": [["", "OpencodeToolBorder"]],
188187
"ns_id": 3,
189-
"virt_text_win_col": -1,
190-
"right_gravity": true,
188+
"virt_text_hide": false,
191189
"priority": 4096,
192-
"virt_text_repeat_linebreak": true,
190+
"right_gravity": true,
193191
"virt_text_pos": "win_col",
194-
"virt_text_hide": false
192+
"virt_text_win_col": -1,
193+
"virt_text_repeat_linebreak": true,
194+
"virt_text": [["", "OpencodeToolBorder"]]
195195
}
196196
]
197197
],
@@ -205,12 +205,12 @@
205205
"** apply patch** `src/app/features/auth/__tests__/LoginForm.test.tsx` 4s",
206206
"",
207207
"`````tsx",
208-
" import React from 'react'",
209-
" // minimal diff for testing",
208+
" import React from 'react'",
209+
" // minimal diff for testing",
210210
"",
211211
"`````",
212212
"",
213213
""
214214
],
215-
"timestamp": 1772801240
215+
"timestamp": 1772803135
216216
}

0 commit comments

Comments
 (0)