pub struct RuleNode {Show 13 fields
pub pattern: Option<String>,
pub kind: Option<String>,
pub regex: Option<String>,
pub inside: Option<Box<RuleNode>>,
pub has: Option<Box<RuleNode>>,
pub follows: Option<Box<RuleNode>>,
pub precedes: Option<Box<RuleNode>>,
pub stop_by: Option<StopBy>,
pub field: Option<String>,
pub all: Option<Vec<RuleNode>>,
pub any: Option<Vec<RuleNode>>,
pub not: Option<Box<RuleNode>>,
pub matches: Option<String>,
}Expand description
The atomic-tier matcher. Exactly one of pattern / kind / regex
must be set on a node that carries one; RuleNode::atomic resolves it.
A RuleNode is the recursive matching algebra: an optional atomic
leaf (pattern / kind / regex), relational constraints
(inside / has / follows / precedes, each a sub-node tuned by
stop_by / field), and composite combinators (all / any /
not / matches). Every key set on a node is ANDed: the node matches a
tree-sitter node iff its atomic part matches and every relational and
composite part holds.
Fields§
§pattern: Option<String>A code snippet in the target grammar with $VAR metavariable holes.
kind: Option<String>A bare tree-sitter node kind (e.g. "call_expression").
regex: Option<String>A regular expression matched against node text.
inside: Option<Box<RuleNode>>The node must be inside a node matching this sub-rule (ancestor).
has: Option<Box<RuleNode>>The node must have a descendant matching this sub-rule.
follows: Option<Box<RuleNode>>The node must follow a node matching this sub-rule (earlier).
precedes: Option<Box<RuleNode>>The node must precede a node matching this sub-rule (later).
stop_by: Option<StopBy>Relational reach (used when this node is an inside/has/… target):
neighbor (direct only, default), end (transitive), or a rule that
halts the walk. (TOML stopBy or stop_by.)
field: Option<String>Restrict an inside/has relation to a specific tree-sitter field.
all: Option<Vec<RuleNode>>Every sub-rule must match the node.
any: Option<Vec<RuleNode>>At least one sub-rule must match the node.
not: Option<Box<RuleNode>>The sub-rule must NOT match the node.
matches: Option<String>Reference a utility rule by id (resolved from [utils]).
Implementations§
Source§impl RuleNode
impl RuleNode
Sourcepub fn atomic(&self) -> Result<Option<AtomicMatcher>, String>
pub fn atomic(&self) -> Result<Option<AtomicMatcher>, String>
Resolve this node’s atomic leaf. Ok(None) when the node is purely
relational/composite; Err when more than one atomic key is set.
Sourcepub fn is_pure_regex(&self) -> bool
pub fn is_pure_regex(&self) -> bool
True when regex is the only key set — a top-level grep-style rule
that scans source text rather than the tree.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for RuleNode
impl<'de> Deserialize<'de> for RuleNode
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for RuleNode
impl RefUnwindSafe for RuleNode
impl Send for RuleNode
impl Sync for RuleNode
impl Unpin for RuleNode
impl UnsafeUnpin for RuleNode
impl UnwindSafe for RuleNode
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
renamed to 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);