Skip to main content

Crate achitekfile

Crate achitekfile 

Source
Expand description

A Tree-sitter backed semantic parser for Achitekfile source.

achitekfile wraps the tree-sitter-achitekfile grammar and exposes a small semantic API over the concrete Tree-sitter syntax tree. Start with analyze for semantic analysis or parse_tree if you need direct Tree-sitter access.

§Examples

let source = r#"
blueprint {
  version = "1.0.0"
  name = "web-app"
}

prompt "database" {
  type = select
  choices = ["postgres", "sqlite"]
  default = "postgres"
}

prompt "orm" {
  type = select
  choices = ["sqlx", "diesel"]
  depends_on = database != "sqlite"
}
"#;

let file = achitekfile::analyze(source)?.into_valid().map_err(|diagnostics| {
    let message = diagnostics
        .into_iter()
        .map(|diagnostic| diagnostic.message().to_owned())
        .collect::<Vec<_>>()
        .join(", ");
    std::io::Error::new(std::io::ErrorKind::InvalidData, message)
})?;

assert_eq!(file.blueprint().name, "web-app");
assert_eq!(file.prompts().len(), 2);

Modules§

model
Domain model types for Achitekfile source.

Structs§

Analysis
A forgiving analysis result for Achitekfile source.
AnalysisError
Errors that prevent Achitekfile analysis from running.
Cycle
A cyclic region of a graph.
Diagnostic
A user-facing issue found in Achitekfile source.
ParseError
Errors that can occur while parsing source text into a Tree-sitter Tree.
SortError
Error returned when prompt dependencies cannot be topologically sorted.
TextPosition
A zero-based byte position in Achitekfile source text.
TextRange
A byte range in Achitekfile source text.

Enums§

DiagnosticCode
Stable identifiers for Achitekfile diagnostics.
DiagnosticKind
Broad category for an Achitekfile diagnostic.
Severity
Severity level for an Achitekfile diagnostic.

Functions§

analyze
Analyzes Achitekfile source and returns a forgiving analysis result.
parse_tree
Parses Achitekfile source text into a Tree-sitter Tree.