Skip to main content

parse

Function parse 

Source
pub fn parse(
    src: &str,
    file: &Path,
    sink: &mut dyn DiagnosticSink,
) -> DiagnosticResult<SyntaxTree>
Expand description

Parse a Mosaic source string, emitting recoverable diagnostics to sink (manifest §6 stage 1). Returns the SyntaxTree; the parser never structurally aborts, so the Err arm only fires if the sink itself asks to stop.

§Examples

use std::path::Path;

use mos_core::CollectingSink;
use mos_parse::{InlineKind, Item, parse};

let mut sink = CollectingSink::new();
let result = parse("= Hello\n", Path::new("main.mos"), &mut sink);
assert!(result.is_ok(), "parse structurally aborted: {result:?}");
if let Ok(tree) = result {

    assert!(!sink.had_error());
    assert!(matches!(tree.items[0], Item::Heading { .. }));
    if let Item::Heading { inlines, .. } = &tree.items[0] {
        assert_eq!(inlines[0].kind, InlineKind::Text);
    }
}

§Errors

Returns DiagnosticAbort only if sink asks the parse to stop; the in-tree sinks never do.