ProgramBuilder

Struct ProgramBuilder 

Source
pub struct ProgramBuilder<'a> { /* private fields */ }
Expand description

Comprehensive program builder for JavaScript code generation.

This builder provides a high-level, ergonomic API for generating JavaScript code, combining statement-level construction with whole-program generation.

Implementations§

Source§

impl<'a> ProgramBuilder<'a>

Source

pub fn new(allocator: &'a Allocator) -> Self

Create a new program builder

Source

pub fn with_source_type( allocator: &'a Allocator, source_type: SourceType, ) -> Self

Create a new program builder with specific source type

Source

pub fn allocator(&self) -> &'a Allocator

Get the underlying allocator (for advanced usage)

Source

pub fn ast(&self) -> &AstBuilder<'a>

Get the underlying AstBuilder (for advanced usage)

Source

pub fn ident(&self, name: impl Into<Atom<'a>>) -> Expression<'a>

Create an identifier expression: name

Source

pub fn string(&self, value: impl Into<Atom<'a>>) -> Expression<'a>

Create a string literal: "value"

Source

pub fn number(&self, value: f64) -> Expression<'a>

Create a number literal: 42

Source

pub fn null(&self) -> Expression<'a>

Create null: null

Source

pub fn bool(&self, value: bool) -> Expression<'a>

Create boolean: true or false

Source

pub fn member( &self, object: Expression<'a>, property: impl Into<Atom<'a>>, ) -> Expression<'a>

Create a member expression: obj.prop

Source

pub fn computed_member( &self, object: Expression<'a>, index: Expression<'a>, ) -> Expression<'a>

Create a computed member expression: obj[expr]

This is critical for array indexing: arr[0], pageRoutes[idx], etc.

Source

pub fn call( &self, callee: Expression<'a>, args: Vec<Argument<'a>>, ) -> Expression<'a>

Create a call expression: callee(args...)

Source

pub fn arg(&self, expr: Expression<'a>) -> Argument<'a>

Create an argument from an expression

Source

pub fn object(&self, props: Vec<ObjectPropertyKind<'a>>) -> Expression<'a>

Create an object expression: { key1: value1, key2: value2 }

Source

pub fn prop( &self, key: impl Into<Atom<'a>>, value: Expression<'a>, ) -> ObjectPropertyKind<'a>

Create an object property: key: value

Source

pub fn array(&self, elements: Vec<Expression<'a>>) -> Expression<'a>

Create an array expression: [elem1, elem2, ...]

Source

pub fn arrow_fn( &self, params: Vec<&'a str>, body: Expression<'a>, ) -> Expression<'a>

Create an arrow function with expression body: (params) => expr

Source

pub fn arrow_fn_block( &self, params: Vec<&'a str>, stmts: Vec<Statement<'a>>, ) -> Expression<'a>

Create an arrow function with block body: (params) => { stmts }

Source

pub fn const_decl( &self, name: impl Into<Atom<'a>>, init: Expression<'a>, ) -> Statement<'a>

Create a const declaration: const name = init;

Source

pub fn let_decl( &self, name: impl Into<Atom<'a>>, init: Option<Expression<'a>>, ) -> Statement<'a>

Create a let declaration: let name = init;

Source

pub fn expr_stmt(&self, expr: Expression<'a>) -> Statement<'a>

Create an expression statement

Source

pub fn if_stmt( &self, test: Expression<'a>, consequent: Vec<Statement<'a>>, alternate: Option<Vec<Statement<'a>>>, ) -> Statement<'a>

Create an if statement: if (test) { consequent } else { alternate }

Source

pub fn return_stmt(&self, expr: Option<Expression<'a>>) -> Statement<'a>

Create a return statement: return expr;

Source

pub fn throw(&self, expr: Expression<'a>) -> Statement<'a>

Create a throw statement: throw expr;

Source

pub fn import_default( &self, local: impl Into<Atom<'a>>, source: impl Into<Atom<'a>>, ) -> ModuleDeclaration<'a>

Create default import: import local from 'source';

Source

pub fn import_side_effect( &self, source: impl Into<Atom<'a>>, ) -> ModuleDeclaration<'a>

Create side-effect import: import 'source';

Source

pub fn import_named( &self, names: Vec<impl Into<Atom<'a>>>, source: impl Into<Atom<'a>>, ) -> ModuleDeclaration<'a>

Create named imports: import { name1, name2 } from 'source';

Source

pub fn export_default(&self, expr: Expression<'a>) -> ModuleDeclaration<'a>

Create default export: export default expr;

Source

pub fn export_const( &self, name: impl Into<Atom<'a>>, init: Expression<'a>, ) -> ModuleDeclaration<'a>

Create named export of variable: export const name = init;

Source

pub fn push(&mut self, stmt: Statement<'a>)

Add a statement to the program

Source

pub fn extend(&mut self, stmts: impl IntoIterator<Item = Statement<'a>>)

Add multiple statements to the program

Source

pub fn len(&self) -> usize

Get the current number of statements

Source

pub fn is_empty(&self) -> bool

Check if the builder is empty

Source

pub fn write_to<W: Write>( self, writer: &mut W, _opts: &FormatOptions, ) -> Result<()>

Write the program to a writer with formatting options

Consumes the builder since statements are moved into the program.

Source

pub fn generate(self, _opts: &FormatOptions) -> Result<String>

Generate the complete program as a string

Consumes the builder since statements are moved into the program.

Source

pub fn build_program(self) -> Program<'a>

Build the program AST (for advanced usage)

Consumes the builder since statements are moved into the program.

Source

pub fn not(&self, expr: Expression<'a>) -> Expression<'a>

Unary not operator: !expr

Source

pub fn binary( &self, left: Expression<'a>, op: BinaryOperator, right: Expression<'a>, ) -> Expression<'a>

Binary expression: left op right

Source

pub fn logical( &self, left: Expression<'a>, op: LogicalOperator, right: Expression<'a>, ) -> Expression<'a>

Logical expression: left && right or left || right

Source

pub fn conditional( &self, test: Expression<'a>, consequent: Expression<'a>, alternate: Expression<'a>, ) -> Expression<'a>

Conditional/ternary expression: test ? consequent : alternate

Source

pub fn new_expr( &self, callee: Expression<'a>, args: Vec<Argument<'a>>, ) -> Expression<'a>

New expression: new Ctor(args)

Source

pub fn template_literal( &self, parts: Vec<impl Into<Atom<'a>>>, expressions: Vec<Expression<'a>>, ) -> Expression<'a>

Template literal: backtick string with expressions For simple strings without interpolation, use string() instead

§Example
// Generates: `Hello, ${name}!`
js.template_literal(
    vec!["Hello, ", "!"],
    vec![js.ident("name")],
)
Source

pub fn spread(&self, expr: Expression<'a>) -> SpreadElement<'a>

Spread element for arrays or function calls: ...expr

§Example
// In array: [...items]
js.array(vec![js.spread(js.ident("items"))])

Auto Trait Implementations§

§

impl<'a> Freeze for ProgramBuilder<'a>

§

impl<'a> !RefUnwindSafe for ProgramBuilder<'a>

§

impl<'a> !Send for ProgramBuilder<'a>

§

impl<'a> !Sync for ProgramBuilder<'a>

§

impl<'a> Unpin for ProgramBuilder<'a>

§

impl<'a> !UnwindSafe for ProgramBuilder<'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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<'a, T> FromIn<'a, T> for T

Source§

fn from_in(t: T, _: &'a Allocator) -> T

Converts to this type from the input type within the given allocator.
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
Source§

impl<'a, T, U> IntoIn<'a, U> for T
where U: FromIn<'a, T>,

Source§

fn into_in(self, allocator: &'a Allocator) -> U

Converts this type into the (usually inferred) input type within the given allocator.
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
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.