Skip to main content

PreprocessorState

Struct PreprocessorState 

Source
pub struct PreprocessorState<'a> {
    pub includes: Vec<&'a Path>,
    pub defines: Vec<Define<'a>>,
    pub timescales: Vec<Timescale<'a>>,
    pub default_nettypes: Vec<(DefaultNettype, Span<'a>)>,
    pub unconnected_drives: Vec<(UnconnectedDrive, Span<'a>)>,
    pub cell_defines: Vec<(bool, Span<'a>)>,
    pub line_directives: Vec<LineDirective<'a>>,
    pub included_files: HashMap<&'a str, &'a str>,
    pub curr_standard: StandardVersion,
    pub warnings: Vec<PreprocessorWarning<'a>>,
    /* private fields */
}
Expand description

The current state of the preprocessor

The preprocessor has to keep track of various directives and how they affect later preprocessing. A PreprocessorState encapsulates all of this.

This is primarily meant to be used in the preprocessor, but can be examined afterwards to glean extra information, such as which files were included.

Fields§

§includes: Vec<&'a Path>

The include paths to search for included files

§defines: Vec<Define<'a>>

The preprocessor definitions

§timescales: Vec<Timescale<'a>>

Any timescales declared with `timescale

§default_nettypes: Vec<(DefaultNettype, Span<'a>)>

Default nettypes declared with `default_nettype

§unconnected_drives: Vec<(UnconnectedDrive, Span<'a>)>

Unconnected drives declared with `unconnected_drive or `nounconnected_drive

§cell_defines: Vec<(bool, Span<'a>)>

Cell definitions from `celldefine and `endcelldefine

§line_directives: Vec<LineDirective<'a>>

Line directives declared with `line

§included_files: HashMap<&'a str, &'a str>

The contents of included files (file_name -> content)

§curr_standard: StandardVersion

The current standard for reserved keywords

§warnings: Vec<PreprocessorWarning<'a>>

Any warnings encountered so far

Implementations§

Source§

impl<'a> PreprocessorState<'a>

Source

pub fn new(includes: Vec<&'a Path>, defines: Vec<Define<'a>>) -> Self

Create a new PreprocessorState

Source

pub fn make_fresh(&mut self, defines: Vec<Define<'a>>)

Make the PreprocessorState fresh, as though it had just started preprocessing

This retains all files that were read in, avoiding reading in their contents again

Source

pub fn reset_all(&mut self, reset_all_span: Span<'a>)

Reset all resetable configs

This is called when a `resetall is encountered

Source

pub fn is_defined(&self, macro_name: &'a str) -> bool

Check whether the given macro is defined

Source

pub fn get_define_decl(&self, macro_name: &'a str) -> Option<Span<'a>>

Get the definition span for a macro, if it’s been defined

Source

pub fn in_define(&self) -> bool

Whether we’re currently preprocessing a definition

Source

pub fn in_define_arg(&self) -> bool

Whether we’re currently preprocessing a definition argument

Source

pub fn undefine(&mut self, macro_name: &'a str) -> bool

Remove a given macro, evaluating to whether a macro was removed

This is called when a `undef is encountered

Source

pub fn define( &mut self, macro_name: &'a str, macro_span: Span<'a>, macro_body: DefineBody<'a>, )

Define a new macro

This is called when a `define is encountered, and assumes that any previous definitions were removed with PreprocessorState::undefine

Source

pub fn command_line_define( &mut self, macro_name: &'a str, macro_text: Option<Vec<SpannedToken<'a>>>, )

Define a new macro from the command line

This is similar to PreprocessorState::define, but uses a Span with no file name

Source

pub fn undefineall(&mut self)

Undefine all macros

This is called when a `undefineall is encountered

Source

pub fn get_macro_tokens( &self, macro_name: &'a str, ) -> Option<(Span<'a>, (Vec<SpannedToken<'a>>, Option<Vec<(SpannedString<'a>, Option<Vec<SpannedToken<'a>>>)>>))>

Get the (Span, DefineBody::get_tokens) for a text macro, if it exists

Source

pub fn get_file_path(&self, include_path: &str) -> Option<PathBuf>

Get the full path from an `include statement

Source

pub fn add_timescale(&mut self, timescale: Timescale<'a>)

Add a compiler directive timescale

This is called when a `timescale is encountered

Source

pub fn get_timescale(&self, span: &Span<'a>) -> &Timescale<'a>

Get the correct compiler timescale, based on the Span where a delay is encountered

Source

pub fn add_default_nettype( &mut self, def_span: Span<'a>, default_nettype: DefaultNettype, )

Add a compiler directive default nettype

This is called when a `default_nettype is encountered

Source

pub fn get_default_nettype(&self, span: &Span<'a>) -> &DefaultNettype

Get the correct compiler default nettype, based on the Span where an implicit nettype is needed

Source

pub fn retain_file( &mut self, file_path: String, file_contents: String, cache: &'a PreprocessorCache<'a>, ) -> (&'a str, &'a str)

Retain the contents of a file

Produces (&file_path, &file_contents) as references to the cached passed arguments

Source

pub fn included_files(&self) -> Vec<(String, String)>

Get the included files as a Vec of (name, content) tuples

Source

pub fn add_unconnected_drive( &mut self, unconnected_drive_span: Span<'a>, unconnected_drive: UnconnectedDrive, )

Add an unconnected drive

This is called when a `unconnected_drive or a `nounconnected_drive is encountered

Source

pub fn get_unconnected_drive(&self, span: &Span<'a>) -> &UnconnectedDrive

Get the unconnected drive based on the Span where an unconnected net is encountered

Source

pub fn add_cell_define(&mut self, is_cell_define: bool, span: Span<'a>)

Add a cell define declaration

This is called when a `celldefine is encountered

Source

pub fn is_cell_module(&self, declaration_span: &Span<'a>) -> bool

Determine whether a module is a cell module, based on the Span of the module declaration

Source

pub fn add_line_directive( &mut self, file_name: &'a str, line_number: &'a str, dir_span: Span<'a>, )

Add a line directive

This is called when a `line is encountered

Source

pub fn get_line_directive_file(&self, span: &Span<'a>) -> &'a str

Get the file name from a Span, factoring in `line directives

Source

pub fn get_line_directive_line( &mut self, span: &Span<'a>, cache: &'a PreprocessorCache<'a>, ) -> &'a str

Get the line number of a Span, factoring in `line directives

Source

pub fn retain_string( &mut self, string: String, cache: &'a PreprocessorCache<'a>, ) -> &'a str

Source

pub fn warn(&mut self, warning: PreprocessorWarning<'a>)

Add a warning encountered during preprocessing

Trait Implementations§

Source§

impl<'a> Clone for PreprocessorState<'a>

Source§

fn clone(&self) -> PreprocessorState<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for PreprocessorState<'a>

§

impl<'a> RefUnwindSafe for PreprocessorState<'a>

§

impl<'a> Send for PreprocessorState<'a>

§

impl<'a> Sync for PreprocessorState<'a>

§

impl<'a> Unpin for PreprocessorState<'a>

§

impl<'a> UnsafeUnpin for PreprocessorState<'a>

§

impl<'a> UnwindSafe for PreprocessorState<'a>

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

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Paint for T
where T: ?Sized,

Source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

§Example
println!("{}", value.linger());
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.

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

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

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

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

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

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

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

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

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

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

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

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

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

Create a new Painted with a default Style. Read more
Source§

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

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.