mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	fix(lsp): resize hover window for concealed lines
Problem:  Height of a (markdown) `vim.lsp.util.open_floating_preview()`
          window can be reduced to account for concealed lines (after #31324).
Solution: Set the window height to the text height of the preview window.
          Set 'concealcursor' to avoid unconcealing the cursorline when
          entering the hover window.
			
			
This commit is contained in:
		 Luuk van Baal
					Luuk van Baal
				
			
				
					committed by
					
						 Christian Clason
						Christian Clason
					
				
			
			
				
	
			
			
			 Christian Clason
						Christian Clason
					
				
			
						parent
						
							8ba047e33f
						
					
				
				
					commit
					47aaddfa0d
				
			| @@ -1649,8 +1649,14 @@ function M.open_floating_preview(contents, syntax, opts) | |||||||
|  |  | ||||||
|   if do_stylize then |   if do_stylize then | ||||||
|     vim.wo[floating_winnr].conceallevel = 2 |     vim.wo[floating_winnr].conceallevel = 2 | ||||||
|  |     vim.wo[floating_winnr].concealcursor = 'n' | ||||||
|     vim.bo[floating_bufnr].filetype = 'markdown' |     vim.bo[floating_bufnr].filetype = 'markdown' | ||||||
|     vim.treesitter.start(floating_bufnr) |     vim.treesitter.start(floating_bufnr) | ||||||
|  |     if not opts.height then | ||||||
|  |       -- Reduce window height if TS highlighter conceals code block backticks. | ||||||
|  |       local conceal_height = api.nvim_win_text_height(floating_winnr, {}).all | ||||||
|  |       api.nvim_win_set_height(floating_winnr, conceal_height) | ||||||
|  |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   return floating_bufnr, floating_winnr |   return floating_bufnr, floating_winnr | ||||||
|   | |||||||
| @@ -329,4 +329,32 @@ describe('vim.lsp.util', function() | |||||||
|                                                            | |                                                            | | ||||||
|     ]]) |     ]]) | ||||||
|   end) |   end) | ||||||
|  |  | ||||||
|  |   it('open_floating_preview height reduced for concealed lines', function() | ||||||
|  |     local screen = Screen.new() | ||||||
|  |     screen:add_extra_attr_ids({ | ||||||
|  |       [100] = { | ||||||
|  |         background = Screen.colors.LightMagenta, | ||||||
|  |         foreground = Screen.colors.Brown, | ||||||
|  |         bold = true, | ||||||
|  |       }, | ||||||
|  |       [101] = { background = Screen.colors.LightMagenta, foreground = Screen.colors.Blue }, | ||||||
|  |       [102] = { background = Screen.colors.LightMagenta, foreground = Screen.colors.DarkCyan }, | ||||||
|  |     }) | ||||||
|  |     exec_lua([[ | ||||||
|  |       vim.g.syntax_on = false | ||||||
|  |       vim.lsp.util.open_floating_preview({ '```lua', 'local foo', '```' }, 'markdown', { | ||||||
|  |         border = 'single', | ||||||
|  |         focus = false, | ||||||
|  |       }) | ||||||
|  |     ]]) | ||||||
|  |     screen:expect([[ | ||||||
|  |       ^                                                     | | ||||||
|  |       ┌─────────┐{1:                                          }| | ||||||
|  |       │{100:local}{101: }{102:foo}│{1:                                          }| | ||||||
|  |       └─────────┘{1:                                          }| | ||||||
|  |       {1:~                                                    }|*9 | ||||||
|  |                                                            | | ||||||
|  |     ]]) | ||||||
|  |   end) | ||||||
| end) | end) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user