//FIXME: can we display some kind of "loading" message while it loads? async Task <QuickInfoItem> CreateNuGetQuickInfo(ITextSnapshot snapshot, MSBuildRootDocument doc, MSBuildResolveResult rr, CancellationToken token) { IPackageInfo info = null; var packageId = (string)rr.Reference; try { var frameworkId = doc.GetTargetFrameworkNuGetSearchParameter(); //FIXME: can we use the correct version here? var infos = await provider.PackageSearchManager.SearchPackageInfo(packageId, null, frameworkId).ToTask(token); //prefer non-local results as they will have more metadata info = infos .FirstOrDefault(p => p.SourceKind != ProjectFileTools.NuGetSearch.Feeds.FeedKind.Local) ?? infos.FirstOrDefault(); } catch (Exception ex) when(!(ex is OperationCanceledException && token.IsCancellationRequested)) { LoggingService.LogError("Error loading package description", ex); } var span = snapshot.CreateTrackingSpan(rr.ReferenceOffset, rr.ReferenceLength, SpanTrackingMode.EdgeInclusive); return(new QuickInfoItem(span, provider.DisplayElementFactory.GetPackageInfoTooltip(packageId, info, FeedKind.NuGet))); }
async Task <List <CompletionItem> > GetPackageVersionCompletions(MSBuildRootDocument doc, MSBuildResolveResult rr, CancellationToken token) { if (rr == null) { return(null); } var packageId = rr.Element.Attributes.FirstOrDefault(a => a.Name.Name == "Include")?.Value; if (string.IsNullOrEmpty(packageId)) { return(null); } var tfm = doc.GetTargetFrameworkNuGetSearchParameter(); var results = await provider.PackageSearchManager.SearchPackageVersions(packageId.ToLower(), tfm).ToTask(token); //FIXME should we deduplicate? var items = new List <CompletionItem> (); foreach (var result in results) { items.Add(CreateNuGetCompletionItem(result, XmlCompletionItemKind.AttributeValue)); } return(items); }
async Task <CompletionContext> GetPackageVersionCompletions(MSBuildRootDocument doc, MSBuildResolveResult rr) { var packageId = rr.XElement.Attributes.FirstOrDefault(a => a.Name.Name == "Include")?.Value; if (string.IsNullOrEmpty(packageId)) { return(null); } var tfm = doc.GetTargetFrameworkNuGetSearchParameter(); var search = provider.PackageSearchManager.SearchPackageVersions(packageId.ToLower(), tfm); var tcs = new TaskCompletionSource <object> (); search.Updated += (s, e) => { if (search.RemainingFeeds.Count == 0) { tcs.TrySetResult(null); } }; await tcs.Task; //FIXME should we deduplicate? var items = new List <CompletionItem> (); foreach (var result in search.Results) { items.Add(CreateNuGetVersionCompletionItem(result.Item1, result.Item2)); } return(CreateCompletionContext(items)); }
async Task <object> GetPackageDocumentationAsync(MSBuildRootDocument doc, string packageId, FeedKind feedKind, CancellationToken token) { var tfm = doc.GetTargetFrameworkNuGetSearchParameter(); var packageInfos = await provider.PackageSearchManager.SearchPackageInfo(packageId, null, tfm).ToTask(token); var packageInfo = packageInfos.FirstOrDefault(p => p.SourceKind == feedKind) ?? packageInfos.FirstOrDefault(); if (packageInfo != null) { return(provider.DisplayElementFactory.GetPackageInfoTooltip(packageId, packageInfo, feedKind)); } return(null); }
async Task <List <CompletionItem> > GetPackageNameCompletions(IAsyncCompletionSession session, MSBuildRootDocument doc, string searchQuery, CancellationToken token) { var tfm = doc.GetTargetFrameworkNuGetSearchParameter(); session.Properties.AddProperty(typeof(NuGetSearchUpdater), new NuGetSearchUpdater(this, session, tfm)); if (string.IsNullOrEmpty(searchQuery)) { return(null); } var results = await provider.PackageSearchManager.SearchPackageNames(searchQuery.ToLower(), tfm).ToTask(token); return(CreateNuGetItemsFromSearchResults(results)); }
Task <ICompletionDataList> GetPackageVersionCompletions(MSBuildRootDocument doc, MSBuildResolveResult rr, int startIdx, int triggerLength) { var name = rr.XElement.Attributes.FirstOrDefault(a => a.Name.FullName == "Include")?.Value; if (string.IsNullOrEmpty(name)) { return(null); } return(Task.FromResult <ICompletionDataList> ( new PackageVersionSearchCompletionDataList(PackageSearchManager, doc.GetTargetFrameworkNuGetSearchParameter(), name) { TriggerWordStart = startIdx, TriggerWordLength = triggerLength } )); }
Task <ICompletionDataList> GetPackageNameCompletions(MSBuildRootDocument doc, int startIdx, int triggerLength) { string name = ((IXmlParserContext)Tracker.Engine).KeywordBuilder.ToString(); if (string.IsNullOrWhiteSpace(name)) { return(null); } return(Task.FromResult <ICompletionDataList> ( new PackageNameSearchCompletionDataList(name, PackageSearchManager, doc.GetTargetFrameworkNuGetSearchParameter()) { TriggerWordStart = startIdx, TriggerWordLength = triggerLength } )); }