public bool HasSuggestedActions(ITextView textView, ITextBuffer textBuffer, int caretPosition, JSONParseItem parseItem) { if (!DocumentService.TryGetTextDocument(textView.TextBuffer, out var doc)) { return(false); } JSONObject parent = parseItem.FindType <JSONObject>(); if (!(parent?.Parent is JSONArrayElement) || !parent.IsValid) { return(false); } if (!JsonHelpers.TryGetInstallationState(parent, out InstallationState)) { return(false); } ConfigFilePath = doc.FilePath; LibraryObject = parent; return(!string.IsNullOrEmpty(InstallationState.LibraryId)); }
protected override IEnumerable <JSONCompletionEntry> GetEntries(JSONCompletionContext context) { JSONMember member = context.ContextItem.FindType <JSONMember>(); if (member == null || member.UnquotedNameText != "files") { yield break; } var parent = member.Parent as JSONObject; if (!JsonHelpers.TryGetInstallationState(parent, out ILibraryInstallationState state)) { yield break; } if (string.IsNullOrEmpty(state.LibraryId)) { yield break; } var dependencies = Dependencies.FromConfigFile(ConfigFilePath); IProvider provider = dependencies.GetProvider(state.ProviderId); ILibraryCatalog catalog = provider?.GetCatalog(); if (catalog == null) { yield break; } Task <ILibrary> task = catalog.GetLibraryAsync(state.LibraryId, CancellationToken.None); FrameworkElement presenter = GetPresenter(context); IEnumerable <string> usedFiles = GetUsedFiles(context); if (task.IsCompleted) { if (!(task.Result is ILibrary library)) { yield break; } foreach (string file in library.Files.Keys) { if (!usedFiles.Contains(file)) { ImageSource glyph = WpfUtil.GetIconForFile(presenter, file, out bool isThemeIcon); yield return(new SimpleCompletionEntry(file, glyph, context.Session)); } } } else { yield return(new SimpleCompletionEntry(Resources.Text.Loading, KnownMonikers.Loading, context.Session)); task.ContinueWith((a) => { if (!(task.Result is ILibrary library)) { return; } if (!context.Session.IsDismissed) { var results = new List <JSONCompletionEntry>(); foreach (string file in library.Files.Keys) { if (!usedFiles.Contains(file)) { ImageSource glyph = WpfUtil.GetIconForFile(presenter, file, out bool isThemeIcon); results.Add(new SimpleCompletionEntry(file, glyph, context.Session)); } } UpdateListEntriesSync(context, results); } }); } Telemetry.TrackUserTask("completionfiles"); }
protected override IEnumerable <JSONCompletionEntry> GetEntries(JSONCompletionContext context) { var member = context.ContextItem as JSONMember; if (member == null || member.UnquotedNameText != "id") { yield break; } var parent = member.Parent as JSONObject; if (!JsonHelpers.TryGetInstallationState(parent, out ILibraryInstallationState state)) { yield break; } var dependencies = Dependencies.FromConfigFile(ConfigFilePath); IProvider provider = dependencies.GetProvider(state.ProviderId); ILibraryCatalog catalog = provider?.GetCatalog(); if (catalog == null) { yield break; } int caretPosition = context.Session.TextView.Caret.Position.BufferPosition - member.Value.Start - 1; Task <CompletionSet> task = catalog.GetLibraryCompletionSetAsync(member.UnquotedValueText, caretPosition); int count = 0; if (task.IsCompleted) { CompletionSet span = task.Result; if (span.Completions != null) { foreach (CompletionItem item in span.Completions) { yield return(new SimpleCompletionEntry(item.DisplayText, item.InsertionText, item.Description, _libraryIcon, context.Session, ++count)); } } } else { yield return(new SimpleCompletionEntry(Resources.Text.Loading, KnownMonikers.Loading, context.Session)); task.ContinueWith((a) => { if (!context.Session.IsDismissed) { CompletionSet span = task.Result; if (span.Completions != null) { var results = new List <JSONCompletionEntry>(); foreach (CompletionItem item in span.Completions) { results.Add(new SimpleCompletionEntry(item.DisplayText, item.InsertionText, item.Description, _libraryIcon, context.Session, ++count)); } UpdateListEntriesSync(context, results); } } }); } Telemetry.TrackUserTask("completionlibraryid"); }