pub struct AstModule { /* private fields */ }
Expand description
A representation of a Starlark module abstract syntax tree.
Created with either parse
or parse_file
,
and evaluated with eval_module
.
The internal details (statements/expressions) are deliberately omitted, as they change more regularly. A few methods to obtain information about the AST are provided.
Implementations§
source§impl AstModule
impl AstModule
sourcepub fn exported_symbols<'a>(&'a self) -> Vec<Symbol<'a>>
pub fn exported_symbols<'a>(&'a self) -> Vec<Symbol<'a>>
Which symbols are exported by this module. These are the top-level assignments,
including function definitions. Any symbols that start with _
are not exported.
source§impl AstModule
impl AstModule
sourcepub fn find_function_call_with_name(&self, name: &str) -> Option<ResolvedSpan>
pub fn find_function_call_with_name(&self, name: &str) -> Option<ResolvedSpan>
Find the location of a top level function call that has a kwarg “name”, and a string value
matching name
.
NOTE: If the AST is exposed in the future, this function may be removed and implemented by specific programs instead.
source§impl AstModule
impl AstModule
sourcepub fn lint(&self, globals: Option<&HashSet<String>>) -> Vec<Lint>
pub fn lint(&self, globals: Option<&HashSet<String>>) -> Vec<Lint>
Run a static linter over the module. If the complete set of global variables are known
they can be passed as the globals
argument, resulting in name-resolution lint errors.
The precise checks run by the linter are not considered stable between versions.
source§impl AstModule
impl AstModule
sourcepub fn stmt_locations(&self) -> Vec<FileSpan>
pub fn stmt_locations(&self) -> Vec<FileSpan>
Locations where statements occur.
source§impl AstModule
impl AstModule
sourcepub fn parse_file(path: &Path, dialect: &Dialect) -> Result<Self>
pub fn parse_file(path: &Path, dialect: &Dialect) -> Result<Self>
Parse a file stored on disk. For details see parse
.
sourcepub fn parse(filename: &str, content: String, dialect: &Dialect) -> Result<Self>
pub fn parse(filename: &str, content: String, dialect: &Dialect) -> Result<Self>
Parse a Starlark module to produce an AstModule
, or an error if there are syntax errors.
The filename
is for error messages only, and does not have to be a valid file.
The Dialect
selects which Starlark constructs are valid.
Errors will be reported using the Diagnostic
type. For example:
use starlark::syntax::{AstModule, Dialect};
use starlark::errors::Diagnostic;
let err: anyhow::Error = AstModule::parse("filename", "\n(unmatched".to_owned(), &Dialect::Standard).unwrap_err();
let err: Diagnostic = err.downcast::<Diagnostic>().unwrap();
assert_eq!(err.span.unwrap().to_string(), "filename:2:11");