Skip to main content

Analyzer

Struct Analyzer 

Source
struct Analyzer<'ctx, 's, 'c, 'gcx> {
Show 16 fields ctx: &'ctx LintContext<'s, 'c>, gcx: Gcx<'gcx>, emitted: HashSet<Span>, emitted_balance: HashSet<Span>, call_stack: Vec<FunctionId>, inline_cache: HelperAnalysisCache<InlineCallKey, (FlowState, Vec<BalanceValue>)>, recursive_cuts: HashMap<(FunctionId, BTreeSet<FunctionId>), Option<FunctionId>>, direct_internal_calls: HashMap<FunctionId, Vec<FunctionId>>, reentrancy_eth_enabled: bool, reentrancy_no_eth_enabled: bool, reentrancy_balance_enabled: bool, balance_only_analysis: bool, call_balance_values: HashMap<Span, Vec<BalanceValue>>, return_collectors: Vec<(FunctionId, Vec<BalanceValue>)>, active_balance_guards: Vec<VariableId>, balance_reentry_lock: Option<VariableId>,
}

Fields§

§ctx: &'ctx LintContext<'s, 'c>§gcx: Gcx<'gcx>§emitted: HashSet<Span>§emitted_balance: HashSet<Span>§call_stack: Vec<FunctionId>§inline_cache: HelperAnalysisCache<InlineCallKey, (FlowState, Vec<BalanceValue>)>§recursive_cuts: HashMap<(FunctionId, BTreeSet<FunctionId>), Option<FunctionId>>

First function on the given call stack reachable again from a callee, per callee.

§direct_internal_calls: HashMap<FunctionId, Vec<FunctionId>>§reentrancy_eth_enabled: bool§reentrancy_no_eth_enabled: bool§reentrancy_balance_enabled: bool§balance_only_analysis: bool

Set while re-running code only to refine the balance analysis.

§call_balance_values: HashMap<Span, Vec<BalanceValue>>

Balance facts about the return values of each analysed internal call site.

§return_collectors: Vec<(FunctionId, Vec<BalanceValue>)>

Return-value accumulators of the internal calls currently being inlined.

§active_balance_guards: Vec<VariableId>

Reentrancy-guard locks held by the modifiers wrapping the code being analysed.

§balance_reentry_lock: Option<VariableId>

The lock guarding every entry point of each deployable contract, if any.

Implementations§

Source§

impl<'ctx, 's, 'c, 'gcx> Analyzer<'ctx, 's, 'c, 'gcx>

Source

fn new( ctx: &'ctx LintContext<'s, 'c>, gcx: Gcx<'gcx>, entry: &'gcx Function<'gcx>, ) -> Self

Source

const fn has_enabled_lints(&self) -> bool

Source

fn analyze_callable( &mut self, func: &'gcx Function<'gcx>, body: Block<'gcx>, state: &mut FlowState, ) -> bool

Analyses func (modifiers first, then body); returns whether it can fall through.

Source

fn analyze_modifier_chain( &mut self, modifiers: &'gcx [Modifier<'gcx>], index: usize, body: Block<'gcx>, state: &mut FlowState, ) -> bool

Source

fn analyze_iteration( &mut self, block: Block<'gcx>, source: LoopSource<'gcx>, placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>, state: &mut FlowState, ) -> bool

Analyzes one loop iteration: the body, then the for update if the body completes.

Source

fn analyze_block( &mut self, block: Block<'gcx>, placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>, state: &mut FlowState, ) -> bool

Source

fn analyze_stmt( &mut self, stmt: &'gcx Stmt<'gcx>, placeholder: Option<(&'gcx [Modifier<'gcx>], usize, Block<'gcx>, Option<VariableId>)>, state: &mut FlowState, ) -> bool

Analyses stmt; returns whether control can continue past it.

Source

fn split_on( &self, cond: &'gcx Expr<'gcx>, then_state: &mut FlowState, else_state: &mut FlowState, ) -> (bool, bool)

Constrains the branch states of a conditional on cond; returns whether each is reachable.

Source

fn analyze_expr(&mut self, expr: &'gcx Expr<'gcx>, state: &mut FlowState)

Source

fn analyze_lhs_indices(&mut self, expr: &'gcx Expr<'gcx>, state: &mut FlowState)

Evaluates the index and slice operands of an lvalue; the written root itself is no read.

Source

fn record_write(&mut self, lhs: &'gcx Expr<'gcx>, state: &mut FlowState)

Handles a write to lhs: reports pending reentrant calls that read the written state, invalidates written guard locks and forgets path facts about written locals.

Source

fn analyze_internal_call( &mut self, func_id: FunctionId, args: &CallArgs<'gcx>, state: &mut FlowState, ) -> Vec<BalanceValue>

Source

fn internal_callees( &self, callee: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<FunctionId>

Internal functions a call through callee may reach, following function-typed locals.

Source

fn update_internal_function_target( &self, state: &mut FlowState, var_id: VariableId, value: &'gcx Expr<'gcx>, )

Source

fn merge_call_balance_values(&mut self, span: Span, values: Vec<BalanceValue>)

Source

fn analyze_with_only_balance<T>(&mut self, f: impl FnOnce(&mut Self) -> T) -> T

Source

fn first_recursive_cut(&mut self, func_id: FunctionId) -> Option<FunctionId>

Source

fn first_recursive_cut_from( &mut self, func_id: FunctionId, active: &BTreeSet<FunctionId>, seen: &mut HashSet<FunctionId>, ) -> Option<FunctionId>

Depth-first search from func_id for the first callee that is currently active.

Source

fn direct_internal_calls(&mut self, func_id: FunctionId) -> Vec<FunctionId>

Internal functions and modifiers func_id invokes directly.

Source

fn emit_pending_calls(&mut self, state: &FlowState, written_vars: &[VariableId])

Source

fn emit_balance_calls(&mut self, guard: &'gcx Expr<'gcx>, state: &FlowState)

Reports pending balance calls whose stale balance guard compares against.

Source

fn guard_has_stale_balance_comparison( &self, expr: &'gcx Expr<'gcx>, span: Span, call: &BTreeSet<BTreeMap<PathPredicate, bool>>, state: &FlowState, ) -> bool

True if expr compares a balance read before the pending call against one read after.

Source

fn bind_locals( &mut self, state: &mut FlowState, targets: &[Option<VariableId>], rhs: &'gcx Expr<'gcx>, op: Option<BinOpKind>, )

Binds the components of rhs to the local targets they are assigned to.

Source

fn set_self_address_paths( &self, state: &mut FlowState, var_id: VariableId, paths: BTreeSet<BTreeMap<PathPredicate, bool>>, )

Source

fn set_balance_local( &self, state: &mut FlowState, var_id: VariableId, value: &BalanceValue, op: Option<BinOpKind>, )

Makes var_id hold value; a compound assignment also keeps what the local held before.

Source

fn balance_values( &self, rhs: &'gcx Expr<'gcx>, state: &FlowState, ) -> Vec<BalanceValue>

Balance facts of each component of rhs, one per destructuring target.

Source

fn balance_dependency( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BalanceValue

Source

fn self_address_path( &self, expr: &Expr<'_>, state: &FlowState, ) -> BTreeSet<BTreeMap<PathPredicate, bool>>

Predicates under which expr evaluates to address(this).

Source

fn self_balance_paths( &self, expr: &Expr<'_>, state: &FlowState, ) -> BTreeSet<BTreeMap<PathPredicate, bool>>

Predicates under which expr is <self address>.balance.

Source

fn expr_balance_paths( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<BTreeMap<PathPredicate, bool>>

Predicates under which expr derives from the contract’s own balance.

Source

fn balance_operand_dependencies( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<BalanceForm>

Retains balance occurrences across comparison operands without assuming arithmetic identities.

Source

fn balance_forms( &self, expr: &'gcx Expr<'gcx>, state: &FlowState, ) -> BTreeSet<BalanceForm>

Preserves balance terms through addition/subtraction and value-preserving integer casts. Other operators may form independent offsets, but cannot transform balance terms. Unsupported expressions return no forms, rather than an independent offset.

Source

fn seed_balance_parameters( &mut self, func_id: FunctionId, args: &CallArgs<'gcx>, state: &mut FlowState, )

Binds the balance facts of the call arguments to the callee’s parameters.

Source

fn clear_local(&self, state: &mut FlowState, var_id: VariableId)

Source

fn record_return(&mut self, expr: Option<&'gcx Expr<'gcx>>, state: &FlowState)

Accumulates the values returned by return expr; (or the named return variables when the function falls through) into the innermost return collector.

Source

fn local_value(&self, var_id: VariableId, state: &FlowState) -> BalanceValue

The balance facts currently recorded for the local var_id.

Source

fn clear_function_locals(&self, func_id: FunctionId, state: &mut FlowState)

Drops every fact about locals of func_id once its inlined body is left.

Source

fn reentrant_call_kind( &self, callee: &'gcx Expr<'gcx>, opts: Option<&CallOptions<'gcx>>, ) -> Option<ReentrantCallKind>

Source

fn balance_guard_blocks_call( &self, state: &FlowState, callee: &'gcx Expr<'gcx>, ) -> bool

True if the contract-wide reentrancy lock is held and intact around the call.

Auto Trait Implementations§

§

impl<'ctx, 's, 'c, 'gcx> !RefUnwindSafe for Analyzer<'ctx, 's, 'c, 'gcx>

§

impl<'ctx, 's, 'c, 'gcx> !Send for Analyzer<'ctx, 's, 'c, 'gcx>

§

impl<'ctx, 's, 'c, 'gcx> !Sync for Analyzer<'ctx, 's, 'c, 'gcx>

§

impl<'ctx, 's, 'c, 'gcx> !UnwindSafe for Analyzer<'ctx, 's, 'c, 'gcx>

§

impl<'ctx, 's, 'c, 'gcx> Freeze for Analyzer<'ctx, 's, 'c, 'gcx>

§

impl<'ctx, 's, 'c, 'gcx> Unpin for Analyzer<'ctx, 's, 'c, 'gcx>

§

impl<'ctx, 's, 'c, 'gcx> UnsafeUnpin for Analyzer<'ctx, 's, 'c, 'gcx>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

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<TxEnv, T> FromRecoveredTx<&T> for TxEnv
where TxEnv: FromRecoveredTx<T>,

§

fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv

Builds a [TxEnv] from a transaction and a sender address.
§

impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnv
where TxEnv: FromTxWithEncoded<T>,

§

fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv

Builds a [TxEnv] from a transaction, its sender, and encoded transaction bytes.
§

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> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> MaybeCompact for T

§

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: Sized + 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: Sized + 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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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> Threaded<T> for T

§

type Rest = ()

The outputs beyond the threaded value.
§

fn split(self) -> (T, ())

Splits into the threaded value and the extra outputs.
§

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 = !

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

fn try_from(value: U) -> Result<T, !>

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: 472 bytes