summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dged/buffer.c2
-rw-r--r--src/main/lsp.c7
-rw-r--r--src/main/main.c3
3 files changed, 10 insertions, 2 deletions
diff --git a/src/dged/buffer.c b/src/dged/buffer.c
index 7eb787d..3259534 100644
--- a/src/dged/buffer.c
+++ b/src/dged/buffer.c
@@ -1395,10 +1395,12 @@ void buffer_get_text_properties_filtered(struct buffer *buffer,
}
void buffer_clear_text_properties(struct buffer *buffer) {
+ buffer->needs_render = true;
text_clear_properties(buffer->text);
}
void buffer_clear_text_property_layer(struct buffer *buffer, layer_id layer) {
+ buffer->needs_render = true;
text_clear_property_layer(buffer->text, layer);
}
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;
diff --git a/src/main/main.c b/src/main/main.c
index 57c2454..a10a461 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -431,7 +431,8 @@ int main(int argc, char *argv[]) {
* reason. This is also the reason that there is no timed scope around
* this, it simply makes no sense.
*/
- reactor_update(reactor, needs_render ? (time_to_render_ns / 1e6) : -1);
+ reactor_update(reactor,
+ needs_render ? ((time_to_render_ns + 1e6 - 1) / 1e6) : -1);
}
struct timer *update_keyboard = timer_start("update-keyboard");