Scripting bug fixes and more tests

This commit is contained in:
2025-03-16 03:22:17 -04:00
parent 92d7766765
commit 51d735073f
21 changed files with 4846 additions and 823 deletions

View File

@@ -280,6 +280,20 @@ impl<'t> ParseStream<'t> {
None
}
}
/// Catches a Sep token in cases where separators are optional
///
/// e.g. both `if foo; then bar; fi` and
/// ```bash
/// if foo; then
/// bar
/// fi
/// ```
/// are valid syntax
fn catch_separator(&mut self, node_tks: &mut Vec<Tk<'t>>) {
if *self.next_tk_class() == TkRule::Sep {
node_tks.push(self.next_tk().unwrap());
}
}
fn next_tk_is_some(&self) -> bool {
self.tokens.first().is_some_and(|tk| tk.class != TkRule::EOI)
}
@@ -374,7 +388,6 @@ impl<'t> ParseStream<'t> {
&node_tks.get_span().unwrap()
));
};
cond.tokens.debug_tokens();
node_tks.extend(cond.tokens.clone());
if !self.check_keyword("then") || !self.next_tk_is_some() {
@@ -384,10 +397,10 @@ impl<'t> ParseStream<'t> {
));
}
node_tks.push(self.next_tk().unwrap());
self.catch_separator(&mut node_tks);
let mut body_blocks = vec![];
while let Some(body_block) = self.parse_block(true)? {
body_block.tokens.debug_tokens();
node_tks.extend(body_block.tokens.clone());
body_blocks.push(body_block);
}
@@ -399,18 +412,18 @@ impl<'t> ParseStream<'t> {
};
let cond_node = CondNode { cond: Box::new(cond), body: body_blocks };
cond_nodes.push(cond_node);
flog!(DEBUG, cond_nodes.len());
flog!(DEBUG, !self.check_keyword("elif") || !self.next_tk_is_some());
if !self.check_keyword("elif") || !self.next_tk_is_some() {
break
} else {
node_tks.push(self.next_tk().unwrap());
self.catch_separator(&mut node_tks);
}
}
if self.check_keyword("else") {
node_tks.push(self.next_tk().unwrap());
self.catch_separator(&mut node_tks);
while let Some(block) = self.parse_block(true)? {
else_block.push(block)
}
@@ -429,6 +442,7 @@ impl<'t> ParseStream<'t> {
));
}
node_tks.push(self.next_tk().unwrap());
self.catch_separator(&mut node_tks);
let node = Node {
class: NdRule::IfNode { cond_nodes, else_block },
@@ -436,7 +450,6 @@ impl<'t> ParseStream<'t> {
redirs: vec![],
tokens: node_tks
};
flog!(DEBUG, node);
Ok(Some(node))
}
fn parse_loop(&mut self) -> ShResult<Option<Node<'t>>> {
@@ -454,6 +467,7 @@ impl<'t> ParseStream<'t> {
.parse() // LoopKind implements FromStr
.unwrap();
node_tks.push(loop_tk);
self.catch_separator(&mut node_tks);
let Some(cond) = self.parse_block(true)? else {
return Err(parse_err_full(
@@ -470,6 +484,7 @@ impl<'t> ParseStream<'t> {
))
}
node_tks.push(self.next_tk().unwrap());
self.catch_separator(&mut node_tks);
let mut body = vec![];
while let Some(block) = self.parse_block(true)? {
@@ -490,6 +505,7 @@ impl<'t> ParseStream<'t> {
))
}
node_tks.push(self.next_tk().unwrap());
self.catch_separator(&mut node_tks);
cond_node = CondNode { cond: Box::new(cond), body };
let loop_node = Node {
@@ -498,7 +514,6 @@ impl<'t> ParseStream<'t> {
redirs: vec![],
tokens: node_tks
};
flog!(DEBUG, loop_node);
Ok(Some(loop_node))
}
fn parse_pipeline(&mut self) -> ShResult<Option<Node<'t>>> {
@@ -756,12 +771,14 @@ impl<'t> Iterator for ParseStream<'t> {
if self.flags.contains(ParseFlags::ERROR) {
return None
}
if let Some(tk) = self.tokens.first() {
if tk.class == TkRule::EOI {
while let Some(tk) = self.tokens.first() {
if let TkRule::EOI = tk.class {
return None
}
if tk.class == TkRule::SOI {
if let TkRule::SOI | TkRule::Sep = tk.class {
self.next_tk();
} else {
break
}
}
match self.parse_cmd_list() {

View File

@@ -9,6 +9,7 @@ fn simple_expansion() {
write_vars(|v| v.new_var("foo", "this is the value of the variable".into()));
let mut tokens: Vec<Tk> = LexStream::new(varsub, LexFlags::empty())
.map(|tk| tk.unwrap())
.filter(|tk| !matches!(tk.class, TkRule::EOI | TkRule::SOI))
.collect();
let var_tk = tokens.pop().unwrap();

View File

@@ -3,7 +3,9 @@ use super::super::*;
#[test]
fn parse_simple() {
let input = "echo hello world";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
@@ -12,7 +14,9 @@ fn parse_simple() {
#[test]
fn parse_pipeline() {
let input = "echo foo | sed s/foo/bar";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
@@ -21,7 +25,9 @@ fn parse_pipeline() {
#[test]
fn parse_conjunction() {
let input = "echo foo && echo bar";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
@@ -30,7 +36,9 @@ fn parse_conjunction() {
#[test]
fn parse_conjunction_and_pipeline() {
let input = "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
@@ -42,7 +50,90 @@ fn parse_multiline() {
echo hello world
echo foo bar
echo boo biz";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
}
#[test]
fn parse_if_simple() {
let input = "if foo; then echo bar; fi";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
}
#[test]
fn parse_if_with_elif() {
let input = "if foo; then echo bar; elif bar; then echo foo; fi";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
}
#[test]
fn parse_if_multiple_elif() {
let input = "if foo; then echo bar; elif bar; then echo foo; elif biz; then echo baz; fi";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
}
#[test]
fn parse_if_multiline() {
let input = "
if foo; then
echo bar
elif bar; then
echo foo;
elif biz; then
echo baz
fi";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
}
#[test]
fn parse_loop_simple() {
let input = "while foo; do bar; done";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
}
#[test]
fn parse_loop_until() {
let input = "until foo; do bar; done";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)
}
#[test]
fn parse_loop_multiline() {
let input = "
until foo; do
bar
done";
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty())
.map(|tk| tk.unwrap())
.collect();
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
insta::assert_debug_snapshot!(nodes)

View File

@@ -3,160 +3,160 @@ source: src/tests/lexer.rs
expression: tokens
---
[
Tk {
class: SOI,
err_span: None,
err: Null,
span: Span {
range: 0..0,
source: "echo hello world\necho foo bar\necho boo biz",
Ok(
Tk {
class: SOI,
span: Span {
range: 0..0,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 0..4,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..10,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 5..10,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..16,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 11..16,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 16..17,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Sep,
span: Span {
range: 16..17,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 17..21,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 17..21,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 22..25,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 22..25,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 26..29,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 26..29,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 29..30,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Sep,
span: Span {
range: 29..30,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 30..34,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 30..34,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 35..38,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 35..38,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 39..42,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 39..42,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: EOI,
err_span: None,
err: Null,
span: Span {
range: 42..42,
source: "echo hello world\necho foo bar\necho boo biz",
),
Ok(
Tk {
class: EOI,
span: Span {
range: 42..42,
source: "echo hello world\necho foo bar\necho boo biz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
),
]

View File

@@ -3,76 +3,76 @@ source: src/tests/lexer.rs
expression: tokens
---
[
Tk {
class: SOI,
err_span: None,
err: Null,
span: Span {
range: 0..0,
source: "echo \"foo bar\" biz baz",
Ok(
Tk {
class: SOI,
span: Span {
range: 0..0,
source: "echo \"foo bar\" biz baz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo \"foo bar\" biz baz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 0..4,
source: "echo \"foo bar\" biz baz",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..14,
source: "echo \"foo bar\" biz baz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 5..14,
source: "echo \"foo bar\" biz baz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..18,
source: "echo \"foo bar\" biz baz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 15..18,
source: "echo \"foo bar\" biz baz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 19..22,
source: "echo \"foo bar\" biz baz",
),
Ok(
Tk {
class: Str,
span: Span {
range: 19..22,
source: "echo \"foo bar\" biz baz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: EOI,
err_span: None,
err: Null,
span: Span {
range: 22..22,
source: "echo \"foo bar\" biz baz",
),
Ok(
Tk {
class: EOI,
span: Span {
range: 22..22,
source: "echo \"foo bar\" biz baz",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
),
]

View File

@@ -3,76 +3,76 @@ source: src/tests/lexer.rs
expression: tokens
---
[
Tk {
class: SOI,
err_span: None,
err: Null,
span: Span {
range: 0..0,
source: "echo foo > bar.txt",
Ok(
Tk {
class: SOI,
span: Span {
range: 0..0,
source: "echo foo > bar.txt",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo > bar.txt",
),
Ok(
Tk {
class: Str,
span: Span {
range: 0..4,
source: "echo foo > bar.txt",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo > bar.txt",
),
Ok(
Tk {
class: Str,
span: Span {
range: 5..8,
source: "echo foo > bar.txt",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Redir,
err_span: None,
err: Null,
span: Span {
range: 9..10,
source: "echo foo > bar.txt",
),
Ok(
Tk {
class: Redir,
span: Span {
range: 9..10,
source: "echo foo > bar.txt",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..18,
source: "echo foo > bar.txt",
),
Ok(
Tk {
class: Str,
span: Span {
range: 11..18,
source: "echo foo > bar.txt",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: EOI,
err_span: None,
err: Null,
span: Span {
range: 18..18,
source: "echo foo > bar.txt",
),
Ok(
Tk {
class: EOI,
span: Span {
range: 18..18,
source: "echo foo > bar.txt",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
),
]

View File

@@ -3,64 +3,64 @@ source: src/tests/lexer.rs
expression: tokens
---
[
Tk {
class: SOI,
err_span: None,
err: Null,
span: Span {
range: 0..0,
source: "echo foo 1>&2",
Ok(
Tk {
class: SOI,
span: Span {
range: 0..0,
source: "echo foo 1>&2",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo 1>&2",
),
Ok(
Tk {
class: Str,
span: Span {
range: 0..4,
source: "echo foo 1>&2",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo 1>&2",
),
Ok(
Tk {
class: Str,
span: Span {
range: 5..8,
source: "echo foo 1>&2",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Redir,
err_span: None,
err: Null,
span: Span {
range: 9..13,
source: "echo foo 1>&2",
),
Ok(
Tk {
class: Redir,
span: Span {
range: 9..13,
source: "echo foo 1>&2",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: EOI,
err_span: None,
err: Null,
span: Span {
range: 13..13,
source: "echo foo 1>&2",
),
Ok(
Tk {
class: EOI,
span: Span {
range: 13..13,
source: "echo foo 1>&2",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
),
]

View File

@@ -3,64 +3,64 @@ source: src/tests/lexer.rs
expression: tokens
---
[
Tk {
class: SOI,
err_span: None,
err: Null,
span: Span {
range: 0..0,
source: "echo hello world",
Ok(
Tk {
class: SOI,
span: Span {
range: 0..0,
source: "echo hello world",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo hello world",
),
Ok(
Tk {
class: Str,
span: Span {
range: 0..4,
source: "echo hello world",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..10,
source: "echo hello world",
),
Ok(
Tk {
class: Str,
span: Span {
range: 5..10,
source: "echo hello world",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..16,
source: "echo hello world",
),
Ok(
Tk {
class: Str,
span: Span {
range: 11..16,
source: "echo hello world",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: EOI,
err_span: None,
err: Null,
span: Span {
range: 16..16,
source: "echo hello world",
),
Ok(
Tk {
class: EOI,
span: Span {
range: 16..16,
source: "echo hello world",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
),
]

View File

@@ -3,124 +3,124 @@ source: src/tests/lexer.rs
expression: tokens
---
[
Tk {
class: SOI,
err_span: None,
err: Null,
span: Span {
range: 0..0,
source: "if true; then echo foo; fi",
Ok(
Tk {
class: SOI,
span: Span {
range: 0..0,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..2,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Str,
span: Span {
range: 0..2,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 3..7,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Str,
span: Span {
range: 3..7,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 7..9,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Sep,
span: Span {
range: 7..9,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 9..13,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Str,
span: Span {
range: 9..13,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 14..18,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Str,
span: Span {
range: 14..18,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 19..22,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Str,
span: Span {
range: 19..22,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 22..24,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Sep,
span: Span {
range: 22..24,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 24..26,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: Str,
span: Span {
range: 24..26,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: EOI,
err_span: None,
err: Null,
span: Span {
range: 26..26,
source: "if true; then echo foo; fi",
),
Ok(
Tk {
class: EOI,
span: Span {
range: 26..26,
source: "if true; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
flags: TkFlags(
0x0,
),
},
),
]

View File

@@ -17,8 +17,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo && echo bar",
@@ -29,8 +27,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo && echo bar",
@@ -48,8 +44,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo && echo bar",
@@ -60,8 +54,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo && echo bar",
@@ -82,8 +74,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo && echo bar",
@@ -94,8 +84,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo && echo bar",
@@ -118,8 +106,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..16,
source: "echo foo && echo bar",
@@ -130,8 +116,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 17..20,
source: "echo foo && echo bar",
@@ -149,8 +133,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..16,
source: "echo foo && echo bar",
@@ -161,8 +143,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 17..20,
source: "echo foo && echo bar",
@@ -183,8 +163,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..16,
source: "echo foo && echo bar",
@@ -195,8 +173,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 17..20,
source: "echo foo && echo bar",
@@ -218,8 +194,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo && echo bar",
@@ -230,8 +204,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo && echo bar",
@@ -242,8 +214,6 @@ expression: nodes
},
Tk {
class: And,
err_span: None,
err: Null,
span: Span {
range: 9..11,
source: "echo foo && echo bar",
@@ -254,8 +224,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..16,
source: "echo foo && echo bar",
@@ -266,8 +234,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 17..20,
source: "echo foo && echo bar",

View File

@@ -17,8 +17,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -29,8 +27,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -48,8 +44,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -60,8 +54,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -78,8 +70,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -90,8 +80,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..25,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -109,8 +97,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -121,8 +107,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..25,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -143,8 +127,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -155,8 +137,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -167,8 +147,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 9..10,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -179,8 +157,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -191,8 +167,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..25,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -215,8 +189,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 29..33,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -227,8 +199,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 34..37,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -246,8 +216,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 29..33,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -258,8 +226,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 34..37,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -276,8 +242,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -288,8 +252,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 44..54,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -307,8 +269,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -319,8 +279,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 44..54,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -341,8 +299,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 29..33,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -353,8 +309,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 34..37,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -365,8 +319,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 38..39,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -377,8 +329,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -389,8 +339,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 44..54,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -413,8 +361,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 58..62,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -425,8 +371,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 63..66,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -437,8 +381,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 67..70,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -456,8 +398,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 58..62,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -468,8 +408,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 63..66,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -480,8 +418,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 67..70,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -498,8 +434,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 73..76,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -510,8 +444,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 77..82,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -522,8 +454,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 83..90,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -534,8 +464,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 91..95,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -553,8 +481,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 73..76,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -565,8 +491,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 77..82,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -577,8 +501,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 83..90,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -589,8 +511,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 91..95,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -611,8 +531,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 58..62,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -623,8 +541,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 63..66,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -635,8 +551,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 67..70,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -647,8 +561,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 71..72,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -659,8 +571,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 73..76,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -671,8 +581,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 77..82,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -683,8 +591,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 83..90,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -695,8 +601,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 91..95,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -718,8 +622,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -730,8 +632,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -742,8 +642,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 9..10,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -754,8 +652,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -766,8 +662,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..25,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -778,8 +672,6 @@ expression: nodes
},
Tk {
class: And,
err_span: None,
err: Null,
span: Span {
range: 26..28,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -790,8 +682,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 29..33,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -802,8 +692,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 34..37,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -814,8 +702,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 38..39,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -826,8 +712,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -838,8 +722,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 44..54,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -850,8 +732,6 @@ expression: nodes
},
Tk {
class: Or,
err_span: None,
err: Null,
span: Span {
range: 55..57,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -862,8 +742,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 58..62,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -874,8 +752,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 63..66,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -886,8 +762,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 67..70,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -898,8 +772,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 71..72,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -910,8 +782,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 73..76,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -922,8 +792,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 77..82,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -934,8 +802,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 83..90,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",
@@ -946,8 +812,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 91..95,
source: "echo foo | sed s/foo/bar/ && echo bar | sed s/bar/foo/ || echo foo bar | sed s/foo bar/bar foo/",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,382 @@
---
source: src/tests/parser.rs
expression: nodes
---
[
Ok(
Node {
class: CmdList {
elements: [
ConjunctNode {
cmd: Node {
class: IfNode {
cond_nodes: [
CondNode {
cond: Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
body: [
Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
},
],
else_block: [],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..2,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 8..12,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 23..25,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
operator: Null,
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..2,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 8..12,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 23..25,
source: "if foo; then echo bar; fi",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
),
]

View File

@@ -0,0 +1,708 @@
---
source: src/tests/parser.rs
expression: nodes
---
[
Ok(
Node {
class: CmdList {
elements: [
ConjunctNode {
cmd: Node {
class: IfNode {
cond_nodes: [
CondNode {
cond: Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
body: [
Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
},
CondNode {
cond: Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 28..31,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 28..31,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 31..33,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 28..31,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 31..33,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
body: [
Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 38..42,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 43..46,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 38..42,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 43..46,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 46..48,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 38..42,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 43..46,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 46..48,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
],
},
],
},
],
else_block: [],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..2,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 8..12,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 23..27,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 28..31,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 31..33,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 33..37,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 38..42,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 43..46,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 46..48,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 48..50,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
operator: Null,
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..2,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 3..6,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 6..8,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 8..12,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 13..17,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 18..21,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 21..23,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 23..27,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 28..31,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 31..33,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 33..37,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 38..42,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
IS_CMD | BUILTIN,
),
},
Tk {
class: Str,
span: Span {
range: 43..46,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Sep,
span: Span {
range: 46..48,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 48..50,
source: "if foo; then echo bar; elif bar; then echo foo; fi",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
),
]

View File

@@ -0,0 +1,350 @@
---
source: src/tests/parser.rs
expression: nodes
---
[
Ok(
Node {
class: CmdList {
elements: [
ConjunctNode {
cmd: Node {
class: LoopNode {
kind: Until,
cond_node: CondNode {
cond: Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 7..10,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 7..10,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 10..12,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 7..10,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 10..12,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
],
},
body: [
Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 16..19,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 16..19,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 19..20,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 16..19,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 19..20,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
],
},
],
},
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 1..6,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 7..10,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 10..12,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 12..14,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Sep,
span: Span {
range: 14..16,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 16..19,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 19..20,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 20..24,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
operator: Null,
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 1..6,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 7..10,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 10..12,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 12..14,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Sep,
span: Span {
range: 14..16,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 16..19,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 19..20,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 20..24,
source: "\nuntil foo; do\n\tbar\ndone",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
),
]

View File

@@ -0,0 +1,330 @@
---
source: src/tests/parser.rs
expression: nodes
---
[
Ok(
Node {
class: CmdList {
elements: [
ConjunctNode {
cmd: Node {
class: LoopNode {
kind: While,
cond_node: CondNode {
cond: Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 6..9,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 6..9,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 6..9,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
body: [
Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 14..17,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 14..17,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 14..17,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
],
},
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..5,
source: "while foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 6..9,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 11..13,
source: "while foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 14..17,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 19..23,
source: "while foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
operator: Null,
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..5,
source: "while foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 6..9,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 11..13,
source: "while foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 14..17,
source: "while foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "while foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 19..23,
source: "while foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
),
]

View File

@@ -0,0 +1,330 @@
---
source: src/tests/parser.rs
expression: nodes
---
[
Ok(
Node {
class: CmdList {
elements: [
ConjunctNode {
cmd: Node {
class: LoopNode {
kind: Until,
cond_node: CondNode {
cond: Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 6..9,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 6..9,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 6..9,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
body: [
Node {
class: Pipeline {
cmds: [
Node {
class: Command {
assignments: [],
argv: [
Tk {
class: Str,
span: Span {
range: 14..17,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 14..17,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
],
pipe_err: false,
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 14..17,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
],
},
],
},
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..5,
source: "until foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 6..9,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 11..13,
source: "until foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 14..17,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 19..23,
source: "until foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
operator: Null,
},
],
},
flags: NdFlags(
0x0,
),
redirs: [],
tokens: [
Tk {
class: Str,
span: Span {
range: 0..5,
source: "until foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 6..9,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 9..11,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 11..13,
source: "until foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
Tk {
class: Str,
span: Span {
range: 14..17,
source: "until foo; do bar; done",
},
flags: TkFlags(
IS_CMD,
),
},
Tk {
class: Sep,
span: Span {
range: 17..19,
source: "until foo; do bar; done",
},
flags: TkFlags(
0x0,
),
},
Tk {
class: Str,
span: Span {
range: 19..23,
source: "until foo; do bar; done",
},
flags: TkFlags(
KEYWORD,
),
},
],
},
),
]

View File

@@ -17,8 +17,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 1..5,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -29,8 +27,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 6..11,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -41,8 +37,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..17,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -60,8 +54,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 1..5,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -72,8 +64,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 6..11,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -84,8 +74,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..17,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -96,8 +84,6 @@ expression: nodes
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 17..18,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -118,8 +104,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 1..5,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -130,8 +114,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 6..11,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -142,8 +124,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..17,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -154,8 +134,6 @@ expression: nodes
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 17..18,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -177,8 +155,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 1..5,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -189,8 +165,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 6..11,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -201,8 +175,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 12..17,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -213,8 +185,6 @@ expression: nodes
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 17..18,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -240,8 +210,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 18..22,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -252,8 +220,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 23..26,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -264,8 +230,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 27..30,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -283,8 +247,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 18..22,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -295,8 +257,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 23..26,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -307,8 +267,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 27..30,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -319,8 +277,6 @@ expression: nodes
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 30..31,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -341,8 +297,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 18..22,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -353,8 +307,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 23..26,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -365,8 +317,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 27..30,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -377,8 +327,6 @@ expression: nodes
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 30..31,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -400,8 +348,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 18..22,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -412,8 +358,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 23..26,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -424,8 +368,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 27..30,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -436,8 +378,6 @@ expression: nodes
},
Tk {
class: Sep,
err_span: None,
err: Null,
span: Span {
range: 30..31,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -463,8 +403,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 31..35,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -475,8 +413,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 36..39,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -487,8 +423,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -506,8 +440,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 31..35,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -518,8 +450,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 36..39,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -530,8 +460,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -552,8 +480,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 31..35,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -564,8 +490,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 36..39,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -576,8 +500,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -599,8 +521,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 31..35,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -611,8 +531,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 36..39,
source: "\necho hello world\necho foo bar\necho boo biz",
@@ -623,8 +541,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 40..43,
source: "\necho hello world\necho foo bar\necho boo biz",

View File

@@ -17,8 +17,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar",
@@ -29,8 +27,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar",
@@ -48,8 +44,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar",
@@ -60,8 +54,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar",
@@ -78,8 +70,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar",
@@ -90,8 +80,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..24,
source: "echo foo | sed s/foo/bar",
@@ -109,8 +97,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar",
@@ -121,8 +107,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..24,
source: "echo foo | sed s/foo/bar",
@@ -143,8 +127,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar",
@@ -155,8 +137,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar",
@@ -167,8 +147,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 9..10,
source: "echo foo | sed s/foo/bar",
@@ -179,8 +157,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar",
@@ -191,8 +167,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..24,
source: "echo foo | sed s/foo/bar",
@@ -214,8 +188,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo foo | sed s/foo/bar",
@@ -226,8 +198,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..8,
source: "echo foo | sed s/foo/bar",
@@ -238,8 +208,6 @@ expression: nodes
},
Tk {
class: Pipe,
err_span: None,
err: Null,
span: Span {
range: 9..10,
source: "echo foo | sed s/foo/bar",
@@ -250,8 +218,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..14,
source: "echo foo | sed s/foo/bar",
@@ -262,8 +228,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 15..24,
source: "echo foo | sed s/foo/bar",

View File

@@ -17,8 +17,6 @@ expression: nodes
argv: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo hello world",
@@ -29,8 +27,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..10,
source: "echo hello world",
@@ -41,8 +37,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..16,
source: "echo hello world",
@@ -60,8 +54,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo hello world",
@@ -72,8 +64,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..10,
source: "echo hello world",
@@ -84,8 +74,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..16,
source: "echo hello world",
@@ -106,8 +94,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo hello world",
@@ -118,8 +104,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..10,
source: "echo hello world",
@@ -130,8 +114,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..16,
source: "echo hello world",
@@ -153,8 +135,6 @@ expression: nodes
tokens: [
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 0..4,
source: "echo hello world",
@@ -165,8 +145,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 5..10,
source: "echo hello world",
@@ -177,8 +155,6 @@ expression: nodes
},
Tk {
class: Str,
err_span: None,
err: Null,
span: Span {
range: 11..16,
source: "echo hello world",