public IEnumerable <ITagSpan <IconFileNameMarkerTag> > GetTags(NormalizedSnapshotSpanCollection spans)
        {
            var jsonDocument = JsonEditorDocument.FromTextBuffer(buffer);
            var treeRoot     = jsonDocument.DocumentNode;

            var result = new List <ITagSpan <IconFileNameMarkerTag> >();

            var visitor = new NodeVisitor(
                (item) =>
            {
                if (item is MemberNode property)
                {
                    string propertyName = property.Name.GetCanonicalizedText();
                    if ((propertyName == "color" || propertyName == "outline") && (property.Value != null))
                    {
                        var markerSpan = new SnapshotSpan(buffer.CurrentSnapshot, property.Value.Start, property.Value.Span.Length);
                        var tagSpan    = new TagSpan <IconFileNameMarkerTag>(markerSpan, new IconFileNameMarkerTag());

                        result.Add(tagSpan);

                        return(VisitNodeResult.SkipChildren);
                    }
                }

                return(VisitNodeResult.Continue);
            });

            treeRoot.Accept(visitor);

            return(result);
        }
        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;
            }

            Node node = JsonHelpers.GetNodeBeforePosition(_textView.Caret.Position.BufferPosition, doc.DocumentNode);

            if (node == null)
            {
                return;
            }

            MemberNode memberNode = node.FindType <MemberNode>();

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

            ObjectNode parent = node.FindType <ObjectNode>();

            if (JsonHelpers.TryGetInstallationState(parent, out ILibraryInstallationState state))
            {
                VsHelpers.DTE.ExecuteCommand("Edit.ListMembers");
            }
        }
Example #3
0
        private MemberNode GetLibraries(ITextBuffer textBuffer)
        {
            JsonEditorDocument document = JsonEditorDocument.FromTextBuffer(textBuffer);

            if (document != null)
            {
                Node topLevelNode = document.DocumentNode.TopLevelValue.FindType <ObjectNode>();
                SortedNodeList <Node>    topLevelNodeChildren = JsonHelpers.GetChildren(topLevelNode);
                IEnumerable <MemberNode> jsonMembers          = topLevelNodeChildren.OfType <MemberNode>();

                return(jsonMembers.FirstOrDefault(m => m.UnquotedNameText == ManifestConstants.Libraries));
            }

            return(null);
        }
        public IEnumerable <ITagSpan <ColorMarkerTag> > GetTags(NormalizedSnapshotSpanCollection spans)
        {
            var jsonDocument = JsonEditorDocument.FromTextBuffer(buffer);
            var treeRoot     = jsonDocument.DocumentNode;

            var result = new List <ITagSpan <ColorMarkerTag> >();

            var visitor = new NodeVisitor(
                (item) =>
            {
                var property = item as MemberNode;

                if (property != null)
                {
                    string propertyName = property.Name.GetCanonicalizedText();
                    if ((propertyName == "accentColor") && (property.Value != null))
                    {
                        var markerSpan = new SnapshotSpan(buffer.CurrentSnapshot, property.Value.Start, property.Value.Span.Length);
                        Color?color    = TextToColor(property.Value.GetText().Substring(1, property.Value.GetText().Length - 2));

                        if (color.HasValue)
                        {
                            var tagSpan = new TagSpan <ColorMarkerTag>(markerSpan, new ColorMarkerTag(color.Value));

                            result.Add(tagSpan);
                        }

                        return(VisitNodeResult.SkipChildren);
                    }
                }

                return(VisitNodeResult.Continue);
            });

            treeRoot.Accept(visitor);

            return(result);
        }