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).
Braces balance in source that compiles, so the lost scopes are exactly what
a brace stack over tree-sitter’s own tokens leaves open. Within one node, in
child order: a real { opens a scope (the node’s namespace when the node is
a named namespace body, otherwise an opaque scope); a real } closes the
innermost open scope, or is owed to the parent when the node has none open;
a MISSING brace is not a token and does nothing; a child without errors is
balanced and contributes nothing; an error-marked child contributes the
closes it owes and the scopes it leaves open. Whatever is open before a
child starts, beyond the node’s own scope, is what the parse lost for that
child. Consecutive children with the same lost namespaces form one
RecoveredNamespaceRegion. A file without parse errors has no regions.
Implementations§
Source§impl OrphanedNamespaceScopeIndex
impl OrphanedNamespaceScopeIndex
pub fn build(root: Node<'_>, source: &str) -> Self
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