State

Struct State 

Source
pub(crate) struct State<'sess, 'ast> {
Show 16 fields pub(crate) s: Printer, ind: isize, sm: &'sess SourceMap, pub(crate) comments: Comments, config: Arc<FormatterConfig>, inline_config: InlineConfig<()>, cursor: SourcePos, has_crlf: bool, contract: Option<&'ast ItemContract<'ast>>, single_line_stmt: Option<bool>, named_call_expr: bool, binary_expr: Option<BinOpGroup>, return_bin_expr: bool, var_init: bool, block_depth: usize, call_stack: CallStack,
}

Fields§

§s: Printer§ind: isize§sm: &'sess SourceMap§comments: Comments§config: Arc<FormatterConfig>§inline_config: InlineConfig<()>§cursor: SourcePos§has_crlf: bool§contract: Option<&'ast ItemContract<'ast>>§single_line_stmt: Option<bool>§named_call_expr: bool§binary_expr: Option<BinOpGroup>§return_bin_expr: bool§var_init: bool§block_depth: usize§call_stack: CallStack

Implementations§

Source§

impl<'ast> State<'_, 'ast>

Language-specific pretty printing. Common for both: Solidity + Yul.

Source

pub(super) fn print_lit(&mut self, lit: &'ast Lit<'ast>)

Source

fn print_num_literal(&mut self, source: &str)

Source

pub(super) fn print_str_lit( &mut self, kind: StrKind, quote_pos: BytePos, s: &str, )

s should be the unescaped contents of the string literal.

Source

fn str_lit_to_string( &self, kind: StrKind, quote_pos: BytePos, s: &str, ) -> String

s should be the unescaped contents of the string literal.

Source

pub(super) fn print_tuple_empty(&mut self, pos_lo: BytePos, pos_hi: BytePos)

Source

pub(super) fn print_tuple<'a, T, P, S>( &mut self, values: &'a [T], pos_lo: BytePos, pos_hi: BytePos, print: P, get_span: S, format: ListFormat, )
where P: FnMut(&mut Self, &'a T), S: FnMut(&T) -> Span,

Source

pub(super) fn print_array<'a, T, P, S>( &mut self, values: &'a [T], span: Span, print: P, get_span: S, )
where P: FnMut(&mut Self, &'a T), S: FnMut(&T) -> Span,

Source

pub(super) fn commasep_opening_logic<T, S>( &mut self, values: &[T], get_span: S, format: ListFormat, ) -> bool
where S: FnMut(&T) -> Span,

Source

pub(super) fn commasep<'a, T, P, S>( &mut self, values: &'a [T], _pos_lo: BytePos, pos_hi: BytePos, print: P, get_span: S, format: ListFormat, )
where P: FnMut(&mut Self, &'a T), S: FnMut(&T) -> Span,

Source

pub(super) fn print_path( &mut self, path: &'ast PathSlice, consistent_break: bool, )

Source

pub(super) fn print_block_inner<T: Debug>( &mut self, block: &'ast [T], block_format: BlockFormat, print: impl FnMut(&mut Self, &'ast T), get_block_span: impl FnMut(&'ast T) -> Span, pos_hi: BytePos, )

Source

fn print_single_line_block<T: Debug>( &mut self, block: &'ast [T], block_format: BlockFormat, print: impl FnMut(&mut Self, &'ast T), get_block_span: impl FnMut(&'ast T) -> Span, )

Source

fn print_empty_block(&mut self, block_format: BlockFormat, pos_hi: BytePos)

Source§

impl<'ast> State<'_, 'ast>

Language-specific pretty printing: Solidity.

Source

pub(crate) fn print_source_unit(&mut self, source_unit: &'ast SourceUnit<'ast>)

Source

fn separate_items(&mut self, next_item: &'ast Item<'ast>, advance: bool)

Prints a hardbreak if the item needs an isolated line break.

Source

fn print_item(&mut self, item: &'ast Item<'ast>, skip_ws: bool)

Source

fn print_pragma(&mut self, pragma: &'ast PragmaDirective<'ast>)

Source

fn print_commasep_aliases<'a, I>(&mut self, aliases: I)
where I: Iterator<Item = &'a (Ident, Option<Ident>)>, 'ast: 'a,

Source

fn print_import(&mut self, import: &'ast ImportDirective<'ast>)

Source

fn print_using(&mut self, using: &'ast UsingDirective<'ast>)

Source

fn print_contract(&mut self, c: &'ast ItemContract<'ast>, span: Span)

Source

fn print_struct(&mut self, strukt: &'ast ItemStruct<'ast>, span: Span)

Source

fn print_enum(&mut self, enm: &'ast ItemEnum<'ast>, span: Span)

Source

fn print_udvt(&mut self, udvt: &'ast ItemUdvt<'ast>)

Source

fn print_function(&mut self, func: &'ast ItemFunction<'ast>)

Source

fn print_fn_attribute( &mut self, span: Span, map: &mut HashMap<BytePos, (Vec<Comment>, Vec<Comment>, Vec<Comment>)>, print_fn: &mut dyn FnMut(&mut Self), )

Source

fn is_modifier_a_base_contract( &self, kind: FunctionKind, modifier: &'ast Modifier<'ast>, ) -> bool

Source

fn print_error(&mut self, err: &'ast ItemError<'ast>)

Source

fn print_event(&mut self, event: &'ast ItemEvent<'ast>)

Source

fn print_var_def(&mut self, var: &'ast VariableDefinition<'ast>)

Source

fn print_var(&mut self, var: &'ast VariableDefinition<'ast>, is_var_def: bool)

Source

fn print_attribute( &mut self, attribute: Option<&'static str>, is_var_def: bool, size: &mut usize, )

Source

fn print_parameter_list( &mut self, parameters: &'ast [VariableDefinition<'ast>], span: Span, format: ListFormat, )

Source

fn print_ident_or_strlit(&mut self, value: &'ast IdentOrStrLit)

Source

fn print_ast_str_lit(&mut self, strlit: &'ast StrLit)

Prints a raw AST string literal, which is unescaped.

Source

fn print_ty(&mut self, ty: &'ast Type<'ast>)

Source

fn print_override(&mut self, override_: &'ast Override<'ast>)

Source

fn print_expr(&mut self, expr: &'ast Expr<'ast>)

Prints an expression by matching on its variant and delegating to the appropriate printer method, handling all Solidity expression kinds.

Source

fn print_assign_expr(&mut self, lhs: &'ast Expr<'ast>, rhs: &'ast Expr<'ast>)

Prints a simple assignment expression of the form lhs = rhs.

Source

fn print_bin_expr( &mut self, lhs: &'ast Expr<'ast>, bin_op: &BinOp, rhs: &'ast Expr<'ast>, is_assign: bool, )

Prints a binary operator expression. Handles operator chains and formatting.

Source

fn print_index_expr( &mut self, span: Span, expr: &'ast Expr<'ast>, kind: &'ast IndexKind<'ast>, )

Prints an indexing expression.

Source

fn print_ternary_expr( &mut self, cond: &'ast Expr<'ast>, then: &'ast Expr<'ast>, els: &'ast Expr<'ast>, )

Prints a ternary expression of the form cond ? then : else.

Source

fn print_modifier_call( &mut self, modifier: &'ast Modifier<'ast>, add_parens_if_empty: bool, )

Source

fn print_member_or_call_chain<F>( &mut self, child_expr: &'ast Expr<'ast>, member_or_args: MemberOrCallArgs, print_suffix: F, )
where F: FnOnce(&mut Self),

Source

fn print_call_args( &mut self, args: &'ast CallArgs<'ast>, format: ListFormat, callee_size: usize, )

Source

fn print_named_args(&mut self, args: &'ast [NamedArg<'ast>], pos_hi: BytePos)

Source

fn print_stmt(&mut self, stmt: &'ast Stmt<'ast>)

Prints the given statement in the source code, handling formatting, inline documentation, trailing comments and layout logic for various statement kinds.

Source

fn print_assembly_stmt( &mut self, span: Span, dialect: &'ast Option<StrLit>, flags: &'ast [StrLit], block: &'ast Block<'ast>, )

Prints an assembly statement, including optional dialect and flags, followed by its Yul block.

Source

fn print_multi_decl_stmt( &mut self, span: Span, vars: &'ast BoxSlice<'ast, SpannedOption<VariableDefinition<'ast>>>, init_expr: &'ast Expr<'ast>, )

Prints a multiple-variable declaration with a single initializer expression, formatted as a tuple-style assignment (e.g., (a, b) = foo();).

Source

fn print_for_stmt( &mut self, span: Span, init: &'ast Option<&mut Stmt<'ast>>, cond: &'ast Option<&mut Expr<'ast>>, next: &'ast Option<&mut Expr<'ast>>, body: &'ast Stmt<'ast>, )

Prints a for loop statement, including its initializer, condition, increment expression, and loop body, with formatting and spacing.

Source

fn print_if_stmt( &mut self, span: Span, cond: &'ast Expr<'ast>, then: &'ast Stmt<'ast>, els_opt: &'ast Option<&mut Stmt<'ast>>, )

Prints an if statement, including its condition, then block, and any chained else or else if branches, handling inline formatting decisions and comments.

Source

fn print_return_stmt( &mut self, force_break: bool, expr: &'ast Option<&mut Expr<'ast>>, )

Prints a return statement, optionally including a return expression. Handles spacing, line breaking, and formatting.

Source

fn print_try_stmt( &mut self, expr: &'ast Expr<'ast>, clauses: &'ast [TryCatchClause<'ast>], )

Prints a try statement along with its associated catch clauses, following Solidity’s try ... returns (...) { ... } catch (...) { ... } syntax.

Source

fn print_if_no_else( &mut self, cond: &'ast Expr<'ast>, then: &'ast Stmt<'ast>, inline: bool, )

Source

fn print_if_cond( &mut self, kw: &'static str, cond: &'ast Expr<'ast>, pos_hi: BytePos, )

Source

fn print_emit_or_revert( &mut self, kw: &'static str, path: &'ast PathSlice, args: &'ast CallArgs<'ast>, )

Source

fn print_block(&mut self, block: &'ast [Stmt<'ast>], span: Span)

Source

fn print_block_without_braces( &mut self, block: &'ast [Stmt<'ast>], pos_hi: BytePos, offset: Option<isize>, )

Source

fn print_stmt_as_block( &mut self, stmt: &'ast Stmt<'ast>, pos_hi: BytePos, inline: bool, )

Source

fn is_single_line_block( &mut self, cond: &'ast Expr<'ast>, then: &'ast Stmt<'ast>, els_opt: Option<&'ast &'ast mut Stmt<'ast>>, ) -> Decision

Determines if an if/else block should be inlined. Also returns if the value was cached, so that it can be cleaned afterwards.

§Returns

A tuple (should_inline, was_cached). The second boolean is true if the decision was retrieved from the cache or is a final decision based on config, preventing the caller from clearing a cache value that was never set.

Source

fn is_inline_stmt(&self, stmt: &'ast Stmt<'ast>, cond_len: usize) -> bool

Source

fn is_stmt_in_new_line( &self, cond: &'ast Expr<'ast>, then: &'ast Stmt<'ast>, ) -> bool

Checks if a statement was explicitly written in a new line.

Source

fn is_multiline_block_stmt( &self, stmt: &'ast Stmt<'ast>, empty_as_multiline: bool, ) -> bool

Checks if a block statement { ... } contains more than one line of actual code.

Source

fn is_multiline_block( &self, block: &'ast Block<'ast>, empty_as_multiline: bool, ) -> bool

Checks if a block statement { ... } contains more than one line of actual code.

Source

fn can_stmts_be_inlined( &mut self, cond: &'ast Expr<'ast>, then: &'ast Stmt<'ast>, els_opt: Option<&'ast &'ast mut Stmt<'ast>>, ) -> bool

Performs a size estimation to see if the if/else can fit on one line.

Source

fn can_header_be_inlined(&mut self, header: &FunctionHeader<'_>) -> bool

Source

fn estimate_header_params_size(&mut self, header: &FunctionHeader<'_>) -> usize

Source

fn can_header_params_be_inlined(&mut self, header: &FunctionHeader<'_>) -> bool

Source

fn has_comments_between_elements<I>(&self, limits: Span, elements: I) -> bool
where I: IntoIterator<Item = &'ast Expr<'ast>>,

Source§

impl<'ast> State<'_, 'ast>

Language-specific pretty printing: Yul.

Source

pub(crate) fn print_yul_stmt(&mut self, stmt: &'ast Stmt<'ast>)

Source

fn print_yul_expr(&mut self, expr: &'ast Expr<'ast>)

Source

pub(super) fn print_yul_block( &mut self, block: &'ast Block<'ast>, span: Span, skip_opening_brace: bool, )

Source

fn is_multiline_yul_block(&self, block: &'ast Block<'ast>) -> bool

Checks if a block statement { ... } contains more than one line of actual code.

Source

fn estimate_yul_header_params_size(&mut self, func: &Function<'_>) -> usize

Source

fn can_yul_header_params_be_inlined(&mut self, func: &Function<'_>) -> bool

Source§

impl<'sess> State<'sess, '_>

Generic methods

Source

pub(crate) fn new( sm: &'sess SourceMap, config: Arc<FormatterConfig>, inline_config: InlineConfig<()>, comments: Comments, ) -> Self

Source

fn check_crlf(&mut self, span: Span)

Checks a span of the source for a carriage return (\r) to determine if the file uses CRLF line endings.

If a \r is found, self.has_crlf is set to true. This is intended to be called once at the beginning of the formatting process for efficiency.

Source

fn is_at_crlf(&self) -> bool

Checks if the cursor is currently positioned at the start of a CRLF sequence (\r\n). The check is only meaningful if self.has_crlf is true.

Source

fn space_left(&self) -> usize

Source

fn break_offset_if_not_bol(&mut self, n: usize, off: isize, search: bool)

Source

fn braces_break(&mut self)

Source§

impl State<'_, '_>

Span to source.

Source

fn char_at(&self, pos: BytePos) -> Option<char>

Source

fn print_span(&mut self, span: Span)

Source

fn handle_span(&mut self, span: Span, skip_prev_cmnts: bool) -> bool

Returns true if the span is disabled and has been printed as-is.

Source

fn print_span_if_disabled(&mut self, span: Span) -> bool

Returns true if the span is disabled and has been printed as-is.

Source

fn print_span_cold(&mut self, span: Span)

Source

fn print_tokens(&mut self, tokens: &[Token])

Source

fn print_word(&mut self, w: impl Into<Cow<'static, str>>)

Source

fn print_sep(&mut self, sep: Separator)

Source

fn print_sep_unhandled(&mut self, sep: Separator)

Source

fn print_ident(&mut self, ident: &Ident)

Source

fn print_inside_parens<F>(&mut self, f: F)
where F: FnOnce(&mut Self),

Source

fn estimate_size(&self, span: Span) -> usize

Source

fn same_source_line(&self, a: BytePos, b: BytePos) -> bool

Source§

impl<'sess> State<'sess, '_>

Comment-related methods.

Source

fn handle_comment(&mut self, cmnt: Comment, skip_break: bool) -> Option<Comment>

Returns None if the span is disabled and has been printed as-is.

Source

fn cmnt_config(&self) -> CommentConfig

Source

fn print_docs(&mut self, docs: &DocComments<'_>)

Source

fn print_comments( &mut self, pos: BytePos, config: CommentConfig, ) -> Option<CommentStyle>

Prints comments that are before the given position.

Returns Some with the style of the last comment printed, or None if no comment was printed.

Source

fn print_wrapped_line( &mut self, line: &str, prefix: &'static str, break_offset: isize, is_doc: bool, )

Prints a line, wrapping it if it starts with the given prefix.

Source

fn merge_comment_lines(&self, lines: &[String], prefix: &str) -> Vec<String>

Merges consecutive line comments to avoid orphan words.

Source

fn print_comment(&mut self, cmnt: Comment, config: CommentConfig)

Source

fn peek_comment<'b>(&'b self) -> Option<&'b Comment>
where 'sess: 'b,

Source

fn peek_comment_before<'b>(&'b self, pos: BytePos) -> Option<&'b Comment>
where 'sess: 'b,

Source

fn has_comment_before_with<F>(&self, pos: BytePos, f: F) -> bool
where F: FnMut(&Comment) -> bool,

Source

fn peek_comment_between<'b>( &'b self, pos_lo: BytePos, pos_hi: BytePos, ) -> Option<&'b Comment>
where 'sess: 'b,

Source

fn has_comment_between(&self, start_pos: BytePos, end_pos: BytePos) -> bool

Source

pub(crate) fn next_comment(&mut self) -> Option<Comment>

Source

fn peek_trailing_comment<'b>( &'b self, span_pos: BytePos, next_pos: Option<BytePos>, ) -> Option<&'b Comment>
where 'sess: 'b,

Source

fn print_trailing_comment_inner( &mut self, span_pos: BytePos, next_pos: Option<BytePos>, config: Option<CommentConfig>, ) -> bool

Source

fn print_trailing_comment( &mut self, span_pos: BytePos, next_pos: Option<BytePos>, ) -> bool

Source

fn print_trailing_comment_no_break( &mut self, span_pos: BytePos, next_pos: Option<BytePos>, )

Source

fn print_remaining_comments(&mut self, skip_leading_ws: bool)

Methods from Deref<Target = Printer>§

Source

pub fn rbox(&mut self, indent: isize, breaks: Breaks)

“raw box”

Source

pub fn ibox(&mut self, indent: isize)

Inconsistent breaking box

Source

pub fn cbox(&mut self, indent: isize)

Consistent breaking box

Source

pub fn visual_align(&mut self)

Source

pub fn break_offset(&mut self, n: usize, off: isize)

Source

pub fn end(&mut self)

Source

pub fn word(&mut self, w: impl Into<Cow<'static, str>>)

Source

fn spaces(&mut self, n: usize)

Source

pub fn zerobreak(&mut self)

Source

pub fn space(&mut self)

Source

pub fn hardbreak(&mut self)

Source

pub fn last_token_is_neverbreak(&self) -> bool

Source

pub fn last_token_is_break(&self) -> bool

Source

pub fn last_token_is_space(&self) -> bool

Source

pub fn is_beginning_of_line(&self) -> bool

Source

pub fn is_bol_or_only_ind(&self) -> bool

Attempts to identify whether the current position is:

  1. the beginning of a line (empty)
  2. a line with only indentation (just whitespaces)

NOTE: this is still an educated guess, based on a heuristic.

Source

pub fn hardbreak_if_nonempty(&mut self)

Source

pub fn neverbreak(&mut self)

Source

pub fn word_space(&mut self, w: impl Into<Cow<'static, str>>)

Source

pub fn hardbreak_if_not_bol(&mut self)

Adds a new hardbreak if not at the beginning of the line. If there was a buffered break token, replaces it (ensures hardbreak) keeping the offset.

Source

pub fn space_if_not_bol(&mut self)

Source

pub fn nbsp(&mut self)

Source

pub fn space_or_nbsp(&mut self, breaks: bool)

Source

pub fn word_nbsp(&mut self, w: impl Into<Cow<'static, str>>)

Source

pub(crate) fn space_left(&self) -> usize

Predicts available space on the current or next line based on pending breaks.

This function provides a heuristic for estimating available space by checking if an unconditional hard break is pending in the buffer. The printer’s internal self.space value may not accurately reflect pending formatting decisions.

§Returns
  • The full margin if an unconditional hard break is pending, signaling that a new line will be created. Callers should apply their own indentation logic as they have more semantic context about the code structure.
  • The current space left (self.space) if no hard break is found, which can be trusted when no line breaks are imminent.
§Trade-offs

This heuristic may overestimate available space, but provides a reliable signal for hard breaks while keeping the implementation simple.

Source

pub(crate) fn last_token(&self) -> Option<&Token>

Source

pub(crate) fn last_token_still_buffered(&self) -> Option<&Token>

Source

pub(crate) fn replace_last_token_still_buffered(&mut self, token: Token)

Be very careful with this!

Source

pub(crate) fn find_and_replace_last_token_still_buffered<F>( &mut self, new_token: Token, predicate: F, )
where F: FnOnce(&Token) -> bool,

WARNING: Be very careful with this!

Searches backwards through the buffer to find and replace the last token that satisfies a predicate. This is a specialized and sensitive operation.

This function’s traversal logic is specifically designed to handle cases where formatting boxes have been closed (e.g., after a multi-line comment). It will automatically skip over any trailing Token::End tokens to find the substantive token before them.

The search stops as soon as it encounters any token other than End (i.e., a String, Break, or Begin). The provided predicate is then called on that token. If the predicate returns true, the token is replaced.

This function will only ever evaluate the predicate on one token.

Source

fn scan_eof(&mut self)

Source

fn scan_begin(&mut self, token: BeginToken)

Source

fn scan_end(&mut self)

Source

pub(crate) fn scan_break(&mut self, token: BreakToken)

Source

fn scan_string(&mut self, string: Cow<'static, str>)

Source

pub(crate) fn offset(&mut self, offset: isize)

Source

pub(crate) fn ends_with(&self, ch: char) -> bool

Source

fn check_stream(&mut self)

Source

fn advance_left(&mut self)

Source

fn check_stack(&mut self, depth: usize)

Source

fn get_top(&self) -> PrintFrame

Source

fn print_begin(&mut self, token: BeginToken, size: isize)

Source

fn print_end(&mut self)

Source

fn print_break(&mut self, token: BreakToken, size: isize)

Source

fn print_string(&mut self, string: &str)

Source

fn print_indent(&mut self)

Trait Implementations§

Source§

impl Deref for State<'_, '_>

Source§

type Target = Printer

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DerefMut for State<'_, '_>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.

Auto Trait Implementations§

§

impl<'sess, 'ast> Freeze for State<'sess, 'ast>

§

impl<'sess, 'ast> !RefUnwindSafe for State<'sess, 'ast>

§

impl<'sess, 'ast> Send for State<'sess, 'ast>

§

impl<'sess, 'ast> Sync for State<'sess, 'ast>

§

impl<'sess, 'ast> Unpin for State<'sess, 'ast>

§

impl<'sess, 'ast> !UnwindSafe for State<'sess, 'ast>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T, R> CollectAndApply<T, R> for T

§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

§

type Output = R

§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Paint for T
where T: ?Sized,

§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
§

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>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
§

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.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
§

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);
§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new [Painted] with a default [Style]. Read more
§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 408 bytes