@@ -25,7 +25,7 @@ interface InlayHint {
2525 label: string,
2626}
2727```
28- --]]
28+ --]]
2929
3030local inlay_hints = {}
3131
@@ -81,8 +81,12 @@ inlay_hints.get_callback = function(opts)
8181
8282 for _ , hint in ipairs (result ) do
8383 local finish = hint .range [" end" ].line
84- if not hint_store [finish ] and in_list (enabled )(hint .kind ) then
85- hint_store [finish ] = hint
84+ if in_list (enabled )(hint .kind ) then
85+ if not hint_store [finish ] then
86+ hint_store [finish ] = {hint }
87+ elseif hint_store [finish ][1 ].kind == hint .kind then
88+ table.insert (hint_store [finish ], hint )
89+ end
8690
8791 if aligned then
8892 longest_line = math.max (longest_line ,
@@ -91,8 +95,8 @@ inlay_hints.get_callback = function(opts)
9195 end
9296 end
9397
94- local display_virt_text = function (hint )
95- local end_line = hint .range [" end" ].line
98+ local display_virt_text = function (hints )
99+ local end_line = hints [ 1 ] .range [" end" ].line
96100
97101 -- Check for any existing / more important virtual text on the line.
98102 -- TODO: Figure out how stackable virtual text works? What happens if there is more than one??
@@ -101,25 +105,27 @@ inlay_hints.get_callback = function(opts)
101105 if not vim .tbl_isempty (existing_virt_text ) then return end
102106
103107 local text
104- if aligned then
105- local line_length = # vim .api .nvim_buf_get_lines (bufnr , end_line , end_line + 1 , false )[1 ]
106- text = string.format (" %s %s" , (" " ):rep (longest_line - line_length ), prefix .. hint .label )
107- else
108- text = prefix .. hint .label
108+ for _ , hint in ipairs (hints ) do
109+ if aligned then
110+ local line_length = # vim .api .nvim_buf_get_lines (bufnr , end_line , end_line + 1 , false )[1 ]
111+ text = string.format (" %s %s" , (" " ):rep (longest_line - line_length ), prefix .. hint .label )
112+ else
113+ text = (text or " " ) .. prefix .. hint .label
114+ end
109115 end
110116 vim .api .nvim_buf_set_virtual_text (bufnr , inlay_hints_ns , end_line , {{text , highlight }}, {})
111117 end
112118
113119 if only_current_line then
114- local hint = hint_store [vim .api .nvim_win_get_cursor (0 )[1 ] - 1 ]
120+ local hints = hint_store [vim .api .nvim_win_get_cursor (0 )[1 ] - 1 ]
115121
116- if not hint then
122+ if not hints then
117123 return
118124 else
119- display_virt_text (hint )
125+ display_virt_text (hints )
120126 end
121127 else
122- for _ , hint in pairs (hint_store ) do display_virt_text (hint ) end
128+ for _ , hints in pairs (hint_store ) do display_virt_text (hints ) end
123129 end
124130 end
125131end
0 commit comments