public ResultSet GetResults(string file, int line, int column, CompletionSelection selection) { ResultSet resultSet = new ResultSet(); LibClang.TranslationUnit tu = _index.FindTranslationUnit(_sourceFile); if (tu == null) return null; //convert unsaved files List<Tuple<string, string>> unsavedFiles = new List<Tuple<string, string>>(); foreach(var item in _unsavedFiles.UnsavedFiles) { unsavedFiles.Add(new Tuple<string, string>(item.Path.Str, item.Content)); } LibClang.CodeCompletion.Results results = tu.CodeCompleteAt(file, line, column, unsavedFiles); if (results == null || results.Items.Count() == 0) return null; foreach (LibClang.CodeCompletion.Result r in results.Items.OrderBy(item => item.CompletionPriority)) { resultSet.Add(new CompletionData(r, selection)); } return resultSet; }
/// <summary> /// /// </summary> /// <param name="file"></param> /// <param name="triggerWord">Initial text to be selected in the completion window. line and col should point to the start of this word</param> /// <param name="line"></param> /// <param name="col"></param> public void BeginSelection(int offset) { if (_currentSelection != null) return; string triggerWord = ExtractTriggerWord(offset, out offset); int line, col; if (!_sourceDoc.GetLineAndColumnForOffset(offset, out line, out col)) return; CompletionContext context = new CompletionContext { Line = line, Column = col, Offset = offset, Path = _sourceDoc.File.Path, ResultProvider = _resulsProvider, TextArea = _textArea, TriggerWord = triggerWord, Callback = delegate(LibClang.CodeCompletion.Result selection, ISegment completionSegment, EventArgs insertionRequestEventArgs) { int caretLoc; int startOffset = completionSegment.Offset; string s = GetInsertionText(selection, insertionRequestEventArgs, out caretLoc); _textArea.Document.Replace(completionSegment, s); if (caretLoc != -1) { _textArea.Caret.Offset = startOffset + caretLoc; } } }; _currentSelection = CompletionSelection.Create(context, delegate { _currentSelection = null; }); }
public CompletionData(LibClang.CodeCompletion.Result r, CompletionSelection selection) { _result = r; _selection = selection; }
public OverloadProvider(LibClang.CodeCompletion.Result r, CompletionSelection selection) { _result = r; _selection = selection; }