pub struct OrphanedNamespaceScopeIndex { /* private fields */ }Expand description
The namespaces C++ parse recovery drops from a file’s tree.
When tree-sitter cannot parse a construct inside a namespace body it closes
an inner scope with a MISSING brace, or skips an opening brace into an
ERROR node. Every real } after that then closes one scope too early: a
class body’s } closes the namespace, the namespace’s own } closes its
parent, and the outermost real closes land in a trailing ERROR node. The
declarations between a stolen close and the real one keep their byte
positions but lose their namespace_definition ancestors (Catch2’s
catch_matchers_templated.hpp, issue #1537).
A file-global stack over real AST brace tokens restores both lost and
overextended namespaces. Missing braces do nothing; error-free subtrees are
balanced and can be skipped. For each child of a damaged container, compare
the namespaces still open on that stack with the parsed ancestor path. A
difference yields a region carrying the complete lexical path, including
an empty path when recovery swallowed file-scope declarations. Consecutive
children sharing that path form one RecoveredNamespaceRegion. The same
pass retains matching brace positions for declaration partitioning (#3087).
A file without parse errors needs neither correction nor a brace index.
Implementations§
Source§impl OrphanedNamespaceScopeIndex
impl OrphanedNamespaceScopeIndex
pub fn build(root: Node<'_>, source: &str) -> Self
Sourcepub fn matching_close_brace(&self, open: usize) -> Option<Range>
pub fn matching_close_brace(&self, open: usize) -> Option<Range>
The real AST brace matching an opening brace in a damaged subtree. Missing tokens and braces inside comments or literals do not participate.
pub fn is_empty(&self) -> bool
Sourcepub fn approximate_size(&self) -> usize
pub fn approximate_size(&self) -> usize
The bytes this index holds, for the analyzer cache’s weight.
Sourcepub fn region_at(&self, byte: usize) -> Option<&RecoveredNamespaceRegion>
pub fn region_at(&self, byte: usize) -> Option<&RecoveredNamespaceRegion>
The innermost recovered region containing byte.
Sourcepub fn enclosing_namespace_components(
&self,
node: Node<'_>,
source: &str,
) -> Vec<String>
pub fn enclosing_namespace_components( &self, node: Node<'_>, source: &str, ) -> Vec<String>
The enclosing namespaces of node, outermost first, restoring the ones
parse recovery dropped from its ancestor chain. The one answer both
lookup directions and declaration collection use (issue #1537).
Sourcepub fn restore_enclosing_namespaces(
&self,
parsed: Vec<(usize, Vec<String>)>,
node_start: usize,
) -> Vec<String>
pub fn restore_enclosing_namespaces( &self, parsed: Vec<(usize, Vec<String>)>, node_start: usize, ) -> Vec<String>
Self::enclosing_namespace_components for a caller that has already
climbed the ancestor chain: parsed lists the node’s named
namespace_definition ancestors outermost first, each with its start
byte. A region covering the node supplies every namespace outside it;
only the parsed ancestors that start inside the region still apply.
Trait Implementations§
Source§impl Clone for OrphanedNamespaceScopeIndex
impl Clone for OrphanedNamespaceScopeIndex
Source§fn clone(&self) -> OrphanedNamespaceScopeIndex
fn clone(&self) -> OrphanedNamespaceScopeIndex
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OrphanedNamespaceScopeIndex
impl Debug for OrphanedNamespaceScopeIndex
Source§impl Default for OrphanedNamespaceScopeIndex
impl Default for OrphanedNamespaceScopeIndex
Source§fn default() -> OrphanedNamespaceScopeIndex
fn default() -> OrphanedNamespaceScopeIndex
Auto Trait Implementations§
impl Freeze for OrphanedNamespaceScopeIndex
impl RefUnwindSafe for OrphanedNamespaceScopeIndex
impl Send for OrphanedNamespaceScopeIndex
impl Sync for OrphanedNamespaceScopeIndex
impl Unpin for OrphanedNamespaceScopeIndex
impl UnsafeUnpin for OrphanedNamespaceScopeIndex
impl UnwindSafe for OrphanedNamespaceScopeIndex
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more