Пример #1
0
        private static CompletionItem CreateCompletionItem(XamlCompletionItem xamlCompletion, DocumentId documentId, SourceText text, Position position)
        {
            var item = new VSCompletionItem
            {
                Label            = xamlCompletion.DisplayText,
                CommitCharacters = xamlCompletion.CommitCharacters,
                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,
                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))
                };
            }

            return(item);
        }
Пример #2
0
        private static CompletionItem CreateCompletionItem(
            XamlCompletionItem xamlCompletion,
            DocumentId documentId,
            SourceText text,
            Position position,
            TextDocumentIdentifier textDocument
            )
        {
            var item = new VSCompletionItem
            {
                Label            = xamlCompletion.DisplayText,
                CommitCharacters = xamlCompletion.CommitCharacters,
                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,
                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
                };
            }

            return(item);
        }
Пример #3
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);
        }
Пример #4
0
        private static SumType <string[], CommitCharacter[]> GetCommitCharacters(XamlCompletionItem completionItem, Dictionary <XamlCompletionKind, ImmutableArray <CommitCharacter> > commitCharactersCache)
        {
            if (!completionItem.XamlCommitCharacters.HasValue)
            {
                return(completionItem.CommitCharacters);
            }

            if (commitCharactersCache.TryGetValue(completionItem.Kind, out var cachedCharacters))
            {
                // If we have already cached the commit characters, return the cached ones
                return(cachedCharacters.ToArray());
            }

            var xamlCommitCharacters = completionItem.XamlCommitCharacters.Value;

            var commitCharacters = xamlCommitCharacters.Characters.Select(c => new CommitCharacter {
                Character = c.ToString(), Insert = !xamlCommitCharacters.NonInsertCharacters.Contains(c)
            }).ToImmutableArray();

            commitCharactersCache.Add(completionItem.Kind, commitCharacters);
            return(commitCharacters.ToArray());
        }