1. 08 Jun, 2018 1 commit
    • Christian Hergert's avatar
      completion: add new completion engine · 3cd417a3
      Christian Hergert authored
      This is a replacement for GtkSourceCompletion to handle a number of designs
      that we can't land into GtkSourceView for various API/ABI reasons but need
      in Builder for completion performance, memory footprint, and visual
      styling.
      
      The important details in terms of design change are:
      
       * Use GListModel heavily to avoid GObject creation, GList creation,
         GQueue creation, and O(n²) treemodel lookups so that we can handle
         larger list sizes in (tens of thousands with much reduced memory
         footprint).
       * Allow providers to refilter existing results conveniently.
       * Break things into 4 columns (icon, lhs, word, rhs).
       * Use GtkListBoxRow instead of GtkTreeView for widget styling.
       * Only create widgets and proposals for the visible range of items
         through use of custom GtkBox-based GtkScrollable, listbox row, and
         dynamic access to joined-GListModel for all results.
       * Dynamic priorities for completion results based on context.
       * Adjust window size based on result set, with changeable xoffset.
       * Use different strategies for display based on our display manager.
       * Consistent and fast fuzzy text filtering.
      
      Some things we don't have yet that we'd like to add in the future.
      
       * Support for more complex comments than fit in the completion window
         such as a details window.
       * Use move_to_rect() API landing in gtk+ 3.24.
       * When wayland supports dynamic repositioning of popups, use that with
         the IdeCompletionWindow instead of our overlay display.
       * Simplified support for parameter completion
       * Simplified support for string interpolation
      3cd417a3
  2. 02 May, 2018 1 commit
  3. 22 Mar, 2018 2 commits
  4. 08 Nov, 2017 1 commit
    • Christian Hergert's avatar
      libide: use IDE_AVAILABLE_IN_ALL on public ABI · 35bf7bf1
      Christian Hergert authored
      This specifies what functions are to be exported when linking libide-1.0
      instead of using a linker script. This allows us to be more specific in
      what ABI ends up in the final library.
      
      We still aren't an ABI-stable library, but this start's getting us closer
      to that future.
      35bf7bf1
  5. 11 Oct, 2017 1 commit
  6. 24 Sep, 2017 1 commit
    • Christian Hergert's avatar
      style-guide: use #pragma once header guards · 4de226ea
      Christian Hergert authored
      This changes most of the code base to using #pragma once instead
      of the old style #ifndef FOO_H header guards. I hear that the
      old style is still slightly faster, but I don't care much about
      that. I'm sure GCC will continue to optimize for this going
      forward.
      
      Also, we're already using a bunch of other C11 features, so
      might as well use this too.
      4de226ea
  7. 21 Sep, 2017 1 commit
    • Christian Hergert's avatar
      source tree reorganization · 9b9db776
      Christian Hergert authored
      As the project has grown, we've let things get a bit out of their
      logical place. This does a bit of cleanup and tries to bring some
      of the embedded resources closer to where they are used.
      
      But more importantly, this allows us to clean some things up to
      the point that we can move forward statically linking a bunch of
      the plugins into libide. The plan here is to speed up the initial
      loading by avoiding lots of disk I/O stats which are currently
      hurting us.
      9b9db776
  8. 11 Mar, 2017 1 commit
  9. 28 Oct, 2016 1 commit
  10. 17 Jun, 2016 1 commit
    • Christian Hergert's avatar
      build: reorganize libide · d0121822
      Christian Hergert authored
      The libide/ directory was getting a bit out of control. The number of files
      in the directory was simply too much to make it easy for newcomers to
      find what they are looking for.
      
      This breaks things up into a bunch of, somewhat logical, directories.
      
      We no longer use a bunch of crazy include paths with -I, and instead
      include the directory name when including as such:
      
        #include "buffers/ide-buffer.h"
      
      This will hopefully make it easier to navigate, and basically the same to
      open files if you use fuzzy search to open files.
      d0121822
  11. 30 Oct, 2015 1 commit
  12. 28 Sep, 2015 1 commit
  13. 26 Sep, 2015 1 commit
    • Christian Hergert's avatar
      vala: add beginnings of vala support for Builder · b259bda5
      Christian Hergert authored
      There is plenty to do in terms of optimizing this, and code cleanup, so
      feel free to join in and help if you can. I'm by no means a Vala expert
      and I ran into a lot of problems along the way.
      
      What this includes:
      
       * A simple auto-indenter: There is a lot do do here to here to catch
         up with what the C indenter can do. We probably need to abstract
         everything into a two-pass system. One pass to get the context,
         a second pass to determine how to indent that context.
       * In process diagnostics like we do for clang. This isn't really a
         feature, it's more of an anti-feature. Longer term, we need to
         figure out a clean way to rip this all out of process (G-C-A, etc).
       * Auto-completion using libvala for type information. Mostly taken
         from Anjuta, but there is a lot of performance/cleanup work that
         can be done to make this feel good.
      
      TODO
      
       * Code cleanup
       * Extract packages from the project build system
       * Make autocompletion list creation not so stupid with regards to lists
       * Symbol tree support
       * goto definition, etc
       * A highlighter based on the AST
      b259bda5
  14. 13 Jul, 2015 1 commit
    • Christian Hergert's avatar
      plugins: massive refactor to use interfaces and plugins · b530baea
      Christian Hergert authored
      This commit moves many features from libide which were provided by
      extension points to instead be plugins. Doing so required changing
      how we perform our dependency injection. In particular, we want to
      be able to reload extensions when plugins are enabled/disabled.
      
      This is provided by IdeExtensionAdapter and IdeExtensionSetAdapter.
      
      IdeExtensionAdapter provides access to an extension that may be
      reloaded or changed during plugin loading based on a match key
      and value. The key should be an "X-Foo" style external data key
      in a libpeas plugin. The value is the value that should be matched.
      The key's value in the plugin file can have multiple values specified
      separated by a comma (,).
      
      This patch also lets us remove IdeLanguage, as it becomes fairly
      useless now that we can load things via plugins with match keys.
      Longer term, I'd like to cleanup IdeFile to subclass GtkSourceFile.
      
      I've started to put language specific stuff into "language pack"
      plugins.
      b530baea