public static Model CreateModel( Document triggerDocument, DisconnectedBufferGraph disconnectedBufferGraph, CompletionList originalList, CompletionItem selectedItem, bool isHardSelection, bool isUnique, bool useSuggestionMode, CompletionTrigger trigger, CompletionService completionService, Workspace workspace) { ImmutableArray<PresentationItem> totalItems; CompletionItem suggestionModeItem = originalList.SuggestionModeItem; PresentationItem suggestionModePresentationItem; PresentationItem defaultSuggestionModePresentationItem; // Get the set of actual filters used by all the completion items // that are in the list. var actualFiltersSeen = new HashSet<CompletionItemFilter>(); foreach (var item in originalList.Items) { foreach (var filter in CompletionItemFilter.AllFilters) { if (filter.Matches(item)) { actualFiltersSeen.Add(filter); } } } // The set of filters we'll want to show the user are the filters that are actually // used by our completion items. i.e. there's no reason to show the "field" filter // if none of completion items is actually a field. var actualItemFilters = CompletionItemFilter.AllFilters.Where(actualFiltersSeen.Contains) .ToImmutableArray(); // By default we do not filter anything out. ImmutableDictionary<CompletionItemFilter, bool> filterState = null; if (completionService != null && workspace != null && workspace.Kind != WorkspaceKind.Interactive && // TODO (https://github.com/dotnet/roslyn/issues/5107): support in interactive workspace.Options.GetOption(InternalFeatureOnOffOptions.Snippets) && trigger.Kind != CompletionTriggerKind.Snippets) { // In order to add snippet expansion notes to completion item descriptions, update // all of the provided CompletionItems to DescriptionModifyingCompletionItem which will proxy // requests to the original completion items and add the snippet expansion note to // the description if necessary. We won't do this if the list was triggered to show // snippet shortcuts. var totalItemsBuilder = ArrayBuilder<PresentationItem>.GetInstance(); foreach (var item in originalList.Items) { totalItemsBuilder.Add(new DescriptionModifyingPresentationItem(item, completionService)); } totalItems = totalItemsBuilder.ToImmutableAndFree(); defaultSuggestionModePresentationItem = new DescriptionModifyingPresentationItem( CreateDefaultSuggestionModeItem(), completionService, isSuggestionModeItem: true); suggestionModePresentationItem = suggestionModeItem != null ? new DescriptionModifyingPresentationItem(suggestionModeItem, completionService, isSuggestionModeItem: true) : null; } else { totalItems = originalList.Items.Select(item => new SimplePresentationItem(item, completionService)).ToImmutableArray<PresentationItem>(); defaultSuggestionModePresentationItem = new SimplePresentationItem(CreateDefaultSuggestionModeItem(), completionService, isSuggestionModeItem: true); suggestionModePresentationItem = suggestionModeItem != null ? new SimplePresentationItem(suggestionModeItem, completionService, isSuggestionModeItem: true) : null; } var selectedPresentationItem = totalItems.FirstOrDefault(it => it.Item == selectedItem); return new Model( triggerDocument, disconnectedBufferGraph, originalList, totalItems, totalItems, selectedPresentationItem, actualItemFilters, filterState, "", isHardSelection, isUnique, useSuggestionMode, suggestionModePresentationItem, defaultSuggestionModePresentationItem, trigger, GetDefaultTrackingSpanEnd(originalList.Span, disconnectedBufferGraph), originalList.Rules.DismissIfEmpty); }
public static Model CreateModel( DisconnectedBufferGraph disconnectedBufferGraph, CompletionList originalList, CompletionItem selectedItem, bool isHardSelection, bool isUnique, bool useSuggestionMode, CompletionTrigger trigger, CompletionService completionService, Workspace workspace) { ImmutableArray <PresentationItem> totalItems; CompletionItem suggestionModeItem = originalList.SuggestionModeItem; PresentationItem suggestionModePresentationItem; PresentationItem defaultSuggestionModePresentationItem; // Get the set of actual filters used by all the completion items // that are in the list. var actualFiltersSeen = new HashSet <CompletionItemFilter>(); foreach (var item in originalList.Items) { foreach (var filter in CompletionItemFilter.AllFilters) { if (filter.Matches(item)) { actualFiltersSeen.Add(filter); } } } // The set of filters we'll want to show the user are the filters that are actually // used by our completion items. i.e. there's no reason to show the "field" filter // if none of completion items is actually a field. var actualItemFilters = CompletionItemFilter.AllFilters.Where(actualFiltersSeen.Contains) .ToImmutableArray(); // By default we do not filter anything out. ImmutableDictionary <CompletionItemFilter, bool> filterState = null; if (completionService != null && workspace != null && workspace.Kind != WorkspaceKind.Interactive && // TODO (https://github.com/dotnet/roslyn/issues/5107): support in interactive workspace.Options.GetOption(InternalFeatureOnOffOptions.Snippets) && trigger.Kind != CompletionTriggerKind.Snippets) { // In order to add snippet expansion notes to completion item descriptions, update // all of the provided CompletionItems to DescriptionModifyingCompletionItem which will proxy // requests to the original completion items and add the snippet expansion note to // the description if necessary. We won't do this if the list was triggered to show // snippet shortcuts. var totalItemsBuilder = ImmutableArray.CreateBuilder <PresentationItem>(); foreach (var item in originalList.Items) { totalItemsBuilder.Add(new DescriptionModifyingPresentationItem(item, completionService)); } totalItems = totalItemsBuilder.AsImmutable(); defaultSuggestionModePresentationItem = new DescriptionModifyingPresentationItem(CreateDefaultSuggestionModeItem(originalList.DefaultSpan), completionService, isSuggestionModeItem: true); suggestionModePresentationItem = suggestionModeItem != null ? new DescriptionModifyingPresentationItem(suggestionModeItem, completionService, isSuggestionModeItem: true) : null; } else { totalItems = originalList.Items.Select(item => new SimplePresentationItem(item, completionService)).ToImmutableArray <PresentationItem>(); defaultSuggestionModePresentationItem = new SimplePresentationItem(CreateDefaultSuggestionModeItem(originalList.DefaultSpan), completionService, isSuggestionModeItem: true); suggestionModePresentationItem = suggestionModeItem != null ? new SimplePresentationItem(suggestionModeItem, completionService, isSuggestionModeItem: true) : null; } var selectedPresentationItem = totalItems.FirstOrDefault(it => it.Item == selectedItem); var completionItemToFilterText = new Dictionary <CompletionItem, string>(); return(new Model( disconnectedBufferGraph, originalList, totalItems, totalItems, selectedPresentationItem, actualItemFilters, filterState, completionItemToFilterText, isHardSelection, isUnique, useSuggestionMode, suggestionModePresentationItem, defaultSuggestionModePresentationItem, trigger, GetDefaultTrackingSpanEnd(originalList.DefaultSpan, disconnectedBufferGraph), originalList.Rules.DismissIfEmpty)); }