[gnome-builder] diagnostic: Add IDE_DIAGNOSTIC_UNUSED



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 (&note_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 (&note_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]