@@ -244,9 +244,14 @@ function! s:funcs.buf_add_highlight(bufnr, srcId, hlGroup, line, colStart, colEn
244
244
return
245
245
endif
246
246
let bufnr = a: bufnr == 0 ? bufnr (' %' ) : a: bufnr
247
- let key = ' Coc' .a: hlGroup
248
- if empty (prop_type_get (key ))
249
- call prop_type_add (key , {' highlight' : a: hlGroup , ' combine' : 1 })
247
+ let key = ' Coc' .a: hlGroup .(a: srcId != -1 ? a: srcId : ' ' )
248
+ if empty (prop_type_get (key , {' bufnr' : a: bufnr }))
249
+ call prop_type_add (key , {' highlight' : a: hlGroup , ' combine' : 1 , ' bufnr' : a: bufnr })
250
+ if a: srcId != -1
251
+ let cached = getbufvar (bufnr , ' prop_namespace_' .a: srcId , [])
252
+ call add (cached, key )
253
+ call setbufvar (bufnr , ' prop_namespace_' .a: srcId , cached)
254
+ endif
250
255
endif
251
256
let total = strlen (getbufline (bufnr , a: line + 1 )[0 ])
252
257
let end = a: colEnd
@@ -258,14 +263,8 @@ function! s:funcs.buf_add_highlight(bufnr, srcId, hlGroup, line, colStart, colEn
258
263
if end <= a: colStart
259
264
return
260
265
endif
261
- let id = 0
262
- if a: srcId != -1
263
- let cached = getbufvar (bufnr , ' prop_namespace_' .a: srcId , [])
264
- let id = s: prop_id
265
- let s: prop_id = id + 1
266
- call add (cached, id)
267
- call setbufvar (bufnr , ' prop_namespace_' .a: srcId , cached)
268
- endif
266
+ let id = s: prop_id
267
+ let s: prop_id = id + 1
269
268
try
270
269
call prop_add (a: line + 1 , a: colStart + 1 , {' length' : end - a: colStart , ' bufnr' : bufnr , ' type' : key , ' id' : id})
271
270
catch /^Vim\%((\a\+)\)\=:E967/
@@ -288,19 +287,8 @@ function! s:funcs.buf_clear_namespace(bufnr, srcId, startLine, endLine) abort
288
287
if empty (cached)
289
288
return
290
289
endif
291
- call setbufvar (a: bufnr , ' prop_namespace_' .a: srcId , [])
292
- for id in cached
293
- if a: endLine == -1
294
- if a: startLine == 0 && a: endLine == -1
295
- call prop_remove ({' id' :id, ' bufnr' : a: bufnr })
296
- elseif a: endLine != -1
297
- call prop_remove ({' id' :id, ' bufnr' : a: bufnr }, a: startLine , a: endLine )
298
- else
299
- let len = s: buf_line_count (a: bufnr )
300
- call prop_remove ({' id' :id, ' bufnr' : a: bufnr }, a: startLine , len )
301
- endif
302
- else
303
- endif
290
+ for key in cached
291
+ call prop_remove ({' type' : key , ' bufnr' : a: bufnr , ' all' : 1 })
304
292
endfor
305
293
endif
306
294
endfunction
0 commit comments