JsBuilder

Struct JsBuilder 

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

Main JavaScript code builder

Wraps OXC’s AstBuilder and provides ergonomic methods for building AST nodes. All AST nodes created by this builder share the same allocator lifetime.

§Examples

use fob_gen::JsBuilder;
use oxc_allocator::Allocator;

let allocator = Allocator::default();
let js = JsBuilder::new(&allocator);

// Create a simple variable declaration
let stmt = js.const_decl("message", js.string("Hello, world!"));

Implementations§

Source§

impl<'a> JsBuilder<'a>

Source

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

Create a new builder with the given allocator

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 program(&self, statements: Vec<Statement<'a>>) -> Result<String>

Generate a complete program from statements

Source

pub fn program_with_format( &self, statements: Vec<Statement<'a>>, _opts: &FormatOptions, ) -> Result<String>

Generate a complete program from statements with formatting options

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"))])

Trait Implementations§

Source§

impl<'a> Default for JsBuilder<'a>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for JsBuilder<'a>

§

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

§

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

§

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

§

impl<'a> Unpin for JsBuilder<'a>

§

impl<'a> !UnwindSafe for JsBuilder<'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.