• 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