summaryrefslogtreecommitdiff
path: root/src/main/lsp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/lsp.c')
-rw-r--r--src/main/lsp.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/main/lsp.c b/src/main/lsp.c
index ab9ba39..de7f553 100644
--- a/src/main/lsp.c
+++ b/src/main/lsp.c
@@ -50,6 +50,7 @@ struct lsp_server {
enum position_encoding_kind position_encoding;
struct lsp_diagnostics *diagnostics;
+ layer_id diagnostics_layer_id;
struct completion_ctx *completion_ctx;
};
@@ -192,6 +193,8 @@ request_response_received(struct lsp_server *server, uint64_t id,
static void buffer_updated(struct buffer *buffer, void *userdata) {
struct lsp_server *server = (struct lsp_server *)userdata;
+ buffer_clear_text_property_layer(buffer, server->diagnostics_layer_id);
+
diagnostic_vec *diagnostics =
diagnostics_for_buffer(server->diagnostics, buffer);
if (diagnostics == NULL) {
@@ -213,7 +216,8 @@ static void buffer_updated(struct buffer *buffer, void *userdata) {
struct region reg = region_new(
diag->region.begin, buffer_previous_char(buffer, diag->region.end));
- buffer_add_text_property(buffer, reg.begin, reg.end, prop);
+ buffer_add_text_property_to_layer(buffer, reg.begin, reg.end, prop,
+ server->diagnostics_layer_id);
if (window_buffer(windows_get_active()) == buffer) {
struct buffer_view *bv = window_buffer_view(windows_get_active());
@@ -589,6 +593,7 @@ static void create_lsp_client(struct buffer *buffer, void *userdata) {
}
new->value.diagnostics = diagnostics_create();
+ new->value.diagnostics_layer_id = buffer_add_text_property_layer(buffer);
// support for this is determined later
new->value.completion_ctx = NULL;