AvalonStudio.Languages.CPlusPlus.CPlusPlusLanguageService.CodeCompleteAtAsync C# (CSharp) Method

CodeCompleteAtAsync() public method

public CodeCompleteAtAsync ( ISourceFile file, int line, int column, List unsavedFiles, string filter ) : Task>
file ISourceFile
line int
column int
unsavedFiles List
filter string
return Task>
        public async Task<List<CodeCompletionData>> CodeCompleteAtAsync(ISourceFile file, int line, int column,
            List<UnsavedFile> unsavedFiles, string filter)
        {
            var clangUnsavedFiles = new List<ClangUnsavedFile>();

            foreach (var unsavedFile in unsavedFiles)
            {
                clangUnsavedFiles.Add(new ClangUnsavedFile(unsavedFile.FileName, unsavedFile.Contents));
            }

            var result = new List<CodeCompletionData>();

            await clangAccessJobRunner.InvokeAsync(() =>
            {
                var translationUnit = GetAndParseTranslationUnit(file, clangUnsavedFiles);

                var completionResults = translationUnit.CodeCompleteAt(file.Location, line, column, clangUnsavedFiles.ToArray(),
                    CodeCompleteFlags.IncludeBriefComments | CodeCompleteFlags.IncludeMacros | CodeCompleteFlags.IncludeCodePatterns);
                completionResults.Sort();

                foreach (var codeCompletion in completionResults.Results)
                {
                    var typedText = string.Empty;

                    var hint = string.Empty;

                    foreach (var chunk in codeCompletion.CompletionString.Chunks)
                    {
                        if (chunk.Kind == CompletionChunkKind.TypedText)
                        {
                            typedText = chunk.Text;
                        }

                        hint += chunk.Text;

                        switch (chunk.Kind)
                        {
                            case CompletionChunkKind.LeftParen:
                            case CompletionChunkKind.LeftAngle:
                            case CompletionChunkKind.LeftBrace:
                            case CompletionChunkKind.LeftBracket:
                            case CompletionChunkKind.RightAngle:
                            case CompletionChunkKind.RightBrace:
                            case CompletionChunkKind.RightBracket:
                            case CompletionChunkKind.RightParen:
                            case CompletionChunkKind.Placeholder:
                            case CompletionChunkKind.Comma:
                                break;

                            default:
                                hint += " ";
                                break;
                        }
                    }

                    if (filter == string.Empty || typedText.StartsWith(filter))
                    {
                        result.Add(new CodeCompletionData
                        {
                            Suggestion = typedText,
                            Priority = codeCompletion.CompletionString.Priority,
                            Kind = FromClangKind(codeCompletion.CursorKind),
                            Hint = hint,
                            BriefComment = codeCompletion.CompletionString.BriefComment
                        });
                    }
                }

                completionResults.Dispose();
            });

            return result;
        }