[gnome-builder/wip/chergert/clang] text-iter: add checks for comment/string



commit 907c310a6f27fd2b56ebc917c5630c95756dd1b8
Author: Christian Hergert <chergert redhat com>
Date:   Tue May 1 17:17:47 2018 -0700

    text-iter: add checks for comment/string
    
    We don't want to pretend to have a symbol if we're in a comment or string
    where that isn't allowed.
    
    In the future, we might want to allow for interpolated strings, but we
    should address that in per-language completion providers.

 src/libide/sourceview/ide-text-iter.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)
---
diff --git a/src/libide/sourceview/ide-text-iter.c b/src/libide/sourceview/ide-text-iter.c
index c63b3f217..beaabe81d 100644
--- a/src/libide/sourceview/ide-text-iter.c
+++ b/src/libide/sourceview/ide-text-iter.c
@@ -21,9 +21,9 @@
 #include "config.h"
 
 #include <dazzle.h>
-#include <string.h>
-
 #include <gtk/gtk.h>
+#include <gtksourceview/gtksource.h>
+#include <string.h>
 
 #include "ide-debug.h"
 
@@ -938,6 +938,7 @@ is_symbol_char (gunichar ch)
 gchar *
 _ide_text_iter_current_symbol (const GtkTextIter *iter)
 {
+  GtkTextBuffer *buffer;
   GtkTextIter end = *iter;
   GtkTextIter begin = *iter;
   gunichar ch = 0;
@@ -953,5 +954,21 @@ _ide_text_iter_current_symbol (const GtkTextIter *iter)
   if (ch && !is_symbol_char (ch))
     gtk_text_iter_forward_char (&begin);
 
+  buffer = gtk_text_iter_get_buffer (iter);
+
+  if (GTK_SOURCE_IS_BUFFER (buffer))
+    {
+      GtkSourceBuffer *gsb = GTK_SOURCE_BUFFER (buffer);
+
+      if (gtk_source_buffer_iter_has_context_class (gsb, &begin, "comment") ||
+          gtk_source_buffer_iter_has_context_class (gsb, &begin, "string") ||
+          gtk_source_buffer_iter_has_context_class (gsb, &end, "comment") ||
+          gtk_source_buffer_iter_has_context_class (gsb, &end, "string"))
+        return NULL;
+    }
+
+  if (gtk_text_iter_equal (&begin, &end))
+    return NULL;
+
   return gtk_text_iter_get_slice (&begin, &end);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]