summaryrefslogtreecommitdiff
path: root/ted.c
diff options
context:
space:
mode:
Diffstat (limited to 'ted.c')
-rw-r--r--ted.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/ted.c b/ted.c
index 831242d..5941f9a 100644
--- a/ted.c
+++ b/ted.c
@@ -567,3 +567,40 @@ void ted_go_to_lsp_document_position(Ted *ted, LSP *lsp, LSPDocumentPosition pos
u32 character = position.pos.character;
ted_go_to_position(ted, path, line, character, true);
}
+
+void ted_highlight_lsp_range(Ted *ted, TextBuffer *buffer, LSPRange range) {
+ Font *font = buffer_font(buffer);
+ const u32 *colors = buffer_settings(buffer)->colors;
+ float char_height = font->char_height;
+ BufferPos range_start = buffer_pos_from_lsp(buffer, range.start);
+ BufferPos range_end = buffer_pos_from_lsp(buffer, range.end);
+ // draw the highlight
+ if (range_start.line == range_end.line) {
+ v2 a = buffer_pos_to_pixels(buffer, range_start);
+ v2 b = buffer_pos_to_pixels(buffer, range_end);
+ b.y += char_height;
+ gl_geometry_rect(rect_endpoints(a, b), colors[COLOR_HOVER_HL]);
+ } else if (range_end.line - range_start.line < 1000) { // prevent gigantic highlights from slowing things down
+ // multiple lines.
+ v2 a = buffer_pos_to_pixels(buffer, range_start);
+ v2 b = buffer_pos_to_pixels(buffer, buffer_pos_end_of_line(buffer, range_start.line));
+ b.y += char_height;
+ gl_geometry_rect(rect_endpoints(a, b), colors[COLOR_HOVER_HL]);
+
+ for (u32 line = range_start.line + 1; line < range_end.line; ++line) {
+ // these lines are fully contained in the range.
+ BufferPos start = buffer_pos_start_of_line(buffer, line);
+ BufferPos end = buffer_pos_end_of_line(buffer, line);
+ a = buffer_pos_to_pixels(buffer, start);
+ b = buffer_pos_to_pixels(buffer, end);
+ b.y += char_height;
+ gl_geometry_rect(rect_endpoints(a, b), colors[COLOR_HOVER_HL]);
+ }
+
+ // last line
+ a = buffer_pos_to_pixels(buffer, buffer_pos_start_of_line(buffer, range_end.line));
+ b = buffer_pos_to_pixels(buffer, range_end);
+ b.y += char_height;
+ gl_geometry_rect(rect_endpoints(a, b), colors[COLOR_HOVER_HL]);
+ }
+}