[gnome-builder/gnome-builder-3-30] buffers: remove trailing ".in" when guessing language



commit 9f0aa8dfcbe537a08c8e18443492591a97e48392
Author: Christian Hergert <chergert redhat com>
Date:   Tue Oct 23 13:14:24 2018 -0700

    buffers: remove trailing ".in" when guessing language
    
    When guessing the language from GtkSourceView, we can remove the trailing
    .in so that we are more likely to get the proper language type. This is
    useful because rarely are people simply caring about the template expansion
    and more interested in the underlying language syntax.
    
    Fixes #681

 src/libide/buffers/ide-buffer-manager.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/src/libide/buffers/ide-buffer-manager.c b/src/libide/buffers/ide-buffer-manager.c
index 2f37d38e9..a83d6c858 100644
--- a/src/libide/buffers/ide-buffer-manager.c
+++ b/src/libide/buffers/ide-buffer-manager.c
@@ -456,9 +456,11 @@ ide_buffer_manager_load_file__load_cb (GObject      *object,
   g_autoptr(IdeTask) task = user_data;
   g_autofree gchar *guess_contents = NULL;
   g_autofree gchar *content_type = NULL;
+  g_autofree gchar *truncated = NULL;
   GtkSourceFileLoader *loader = (GtkSourceFileLoader *)object;
   IdeBufferManager *self;
   const gchar *path;
+  const gchar *dot;
   IdeContext *context;
   LoadState *state;
   GtkTextIter iter;
@@ -540,8 +542,15 @@ ide_buffer_manager_load_file__load_cb (GObject      *object,
   gtk_text_iter_forward_chars (&end, 1024);
   guess_contents = gtk_text_iter_get_slice (&iter, &end);
   path = ide_file_get_path (state->file);
-  content_type = g_content_type_guess (path, (const guchar *)guess_contents,
-                                       strlen (guess_contents), &uncertain);
+
+  /* Remove the ".in" suffix for files that are expanded at build time. */
+  if ((dot = strrchr (path, '.')))
+    path = truncated = g_strndup (path, dot - path);
+
+  content_type = g_content_type_guess (path,
+                                       (const guchar *)guess_contents,
+                                       strlen (guess_contents),
+                                       &uncertain);
   if (content_type && !uncertain)
     _ide_file_set_content_type (state->file, content_type);
 


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