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); }
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); }
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); }
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()); }