/// <summary> /// Builds an overload candidate for parameter hinting. /// </summary> /// <returns>Overload candidate which contains return type, function name.</returns> /// <param name="resultItem">Result item. resultItem.CursorKind must be CXCursorKind.OverloadCandidate. </param> OverloadCandidate GetOverloadCandidate(CXCompletionResult resultItem) { var completionString = new CXCompletionString(resultItem.CompletionString); uint completionchunknum = clang.getNumCompletionChunks(completionString.Pointer); string ret = String.Empty; string nam = String.Empty; var parameters = new List <string> (); for (uint j = 0; j < completionchunknum; j++) { switch (clang.getCompletionChunkKind(completionString.Pointer, j)) { case CXCompletionChunkKind.ResultType: ret = clang.getCompletionChunkText(completionString.Pointer, j).ToString(); break; case CXCompletionChunkKind.Text: nam = clang.getCompletionChunkText(completionString.Pointer, j).ToString(); break; case CXCompletionChunkKind.CurrentParameter: case CXCompletionChunkKind.Placeholder: parameters.Add(clang.getCompletionChunkText(completionString.Pointer, j).ToString()); break; } } return(new OverloadCandidate(ret, nam, parameters)); }
// modified code of Michael Hutchinson from https://github.com/mhutch/cbinding/pull/1#discussion_r34485216 IEnumerable <ClangCompletionUnit> GetCompletionUnits(CXCompletionResult resultItem, Regex operatorFilter, bool fieldOrMethodMode) { var completionString = new CXCompletionString(resultItem.CompletionString); uint completionchunknum = clang.getNumCompletionChunks(completionString.Pointer); for (uint j = 0; j < completionchunknum; j++) { if (clang.getCompletionChunkKind(completionString.Pointer, j) != CXCompletionChunkKind.TypedText) { continue; } switch (resultItem.CursorKind) { case CXCursorKind.Destructor: case CXCursorKind.UnaryOperator: case CXCursorKind.BinaryOperator: case CXCursorKind.CompoundAssignOperator: continue; } if (fieldOrMethodMode) { switch (resultItem.CursorKind) { case CXCursorKind.ClassDecl: case CXCursorKind.StructDecl: continue; } } string realstring = clang.getCompletionChunkText(completionString.Pointer, j).ToString(); if (operatorFilter.IsMatch(realstring)) { continue; } uint priority = clang.getCompletionPriority(completionString.Pointer); yield return(new ClangCompletionUnit(resultItem, realstring, priority)); } }
internal static extern CXString clang_getCompletionParent(CXCompletionString completion_string, CXCursorKindPtr kind);
internal static extern CXString clang_getCompletionAnnotation(CXCompletionString completion_string, uint annotation_number);
internal static extern uint clang_getCompletionNumAnnotations(CXCompletionString completion_string);
internal static extern AvailabilityKind clang_getCompletionAvailability(CXCompletionString completion_string);
internal static extern CXString clang_getCompletionChunkText(CXCompletionString cs, uint chunkNumber);
internal static extern uint clang_getNumCompletionChunks(CXCompletionString completion_string);
internal unsafe static extern CXString clang_getCompletionParent(CXCompletionString cs, out CursorKind kind);
internal static extern CXString clang_getCompletionAnnotation(CXCompletionString cs, uint annotationNumber);
internal static extern uint clang_getCompletionNumAnnotations(CXCompletionString cs);
internal static extern AvailabilityKind clang_getCompletionAvailability(CXCompletionString cs);
internal static extern uint clang_getCompletionPriority(CXCompletionString cs);
internal static extern uint clang_getNumCompletionChunks(CXCompletionString cs);
internal static extern CXCompletionString clang_getCompletionChunkCompletionString(CXCompletionString cs, uint chunk_number);
internal static extern CXString clang_getCompletionBriefComment(CXCompletionString completion_string);
internal static extern CXCompletionString clang_getCompletionChunkCompletionString(CXCompletionString completion_string, uint chunk_number);
internal static extern CXString clang_getCompletionBriefComment(CXCompletionString cs);
internal static extern uint clang_getCompletionPriority(CXCompletionString completion_string);
internal static extern ChunkKind clang_getCompletionChunkKind(CXCompletionString cs, uint chunkNumber);