flash 0.0.2

Shell parser, formatter, and interpreter with Bash support
Documentation
use flash::lexer::Lexer;
use flash::parser::Parser;

fn main() {
    // Retired from https://gitlab.archlinux.org/archlinux/packaging/packages/rio/-/blob/main/PKGBUILD
    let content = "
# Maintainer:  Orhun Parmaksız <orhun@archlinux.org>
# Maintainer: Caleb Maclennan <caleb@alerque.com>
# Contributor: bbx0 <39773919+bbx0@users.noreply.github.com>
# Contributor: Raphael Amorim <rapha850@gmail.com>
pkgname=rio
pkgver=0.2.12
pkgrel=1
pkgdesc=\"A hardware-accelerated GPU terminal emulator powered by WebGPU\"
arch=('x86_64')
url=\"https://github.com/raphamorim/rio\"
license=(\"MIT\")
# https://raphamorim.io/rio/install/#arch-linux
options=('!lto')
depends=(
'gcc-libs'
'fontconfig'
'freetype2'
'glibc'
'hicolor-icon-theme'
)
makedepends=(
'cargo'
'cmake'
'desktop-file-utils'
'libxcb'
'libxkbcommon'
'python'
)
source=(\"${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz\")
sha512sums=('2a73567a591b93707a35e1658572fb48cd8dbeda4cf4418de5887183b0c90c93213b6f15ff47a50b9aaaccd295e185ebcfb594847d7ef8c9e91293740a78c493')
prepare() {
cd \"${pkgname}-${pkgver}\"
cargo fetch --locked --target \"$(rustc -vV | sed -n 's/host: //p')\"
}
build() {
cd \"${pkgname}-${pkgver}\"
cargo build --frozen --release --all-features
}
check() {
cd \"${pkgname}-${pkgver}\"
cargo test --frozen --workspace
}
package() {
cd \"${pkgname}-${pkgver}\"
install -Dm0755 -t \"${pkgdir}/usr/bin/\" \"target/release/${pkgname}\"
install -Dm0644 -t \"${pkgdir}/usr/share/doc/${pkgname}/\" \"README.md\"
install -Dm0644 -t \"${pkgdir}/usr/share/licenses/${pkgname}/\" \"LICENSE\"
desktop-file-install -m 644 --dir \"${pkgdir}/usr/share/applications/\" \"misc/${pkgname}.desktop\"
install -Dm0644 \"docs/static/assets/${pkgname}-logo.svg\" \"$pkgdir/usr/share/icons/hicolor/scalable/apps/${pkgname}.svg\"
}
# vim: ts=2 sw=2 et:
";

    // Create a lexer for the content
    let lexer = Lexer::new(content);

    // Create a parser with the lexer
    let mut parser = Parser::new(lexer);

    // Parse the entire script
    let ast = parser.parse_script();

    println!("{:#?}", ast);
}