Reference¶
Object conversion¶
To convert values between starlark and Python, JSON is currently being used as an intermediate format, which defines the scope of what is convertible. This, however, is subject to change.
References to Source Locations¶
- class starlark.ResolvedSpan¶
- begin¶
A
ResolvedPos.
- end¶
A
ResolvedPos.
Diagnostics¶
- exception starlark.StarlarkError¶
- class starlark.Lint¶
- __str__()¶
Return str(self).
- resolved_location¶
- severity¶
A
EvalSeverity.
Dialect¶
- class starlark.Dialect¶
-
- enable_types¶
A value of type
DialectTypes.
Note
These attributes are only writable (not readable) for the moment.
Type checking¶
- class starlark.Interface¶
Opaque for now.
AST¶
Values¶
- class starlark.OpaquePythonObject(obj)¶
An ‘opaque’ Python object that can be passed to Starlark. It cannot be interacted with from the Starlark side. Upon conversion from Starlark to Python, the original wrapped object reappears.
Added in version 2025.2.5.
Decimal¶
This package preserves Python Decimal values without precision loss.
Decimals passed from Python stay as precise decimal values in Starlark and
round-trip back to Python as Decimal objects.
>>> import decimal
>>> import starlark as sl
>>> glb = sl.Globals.extended_by([sl.LibraryExtension.RustDecimal])
>>> mod = sl.Module()
>>> # Pass Python decimals to Starlark
>>> mod["amount"] = decimal.Decimal("100.25")
>>> program = """
... # Create decimals in Starlark with RustDecimal()
... result = amount * 2 + RustDecimal('0.75')
... # Control precision with scale() and round_dp()
... pi = RustDecimal("3.14159")
... pi.scale() # Returns 5 (number of decimal places)
... pi.round_dp(2) # Returns RustDecimal("3.14")
... result
... """
>>> ast = sl.parse("prog.star", program)
>>> val = sl.eval(mod, ast, glb)
>>> assert val == decimal.Decimal("201.25")
Implementation notes:
Starlark
RustDecimaloperations use rust_decimal semantics (28 decimal places maximum, Banker’s rounding)Python
Decimaloperations use Python semantics (configurable via context)Conversion preserves exact values without precision loss
Python’s
decimal.getcontext()is not consulted during conversionUse
round_dp(n)to explicitly control decimal places before or after conversion
Globals¶
Modules¶
- class starlark.Module¶
–
- __getitem__(key, /)¶
Return self[key].
- __setitem__(key, value, /)¶
Set self[key] to value.
- freeze() FrozenModule¶
–
Loaders¶
- class starlark.FileLoader(load_func: Callable[[str], FrozenModule])¶
–
Parsing and Evaluation¶
- starlark.parse(filename: str, content: str, dialect: Dialect | None = None) AstModule¶
–
Parse Starlark source code as a string and return an AST.
- starlark.eval(module: Module, ast: AstModule, globals: Globals, file_loader: FileLoader | None = None) object¶
–
- Returns:
the value returned by the evaluation, after Object conversion.