From a3e1609654654b36b58aa9c9065c54dc7d46d0c8 Mon Sep 17 00:00:00 2001 From: Alain Zscheile Date: Thu, 2 Nov 2023 01:10:09 +0100 Subject: [PATCH] rust: move syntax/AST stuff into separate crate --- rust/Cargo.lock | 12 ++++++++++++ rust/crates/yanais-core/Cargo.toml | 8 +++++--- rust/crates/yanais-core/src/lib.rs | 2 -- rust/crates/yanais-syntax/Cargo.toml | 13 +++++++++++++ .../src/parser => yanais-syntax/src}/lex.rs | 0 .../parser/mod.rs => yanais-syntax/src/lib.rs} | 18 +++++++++++++++++- .../src/record.rs | 7 +++---- rust/crates/yn-mrwy57u-core/Cargo.toml | 1 + rust/crates/yn-mrwy57u-core/src/lib.rs | 9 ++++----- rust/crates/yn-mrwy57u-core/src/pat.rs | 2 +- rust/crates/yn-mrwy57u-core/src/record.rs | 4 ++-- rust/crates/yn-qgy4hbz-core/Cargo.toml | 1 + rust/crates/yn-qgy4hbz-core/src/lib.rs | 2 +- rust/crates/yn-qgy4hbz-core/src/parser/lex.rs | 2 +- 14 files changed, 61 insertions(+), 20 deletions(-) create mode 100644 rust/crates/yanais-syntax/Cargo.toml rename rust/crates/{yanais-core/src/parser => yanais-syntax/src}/lex.rs (100%) rename rust/crates/{yanais-core/src/parser/mod.rs => yanais-syntax/src/lib.rs} (95%) rename rust/crates/{yanais-core => yanais-syntax}/src/record.rs (91%) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 6d4924d..d459b79 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -499,6 +499,16 @@ dependencies = [ "miette", "nohash-hasher", "thiserror", + "yn-functor", + "yz-string-utils", +] + +[[package]] +name = "yanais-syntax" +version = "0.1.0" +dependencies = [ + "miette", + "thiserror", "unicode-ident", "unicode-normalization", "yn-functor", @@ -528,6 +538,7 @@ dependencies = [ "miette", "thiserror", "yanais-core", + "yanais-syntax", ] [[package]] @@ -549,6 +560,7 @@ dependencies = [ "unicode-ident", "unicode-normalization", "yanais-core", + "yanais-syntax", "yn-functor", "yz-string-utils", ] diff --git a/rust/crates/yanais-core/Cargo.toml b/rust/crates/yanais-core/Cargo.toml index a75b0dd..a158444 100644 --- a/rust/crates/yanais-core/Cargo.toml +++ b/rust/crates/yanais-core/Cargo.toml @@ -1,14 +1,16 @@ +# SPDX-FileCopyrightText: 2023 Alain Zscheile +# +# SPDX-License-Identifier: CC0-1.0 + [package] name = "yanais-core" version = "0.1.0" edition = "2021" -license = "Apache-2,0" +license = "Apache-2.0" [dependencies] miette = "5.10" nohash-hasher = "0.2" thiserror = "1.0" -unicode-ident = "1.0" -unicode-normalization = "0.1" yn-functor.path = "../yn-functor" yz-string-utils = "0.3.1" diff --git a/rust/crates/yanais-core/src/lib.rs b/rust/crates/yanais-core/src/lib.rs index 19e2490..8764e7c 100644 --- a/rust/crates/yanais-core/src/lib.rs +++ b/rust/crates/yanais-core/src/lib.rs @@ -2,8 +2,6 @@ pub mod egraph; pub mod literal; -pub mod parser; -pub mod record; #[macro_export] macro_rules! none_up { diff --git a/rust/crates/yanais-syntax/Cargo.toml b/rust/crates/yanais-syntax/Cargo.toml new file mode 100644 index 0000000..a781ce1 --- /dev/null +++ b/rust/crates/yanais-syntax/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "yanais-syntax" +version = "0.1.0" +edition = "2021" +license = "Apache-2.0" + +[dependencies] +miette = "5.10" +thiserror = "1.0" +unicode-ident = "1.0" +unicode-normalization = "0.1" +yn-functor.path = "../yn-functor" +yz-string-utils = "0.3.1" diff --git a/rust/crates/yanais-core/src/parser/lex.rs b/rust/crates/yanais-syntax/src/lex.rs similarity index 100% rename from rust/crates/yanais-core/src/parser/lex.rs rename to rust/crates/yanais-syntax/src/lex.rs diff --git a/rust/crates/yanais-core/src/parser/mod.rs b/rust/crates/yanais-syntax/src/lib.rs similarity index 95% rename from rust/crates/yanais-core/src/parser/mod.rs rename to rust/crates/yanais-syntax/src/lib.rs index e16f7dc..b6cd689 100644 --- a/rust/crates/yanais-core/src/parser/mod.rs +++ b/rust/crates/yanais-syntax/src/lib.rs @@ -1,9 +1,25 @@ +/* + * SPDX-FileCopyrightText: 2023 Alain Zscheile + * + * SPDX-License-Identifier: Apache-2.0 + */ + use core::{cmp, fmt, result::Result as CoreResult}; use miette::{Diagnostic, SourceSpan}; use std::sync::Arc; -pub use yz_string_utils::StrLexerBase; pub mod lex; +pub mod record; + +#[macro_export] +macro_rules! none_up { + ($x:expr) => { + match $x { + None => return Ok(None), + Some(x) => x, + } + }; +} /// A SourceSpan which is always equal to all other SourceSpans /// (to be used to ignore span differences in expression comparisons) diff --git a/rust/crates/yanais-core/src/record.rs b/rust/crates/yanais-syntax/src/record.rs similarity index 91% rename from rust/crates/yanais-core/src/record.rs rename to rust/crates/yanais-syntax/src/record.rs index b90a818..03b799f 100644 --- a/rust/crates/yanais-core/src/record.rs +++ b/rust/crates/yanais-syntax/src/record.rs @@ -7,11 +7,10 @@ use core::cmp; use std::sync::Arc; -use crate::none_up; -use crate::parser::{ +use crate::{ lex::{Token, TokenKind as Tok}, - Env as ParseEnv, Error as Perr, ErrorCtx as PeCtx, ErrorKind as Pek, EvEqSourceSpan, Keywords, - MaybeParse, Parse, ParseDefaultCtx, Result as Pres, + none_up, Env as ParseEnv, Error as Perr, ErrorCtx as PeCtx, ErrorKind as Pek, EvEqSourceSpan, + Keywords, MaybeParse, Parse, ParseDefaultCtx, Result as Pres, }; #[derive(Clone, Debug)] diff --git a/rust/crates/yn-mrwy57u-core/Cargo.toml b/rust/crates/yn-mrwy57u-core/Cargo.toml index faf3555..ff8e196 100644 --- a/rust/crates/yn-mrwy57u-core/Cargo.toml +++ b/rust/crates/yn-mrwy57u-core/Cargo.toml @@ -7,3 +7,4 @@ edition = "2021" miette = "5.10" thiserror = "1.0" yanais-core.path = "../yanais-core" +yanais-syntax.path = "../yanais-syntax" diff --git a/rust/crates/yn-mrwy57u-core/src/lib.rs b/rust/crates/yn-mrwy57u-core/src/lib.rs index 5064d0e..4d38c33 100644 --- a/rust/crates/yn-mrwy57u-core/src/lib.rs +++ b/rust/crates/yn-mrwy57u-core/src/lib.rs @@ -14,8 +14,8 @@ use parser::{ use yanais_core::none_up; pub mod parser { - use yanais_core::parser::lex as upslex; - pub use yanais_core::parser::{ + use yanais_syntax::lex as upslex; + pub use yanais_syntax::{ Error, ErrorCtx, ErrorKind, EvEqSourceSpan, FullError, MaybeParse, Parse, ParseDefaultCtx, Result, }; @@ -52,7 +52,7 @@ pub mod parser { pub type TokenKind = upslex::TokenKind; } - pub type Env<'a> = yanais_core::parser::Env<'a, lex::Kw>; + pub type Env<'a> = yanais_syntax::Env<'a, lex::Kw>; } use parser::lex::Kw; @@ -63,8 +63,7 @@ mod record; pub use expr::Expr; pub use pat::Pattern; -pub use record::Record; -pub use yanais_core::parser::EvEqSourceSpan; +pub use yanais_syntax::{record::Record, EvEqSourceSpan}; #[derive(Clone, Debug)] pub struct Lambda { diff --git a/rust/crates/yn-mrwy57u-core/src/pat.rs b/rust/crates/yn-mrwy57u-core/src/pat.rs index cc2991a..2fa0f80 100644 --- a/rust/crates/yn-mrwy57u-core/src/pat.rs +++ b/rust/crates/yn-mrwy57u-core/src/pat.rs @@ -6,7 +6,7 @@ use crate::parser::{lex, Env as ParseEnv, Error, ErrorCtx, MaybeParse, ParseDefaultCtx}; use std::sync::Arc; -use yanais_core::parser::EvEqSourceSpan; +use yanais_syntax::EvEqSourceSpan; // infallible patterns diff --git a/rust/crates/yn-mrwy57u-core/src/record.rs b/rust/crates/yn-mrwy57u-core/src/record.rs index c70542a..da9d873 100644 --- a/rust/crates/yn-mrwy57u-core/src/record.rs +++ b/rust/crates/yn-mrwy57u-core/src/record.rs @@ -7,9 +7,9 @@ use crate::{Expr, TaggedIdent}; use std::collections::BTreeMap; use std::sync::Arc; -use yanais_core::parser::EvEqSourceSpan; +use yanais_syntax::EvEqSourceSpan; -pub use yanais_core::record::Record; +pub use yanais_syntax::record::Record; pub type ModSelect = crate::Select; diff --git a/rust/crates/yn-qgy4hbz-core/Cargo.toml b/rust/crates/yn-qgy4hbz-core/Cargo.toml index 2ddf38c..dca2ca5 100644 --- a/rust/crates/yn-qgy4hbz-core/Cargo.toml +++ b/rust/crates/yn-qgy4hbz-core/Cargo.toml @@ -15,6 +15,7 @@ unicode-ident = "1.0" unicode-normalization = "0.1" yn-functor.path = "../yn-functor" yanais-core.path = "../yanais-core" +yanais-syntax.path = "../yanais-syntax" yz-string-utils = "0.3.1" [dev-dependencies] diff --git a/rust/crates/yn-qgy4hbz-core/src/lib.rs b/rust/crates/yn-qgy4hbz-core/src/lib.rs index 52b80b8..2c398b9 100644 --- a/rust/crates/yn-qgy4hbz-core/src/lib.rs +++ b/rust/crates/yn-qgy4hbz-core/src/lib.rs @@ -20,7 +20,7 @@ pub mod typeck; use miette::SourceSpan; -pub use yanais_core::parser::EvEqSourceSpan; +pub use yanais_syntax::EvEqSourceSpan; pub trait Subst { fn incr_refs(&mut self, keep: usize, offset: usize); diff --git a/rust/crates/yn-qgy4hbz-core/src/parser/lex.rs b/rust/crates/yn-qgy4hbz-core/src/parser/lex.rs index d36455e..daeb6cf 100644 --- a/rust/crates/yn-qgy4hbz-core/src/parser/lex.rs +++ b/rust/crates/yn-qgy4hbz-core/src/parser/lex.rs @@ -134,7 +134,7 @@ impl<'a> Lexer<'a> { } } -use yanais_core::parser::lex::{consume_ident, try_consume_ident}; +use yanais_syntax::lex::{consume_ident, try_consume_ident}; impl<'a> Iterator for Lexer<'a> { type Item = Result;