@@ -165,47 +165,49 @@ end
165
165
--- @param pipe uv_pipe_t
166
166
--- @param out string[]
167
167
--- @param line_listeners ? diffview.Job.OnOutCallback[]
168
- --- @param err ? string
169
- --- @param data ? string
170
- function Job :line_reader (pipe , out , line_listeners , err , data )
168
+ function Job :line_reader (pipe , out , line_listeners )
171
169
local line_buffer
172
170
173
- if err then
174
- logger :error (" [Job:line_reader()] " .. err )
175
- end
171
+ --- @param err ? string
172
+ --- @param data ? string
173
+ return function (err , data )
174
+ if err then
175
+ logger :error (" [Job:line_reader()] " .. err )
176
+ end
176
177
177
- if data then
178
- local has_eol = data :sub (- 1 ) == " \n "
179
- local lines = vim .split (data , " \r ?\n " )
178
+ if data then
179
+ local has_eol = data :sub (- 1 ) == " \n "
180
+ local lines = vim .split (data , " \r ?\n " )
180
181
181
- lines [1 ] = (line_buffer or " " ) .. lines [1 ]
182
- line_buffer = nil
182
+ lines [1 ] = (line_buffer or " " ) .. lines [1 ]
183
+ line_buffer = nil
183
184
184
- for i , line in ipairs (lines ) do
185
- if not has_eol and i == # lines then
186
- line_buffer = line
187
- else
188
- out [# out + 1 ] = line
185
+ for i , line in ipairs (lines ) do
186
+ if not has_eol and i == # lines then
187
+ line_buffer = line
188
+ else
189
+ out [# out + 1 ] = line
189
190
190
- if line_listeners then
191
- for _ , listener in ipairs (line_listeners ) do
192
- listener (nil , line , self )
191
+ if line_listeners then
192
+ for _ , listener in ipairs (line_listeners ) do
193
+ listener (nil , line , self )
194
+ end
193
195
end
194
196
end
195
197
end
196
- end
197
- else
198
- if line_buffer then
199
- out [# out + 1 ] = line_buffer
198
+ else
199
+ if line_buffer then
200
+ out [# out + 1 ] = line_buffer
200
201
201
- if line_listeners then
202
- for _ , listener in ipairs (line_listeners ) do
203
- listener (nil , line_buffer , self )
202
+ if line_listeners then
203
+ for _ , listener in ipairs (line_listeners ) do
204
+ listener (nil , line_buffer , self )
205
+ end
204
206
end
205
207
end
206
- end
207
208
208
- try_close (pipe )
209
+ try_close (pipe )
210
+ end
209
211
end
210
212
end
211
213
@@ -221,7 +223,7 @@ function Job:handle_reader(pipe, out, kind)
221
223
out = self .on_stdout_listeners ,
222
224
err = self .on_stderr_listeners ,
223
225
})[kind ] or {}
224
- pipe :read_start (utils . bind ( self . line_reader , self , pipe , out , listeners ))
226
+ pipe :read_start (self : line_reader ( pipe , out , listeners ))
225
227
end
226
228
end
227
229
0 commit comments