public bool EnterNode(LibraryNode node, CancellationToken ct)
            {
                if (ct.IsCancellationRequested)
                {
                    _navCallback.Invalidate();
                    return(false);
                }

                var parentNode = _path.Peek();

                _path.Push(node);

                // We don't want to report modules, since they map 1-to-1 to files, and those are already reported by the standard item provider
                if (node.NodeType.HasFlag(LibraryNodeType.Package))
                {
                    return(true);
                }

                // Match name against search string.
                string    name = node.Name ?? "";
                MatchKind matchKind;

                if (_searchValue.Length > 2 && _searchValue.StartsWith("/") && _searchValue.EndsWith("/"))
                {
                    if (!_regexComparer.IsCandidateMatch(name, _searchValue.Substring(1, _searchValue.Length - 2)))
                    {
                        return(true);
                    }
                    matchKind = MatchKind.Regular;
                }
                else if (name.Equals(_searchValue, StringComparison.Ordinal))
                {
                    matchKind = MatchKind.Exact;
                }
                else if (_comparer.IsCandidateMatch(name, _searchValue))
                {
                    matchKind = MatchKind.Regular;
                }
                else
                {
                    return(true);
                }

                string kind;

                if (!_sggToNavItemKind.TryGetValue(node.GlyphType, out kind))
                {
                    kind = "";
                }

                var text = node.GetTextRepresentation(VSTREETEXTOPTIONS.TTO_DISPLAYTEXT);

                if (parentNode != null)
                {
                    switch (parentNode.GlyphType)
                    {
                    case StandardGlyphGroup.GlyphGroupModule:
                        text += string.Format(" [of module {0}]", parentNode.Name);
                        break;

                    case StandardGlyphGroup.GlyphGroupClass:
                        text += string.Format(" [of class {0}]", parentNode.Name);
                        break;

                    case StandardGlyphGroup.GlyphGroupMethod:
                        text += string.Format(" [nested in function {0}]", parentNode.Name);
                        break;
                    }
                }

                var tag = new ItemTag {
                    Node = node, GlyphService = _itemProvider._glyphService
                };

                _navCallback.AddItem(new NavigateToItem(text, kind, "Python", "", tag, matchKind, PythonNavigateToItemDisplayFactory.Instance));
                return(true);
            }