pub struct SourceMapBuilder { /* private fields */ }Expand description
Accumulates source-map checkpoints during emission. Lives behind a
RefCell on bynk-emit’s LowerCtx so the deep lowering chain and the
declaration loop can both record without fighting the borrow checker. A
sub-builder (one per spliced body) records against its local buffer,
then is merged into the module builder at the splice
offset.
Implementations§
Source§impl SourceMapBuilder
impl SourceMapBuilder
pub fn new() -> Self
Sourcepub fn add_source(
&mut self,
name: impl Into<String>,
text: impl Into<String>,
) -> usize
pub fn add_source( &mut self, name: impl Into<String>, text: impl Into<String>, ) -> usize
Register a source file, returning its id (index into sources).
Idempotent by name, so a test module that registers the same .bynk
file for several cases reuses one id. The first registered source is
the primary one (record targets it).
Sourcepub fn record(&mut self, byte_offset: usize, span: Span)
pub fn record(&mut self, byte_offset: usize, span: Span)
Record that generated text from byte_offset onward originates at
span in the primary source (id 0), until the next checkpoint.
Callers pass out.len() before appending the statement’s text.
Sub-builders use this; merge re-tags the source id.
Sourcepub fn shift_checkpoints(&mut self, delta: usize)
pub fn shift_checkpoints(&mut self, delta: usize)
Shift every recorded checkpoint’s generated-buffer offset forward by
delta bytes. For a sub-builder whose checkpoints were recorded
against a local buffer’s pre-splice contents, call this right after
text is inserted before byte 0 of that buffer (e.g. emit_service’s
subscriber-filter/schema-gate prologue, #1363) so the checkpoints
stay correct against the buffer’s new contents before merge reads
them — merge resolves each checkpoint’s line against sub_text as
handed to it, which has no way to know a prologue was spliced in
ahead of the recorded offsets.
Sourcepub fn merge(
&mut self,
sub: &SourceMapBuilder,
sub_text: &str,
out: &str,
base_byte: usize,
source_id: usize,
)
pub fn merge( &mut self, sub: &SourceMapBuilder, sub_text: &str, out: &str, base_byte: usize, source_id: usize, )
Merge a sub-builder’s body checkpoints into this module builder,
rebased to the spliced body’s position and re-tagged to source_id
(v0.70).
sub_text is the body’s local buffer; out is the module buffer
after the body has been spliced into it; base_byte is
out.len() captured before the splice (where the body’s first
line starts in out). The merge is line-anchored: a checkpoint
on body line k maps to module line base_line + k, so it is
correct whether the splice appended the body verbatim (handlers) or
rebuilt it line-by-line with indentation (tests) — both preserve
line structure. Column is irrelevant: maps are line-level.
Trait Implementations§
Source§impl Clone for SourceMapBuilder
impl Clone for SourceMapBuilder
Source§fn clone(&self) -> SourceMapBuilder
fn clone(&self) -> SourceMapBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SourceMapBuilder
impl Debug for SourceMapBuilder
Source§impl Default for SourceMapBuilder
impl Default for SourceMapBuilder
Source§fn default() -> SourceMapBuilder
fn default() -> SourceMapBuilder
Auto Trait Implementations§
impl Freeze for SourceMapBuilder
impl RefUnwindSafe for SourceMapBuilder
impl Send for SourceMapBuilder
impl Sync for SourceMapBuilder
impl Unpin for SourceMapBuilder
impl UnsafeUnpin for SourceMapBuilder
impl UnwindSafe for SourceMapBuilder
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,
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§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();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§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();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§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();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§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();§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.§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);