Пример #1
0
        public Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control)
        {
            var length = control.Editor.Document.TextLength;
            var caret  = control.Editor.CaretOffset;

            var text = control.Editor.Text;

            return(_sql.Completions(text.Substring(0, caret), control.Document, caret, null)
                   .UiPromise(control)
                   .Convert(data =>
            {
                if (length != control.Editor.Document.TextLength ||
                    caret != control.Editor.CaretOffset)
                {
                    ShowCompletions(control);
                    return null;
                }

                if (data.Items.Any())
                {
                    var items = data.Items.ToArray();
                    var contextItems = items.OfType <IContextCompletions>();
                    foreach (var contextItem in contextItems)
                    {
                        contextItem.SetContext(this, control);
                    }

                    control.ShowCompletionWindow(items, data.Overlap);
                }

                return data;
            }));
        }
        public override void HandleTextEntered(EditorWinForm control, string insertText)
        {
            switch (insertText)
            {
            case ">":
                var doc         = control.Editor.Document;
                var caret       = control.Editor.CaretOffset;
                var text        = doc.GetText(0, caret);
                var elementName = XmlParser.GetOpenElement(text);
                if (!string.IsNullOrEmpty(elementName))
                {
                    var insert = "</" + elementName + ">";
                    if (!doc.GetText(caret, doc.TextLength - caret).Trim().StartsWith(insert))
                    {
                        doc.Insert(caret, insert, AnchorMovementType.BeforeInsertion);
                    }
                }
                break;

            default:
                var result = HandleTextEntered(control.Editor.Document, control.Editor.CaretOffset, insertText);
                if (result.Any())
                {
                    control.ShowCompletionWindow(result, 0);
                }
                break;
            }
        }
Пример #3
0
        public override IPromise <CompletionContext> ShowCompletions(EditorWinForm control)
        {
            var length = control.Editor.Document.TextLength;
            var caret  = control.Editor.CaretOffset;

            if (control.Editor.CaretOffset >= 2 && control.Editor.Document.GetText(control.Editor.CaretOffset - 2, 2) == "<!")
            {
                var context = new CompletionContext()
                {
                    Items = new ICompletionData[] {
                        new BasicCompletionData()
                        {
                            Text        = "--",
                            Content     = "-- (Comment)",
                            Action      = () => "---->",
                            CaretOffset = -3
                        },
                        new BasicCompletionData()
                        {
                            Text        = "[CDATA[",
                            Action      = () => "[CDATA[]]>",
                            CaretOffset = -3
                        }
                    }
                };

                control.ShowCompletionWindow(context.Items, context.Overlap);

                return(Promises.Resolved(context));
            }
            else
            {
                return(this.GetCompletions(control.Document, control.Editor.CaretOffset, this.SoapAction)
                       .ToPromise()
                       .UiPromise(control)
                       .Convert(data =>
                {
                    if (length != control.Editor.Document.TextLength ||
                        caret != control.Editor.CaretOffset)
                    {
                        ShowCompletions(control);
                        return null;
                    }

                    if (data?.Items.Any() == true)
                    {
                        var items = data.Items.ToArray();
                        var contextItems = items.OfType <IContextCompletions>();
                        foreach (var contextItem in contextItems)
                        {
                            contextItem.SetContext(this, control);
                        }

                        control.ShowCompletionWindow(items, data.Overlap);
                    }

                    return data;
                }));
            }
        }
Пример #4
0
        public override void HandleTextEntered(EditorWinForm control, string insertText)
        {
            var text = control.Editor.Text.Substring(0, control.Editor.CaretOffset);

            switch (insertText[0])
            {
            case ':':
                if (XmlParser.IsInsideAttributeValue(text, text.Length))
                {
                    var namespaces = XmlParser.GetNamespacesInScope(text);
                    var i          = text.Length - 2;
                    while (Char.IsLetterOrDigit(text[i]) || text[i] == '_')
                    {
                        i--;
                    }
                    string namespaceUri;
                    if (namespaces != null && namespaces.TryGetValue(text.Substring(i + 1).TrimEnd(':'), out namespaceUri))
                    {
                        var methods = ArasXsltExtensions.GetExtensionMethods(namespaceUri).OrderBy(m => m.Name);
                        control.ShowCompletionWindow(from m in methods
                                                     group m by m.Name into Group
                                                     select new BasicCompletionData(Group.Key, Group.Select(MethodToString).Aggregate((p, c) => p + Environment.NewLine + c)), 0);
                    }
                }
                break;

            default:
                base.HandleTextEntered(control, insertText);
                break;
            }
        }
    public override void HandleTextEntered(EditorWinForm control, string insertText)
    {
      var text = control.Editor.Text.Substring(0, control.Editor.CaretOffset);

      switch (insertText[0])
      {
        case ':':
          if (XmlParser.IsInsideAttributeValue(text, text.Length))
          {
            var namespaces = XmlParser.GetNamespacesInScope(text);
            var i = text.Length - 2;
            while (Char.IsLetterOrDigit(text[i]) || text[i] == '_') i--;
            string namespaceUri;
            if (namespaces != null && namespaces.TryGetValue(text.Substring(i + 1).TrimEnd(':'), out namespaceUri))
            {
              var methods = ArasXsltExtensions.GetExtensionMethods(namespaceUri).OrderBy(m => m.Name);
              control.ShowCompletionWindow(from m in methods
                                           group m by m.Name into Group
                                           select new BasicCompletionData(Group.Key, Group.Select(MethodToString).Aggregate((p, c) => p + Environment.NewLine + c)), 0);
            }
          }
          break;
        default:
          base.HandleTextEntered(control, insertText);
          break;
      }
    }
Пример #6
0
    public override void HandleTextEntered(EditorWinForm control, string insertText)
    {
      switch (insertText)
      {
        case "\\":
          ShowCompletions(control);
          break;
        case "{":
        case "(":
        case "[":
          if (_currentInsight != null)
            _currentInsight.Hide();

          var overload = new OverloadInsightWindow(control.Editor.TextArea);
          if (insertText == "{")
            overload.Provider = _quantifiers;
          else if (insertText == "(")
            overload.Provider = _groups;
          else
            overload.Provider = _charClass;
          overload.Show();
          _currentInsight = overload;
          break;
        case "}":
        case ")":
        case "]":
          if (_currentInsight != null)
            _currentInsight.Hide();

          _currentInsight = null;
          break;
      }
    }
Пример #7
0
    public override IPromise<CompletionContext> ShowCompletions(EditorWinForm control)
    {
      var length = control.Editor.Document.TextLength;
      var caret = control.Editor.CaretOffset;

      if (control.Editor.CaretOffset >= 2 && control.Editor.Document.GetText(control.Editor.CaretOffset - 2, 2) == "<!")
      {
        var context = new CompletionContext()
        {
          Items = new ICompletionData[] {
            new BasicCompletionData() {
              Text = "--",
              Content = "-- (Comment)",
              Action = () => "---->",
              CaretOffset = -3
            },
            new BasicCompletionData() {
              Text = "[CDATA[",
              Action = () => "[CDATA[]]>",
              CaretOffset = -3
            }
          }
        };

        control.ShowCompletionWindow(context.Items, context.Overlap);

        return Promises.Resolved(context);
      }
      else
      {
        return this.GetCompletions(control.Document, control.Editor.CaretOffset, this.SoapAction)
          .ToPromise()
          .UiPromise(control)
          .Convert(data => {
            if (length != control.Editor.Document.TextLength
              || caret != control.Editor.CaretOffset)
            {
              ShowCompletions(control);
              return null;
            }

            if (data.Items.Any())
            {
              var items = data.Items.ToArray();
              var contextItems = items.OfType<IContextCompletions>();
              foreach (var contextItem in contextItems)
              {
                contextItem.SetContext(this, control);
              }

              control.ShowCompletionWindow(items, data.Overlap);
            }

            return data;
          });
      }

    }
Пример #8
0
 public override void HandleTextEntered(EditorWinForm control, string insertText)
 {
     switch (insertText)
     {
     case "\\":
         ShowCompletions(control);
         break;
     }
 }
 public override void HandleTextEntered(EditorWinForm control, string insertText)
 {
   switch (insertText)
   {
     case "\\":
       ShowCompletions(control);
       break;
   }
 }
Пример #10
0
 public void HandleTextEntered(EditorWinForm control, string insertText)
 {
   switch (insertText)
   {
     case " ":
     case ",":
     case "(":
     case ".":
       _sql.CurrentTextArea = control.Editor.TextArea;
       ShowCompletions(control);
       break;
   }
 }
Пример #11
0
 public void HandleTextEntered(EditorWinForm control, string insertText)
 {
     switch (insertText)
     {
     case " ":
     case ",":
     case "(":
     case ".":
         _sql.CurrentTextArea = control.Editor.TextArea;
         ShowCompletions(control);
         break;
     }
 }
Пример #12
0
        public override void HandleTextEntered(EditorWinForm control, string insertText)
        {
            if (_isInitialized)
            {
                switch (insertText)
                {
                case "'":
                case "\"":
                case " ":
                case "<":
                case ",":
                case "(":
                case ".":
                case "!":
                case "|":
                case "[":
                    _sql.CurrentTextArea = control.Editor.TextArea;
                    ShowCompletions(control)
                    .Done(data =>
                    {
                        if (data != null && data.IsXmlTag && !data.Items.Any() &&
                            control.Editor.CaretOffset < control.Editor.Document.TextLength)
                        {
                            var doc   = control.Editor.TextArea.Document;
                            var quote = doc.GetCharAt(doc.LastIndexOf('=', 0, control.Editor.CaretOffset) + 1);
                            if (insertText[0] == quote && quote == doc.GetCharAt(control.Editor.CaretOffset))
                            {
                                doc.Remove(control.Editor.CaretOffset, 1);
                            }
                        }
                    });
                    break;

                case ">":
                    var endTag = this.LastOpenTag(control.Document.CreateSnapshot(0, control.Editor.CaretOffset));
                    if (!string.IsNullOrEmpty(endTag))
                    {
                        var insert = "</" + endTag + ">";
                        if (!control.Editor.Text.Substring(control.Editor.CaretOffset).StartsWith(insert))
                        {
                            control.Editor.Document.Insert(control.Editor.CaretOffset, insert, AnchorMovementType.BeforeInsertion);
                            control.HideCompletionWindow();
                        }
                    }
                    ShowCompletions(control);
                    break;
                }
            }
        }
Пример #13
0
 public override void HandleTextEntered(EditorWinForm control, string insertText)
 {
   if (_isInitialized)
   {
     switch (insertText)
     {
       case "'":
       case "\"":
       case " ":
       case "<":
       case ",":
       case "(":
       case ".":
       case "!":
         _sql.CurrentTextArea = control.Editor.TextArea;
         ShowCompletions(control)
           .Done(data =>
           {
             if (data != null && data.IsXmlTag && !data.Items.Any()
               && control.Editor.CaretOffset < control.Editor.Document.TextLength)
             {
               var doc = control.Editor.TextArea.Document;
               var quote = doc.GetCharAt(doc.LastIndexOf('=', 0, control.Editor.CaretOffset) + 1);
               if (insertText[0] == quote && quote == doc.GetCharAt(control.Editor.CaretOffset))
               {
                 doc.Remove(control.Editor.CaretOffset, 1);
               }
             }
           });
         break;
       case ">":
         var endTag = this.LastOpenTag(control.Document.CreateSnapshot(0, control.Editor.CaretOffset));
         if (!string.IsNullOrEmpty(endTag))
         {
           var insert = "</" + endTag + ">";
           if (!control.Editor.Text.Substring(control.Editor.CaretOffset).StartsWith(insert))
           {
             control.Editor.Document.Insert(control.Editor.CaretOffset, insert, AnchorMovementType.BeforeInsertion);
             control.HideCompletionWindow();
           }
         }
         ShowCompletions(control);
         break;
     }
   }
 }
Пример #14
0
        public override void HandleTextEntered(EditorWinForm control, string insertText)
        {
            switch (insertText)
            {
            case "\\":
                ShowCompletions(control);
                break;

            case "{":
            case "(":
            case "[":
                if (_currentInsight != null)
                {
                    _currentInsight.Hide();
                }

                var overload = new OverloadInsightWindow(control.Editor.TextArea);
                if (insertText == "{")
                {
                    overload.Provider = _quantifiers;
                }
                else if (insertText == "(")
                {
                    overload.Provider = _groups;
                }
                else
                {
                    overload.Provider = _charClass;
                }
                overload.Show();
                _currentInsight = overload;
                break;

            case "}":
            case ")":
            case "]":
                if (_currentInsight != null)
                {
                    _currentInsight.Hide();
                }

                _currentInsight = null;
                break;
            }
        }
    public override Innovator.Client.IPromise<CompletionContext> ShowCompletions(EditorWinForm control)
    {
      var length = control.Editor.Document.TextLength;
      var caret = control.Editor.CaretOffset;
      var data = new CompletionContext();

      if (caret > 0)
      {
        string[][] completions = null;
        if (control.Editor.Document.GetCharAt(caret - 1) == '\\')
          completions = _completionInfo;
        else if (control.Editor.Document.GetCharAt(caret - 1) == '$')
          completions = _replacementTypes;

        if (completions != null)
        {
          data.Items = completions
            .OrderBy(i => i[0].ToLowerInvariant())
            .ThenBy(i => i[1])
            .Select(i => new BasicCompletionData() {
              Content = GetSpan(new Run(i[0] + " "), new Run(i[1])
              {
                Foreground = Brushes.Gray
              }),
              Text = i[0],
              Action = () => i[0]
            });
        }
      }

      if (data.Items.Any())
      {
        var items = data.Items.ToArray();
        var contextItems = items.OfType<IContextCompletions>();
        foreach (var contextItem in contextItems)
        {
          contextItem.SetContext(this, control);
        }

        control.ShowCompletionWindow(items, data.Overlap);
      }

      return Promises.Resolved(data);
    }
Пример #16
0
    public override Innovator.Client.IPromise<CompletionContext> ShowCompletions(EditorWinForm control)
    {
      var length = control.Editor.Document.TextLength;
      var caret = control.Editor.CaretOffset;
      var data = new CompletionContext();

      if (caret > 0 && control.Editor.Document.GetCharAt(caret - 1) == '\\')
      {
        data.Items = _completionInfo
          .OrderBy(i => i[0].ToLowerInvariant())
          .ThenBy(i => i[1])
          .Select(i => new BasicCompletionData() {
            Content = FormatText.Span(FormatText.Text(i[0] + " "), FormatText.MutedText(i[1])),
            Text = i[0],
            Action = () => i[0]
          });
      }

      if (data.Items.Any())
      {
        var items = data.Items.ToArray();
        var contextItems = items.OfType<IContextCompletions>();
        foreach (var contextItem in contextItems)
        {
          contextItem.SetContext(this, control);
        }

        control.ShowCompletionWindow(items, data.Overlap);
      }

      return Promises.Resolved(data);
    }
Пример #17
0
        public override Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control)
        {
            var length = control.Editor.Document.TextLength;
            var caret  = control.Editor.CaretOffset;
            var data   = new CompletionContext();

            if (caret > 0)
            {
                string[][] completions = null;
                if (control.Editor.Document.GetCharAt(caret - 1) == '\\')
                {
                    completions = _completionInfo;
                }
                else if (control.Editor.Document.GetCharAt(caret - 1) == '$')
                {
                    completions = _replacementTypes;
                }

                if (completions != null)
                {
                    data.Items = completions
                                 .OrderBy(i => i[0].ToLowerInvariant())
                                 .ThenBy(i => i[1])
                                 .Select(i => new BasicCompletionData()
                    {
                        Content = GetSpan(new Run(i[0] + " "), new Run(i[1])
                        {
                            Foreground = Brushes.Gray
                        }),
                        Text   = i[0],
                        Action = () => i[0]
                    });
                }
            }

            if (data.Items.Any())
            {
                var items        = data.Items.ToArray();
                var contextItems = items.OfType <IContextCompletions>();
                foreach (var contextItem in contextItems)
                {
                    contextItem.SetContext(this, control);
                }

                control.ShowCompletionWindow(items, data.Overlap);
            }

            return(Promises.Resolved(data));
        }
 public virtual Innovator.Client.IPromise<CompletionContext> ShowCompletions(EditorWinForm control)
 {
   return Innovator.Client.Promises.Resolved(new CompletionContext());
 }
 public virtual void HandleTextEntered(EditorWinForm control, string insertText)
 {
   // Do nothing
 }
Пример #20
0
 public virtual Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control)
 {
     return(Innovator.Client.Promises.Resolved(new CompletionContext()));
 }
Пример #21
0
 public virtual void HandleTextEntered(EditorWinForm control, string insertText)
 {
     // Do nothing
 }
 public override void HandleTextEntered(EditorWinForm control, string insertText)
 {
   switch (insertText)
   {
     case ">":
       var doc = control.Editor.Document;
       var caret = control.Editor.CaretOffset;
       var text = doc.GetText(0, caret);
       var elementName = XmlParser.GetOpenElement(text);
       if (!string.IsNullOrEmpty(elementName))
       {
         var insert = "</" + elementName + ">";
         if (!doc.GetText(caret, doc.TextLength - caret).Trim().StartsWith(insert))
         {
           doc.Insert(caret, insert, AnchorMovementType.BeforeInsertion);
         }
       }
       break;
     default:
       var result = HandleTextEntered(control.Editor.Document, control.Editor.CaretOffset, insertText);
       if (result.Any())
       {
         control.ShowCompletionWindow(result, 0);
       }
       break;
   }
 }
Пример #23
0
            public override Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control)
            {
                var context = new CompletionContext();

                try
                {
                    var caret     = control.Editor.CaretOffset;
                    var text      = control.Editor.Text;
                    var current   = text.Substring(0, caret);
                    var lastMacro = current.LastIndexOf('$');
                    var preMacro  = lastMacro > 0 ? current.Substring(0, lastMacro).Trim() : current;

                    if (lastMacro >= 0 && current.LastIndexOf(')') < lastMacro)
                    {
                        var overlap = current.Substring(lastMacro);
                        var filter  = overlap.TrimStart('$', '(');
                        var items   = Macros.Select(m => new BasicCompletionData()
                        {
                            Text   = m,
                            Action = () => "(" + m + ")",
                            Image  = Icons.Operator16.Wpf
                        })
                                      .Where(i => i.Text.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0)
                                      .OrderBy(i => i.Text);
                        context.Items = items;
                        control.ShowCompletionWindow(items, overlap.Length - 1);
                    }
                    else if (File.Exists(preMacro))
                    {
                        var items = Macros.Select(m => new BasicCompletionData()
                        {
                            Text   = m,
                            Action = () => "$(" + m + ")",
                            Image  = Icons.Operator16.Wpf
                        })
                                    .OrderBy(i => i.Text);
                        context.Items = items;
                        control.ShowCompletionWindow(items, 0);
                    }
                    else if (current.Length >= 3)
                    {
                        var dir     = (current.EndsWith("/") || current.EndsWith("\\")) ? current : Path.GetDirectoryName(current) + "\\";
                        var overlap = current.Length > dir.Length ? current.Substring(dir.Length) : string.Empty;
                        IEnumerable <ICompletionData> items;

                        if (dir.StartsWith(@"\\") && dir.Trim('\\').IndexOf(@"\") < 0)
                        {
                            items = ShareCollection.GetShares(dir)
                                    .Select(s => new BasicCompletionData()
                            {
                                Text  = s.NetName,
                                Image = Icons.Folder16.Wpf
                            });
                        }
                        else
                        {
                            items = new DirectoryInfo(dir).GetFileSystemInfos()
                                    .Select(e => new BasicCompletionData()
                            {
                                Text  = e.Name,
                                Image = (e.Attributes & FileAttributes.Directory) > 0 ? Icons.Folder16.Wpf : Icons.EnumValue16.Wpf
                            });
                        }
                        items = items
                                .Where(i => i.Text.IndexOf(overlap, StringComparison.OrdinalIgnoreCase) >= 0)
                                .OrderBy(i => i.Text);
                        context.Items = items;
                        control.ShowCompletionWindow(items, overlap.Length);
                    }
                }
                catch (IOException) { }
                catch (ArgumentException) { }
                return(Innovator.Client.Promises.Resolved(context));
            }
    public override void HandleTextEntered(EditorWinForm control, string insertText)
    {
      var text = control.Editor.Text.Substring(0, control.Editor.CaretOffset);
      ICompletionData[] result = null;
      IEnumerable<XmlElementPath> parentPaths;
      switch (insertText)
      {
        case "=":
          // Namespace intellisense.
          if (XmlParser.IsNamespaceDeclaration(text, text.Length))
          {
            result = schemaCompletionDataItems.GetNamespaceCompletionData();
          }
          break;
        case "<":
          // Child element intellisense.
          parentPaths = XmlParser.GetParentElementPaths(text);
          if (parentPaths.Any())
          {
            foreach (var path in parentPaths)
            {
              result = GetChildElementCompletionData(path);
              if (result.Any()) break;
            }
          }
          else if (defaultSchemaCompletionData != null)
          {
            result = defaultSchemaCompletionData.GetElementCompletionData(defaultNamespacePrefix).ToArray();
          }
          break;

        case " ":
          // Attribute intellisense.
          if (!XmlParser.IsInsideAttributeValue(text, text.Length))
          {
            XmlElementPath path = XmlParser.GetActiveElementStartPath(text, text.Length);
            if (path.Elements.Count > 0)
            {
              result = GetAttributeCompletionData(path);
            }
          }
          break;
        case ">":
          var elementName = XmlParser.GetOpenElement(text);
          if (!string.IsNullOrEmpty(elementName))
          {
            var insert = "</" + elementName + ">";
            if (!control.Editor.Text.Substring(control.Editor.CaretOffset).Trim().StartsWith(insert))
            {
              control.Editor.Document.Insert(control.Editor.CaretOffset, insert, AnchorMovementType.BeforeInsertion);
            }
          }
          break;
        default:

          // Attribute value intellisense.
          if (XmlParser.IsAttributeValueChar(insertText[0]))
          {
            string attributeName = XmlParser.GetAttributeName(text, text.Length);
            if (attributeName.Length > 0)
            {
              XmlElementPath elementPath = XmlParser.GetActiveElementStartPath(text, text.Length);
              if (elementPath.Elements.Count > 0)
              {
                //preSelection = insertText.ToString();
                result = GetAttributeValueCompletionData(elementPath, attributeName);
              }
            }
          }
          break;
      }

      if (result != null)
      {
        Array.Sort(result, (x, y) => x.Text.CompareTo(y.Text));
        control.ShowCompletionWindow(result, 0);
      }
    }
 public void SetContext(IEditorHelper parent, EditorWinForm control)
 {
   _parent = parent;
   _control = control;
 }
Пример #26
0
    public Innovator.Client.IPromise<CompletionContext> ShowCompletions(EditorWinForm control)
    {
      var length = control.Editor.Document.TextLength;
      var caret = control.Editor.CaretOffset;

      var text = control.Editor.Text;

      return _sql.Completions(text.Substring(0, caret), control.Document, caret, null)
        .UiPromise(control)
        .Convert(data =>
        {
          if (length != control.Editor.Document.TextLength
            || caret != control.Editor.CaretOffset)
          {
            ShowCompletions(control);
            return null;
          }

          if (data.Items.Any())
          {
            var items = data.Items.ToArray();
            var contextItems = items.OfType<IContextCompletions>();
            foreach (var contextItem in contextItems)
            {
              contextItem.SetContext(this, control);
            }

            control.ShowCompletionWindow(items, data.Overlap);
          }

          return data;
        });
    }
 public void SetContext(IEditorHelper parent, EditorWinForm control)
 {
     _parent  = parent;
     _control = control;
 }
Пример #28
0
        public override Innovator.Client.IPromise <CompletionContext> ShowCompletions(EditorWinForm control)
        {
            var length = control.Editor.Document.TextLength;
            var caret  = control.Editor.CaretOffset;
            var data   = new CompletionContext();

            if (caret > 0 && control.Editor.Document.GetCharAt(caret - 1) == '\\')
            {
                data.Items = _completionInfo
                             .OrderBy(i => i[0].ToLowerInvariant())
                             .ThenBy(i => i[1])
                             .Select(i => new BasicCompletionData()
                {
                    Content = FormatText.Span(FormatText.Text(i[0] + " "), FormatText.MutedText(i[1])),
                    Text    = i[0],
                    Action  = () => i[0]
                });
            }

            if (data.Items.Any())
            {
                var items        = data.Items.ToArray();
                var contextItems = items.OfType <IContextCompletions>();
                foreach (var contextItem in contextItems)
                {
                    contextItem.SetContext(this, control);
                }

                control.ShowCompletionWindow(items, data.Overlap);
            }

            return(Promises.Resolved(data));
        }