コード例 #1
0
        protected virtual void ApplyCodeCompletionData(CodeCompletionResult codeCompletionResult)
        {
            var textArea = codeEditor.TextEditor.TextArea;
            var document = codeEditor.TextEditor.Document;
            int offset   = codeEditor.TextEditor.CaretOffset;

            if (codeEditor.OverloadInsightWindow == null && codeCompletionResult.OverloadProvider != null)
            {
                var iw = codeEditor.OverloadInsightWindow = new OverloadInsightWindow(textArea);
                iw.Provider = codeCompletionResult.OverloadProvider;
                iw.Show();
                iw.Closed += (sender, args) => codeEditor.OverloadInsightWindow = null;
            }

            if (codeEditor.CompletionWindow == null && codeCompletionResult.CompletionData.Any())
            {
                var cw = codeEditor.CompletionWindow = new CompletionWindow(textArea);
                cw.CloseWhenCaretAtBeginning = true;
                cw.StartOffset -= codeCompletionResult.TriggerWordLength;
                cw.Closed      += (sender, args) => codeEditor.CompletionWindow = null;

                var data    = cw.CompletionList.CompletionData;
                var newData = codeCompletionResult.CompletionData.OrderBy(x => x.Text).ToArray();
                foreach (var completion in newData)
                {
                    data.Add(completion);
                }

                if (codeCompletionResult.TriggerWordLength > 0)
                {
                    cw.CompletionList.SelectItem(codeCompletionResult.TriggerWord);
                }

                cw.Show();
            }

            if (codeEditor.OverloadInsightWindow != null)
            {
                var iw       = codeEditor.OverloadInsightWindow;
                var provider = iw.Provider as IUpdatableOverloadProvider;
                if (provider != null)
                {
                    provider.Update(document, offset);
                    if (provider.RequestClose)
                    {
                        iw.Close();
                    }
                }
            }
        }
コード例 #2
0
    protected virtual void ApplyCodeCompletionData(CodeCompletionResult codeCompletionResult) {
      var textArea = codeEditor.TextEditor.TextArea;
      var document = codeEditor.TextEditor.Document;
      int offset = codeEditor.TextEditor.CaretOffset;

      if (codeEditor.OverloadInsightWindow == null && codeCompletionResult.OverloadProvider != null) {
        var iw = codeEditor.OverloadInsightWindow = new OverloadInsightWindow(textArea);
        iw.Provider = codeCompletionResult.OverloadProvider;
        iw.Show();
        iw.Closed += (sender, args) => codeEditor.OverloadInsightWindow = null;
      }

      if (codeEditor.CompletionWindow == null && codeCompletionResult.CompletionData.Any()) {
        var cw = codeEditor.CompletionWindow = new CompletionWindow(textArea);
        cw.CloseWhenCaretAtBeginning = true;
        cw.StartOffset -= codeCompletionResult.TriggerWordLength;
        cw.Closed += (sender, args) => codeEditor.CompletionWindow = null;

        var data = cw.CompletionList.CompletionData;
        var newData = codeCompletionResult.CompletionData.OrderBy(x => x.Text).ToArray();
        foreach (var completion in newData)
          data.Add(completion);

        if (codeCompletionResult.TriggerWordLength > 0)
          cw.CompletionList.SelectItem(codeCompletionResult.TriggerWord);

        cw.Show();
      }

      if (codeEditor.OverloadInsightWindow != null) {
        var iw = codeEditor.OverloadInsightWindow;
        var provider = iw.Provider as IUpdatableOverloadProvider;
        if (provider != null) {
          provider.Update(document, offset);
          if (provider.RequestClose) {
            iw.Close();
          }
        }
      }
    }
コード例 #3
0
    protected override CodeCompletionResult GetCodeCompletionResult(bool controlSpace) {
      var document = codeEditor.TextEditor.Document;
      int offset = codeEditor.TextEditor.CaretOffset;
      var result = new CodeCompletionResult();

      try {
        var completionContext = new CSharpCodeCompletionContext(document, offset, projectContent);
        var completionFactory = new CSharpCodeCompletionDataFactory(completionContext);
        var cce = new CSharpCompletionEngine(
          completionContext.Document,
          completionContext.CompletionContextProvider,
          completionFactory,
          completionContext.ProjectContent,
          completionContext.TypeResolveContextAtCaret
          );

        char completionChar = completionContext.Document.GetCharAt(completionContext.Offset - 1);
        int startPos, triggerWordLength;
        IEnumerable<ICompletionData> completionData;

        if (controlSpace) {
          if (!cce.TryGetCompletionWord(completionContext.Offset, out startPos, out triggerWordLength)) {
            startPos = completionContext.Offset;
            triggerWordLength = 0;
          }
          completionData = cce.GetCompletionData(startPos, true);
        } else {
          startPos = completionContext.Offset;
          if (char.IsLetterOrDigit(completionChar) || completionChar == '_') {
            if (startPos > 1 && char.IsLetterOrDigit(completionContext.Document.GetCharAt((startPos - 2))))
              return result;
            completionData = cce.GetCompletionData(startPos, false);
            triggerWordLength = 1;
          } else {
            completionData = cce.GetCompletionData(startPos, false);
            triggerWordLength = 0;
          }
        }

        result.TriggerWordLength = triggerWordLength;
        result.TriggerWord = completionContext.Document.GetText(completionContext.Offset - triggerWordLength, triggerWordLength);

        if (completionData.Any() && cce.AutoCompleteEmptyMatch) {
          foreach (var completion in completionData) {
            var cast = completion as CompletionData;
            if (cast != null) {
              cast.TriggerWord = result.TriggerWord;
              cast.TriggerWordLength = result.TriggerWordLength;
              result.CompletionData.Add(cast);
            }
          }
        }

        if (!controlSpace) {
          var pce = new CSharpParameterCompletionEngine(
            completionContext.Document,
            completionContext.CompletionContextProvider,
            completionFactory,
            completionContext.ProjectContent,
            completionContext.TypeResolveContextAtCaret
            );

          var parameterDataProvider = pce.GetParameterDataProvider(completionContext.Offset, completionChar);
          result.OverloadProvider = parameterDataProvider as IUpdatableOverloadProvider;
        }
      } catch {
        // ignore exceptions thrown during code completion
      }

      return result;
    }
コード例 #4
0
        protected override CodeCompletionResult GetCodeCompletionResult(bool controlSpace)
        {
            var document = codeEditor.TextEditor.Document;
            int offset   = codeEditor.TextEditor.CaretOffset;
            var result   = new CodeCompletionResult();

            try {
                var completionContext = new CSharpCodeCompletionContext(document, offset, projectContent);
                var completionFactory = new CSharpCodeCompletionDataFactory(completionContext);
                var cce = new CSharpCompletionEngine(
                    completionContext.Document,
                    completionContext.CompletionContextProvider,
                    completionFactory,
                    completionContext.ProjectContent,
                    completionContext.TypeResolveContextAtCaret
                    );

                char completionChar = completionContext.Document.GetCharAt(completionContext.Offset - 1);
                int  startPos, triggerWordLength;
                IEnumerable <ICompletionData> completionData;

                if (controlSpace)
                {
                    if (!cce.TryGetCompletionWord(completionContext.Offset, out startPos, out triggerWordLength))
                    {
                        startPos          = completionContext.Offset;
                        triggerWordLength = 0;
                    }
                    completionData = cce.GetCompletionData(startPos, true);
                }
                else
                {
                    startPos = completionContext.Offset;
                    if (char.IsLetterOrDigit(completionChar) || completionChar == '_')
                    {
                        if (startPos > 1 && char.IsLetterOrDigit(completionContext.Document.GetCharAt((startPos - 2))))
                        {
                            return(result);
                        }
                        completionData    = cce.GetCompletionData(startPos, false);
                        triggerWordLength = 1;
                    }
                    else
                    {
                        completionData    = cce.GetCompletionData(startPos, false);
                        triggerWordLength = 0;
                    }
                }

                result.TriggerWordLength = triggerWordLength;
                result.TriggerWord       = completionContext.Document.GetText(completionContext.Offset - triggerWordLength, triggerWordLength);

                if (completionData.Any() && cce.AutoCompleteEmptyMatch)
                {
                    foreach (var completion in completionData)
                    {
                        var cast = completion as CompletionData;
                        if (cast != null)
                        {
                            cast.TriggerWord       = result.TriggerWord;
                            cast.TriggerWordLength = result.TriggerWordLength;
                            result.CompletionData.Add(cast);
                        }
                    }
                }

                if (!controlSpace)
                {
                    var pce = new CSharpParameterCompletionEngine(
                        completionContext.Document,
                        completionContext.CompletionContextProvider,
                        completionFactory,
                        completionContext.ProjectContent,
                        completionContext.TypeResolveContextAtCaret
                        );

                    var parameterDataProvider = pce.GetParameterDataProvider(completionContext.Offset, completionChar);
                    result.OverloadProvider = parameterDataProvider as IUpdatableOverloadProvider;
                }
            } catch {
                // ignore exceptions thrown during code completion
            }

            return(result);
        }