pub struct Syntax { /* private fields */ }Expand description
The Tree sitter syntax tree for a single language.
This is really multiple (nested) different syntax trees due to tree sitter injections. A single syntax tree/parser is called layer. Each layer is parsed as a single “file” by tree sitter. There can be multiple layers for the same language. A layer corresponds to one of three things:
- the root layer
- a singular injection limited to a single node in its parent layer
- Multiple injections (multiple disjoint nodes in parent layer) that are parsed as though they are a single uninterrupted file.
An injection always refer to a single node into which another layer is injected. As injections only correspond to syntax tree nodes injections in the same layer do not intersect. However, the syntax tree in a an injected layer can have nodes that intersect with nodes from the parent layer. For example:
layer2: | Sibling A | Sibling B (layer3) | Sibling C |
layer1: | Sibling A (layer2) | Sibling B | Sibling C (layer2) |In this case Sibling B really spans across a “GAP” in layer2. While the syntax node can not be split up by tree sitter directly, we can treat Sibling B as two separate injections. That is done while parsing/running the query capture. As a result the injections form a tree. Note that such other queries must account for such multi injection nodes.
Implementations§
Source§impl Syntax
impl Syntax
pub fn new( source: RopeSlice<'_>, language: Language, timeout: Duration, loader: &impl LanguageLoader, ) -> Result<Self, Error>
pub fn layer(&self, layer: Layer) -> &LayerData
pub fn root(&self) -> Layer
pub fn tree(&self) -> &Tree
pub fn tree_for_byte_range(&self, start: u32, end: u32) -> &Tree
pub fn named_descendant_for_byte_range( &self, start: u32, end: u32, ) -> Option<Node<'_>>
pub fn descendant_for_byte_range( &self, start: u32, end: u32, ) -> Option<Node<'_>>
Sourcepub fn layer_for_byte_range(&self, start: u32, end: u32) -> Layer
pub fn layer_for_byte_range(&self, start: u32, end: u32) -> Layer
Finds the smallest injection layer that fully includes the range start..=end.
Sourcepub fn layers_for_byte_range(
&self,
start: u32,
end: u32,
) -> impl Iterator<Item = Layer> + '_
pub fn layers_for_byte_range( &self, start: u32, end: u32, ) -> impl Iterator<Item = Layer> + '_
Returns an iterator of layers which fully include the byte range start..=end,
in decreasing order based on the size of each layer.
The first layer is always the root layer.
pub fn walk(&self) -> TreeCursor<'_>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Syntax
impl RefUnwindSafe for Syntax
impl Send for Syntax
impl Sync for Syntax
impl Unpin for Syntax
impl UnwindSafe for Syntax
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);