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(); } } } }
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(); } } } }
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; }
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); }