When an IResolveVisitorNavigator is searching for specific nodes (e.g. all IdentifierExpressions), it has to scan the whole syntax tree for those nodes. However, scanning in the ResolveVisitor is expensive (e.g. any lambda that is scanned must be resolved), so it makes sense to detect when a whole subtree is scan-only, and skip that tree instead. The DetectSkippableNodesNavigator performs this job by running the input IResolveVisitorNavigator over the whole AST, and detecting subtrees that are scan-only, and replaces them with Skip.