Crate wdl

Source
Expand description

Workflow Description Language (WDL) document parsing and linting.

There are three top-level modules to this crate:

  • grammar - used to parse WDL source into a Concrete Syntax Tree (CST).
  • ast - used to parse a WDL document into an Abstract Syntax Tree (AST).
  • lint - provides additional lint rules that can be used in a validation pass over a document.

The above are re-exports of the individual wdl-grammar, wdl-ast, and wdl-lint crates, respectively.

The CST is based on the rowan crate and represents an immutable red-green tree. Mutations to the tree require creating a new tree where unaffected nodes are shared between the old and new trees; the cost of editing a node of the tree depends solely on the depth of the node, as it must update the parent chain to produce a new tree root.

Note that in this implementation, the AST is a facade over the CST; each AST representation internally holds a CST node or token. As a result, the AST is very cheaply constructed and may be cheaply cloned at any level.

§Examples

An example of parsing WDL source into a CST and printing the tree:

use wdl::grammar::SyntaxTree;

let (tree, diagnostics) = SyntaxTree::parse("version 1.1");
assert!(diagnostics.is_empty());
println!("{tree:#?}");

An example of parsing a WDL document into an AST and validating it:

use wdl::ast::Document;
use wdl::ast::Validator;

let (document, diagnostics) = Document::parse(source);
if !diagnostics.is_empty() {
    // Handle the failure to parse
}

let mut validator = Validator::default();
if let Err(diagnostics) = validator.validate(&document) {
    // Handle the failure to validate
}

An example of parsing a WDL document and linting it:

use wdl::ast::Document;
use wdl::ast::Validator;
use wdl::lint::LintVisitor;

let (document, diagnostics) = Document::parse(source);
if !diagnostics.is_empty() {
    // Handle the failure to parse
}

let mut validator = Validator::default();
validator.add_visitor(LintVisitor::default());
if let Err(diagnostics) = validator.validate(&document) {
    // Handle the failure to validate
}

Modules§

analysis
Analysis of Workflow Description Language (WDL) documents.
ast
An abstract syntax tree for Workflow Description Language (WDL) documents.
cli
Entry point functions for the command-line interface.
doc
Library for generating HTML documentation from WDL files.
engine
Execution engine for Workflow Description Language (WDL) documents.
format
Formatting facilities for WDL.
grammar
Lexing and parsing for Workflow Description Language (WDL) documents.
lint
Lint rules for Workflow Description Language (WDL) documents.
lsp
A Language Server Protocol implementation for analyzing WDL documents.