arity-parser 0.6.1

Lossless CST parser, typed AST wrappers, and incremental reparser for the R language
Documentation

arity-parser

The lossless CST parser, typed AST wrappers, and incremental reparser for the R language, extracted from arity.

This crate is the parsing engine behind the arity CLI and language server. It is published so that other tools can build on it, but its API surface is still early and may change between releases; it is versioned independently of the arity CLI.

use arity_parser::parser::{parse, reconstruct};

let text = "f <- function(x) x + 1\n";
let output = parse(text);
assert!(output.diagnostics.is_empty());
assert_eq!(reconstruct(text), text);

The parser preserves all source text (whitespace, comments, roxygen structure), so reconstructing any parse tree yields the input byte-for-byte.

Package NAMESPACE files use the same lossless CST through a typed surface that finds directives only where R permits them and never evaluates conditional expressions:

use arity_parser::namespace::{self, DirectiveKind};

let text = "export(foo)\nimportFrom(stats, predict)\n";
let output = namespace::parse(text);
assert!(output.diagnostics.is_empty());
assert_eq!(
    output
        .document()
        .directives()
        .map(|directive| directive.kind())
        .collect::<Vec<_>>(),
    [DirectiveKind::Export, DirectiveKind::ImportFrom]
);
assert_eq!(namespace::reconstruct(text), text);