Пример #1
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;
            JSONMember icons  = item?.Parent?.FindType <JSONMember>();

            if (icons != null && icons.UnquotedNameText == "icons")
            {
                string folder = Path.GetDirectoryName(item.JSONDocument.DocumentLocation);
                string file   = Path.Combine(folder, member.UnquotedValueText);

                if (!File.Exists(file))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags    = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item     = member.Value,
                        Start    = member.Value.Start,
                        AfterEnd = member.Value.AfterEnd,
                        Length   = member.Value.Length,
                        Text     = $"The file \"{member.UnquotedValueText}\" does not exist"
                    };

                    Telemetry.TrackEvent("Icon file missing");
                    context.AddError(error);
                }
            }

            return(JSONItemValidationResult.Continue);
        }
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member != null && member.UnquotedNameText == "icon")
            {
                var icons = IconCompletionProvider.GetIcons(member);

                if (icons != null && !icons.ContainsKey(member.UnquotedValueText))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags    = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item     = member.Value,
                        Start    = member.Value.Start,
                        AfterEnd = member.Value.AfterEnd,
                        Length   = member.Value.Length,
                        Text     = $"The icon \"{member.UnquotedValueText}\" has not been declared"
                    };

                    Telemetry.TrackEvent("Icon no declared");
                    context.AddError(error);
                }
            }

            return(JSONItemValidationResult.Continue);
        }
        public virtual IEnumerable <ISmartTagAction> GetSmartTagActions(JSONParseItem item, int caretPosition, ITrackingSpan itemTrackingSpan, ITextView view)
        {
            string fileName = itemTrackingSpan.TextBuffer.GetFileName();

            if (string.IsNullOrEmpty(fileName) || Path.GetFileName(fileName) != SupportedFileName)
            {
                return(Enumerable.Empty <ISmartTagAction>());
            }

            JSONMember member = (JSONMember)item;

            if (!member.Name.ContainsRange(caretPosition, 1))
            {
                return(Enumerable.Empty <ISmartTagAction>());
            }

            JSONMember parent = member.Parent.FindType <JSONMember>();

            if (parent == null || !parent.UnquotedNameText.EndsWith("dependencies", StringComparison.OrdinalIgnoreCase))
            {
                return(Enumerable.Empty <ISmartTagAction>());
            }

            return(GetSmartTagActions(member, itemTrackingSpan.TextBuffer));
        }
        public override void Invoke(CancellationToken cancellationToken)
        {
            if (_disabled)
            {
                return;
            }

            try
            {
                var             dependencies = Dependencies.FromConfigFile(_provider.ConfigFilePath);
                IProvider       provider     = dependencies.GetProvider(_provider.InstallationState.ProviderId);
                ILibraryCatalog catalog      = provider?.GetCatalog();

                if (catalog == null)
                {
                    return;
                }

                JSONMember member = _provider.LibraryObject.Children.OfType <JSONMember>().FirstOrDefault(m => m.UnquotedNameText == "id");

                if (member != null)
                {
                    using (ITextEdit edit = TextBuffer.CreateEdit())
                    {
                        edit.Replace(new Span(member.Value.Start, member.Value.Length), "\"" + _updatedLibraryId + "\"");
                        edit.Apply();
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogEvent(ex.ToString(), LogLevel.Error);
            }
        }
Пример #5
0
        private async void RetriggerAsync(bool force)
        {
            _lastTyped = DateTime.Now;
            int delay = force ? 50 : _delay;

            await System.Threading.Tasks.Task.Delay(delay);

            // Prevents retriggering from happening while typing fast
            if (_lastTyped.AddMilliseconds(delay) > DateTime.Now)
            {
                return;
            }

            var           doc       = JSONEditorDocument.FromTextView(_textView);
            JSONParseItem parseItem = doc?.JSONDocument.ItemBeforePosition(_textView.Caret.Position.BufferPosition);

            if (parseItem == null)
            {
                return;
            }

            JSONMember member = parseItem.FindType <JSONMember>();

            if (!member.UnquotedNameText.Equals("id") && !member.UnquotedNameText.Equals("path") && member.UnquotedValueText?.Length <= 1)
            {
                return;
            }

            JSONObject parent = parseItem.FindType <JSONObject>();

            if (JsonHelpers.TryGetInstallationState(parent, out ILibraryInstallationState state))
            {
                VsHelpers.DTE.ExecuteCommand("Edit.ListMembers");
            }
        }
        public override IEnumerable<ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
        {
            string directory = Path.GetDirectoryName(buffer.GetFileName());

            if (item.Value != null && item.Value.Text.Trim('"').Length > 0)
                yield return new UpdatePackageAction(item.UnquotedNameText, directory);
        }
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || member.Name.Text != "\"$ref\"" || member.JSONDocument.Children.Count == 0)
            {
                yield break;
            }

            var visitor = new JSONItemCollector <JSONMember>(false);

            member.JSONDocument.Children[0].Accept(visitor);

            var definition = visitor.Items.FirstOrDefault(prop => prop.Name != null && prop.Name.Text == "\"definitions\"");

            if (definition == null || definition.Children.Count < 3)
            {
                yield break;
            }

            var block = definition.Children[2] as JSONBlockItem;

            var visitor2 = new JSONItemCollector <JSONMember>(false);

            block.Accept(visitor2);

            foreach (var prop in visitor2.Items)
            {
                string text = "#/definitions/" + prop.Name.Text.Trim('"');

                yield return(new SimpleCompletionEntry(text, StandardGlyphGroup.GlyphReference, context.Session));
            }
        }
        public bool AppliesToContext(JSONMember contextNode)
        {
            if (contextNode == null || contextNode.Value == null)
                return false;

            return contextNode.Value.Text.Contains("schema.org");
        }
        private void Execute(JSONMember dependency)
        {
            string package = dependency.Name.Text.Trim('"');

            ProcessStartInfo start = new ProcessStartInfo("cmd", "/c bower info " + package)
            {
                UseShellExecute        = false,
                CreateNoWindow         = true,
                ErrorDialog            = false,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                StandardOutputEncoding = Encoding.UTF8,
                StandardErrorEncoding  = Encoding.UTF8,
            };

            using (Process p = new Process())
            {
                p.StartInfo           = start;
                p.EnableRaisingEvents = true;
                p.OutputDataReceived += OutputDataReceived;
                p.ErrorDataReceived  += ErrorDataReceived;
                p.Exited += Exited;

                p.Start();
                p.BeginOutputReadLine();
                p.BeginErrorReadLine();
                p.WaitForExit();
            }
        }
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member != null && member.Name != null && member.Name.Text == "\"$ref\"")
            {
                var parent = member.FindType <JSONBlockItem>();

                // Only show error when $ref is not the only property in the object
                if (parent == null || parent.BlockItemChildren.Count() == 1)
                {
                    return(JSONItemValidationResult.Continue);
                }

                JsonErrorTag error = new JsonErrorTag
                {
                    Flags    = JSONErrorFlags.UnderlineBlue | JSONErrorFlags.ErrorListMessage,
                    Item     = member.Name,
                    Start    = member.Name.Start,
                    AfterEnd = member.Name.AfterEnd,
                    Length   = member.Name.Length,
                    Text     = "When $ref is present, all other attributes are ignored"
                };

                context.AddError(error);
            }

            return(JSONItemValidationResult.Continue);
        }
 public UninstallPackageAction(JSONMember item, string directory, ITextBuffer buffer)
 {
     _item = item;
     _directory = directory;
     _buffer = buffer;
     Icon = Globals.UninstallIcon;
 }
        private void Execute(JSONMember dependency)
        {
            string package = dependency.Name.Text.Trim('"');

            ProcessStartInfo start = new ProcessStartInfo("cmd", "/c bower info " + package)
            {
                UseShellExecute = false,
                CreateNoWindow = true,
                ErrorDialog = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                StandardOutputEncoding = Encoding.UTF8,
                StandardErrorEncoding = Encoding.UTF8,
            };

            using (Process p = new Process())
            {
                p.StartInfo = start;
                p.EnableRaisingEvents = true;
                p.OutputDataReceived += OutputDataReceived;
                p.ErrorDataReceived += ErrorDataReceived;
                p.Exited += Exited;

                p.Start();
                p.BeginOutputReadLine();
                p.BeginErrorReadLine();
                p.WaitForExit();
            }
        }
 public UninstallPackageAction(JSONMember item, string directory, ITextBuffer buffer)
 {
     _item      = item;
     _directory = directory;
     _buffer    = buffer;
     Icon       = Resources.UninstallIcon;
 }
Пример #14
0
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            ITextDocument document;

            if (TextDocumentFactoryService.TryGetTextDocument(context.Snapshot.TextBuffer, out document))
            {
                string fileName = Path.GetFileName(document.FilePath).ToLowerInvariant();

                if (string.IsNullOrEmpty(fileName) || !fileName.Equals(Constants.FILENAME, StringComparison.OrdinalIgnoreCase))
                {
                    yield break;
                }
            }
            else
            {
                yield break;
            }

            JSONMember member = context.ContextItem.Parent?.FindType <JSONMember>();

            if (member == null || member.UnquotedNameText != Constants.ELEMENT_NAME)
            {
                yield break;
            }

            yield return(new SimpleCompletionEntry("AfterBuild", "Fires after the MSBuild process ended.", _glyph, context.Session));

            yield return(new SimpleCompletionEntry("BeforeBuild", "Fires before the MSBuild process ended.", _glyph, context.Session));

            yield return(new SimpleCompletionEntry("Clean", "Fires after the MSBuild 'Clean' process ended.", _glyph, context.Session));

            yield return(new SimpleCompletionEntry("ProjectOpen", "Fires when the project is opened in Visual Studio.", _glyph, context.Session));
        }
Пример #15
0
        private List <JSONCompletionEntry> GetCompletionList(JSONMember member, JSONCompletionContext context, CompletionSet completionSet, int count)
        {
            int           start               = member.Value.Start;
            ITrackingSpan trackingSpan        = context.Snapshot.CreateTrackingSpan(start + 1 + completionSet.Start, completionSet.Length, SpanTrackingMode.EdgeExclusive);
            bool          isVersionCompletion = (completionSet.CompletionType == CompletionSortOrder.Version);

            List <JSONCompletionEntry> results = new List <JSONCompletionEntry>();

            foreach (CompletionItem item in completionSet.Completions)
            {
                string       insertionText = item.InsertionText.Replace("\\\\", "\\").Replace("\\", "\\\\");
                ImageMoniker moniker       = item.DisplayText.EndsWith("/") || item.DisplayText.EndsWith("\\") ? _folderIcon : _libraryIcon;

                if (isVersionCompletion)
                {
                    results.Add(new VersionCompletionEntry(item.DisplayText, insertionText, item.Description, moniker, trackingSpan, context.Session, ++count));
                }
                else
                {
                    results.Add(new SimpleCompletionEntry(item.DisplayText, insertionText, item.Description, moniker, trackingSpan, context.Session, ++count));
                }
            }

            return(results);
        }
Пример #16
0
 public static IJSONSchemaPropertyNameCompletionInfo GetInfo(IJSONSchema schema, JSONMember member)
 {
     var adapter = (IJSONProperty)JSONParseItemAdapter.Create(member, schema);
     var owner = (JSONObjectAdapter)adapter.Parent;
     var info = owner.GetPropertyNamesCompletionInfo().FirstOrDefault(x => x.DisplayText == adapter.Name.Trim('"'));
     return info;
 }
        private void ExecuteRemoteSearch(JSONMember dependency)
        {
            if (_isProcessing)
            {
                return;
            }

            ThreadPool.QueueUserWorkItem(o =>
            {
                _isProcessing = true;

                try
                {
                    Helper.DTE.StatusBar.Text = Resources.text.CompletionRetrievingVersion;
                    Helper.DTE.StatusBar.Animate(true, _animation);

                    Execute(dependency);
                }
                catch
                {
                    Helper.DTE.StatusBar.Clear();
                }

                Helper.DTE.StatusBar.Animate(false, _animation);
                _isProcessing = false;
            });
        }
Пример #18
0
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            ITextDocument document;

            if (TextDocumentFactoryService.TryGetTextDocument(context.Snapshot.TextBuffer, out document))
            {
                string fileName = Path.GetFileName(document.FilePath).ToLowerInvariant();

                if (string.IsNullOrEmpty(fileName) || !_files.Contains(fileName))
                {
                    yield break;
                }
            }
            else
            {
                yield break;
            }

            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || member.UnquotedNameText != "license")
            {
                yield break;
            }

            foreach (string prop in _props)
            {
                yield return(new SimpleCompletionEntry(prop, context.Session));
            }
        }
Пример #19
0
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            ITextDocument document;

            if (TextDocumentFactoryService.TryGetTextDocument(context.Snapshot.TextBuffer, out document))
            {
                string fileName = Path.GetFileName(document.FilePath).ToLowerInvariant();

                if (string.IsNullOrEmpty(fileName) || !fileName.Equals(Constants.FILENAME, StringComparison.OrdinalIgnoreCase))
                {
                    yield break;
                }
            }
            else
            {
                yield break;
            }

            JSONMember member = context.ContextItem.FindType <JSONMember>();

            while (member != null && member.Parent != null && member.UnquotedNameText != Constants.ELEMENT_NAME)
            {
                member = member.Parent.FindType <JSONMember>();
            }

            if (member == null || member.UnquotedNameText != Constants.ELEMENT_NAME)
            {
                yield break;
            }

            foreach (var task in GetTasks(context.ContextItem.JSONDocument))
            {
                yield return(new SimpleCompletionEntry(task.Item1, task.Item2, StandardGlyphGroup.GlyphGroupEvent, context.Session));
            }
        }
Пример #20
0
        public IJSONSchemaPropertyNameCompletionInfo Foo(IJSONSchema schema, JSONMember member)
        {
            var adapter = (IJSONProperty)JSONParseItemAdapter.Create(member, schema);
            var owner   = (JSONObjectAdapter)adapter.Parent;
            var info    = owner.GetPropertyNamesCompletionInfo().FirstOrDefault(x => x.DisplayText == adapter.Name.Trim('"'));

            return(info);
        }
        public override IEnumerable<ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
        {
            string directory = Path.GetDirectoryName(buffer.GetFileName());
            string node_module = Path.Combine(directory, "node_modules", item.UnquotedNameText);

            if (item.Value != null && item.Value.Text.Trim('"').Length > 0 && Directory.Exists(node_module))
            yield return new UpdatePackageAction(item.UnquotedNameText, directory);
        }
        public void AugmentQuickInfoSession(IQuickInfoSession session, IList <object> qiContent, out ITrackingSpan applicableToSpan)
        {
            applicableToSpan = null;

            if (session == null || qiContent == null)
            {
                return;
            }

            // Map the trigger point down to our buffer.
            SnapshotPoint?point = session.GetTriggerPoint(_buffer.CurrentSnapshot);

            if (!point.HasValue)
            {
                return;
            }

            JSONEditorDocument doc  = JSONEditorDocument.FromTextBuffer(_buffer);
            JSONParseItem      item = doc.JSONDocument.ItemBeforePosition(point.Value.Position);

            if (item == null || !item.IsValid)
            {
                return;
            }

            JSONMember dependency = item.FindType <JSONMember>();

            if (dependency == null)
            {
                return;
            }

            var parent = dependency.Parent.FindType <JSONMember>();

            if (parent == null || !parent.UnquotedNameText.EndsWith("dependencies", StringComparison.OrdinalIgnoreCase))
            {
                return;
            }

            applicableToSpan = _buffer.CurrentSnapshot.CreateTrackingSpan(item.Start, item.Length, SpanTrackingMode.EdgeNegative);

            if (dependency.Value == item)
            {
                string version = item.Text.Trim('"', '~', '^');
                qiContent.Add("   " + version + "  " + Resource.CompletionVersionLatest + Environment.NewLine +
                              "~" + version + "  " + Resource.CompletionVersionMinor + Environment.NewLine +
                              "^" + version + "  " + Resource.CompletionVersionMajor);
            }
            else
            {
                UIElement element = CreateTooltip(dependency.UnquotedNameText, item);

                if (element != null)
                {
                    qiContent.Add(element);
                }
            }
        }
        private async void RetriggerAsync(bool force)
        {
            _lastTyped = DateTime.Now;
            int delay = force ? 50 : _delay;

            // Don't leave "stale" completion session up while the user is typing, or else we could
            // get completion from a stale session.
            ICompletionSession completionSession = _broker.GetSessions(_textView).FirstOrDefault();

            if (completionSession != null && completionSession.Properties.TryGetProperty <bool>(RetriggerCompletion, out bool retrigger) && retrigger)
            {
                completionSession.Dismiss();
            }

            await System.Threading.Tasks.Task.Delay(delay);

            // Prevents retriggering from happening while typing fast
            if (_lastTyped.AddMilliseconds(delay) > DateTime.Now)
            {
                return;
            }

            // Completion may have gotten invoked via by Web Editor OnPostTypeChar(). Don't invoke again, or else we get flikering completion list
            // TODO:Review the design here post-preview 4 and make sure this completion controller doesn't clash with Web Editors JSON completion controller
            completionSession = _broker.GetSessions(_textView).FirstOrDefault();
            if (completionSession != null && completionSession.Properties.TryGetProperty <bool>(RetriggerCompletion, out retrigger))
            {
                return;
            }

            var doc = JSONEditorDocument.FromTextBuffer(_textView.TextDataModel.DocumentBuffer);

            if (doc == null)
            {
                return;
            }

            JSONParseItem parseItem = GetItemBeforePosition(_textView.Caret.Position.BufferPosition, doc.JSONDocument);

            if (parseItem == null)
            {
                return;
            }

            JSONMember member = parseItem.FindType <JSONMember>();

            if (member == null || (!member.UnquotedNameText.Equals(ManifestConstants.Library) && !member.UnquotedNameText.Equals(ManifestConstants.Destination) && member.UnquotedValueText?.Length <= 1))
            {
                return;
            }

            JSONObject parent = parseItem.FindType <JSONObject>();

            if (JsonHelpers.TryGetInstallationState(parent, out ILibraryInstallationState state))
            {
                VsHelpers.DTE.ExecuteCommand("Edit.ListMembers");
            }
        }
Пример #24
0
        public bool AppliesToContext(JSONMember contextNode)
        {
            if (contextNode == null || contextNode.Value == null)
            {
                return(false);
            }

            return(contextNode.Value.Text.Contains("schema.org"));
        }
Пример #25
0
        public override IEnumerable <ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
        {
            string directory = Path.GetDirectoryName(buffer.GetFileName());

            if (item.Value != null && item.Value.Text.Trim('"').Length > 0)
            {
                yield return(new UpdatePackageAction(item.UnquotedNameText, directory));
            }
        }
        public override IEnumerable<ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
        {
            // TODO: Check if the bower package is already installed and if so, don't show this SmartTag

            string directory = Path.GetDirectoryName(buffer.GetFileName());

            if (item.Value != null && item.Value.Text.Trim('"').Length > 0)
                yield return new InstallPackageAction(item, directory);
        }
        public override IEnumerable <ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
        {
            string directory   = Path.GetDirectoryName(buffer.GetFileName());
            string node_module = Path.Combine(directory, "node_modules", item.UnquotedNameText);

            if (item.Value != null && item.Value.Text.Trim('"').Length > 0 && Directory.Exists(node_module))
            {
                yield return(new UpdatePackageAction(item.UnquotedNameText, directory));
            }
        }
Пример #28
0
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            ITextDocument document;

            if (TextDocumentFactoryService.TryGetTextDocument(context.Snapshot.TextBuffer, out document))
            {
                string fileName = Path.GetFileName(document.FilePath).ToLowerInvariant();

                if (string.IsNullOrEmpty(fileName) || (Path.GetExtension(fileName) != Constants.EXTENSION && fileName != Constants.SUGGESTIONS_FILENAME))
                {
                    yield break;
                }
            }
            else
            {
                yield break;
            }

            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null)
            {
                yield break;
            }

            string property = member.UnquotedNameText.ToLowerInvariant();

            if (!_supported.Contains(property))
            {
                yield break;
            }

            foreach (var extension in ExtensionInstalledChecker.Instance.GetInstalledExtensions())
            {
                ImageSource glyph = GetExtensionIcon(extension);

                if (property == "productid")
                {
                    yield return(new SimpleCompletionEntry(extension.Header.Name, extension.Header.Identifier, glyph, context.Session));
                }
                else if (property == "name")
                {
                    yield return(new SimpleCompletionEntry(extension.Header.Name, Normalize(extension.Header.Name), glyph, context.Session));
                }
                else if (property == "description")
                {
                    yield return(new SimpleCompletionEntry(extension.Header.Name, Normalize(extension.Header.Description), glyph, context.Session));
                }
                else if (property == "link")
                {
                    string url = extension.Header.MoreInfoUrl?.ToString() ?? extension.Header.GettingStartedGuide?.ToString() ?? "<no link found>";
                    yield return(new SimpleCompletionEntry(extension.Header.Name, url, glyph, context.Session));
                }
            }
        }
Пример #29
0
        public override IEnumerable <ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
        {
            // TODO: Check if the bower package is already installed and if so, don't show this SmartTag

            string directory = Path.GetDirectoryName(buffer.GetFileName());

            if (item.Value != null && item.Value.Text.Trim('"').Length > 0)
            {
                yield return(new InstallPackageAction(item, directory));
            }
        }
        private static string GenerateSaveParam(JSONMember item)
        {
            JSONMember parent = item.Parent.FindType<JSONMember>();

            string param = "--save";

            if (parent.UnquotedNameText.Equals("devDependencies", StringComparison.OrdinalIgnoreCase))
                param += "-dev";

            return param;
        }
        private static string GenerateSaveParam(JSONMember item)
        {
            JSONMember parent = item.Parent.FindType <JSONMember>();

            string param = "--save";

            if (parent.UnquotedNameText.Equals("devDependencies", StringComparison.OrdinalIgnoreCase))
            {
                param += "-dev";
            }

            return(param);
        }
        private void ExecuteRemoteSearch(JSONMember dependency)
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                string package = dependency.Name.Text.Trim('"');
                string url = string.Format(Constants.PackageUrl, package);
                string result = Helper.DownloadText(url);
                _version = ParseVersion(result);

                if (_version != null)
                    Helper.ExecuteCommand(_dte, "Edit.ListMembers");
            });
        }
Пример #33
0
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || member.UnquotedNameText != "format")
            {
                yield break;
            }

            foreach (string prop in _props)
            {
                yield return(new SimpleCompletionEntry(prop, "\"" + prop + "\"", context.Session));
            }
        }
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || !member.Name.Text.Trim('"').StartsWith("$"))
            {
                yield break;
            }

            foreach (string prop in _props.Keys)
            {
                yield return(new SimpleCompletionEntry(prop, _props[prop], StandardGlyphGroup.GlyphReference, context.Session));
            }
        }
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || member.Name.Text != "\"$schema\"")
            {
                yield break;
            }

            foreach (var schema in VsJSONSchemaStore.SchemaStore.SchemaCache.Entries)
            {
                yield return(new SimpleCompletionEntry(schema.OriginalPath, StandardGlyphGroup.GlyphReference, context.Session));
            }
        }
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || member.Name.Text != "\"$schema\"")
            {
                yield break;
            }

            string value = "http://json-schema.org/draft-04/schema#";

            yield return(new JSONCompletionEntry(value, "\"" + value + "\"", "JSON hyper-schema draft v4",
                                                 GlyphService.GetGlyph(StandardGlyphGroup.GlyphGroupVariable, StandardGlyphItem.GlyphItemPublic),
                                                 "iconAutomationText", true, context.Session as ICompletionSession));
        }
        private void ExecuteRemoteSearch(JSONMember dependency)
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                string package = dependency.Name.Text.Trim('"');
                string url     = string.Format(Constants.PackageUrl, package);
                string result  = Helper.DownloadText(url);
                _version       = ParseVersion(result);

                if (_version != null)
                {
                    Helper.ExecuteCommand("Edit.ListMembers");
                }
            });
        }
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || !member.Name.Text.Trim('"').StartsWith("$"))
            {
                yield break;
            }

            foreach (string prop in _props.Keys)
            {
                yield return(new JSONCompletionEntry(prop, "\"" + prop + "\"", _props[prop],
                                                     GlyphService.GetGlyph(StandardGlyphGroup.GlyphReference, StandardGlyphItem.GlyphItemPublic),
                                                     "iconAutomationText", true, context.Session as ICompletionSession));
            }
        }
        public IEnumerable <JSONCompletionEntry> GetListEntries(JSONCompletionContext context)
        {
            JSONMember member = context.ContextItem as JSONMember;

            if (member == null || member.Name == null || member.Name.Text != "\"$schema\"")
            {
                yield break;
            }

            foreach (var schema in VsJSONSchemaStore.SchemaStore.SchemaCache.Entries)
            {
                yield return(new JSONCompletionEntry(schema.OriginalPath, "\"" + schema.OriginalPath + "\"", null,
                                                     GlyphService.GetGlyph(StandardGlyphGroup.GlyphReference, StandardGlyphItem.GlyphItemPublic),
                                                     "iconAutomationText", true, context.Session as ICompletionSession));
            }
        }
 public InstallPackageAction(JSONMember item, string directory)
 {
     _item = item;
     _directory = directory;
     Icon = Resources.InstallIcon;
 }
 public override IEnumerable<ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
 {
     yield return new NavigateToHomePageAction(item.UnquotedNameText);
 }
 public override IEnumerable<ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer)
 {
     string directory = Path.GetDirectoryName(buffer.GetFileName());
     yield return new UpdatePackageAction(item.UnquotedNameText, directory);
 }
 public abstract IEnumerable<ISmartTagAction> GetSmartTagActions(JSONMember item, ITextBuffer buffer);
        private void ExecuteRemoteSearch(JSONMember dependency)
        {
            if (_isProcessing)
                return;

            ThreadPool.QueueUserWorkItem(o =>
            {
                _isProcessing = true;

                try
                {
                    Helper.DTE.StatusBar.Text = Resources.text.CompletionRetrievingVersion;
                    Helper.DTE.StatusBar.Animate(true, _animation);

                    Execute(dependency);
                }
                catch
                {
                    Helper.DTE.StatusBar.Clear();
                }

                Helper.DTE.StatusBar.Animate(false, _animation);
                _isProcessing = false;
            });
        }