コード例 #1
0
        public Task <FilteredCompletionModel> UpdateCompletionListAsync(IAsyncCompletionSession session, AsyncCompletionSessionDataSnapshot data, CancellationToken token)
        {
            Task <FilteredCompletionModel> Next() => nextManager.UpdateCompletionListAsync(session, data, token);

            switch (data.Trigger.Reason)
            {
            case CompletionTriggerReason.Deletion:
            case CompletionTriggerReason.Insertion:
            case CompletionTriggerReason.Backspace:
            case CompletionTriggerReason.Invoke:
                break;

            default:
                return(Next());
            }

            if (!session.Properties.TryGetProperty(typeof(MSBuildCompletionSource.NuGetSearchUpdater), out MSBuildCompletionSource.NuGetSearchUpdater searchInfo))
            {
                return(Next());
            }

            //don't pass the CancellationToken to the search job, else filtering operations will cancel searches
            var newList = searchInfo.Update(this, data);

            if (newList.Length != data.InitialSortedList.Length)
            {
                data = new AsyncCompletionSessionDataSnapshot(
                    newList, data.Snapshot, data.Trigger, data.InitialTrigger, data.SelectedFilters, data.IsSoftSelected, data.DisplaySuggestionItem
                    );
            }

            return(Next());
        }