Move the wasm lib, and cleanup rust directory and all references (#5585)
* git mv src/wasm-lib rust Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv wasm-lib to workspace Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv kcl-lib Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv derive docs Signed-off-by: Jess Frazelle <github@jessfraz.com> * resolve file paths Signed-off-by: Jess Frazelle <github@jessfraz.com> * clippy Signed-off-by: Jess Frazelle <github@jessfraz.com> * move more shit Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix more paths Signed-off-by: Jess Frazelle <github@jessfraz.com> * make yarn build:wasm work Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix scripts Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> * better references Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix cargo ci Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix reference Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix more ci Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix tests Signed-off-by: Jess Frazelle <github@jessfraz.com> * cargo sort Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix script Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fmt Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix a dep Signed-off-by: Jess Frazelle <github@jessfraz.com> * sort Signed-off-by: Jess Frazelle <github@jessfraz.com> * remove unused deps Signed-off-by: Jess Frazelle <github@jessfraz.com> * Revert "remove unused deps" This reverts commit fbabdb062e275fd5cbc1476f8480a1afee15d972. * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * deps; Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
85
rust/kcl-lib/src/walk/ast_walk.rs
Normal file
85
rust/kcl-lib/src/walk/ast_walk.rs
Normal file
@ -0,0 +1,85 @@
|
||||
use anyhow::Result;
|
||||
|
||||
use super::ast_visitor::{Visitable, Visitor};
|
||||
use crate::{
|
||||
parsing::ast::types::{NodeRef, Program},
|
||||
walk::Node,
|
||||
};
|
||||
|
||||
/// *DEPRECATED* Walk trait.
|
||||
///
|
||||
/// This was written before [Visitor], which is the better way to traverse
|
||||
/// a AST.
|
||||
///
|
||||
/// This trait continues to exist in order to not change all the linter
|
||||
/// as we refine the walk code.
|
||||
///
|
||||
/// This, internally, uses the new [Visitor] trait, and is only provided as
|
||||
/// a stub until we migrate all existing code off this trait.
|
||||
pub trait Walker<'a> {
|
||||
/// Walk will visit every element of the AST, recursing through the
|
||||
/// whole tree.
|
||||
fn walk(&self, n: Node<'a>) -> Result<bool>;
|
||||
}
|
||||
|
||||
impl<'tree, VisitorT> Walker<'tree> for VisitorT
|
||||
where
|
||||
VisitorT: Visitor<'tree>,
|
||||
VisitorT: Clone,
|
||||
anyhow::Error: From<VisitorT::Error>,
|
||||
VisitorT::Error: Send,
|
||||
VisitorT::Error: Sync,
|
||||
{
|
||||
fn walk(&self, n: Node<'tree>) -> Result<bool> {
|
||||
if !n.visit(self.clone())? {
|
||||
return Ok(false);
|
||||
}
|
||||
for child in n.children() {
|
||||
if !Self::walk(self, child)? {
|
||||
return Ok(false);
|
||||
}
|
||||
}
|
||||
Ok(true)
|
||||
}
|
||||
}
|
||||
|
||||
/// Run the Walker against all [Node]s in a [Program].
|
||||
pub fn walk<'a, WalkT>(prog: NodeRef<'a, Program>, f: WalkT) -> Result<bool>
|
||||
where
|
||||
WalkT: Walker<'a>,
|
||||
{
|
||||
let prog: Node = prog.into();
|
||||
f.walk(prog)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
macro_rules! kcl {
|
||||
( $kcl:expr ) => {{
|
||||
$crate::parsing::top_level_parse($kcl).unwrap()
|
||||
}};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn stop_walking() {
|
||||
let program = kcl!(
|
||||
"
|
||||
const foo = 1
|
||||
const bar = 2
|
||||
"
|
||||
);
|
||||
|
||||
walk(&program, |node| {
|
||||
if let Node::VariableDeclarator(vd) = node {
|
||||
if vd.id.name == "foo" {
|
||||
return Ok::<bool, anyhow::Error>(false);
|
||||
}
|
||||
panic!("walk didn't stop");
|
||||
}
|
||||
Ok(true)
|
||||
})
|
||||
.unwrap();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user