mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	
				
					committed by
					
						
						Lewis Russell
					
				
			
			
				
	
			
			
			
						parent
						
							475f9f64ef
						
					
				
				
					commit
					7342e6b00d
				
			@@ -380,6 +380,20 @@ function STHighlighter:process_response(response, client, version)
 | 
				
			|||||||
  api.nvim__redraw({ buf = self.bufnr, valid = true })
 | 
					  api.nvim__redraw({ buf = self.bufnr, valid = true })
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- @param bufnr integer
 | 
				
			||||||
 | 
					--- @param ns integer
 | 
				
			||||||
 | 
					--- @param token STTokenRange
 | 
				
			||||||
 | 
					--- @param hl_group string
 | 
				
			||||||
 | 
					--- @param priority integer
 | 
				
			||||||
 | 
					local function set_mark(bufnr, ns, token, hl_group, priority)
 | 
				
			||||||
 | 
					  vim.api.nvim_buf_set_extmark(bufnr, ns, token.line, token.start_col, {
 | 
				
			||||||
 | 
					    hl_group = hl_group,
 | 
				
			||||||
 | 
					    end_col = token.end_col,
 | 
				
			||||||
 | 
					    priority = priority,
 | 
				
			||||||
 | 
					    strict = false,
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- on_win handler for the decoration provider (see |nvim_set_decoration_provider|)
 | 
					--- on_win handler for the decoration provider (see |nvim_set_decoration_provider|)
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
--- If there is a current result for the buffer and the version matches the
 | 
					--- If there is a current result for the buffer and the version matches the
 | 
				
			||||||
@@ -433,13 +447,14 @@ function STHighlighter:on_win(topline, botline)
 | 
				
			|||||||
      -- finishes, clangd sends a refresh request which lets the client
 | 
					      -- finishes, clangd sends a refresh request which lets the client
 | 
				
			||||||
      -- re-synchronize the tokens.
 | 
					      -- re-synchronize the tokens.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      local set_mark = function(token, hl_group, delta)
 | 
					      local function set_mark0(token, hl_group, delta)
 | 
				
			||||||
        vim.api.nvim_buf_set_extmark(self.bufnr, state.namespace, token.line, token.start_col, {
 | 
					        set_mark(
 | 
				
			||||||
          hl_group = hl_group,
 | 
					          self.bufnr,
 | 
				
			||||||
          end_col = token.end_col,
 | 
					          state.namespace,
 | 
				
			||||||
          priority = vim.hl.priorities.semantic_tokens + delta,
 | 
					          token,
 | 
				
			||||||
          strict = false,
 | 
					          hl_group,
 | 
				
			||||||
        })
 | 
					          vim.hl.priorities.semantic_tokens + delta
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      local ft = vim.bo[self.bufnr].filetype
 | 
					      local ft = vim.bo[self.bufnr].filetype
 | 
				
			||||||
@@ -447,13 +462,19 @@ function STHighlighter:on_win(topline, botline)
 | 
				
			|||||||
      local first = lower_bound(highlights, topline, 1, #highlights + 1)
 | 
					      local first = lower_bound(highlights, topline, 1, #highlights + 1)
 | 
				
			||||||
      local last = upper_bound(highlights, botline, first, #highlights + 1) - 1
 | 
					      local last = upper_bound(highlights, botline, first, #highlights + 1) - 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      for i = first, last do
 | 
					      local i = first
 | 
				
			||||||
 | 
					      while i <= last do
 | 
				
			||||||
        local token = highlights[i]
 | 
					        local token = highlights[i]
 | 
				
			||||||
        if not token.marked then
 | 
					        local folded = vim.fn.foldclosed(token.line + 1)
 | 
				
			||||||
          set_mark(token, string.format('@lsp.type.%s.%s', token.type, ft), 0)
 | 
					
 | 
				
			||||||
          for modifier, _ in pairs(token.modifiers) do
 | 
					        -- Do not highlight folded lines
 | 
				
			||||||
            set_mark(token, string.format('@lsp.mod.%s.%s', modifier, ft), 1)
 | 
					        local can_mark = folded == -1 or folded == token.line + 1
 | 
				
			||||||
            set_mark(token, string.format('@lsp.typemod.%s.%s.%s', token.type, modifier, ft), 2)
 | 
					
 | 
				
			||||||
 | 
					        if can_mark and not token.marked then
 | 
				
			||||||
 | 
					          set_mark0(token, string.format('@lsp.type.%s.%s', token.type, ft), 0)
 | 
				
			||||||
 | 
					          for modifier in pairs(token.modifiers) do
 | 
				
			||||||
 | 
					            set_mark0(token, string.format('@lsp.mod.%s.%s', modifier, ft), 1)
 | 
				
			||||||
 | 
					            set_mark0(token, string.format('@lsp.typemod.%s.%s.%s', token.type, modifier, ft), 2)
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          token.marked = true
 | 
					          token.marked = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -466,6 +487,12 @@ function STHighlighter:on_win(topline, botline)
 | 
				
			|||||||
            },
 | 
					            },
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if folded ~= -1 then
 | 
				
			||||||
 | 
					          i = math.min(last, vim.fn.foldclosedend(token.line + 1) - 1)
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          i = i + 1
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@@ -745,15 +772,9 @@ function M.highlight_token(token, bufnr, client_id, hl_group, opts)
 | 
				
			|||||||
    return
 | 
					    return
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  opts = opts or {}
 | 
					  local priority = opts and opts.priority or vim.hl.priorities.semantic_tokens + 3
 | 
				
			||||||
  local priority = opts.priority or vim.hl.priorities.semantic_tokens + 3
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  vim.api.nvim_buf_set_extmark(bufnr, state.namespace, token.line, token.start_col, {
 | 
					  set_mark(bufnr, state.namespace, token, hl_group, priority)
 | 
				
			||||||
    hl_group = hl_group,
 | 
					 | 
				
			||||||
    end_col = token.end_col,
 | 
					 | 
				
			||||||
    priority = priority,
 | 
					 | 
				
			||||||
    strict = false,
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- |lsp-handler| for the method `workspace/semanticTokens/refresh`
 | 
					--- |lsp-handler| for the method `workspace/semanticTokens/refresh`
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user