예제 #1
0
        protected static async Task <LSP.VSCompletionItem> CreateCompletionItemAsync(
            string label,
            LSP.CompletionItemKind kind,
            string[] tags,
            LSP.CompletionParams request,
            Document document,
            bool preselect = false,
            ImmutableArray <char>?commitCharacters = null,
            LSP.TextEdit?textEdit = null,
            string?insertText     = null,
            string?sortText       = null,
            string?filterText     = null,
            long resultId         = 0
            )
        {
            var position = await document
                           .GetPositionFromLinePositionAsync(
                ProtocolConversions.PositionToLinePosition(request.Position),
                CancellationToken.None
                )
                           .ConfigureAwait(false);

            var completionTrigger = await ProtocolConversions
                                    .LSPToRoslynCompletionTriggerAsync(
                request.Context,
                document,
                position,
                CancellationToken.None
                )
                                    .ConfigureAwait(false);

            var item = new LSP.VSCompletionItem()
            {
                TextEdit         = textEdit,
                InsertText       = insertText,
                FilterText       = filterText ?? label,
                Label            = label,
                SortText         = sortText ?? label,
                InsertTextFormat = LSP.InsertTextFormat.Plaintext,
                Kind             = kind,
                Data             = JObject.FromObject(new CompletionResolveData()
                {
                    ResultId = resultId,
                }),
                Preselect = preselect
            };

            if (tags != null)
            {
                item.Icon = tags.ToImmutableArray().GetFirstGlyph().GetImageElement();
            }

            if (commitCharacters != null)
            {
                item.CommitCharacters = commitCharacters.Value.Select(c => c.ToString()).ToArray();
            }

            return(item);
        }
        protected static LSP.VSCompletionItem CreateCompletionItem(
            string insertText,
            LSP.CompletionItemKind kind,
            string[] tags,
            LSP.CompletionParams requestParameters,
            bool preselect = false,
            ImmutableArray <char>?commitCharacters = null,
            string?sortText = null,
            int resultId    = 0)
        {
            var item = new LSP.VSCompletionItem()
            {
                FilterText       = insertText,
                InsertText       = insertText,
                Label            = insertText,
                SortText         = sortText ?? insertText,
                InsertTextFormat = LSP.InsertTextFormat.Plaintext,
                Kind             = kind,
                Data             = JObject.FromObject(new CompletionResolveData()
                {
                    DisplayText       = insertText,
                    TextDocument      = requestParameters.TextDocument,
                    Position          = requestParameters.Position,
                    CompletionTrigger = ProtocolConversions.LSPToRoslynCompletionTrigger(requestParameters.Context),
                    ResultId          = resultId,
                }),
                Preselect = preselect
            };

            if (tags != null)
            {
                item.Icon = tags.ToImmutableArray().GetFirstGlyph().GetImageElement();
            }

            if (commitCharacters != null)
            {
                item.CommitCharacters = commitCharacters.Value.Select(c => c.ToString()).ToArray();
            }

            return(item);
        }