コード例 #1
0
        public static void UseCommitCharactersFrom(
            this VSInternalCompletionItem completionItem,
            RazorCompletionItem razorCompletionItem,
            VSInternalClientCapabilities clientCapabilities)
        {
            if (razorCompletionItem.CommitCharacters == null || razorCompletionItem.CommitCharacters.Count == 0)
            {
                return;
            }

            var supportsVSExtensions = clientCapabilities?.SupportsVisualStudioExtensions ?? false;

            if (supportsVSExtensions)
            {
                var vsCommitCharacters = razorCompletionItem
                                         .CommitCharacters
                                         .Select(c => new VSInternalCommitCharacter()
                {
                    Character = c.Character, Insert = c.Insert
                })
                                         .ToArray();
                completionItem.VsCommitCharacters = vsCommitCharacters;
            }
            else
            {
                completionItem.CommitCharacters = razorCompletionItem
                                                  .CommitCharacters
                                                  .Select(c => c.Character)
                                                  .ToArray();
            }
        }
コード例 #2
0
        public static bool TryGetCompletionListResultId(this VSInternalCompletionItem completion, [NotNullWhen(true)] out int?resultId)
        {
            if (completion is null)
            {
                throw new ArgumentNullException(nameof(completion));
            }

            if (completion.Data is JObject data && data.ContainsKey(ResultIdKey))
            {
                resultId = data[ResultIdKey]?.ToObject <int>();
                return(resultId is not null);
            }

            resultId = default;
            return(false);
        }
コード例 #3
0
        public static VSInternalCompletionItem CreateWithCompletionListResultId(
            this VSInternalCompletionItem completionItem,
            long resultId)
        {
            if (completionItem is null)
            {
                throw new ArgumentNullException(nameof(completionItem));
            }

            var data = completionItem.Data as JObject ?? new JObject();

            data[ResultIdKey]   = resultId;
            completionItem.Data = data;

            return(completionItem);
        }
コード例 #4
0
        private static CompletionItem CreateCompletionItem(XamlCompletionItem xamlCompletion, DocumentId documentId, SourceText text, Position position, TextDocumentIdentifier textDocument, Dictionary <XamlCompletionKind, ImmutableArray <VSInternalCommitCharacter> > commitCharactersCach)
        {
            var item = new VSInternalCompletionItem
            {
                Label = xamlCompletion.DisplayText,
                VsCommitCharacters = GetCommitCharacters(xamlCompletion, commitCharactersCach),
                Detail             = xamlCompletion.Detail,
                InsertText         = xamlCompletion.InsertText,
                Preselect          = xamlCompletion.Preselect.GetValueOrDefault(),
                SortText           = xamlCompletion.SortText,
                FilterText         = xamlCompletion.FilterText,
                Kind             = GetItemKind(xamlCompletion.Kind),
                Description      = xamlCompletion.Description,
                Icon             = xamlCompletion.Icon,
                InsertTextFormat = xamlCompletion.IsSnippet ? InsertTextFormat.Snippet : InsertTextFormat.Plaintext,
                Data             = new CompletionResolveData {
                    ProjectGuid = documentId.ProjectId.Id, DocumentGuid = documentId.Id, Position = position, DisplayText = xamlCompletion.DisplayText
                }
            };

            if (xamlCompletion.Span.HasValue)
            {
                item.TextEdit = new TextEdit
                {
                    NewText = xamlCompletion.InsertText,
                    Range   = ProtocolConversions.LinePositionToRange(text.Lines.GetLinePositionSpan(xamlCompletion.Span.Value))
                };
            }

            if (xamlCompletion.EventDescription.HasValue)
            {
                item.Command = new Command()
                {
                    CommandIdentifier = StringConstants.CreateEventHandlerCommand,
                    Arguments         = new object[] { textDocument, xamlCompletion.EventDescription },
                    Title             = CreateEventHandlerCommandTitle
                };
            }
            else if (xamlCompletion.RetriggerCompletion)
            {
                // Retriger completion after commit
                item.Command = s_retriggerCompletionCommand;
            }

            return(item);
        }
コード例 #5
0
        private static LSP.VSInternalCompletionItem CreateResolvedCompletionItem(
            VSInternalCompletionItem completionItem,
            ClassifiedTextElement description,
            string detail,
            string documentation)
        {
            completionItem.Detail = detail;
            if (documentation != null)
            {
                completionItem.Documentation = new LSP.MarkupContent()
                {
                    Kind  = LSP.MarkupKind.PlainText,
                    Value = documentation
                };
            }

            completionItem.Description = description;
            return(completionItem);
        }