[gnome-builder] diagnostic: Add IDE_DIAGNOSTIC_UNUSED
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] diagnostic: Add IDE_DIAGNOSTIC_UNUSED
- Date: Wed, 21 Apr 2021 19:21:55 +0000 (UTC)
commit d5095fec7b6e8566089737b5aeed74288386829c
Author: James Westman <james jwestman net>
Date: Wed Apr 21 13:06:53 2021 -0500
diagnostic: Add IDE_DIAGNOSTIC_UNUSED
Add a new diagnostic severity level for unused code. It is displayed as
a warning in the gutter and has its own underline error style.
Support the new severity level in the language server plugin using the
"Unnecessary" diagnostic tag.
data/style-schemes/builder-dark.style-scheme.xml | 1 +
data/style-schemes/builder.style-scheme.xml | 1 +
src/libide/code/ide-buffer.c | 30 ++++++++++++++++++++++
src/libide/code/ide-diagnostic.c | 3 +++
src/libide/code/ide-diagnostic.h | 9 ++++---
src/libide/code/ide-diagnostics.c | 1 +
src/libide/foundry/ide-pipeline.c | 3 +++
src/libide/lsp/ide-lsp-client.c | 4 +++
src/plugins/omni-gutter/gbp-omni-gutter-renderer.c | 4 ++-
9 files changed, 51 insertions(+), 5 deletions(-)
---
diff --git a/data/style-schemes/builder-dark.style-scheme.xml
b/data/style-schemes/builder-dark.style-scheme.xml
index 16f262336..5ef882686 100644
--- a/data/style-schemes/builder-dark.style-scheme.xml
+++ b/data/style-schemes/builder-dark.style-scheme.xml
@@ -75,6 +75,7 @@
<!-- Diagnostics Underlining -->
<style name="diagnostician::deprecated" underline="error" underline-color="aluminium3"/>
+ <style name="diagnostician::unused" underline="error" underline-color="chocolate2"/>
<style name="diagnostician::error" underline="error" underline-color="red1"/>
<style name="diagnostician::note" underline="error" underline-color="skyblue1"/>
<style name="diagnostician::warning" underline="error" underline-color="orange1"/>
diff --git a/data/style-schemes/builder.style-scheme.xml b/data/style-schemes/builder.style-scheme.xml
index 9de702f28..ebcaa136b 100644
--- a/data/style-schemes/builder.style-scheme.xml
+++ b/data/style-schemes/builder.style-scheme.xml
@@ -83,6 +83,7 @@
<!-- Diagnostics Underlining -->
<style name="diagnostician::deprecated" underline="error" underline-color="aluminium3"/>
+ <style name="diagnostician::unused" underline="error" underline-color="chocolate3"/>
<style name="diagnostician::error" underline="error" underline-color="red1"/>
<style name="diagnostician::note" underline="error" underline-color="blue1"/>
<style name="diagnostician::warning" underline="error" underline-color="orange1"/>
diff --git a/src/libide/code/ide-buffer.c b/src/libide/code/ide-buffer.c
index 66e203729..9937d1432 100644
--- a/src/libide/code/ide-buffer.c
+++ b/src/libide/code/ide-buffer.c
@@ -53,12 +53,14 @@
#define TAG_ERROR "diagnostician::error"
#define TAG_WARNING "diagnostician::warning"
#define TAG_DEPRECATED "diagnostician::deprecated"
+#define TAG_UNUSED "diagnostician::unused"
#define TAG_NOTE "diagnostician::note"
#define TAG_SNIPPET_TAB_STOP "snippet::tab-stop"
#define TAG_DEFINITION "action::hover-definition"
#define TAG_CURRENT_BKPT "debugger::current-breakpoint"
#define DEPRECATED_COLOR "#babdb6"
+#define UNUSED_COLOR "#c17d11"
#define ERROR_COLOR "#ff0000"
#define NOTE_COLOR "#708090"
#define WARNING_COLOR "#fcaf3e"
@@ -2430,6 +2432,9 @@ ide_buffer_clear_diagnostics (IdeBuffer *self)
if (NULL != (tag = gtk_text_tag_table_lookup (table, TAG_DEPRECATED)))
dzl_gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER (self), tag, &begin, &end, TRUE);
+ if (NULL != (tag = gtk_text_tag_table_lookup (table, TAG_UNUSED)))
+ dzl_gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER (self), tag, &begin, &end, TRUE);
+
if (NULL != (tag = gtk_text_tag_table_lookup (table, TAG_ERROR)))
dzl_gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER (self), tag, &begin, &end, TRUE);
}
@@ -2455,6 +2460,10 @@ ide_buffer_apply_diagnostic (IdeBuffer *self,
tag_name = TAG_NOTE;
break;
+ case IDE_DIAGNOSTIC_UNUSED:
+ tag_name = TAG_UNUSED;
+ break;
+
case IDE_DIAGNOSTIC_DEPRECATED:
tag_name = TAG_DEPRECATED;
break;
@@ -3067,6 +3076,7 @@ ide_buffer_notify_style_scheme (IdeBuffer *self,
GtkSourceStyleScheme *style_scheme;
GtkTextTagTable *table;
GdkRGBA deprecated_rgba;
+ GdkRGBA unused_rgba;
GdkRGBA error_rgba;
GdkRGBA note_rgba;
GdkRGBA warning_rgba;
@@ -3084,6 +3094,7 @@ ide_buffer_notify_style_scheme (IdeBuffer *self,
{
/* These are a fall-back if our style scheme isn't installed. */
gdk_rgba_parse (&deprecated_rgba, DEPRECATED_COLOR);
+ gdk_rgba_parse (&unused_rgba, UNUSED_COLOR);
gdk_rgba_parse (&error_rgba, ERROR_COLOR);
gdk_rgba_parse (¬e_rgba, NOTE_COLOR);
gdk_rgba_parse (&warning_rgba, WARNING_COLOR);
@@ -3096,6 +3107,14 @@ ide_buffer_notify_style_scheme (IdeBuffer *self,
"underline-rgba", &deprecated_rgba,
NULL);
+ if (!ide_source_style_scheme_apply_style (style_scheme,
+ TAG_UNUSED,
+ GET_TAG (TAG_UNUSED)))
+ apply_style (GET_TAG (TAG_UNUSED),
+ "underline", PANGO_UNDERLINE_ERROR,
+ "underline-rgba", &unused_rgba,
+ NULL);
+
if (!ide_source_style_scheme_apply_style (style_scheme,
TAG_ERROR,
GET_TAG (TAG_ERROR)))
@@ -3179,10 +3198,12 @@ ide_buffer_init_tags (IdeBuffer *self)
GtkTextTagTable *tag_table;
GtkSourceStyleScheme *style_scheme;
g_autoptr(GtkTextTag) deprecated_tag = NULL;
+ g_autoptr(GtkTextTag) unused_tag = NULL;
g_autoptr(GtkTextTag) error_tag = NULL;
g_autoptr(GtkTextTag) note_tag = NULL;
g_autoptr(GtkTextTag) warning_tag = NULL;
GdkRGBA deprecated_rgba;
+ GdkRGBA unused_rgba;
GdkRGBA error_rgba;
GdkRGBA note_rgba;
GdkRGBA warning_rgba;
@@ -3195,6 +3216,7 @@ ide_buffer_init_tags (IdeBuffer *self)
/* These are fall-back if our style scheme isn't installed. */
gdk_rgba_parse (&deprecated_rgba, DEPRECATED_COLOR);
+ gdk_rgba_parse (&unused_rgba, UNUSED_COLOR);
gdk_rgba_parse (&error_rgba, ERROR_COLOR);
gdk_rgba_parse (¬e_rgba, NOTE_COLOR);
gdk_rgba_parse (&warning_rgba, WARNING_COLOR);
@@ -3207,6 +3229,7 @@ ide_buffer_init_tags (IdeBuffer *self)
*/
deprecated_tag = gtk_text_tag_new (TAG_DEPRECATED);
+ unused_tag = gtk_text_tag_new (TAG_UNUSED);
error_tag = gtk_text_tag_new (TAG_ERROR);
note_tag = gtk_text_tag_new (TAG_NOTE);
warning_tag = gtk_text_tag_new (TAG_WARNING);
@@ -3217,6 +3240,12 @@ ide_buffer_init_tags (IdeBuffer *self)
"underline-rgba", &deprecated_rgba,
NULL);
+ if (!ide_source_style_scheme_apply_style (style_scheme, TAG_UNUSED, unused_tag))
+ apply_style (unused_tag,
+ "underline", PANGO_UNDERLINE_ERROR,
+ "underline-rgba", &unused_rgba,
+ NULL);
+
if (!ide_source_style_scheme_apply_style (style_scheme, TAG_ERROR, error_tag))
apply_style (error_tag,
"underline", PANGO_UNDERLINE_ERROR,
@@ -3236,6 +3265,7 @@ ide_buffer_init_tags (IdeBuffer *self)
NULL);
gtk_text_tag_table_add (tag_table, deprecated_tag);
+ gtk_text_tag_table_add (tag_table, unused_tag);
gtk_text_tag_table_add (tag_table, error_tag);
gtk_text_tag_table_add (tag_table, note_tag);
gtk_text_tag_table_add (tag_table, warning_tag);
diff --git a/src/libide/code/ide-diagnostic.c b/src/libide/code/ide-diagnostic.c
index 83e9b3c13..63d993c64 100644
--- a/src/libide/code/ide-diagnostic.c
+++ b/src/libide/code/ide-diagnostic.c
@@ -316,6 +316,9 @@ ide_diagnostic_severity_to_string (IdeDiagnosticSeverity severity)
case IDE_DIAGNOSTIC_NOTE:
return "note";
+ case IDE_DIAGNOSTIC_UNUSED:
+ return "unused";
+
case IDE_DIAGNOSTIC_DEPRECATED:
return "deprecated";
diff --git a/src/libide/code/ide-diagnostic.h b/src/libide/code/ide-diagnostic.h
index 6f9b093a9..5e08d3297 100644
--- a/src/libide/code/ide-diagnostic.h
+++ b/src/libide/code/ide-diagnostic.h
@@ -36,10 +36,11 @@ typedef enum
{
IDE_DIAGNOSTIC_IGNORED = 0,
IDE_DIAGNOSTIC_NOTE = 1,
- IDE_DIAGNOSTIC_DEPRECATED = 2,
- IDE_DIAGNOSTIC_WARNING = 3,
- IDE_DIAGNOSTIC_ERROR = 4,
- IDE_DIAGNOSTIC_FATAL = 5,
+ IDE_DIAGNOSTIC_UNUSED = 2,
+ IDE_DIAGNOSTIC_DEPRECATED = 3,
+ IDE_DIAGNOSTIC_WARNING = 4,
+ IDE_DIAGNOSTIC_ERROR = 5,
+ IDE_DIAGNOSTIC_FATAL = 6,
} IdeDiagnosticSeverity;
IDE_AVAILABLE_IN_3_32
diff --git a/src/libide/code/ide-diagnostics.c b/src/libide/code/ide-diagnostics.c
index ec430b5ee..af9713787 100644
--- a/src/libide/code/ide-diagnostics.c
+++ b/src/libide/code/ide-diagnostics.c
@@ -213,6 +213,7 @@ ide_diagnostics_take (IdeDiagnostics *self,
case IDE_DIAGNOSTIC_WARNING:
case IDE_DIAGNOSTIC_DEPRECATED:
+ case IDE_DIAGNOSTIC_UNUSED:
priv->n_warnings++;
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_HAS_WARNINGS]);
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_N_WARNINGS]);
diff --git a/src/libide/foundry/ide-pipeline.c b/src/libide/foundry/ide-pipeline.c
index df7e3374d..1ac115855 100644
--- a/src/libide/foundry/ide-pipeline.c
+++ b/src/libide/foundry/ide-pipeline.c
@@ -516,6 +516,9 @@ parse_severity (const gchar *str)
if (strstr (lower, "ignored") != NULL)
return IDE_DIAGNOSTIC_IGNORED;
+ if (strstr (lower, "unused") != NULL)
+ return IDE_DIAGNOSTIC_UNUSED;
+
if (strstr (lower, "deprecated") != NULL)
return IDE_DIAGNOSTIC_DEPRECATED;
diff --git a/src/libide/lsp/ide-lsp-client.c b/src/libide/lsp/ide-lsp-client.c
index f9a10502c..bdd1c6a5f 100644
--- a/src/libide/lsp/ide-lsp-client.c
+++ b/src/libide/lsp/ide-lsp-client.c
@@ -750,6 +750,9 @@ ide_lsp_client_translate_diagnostics (IdeLspClient *self,
case TAG_DEPRECATED:
severity = IDE_DIAGNOSTIC_DEPRECATED;
break;
+ case TAG_UNNECESSARY:
+ severity = IDE_DIAGNOSTIC_UNUSED;
+ break;
default:
break;
}
@@ -1673,6 +1676,7 @@ ide_lsp_client_start (IdeLspClient *self)
"tagSupport", "{",
"valueSet", "[",
JSONRPC_MESSAGE_PUT_INT64 (1),
+ JSONRPC_MESSAGE_PUT_INT64 (2),
"]",
"}",
"}",
diff --git a/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c
b/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c
index 17683ab21..66207c7ab 100644
--- a/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c
+++ b/src/plugins/omni-gutter/gbp-omni-gutter-renderer.c
@@ -541,7 +541,9 @@ populate_diagnostics_cb (guint line,
g_assert (line <= state->end_line);
info = &g_array_index (state->lines, LineInfo, line - state->begin_line);
- info->is_warning |= severity == IDE_DIAGNOSTIC_WARNING || severity == IDE_DIAGNOSTIC_DEPRECATED;
+ info->is_warning |= severity == IDE_DIAGNOSTIC_WARNING
+ || severity == IDE_DIAGNOSTIC_DEPRECATED
+ || severity == IDE_DIAGNOSTIC_UNUSED;
info->is_error |= severity == IDE_DIAGNOSTIC_ERROR || severity == IDE_DIAGNOSTIC_FATAL;
info->is_note |= severity == IDE_DIAGNOSTIC_NOTE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]