Progress
This commit is contained in:
19
src/tests/expand.rs
Normal file
19
src/tests/expand.rs
Normal file
@@ -0,0 +1,19 @@
|
||||
use parse::lex::{Tk, TkFlags, TkRule};
|
||||
use state::write_vars;
|
||||
use super::super::*;
|
||||
|
||||
#[test]
|
||||
fn simple_expansion() {
|
||||
let varsub = "$foo";
|
||||
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())
|
||||
.filter(|tk| !matches!(tk.class, TkRule::EOI | TkRule::SOI))
|
||||
.collect();
|
||||
let var_tk = tokens.pop().unwrap();
|
||||
|
||||
let var_span = var_tk.span.clone();
|
||||
let exp_tk = var_tk.expand(var_span, TkFlags::empty());
|
||||
write_vars(|v| v.vars_mut().clear());
|
||||
insta::assert_debug_snapshot!(exp_tk.get_words())
|
||||
}
|
||||
36
src/tests/lexer.rs
Normal file
36
src/tests/lexer.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
use super::super::*;
|
||||
#[test]
|
||||
fn lex_simple() {
|
||||
let input = "echo hello world";
|
||||
let tokens: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(tokens)
|
||||
}
|
||||
#[test]
|
||||
fn lex_redir() {
|
||||
let input = "echo foo > bar.txt";
|
||||
let tokens: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(tokens)
|
||||
}
|
||||
#[test]
|
||||
fn lex_redir_fds() {
|
||||
let input = "echo foo 1>&2";
|
||||
let tokens: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(tokens)
|
||||
}
|
||||
#[test]
|
||||
fn lex_quote_str() {
|
||||
let input = "echo \"foo bar\" biz baz";
|
||||
let tokens: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(tokens)
|
||||
}
|
||||
#[test]
|
||||
fn lex_with_keywords() {
|
||||
let input = "if true; then echo foo; fi";
|
||||
let tokens: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(tokens)
|
||||
}
|
||||
4
src/tests/mod.rs
Normal file
4
src/tests/mod.rs
Normal file
@@ -0,0 +1,4 @@
|
||||
pub mod lexer;
|
||||
pub mod parser;
|
||||
pub mod expand;
|
||||
pub mod term;
|
||||
37
src/tests/parser.rs
Normal file
37
src/tests/parser.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use super::super::*;
|
||||
|
||||
#[test]
|
||||
fn parse_simple() {
|
||||
let input = "echo hello world";
|
||||
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(nodes)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_pipeline() {
|
||||
let input = "echo foo | sed s/foo/bar";
|
||||
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(nodes)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_conjunction() {
|
||||
let input = "echo foo && echo bar";
|
||||
let tk_stream: Vec<_> = LexStream::new(input, LexFlags::empty()).collect();
|
||||
let nodes: Vec<_> = ParseStream::new(tk_stream).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(nodes)
|
||||
}
|
||||
|
||||
#[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 nodes: Vec<_> = ParseStream::new(tk_stream).collect();
|
||||
|
||||
insta::assert_debug_snapshot!(nodes)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/expand.rs
|
||||
expression: exp_tk.get_words()
|
||||
---
|
||||
[
|
||||
"this",
|
||||
"is",
|
||||
"the",
|
||||
"value",
|
||||
"of",
|
||||
"the",
|
||||
"variable",
|
||||
]
|
||||
78
src/tests/snapshots/fern__tests__lexer__lex_quote_str.snap
Normal file
78
src/tests/snapshots/fern__tests__lexer__lex_quote_str.snap
Normal file
@@ -0,0 +1,78 @@
|
||||
---
|
||||
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",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo \"foo bar\" biz baz",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..14,
|
||||
source: "echo \"foo bar\" biz baz",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..18,
|
||||
source: "echo \"foo bar\" biz baz",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 19..22,
|
||||
source: "echo \"foo bar\" biz baz",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: EOI,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 22..22,
|
||||
source: "echo \"foo bar\" biz baz",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
]
|
||||
78
src/tests/snapshots/fern__tests__lexer__lex_redir.snap
Normal file
78
src/tests/snapshots/fern__tests__lexer__lex_redir.snap
Normal file
@@ -0,0 +1,78 @@
|
||||
---
|
||||
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",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo > bar.txt",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo > bar.txt",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Redir,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 9..10,
|
||||
source: "echo foo > bar.txt",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..18,
|
||||
source: "echo foo > bar.txt",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: EOI,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 18..18,
|
||||
source: "echo foo > bar.txt",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
]
|
||||
66
src/tests/snapshots/fern__tests__lexer__lex_redir_fds.snap
Normal file
66
src/tests/snapshots/fern__tests__lexer__lex_redir_fds.snap
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
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",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo 1>&2",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo 1>&2",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Redir,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 9..13,
|
||||
source: "echo foo 1>&2",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: EOI,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 13..13,
|
||||
source: "echo foo 1>&2",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
]
|
||||
66
src/tests/snapshots/fern__tests__lexer__lex_simple.snap
Normal file
66
src/tests/snapshots/fern__tests__lexer__lex_simple.snap
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
source: src/tests/lexer.rs
|
||||
expression: tokens
|
||||
---
|
||||
[
|
||||
Tk {
|
||||
class: SOI,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..0,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..10,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..16,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: EOI,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 16..16,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
]
|
||||
126
src/tests/snapshots/fern__tests__lexer__lex_with_keywords.snap
Normal file
126
src/tests/snapshots/fern__tests__lexer__lex_with_keywords.snap
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
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",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..2,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
KEYWORD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 3..7,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Sep,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 7..9,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 9..13,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
KEYWORD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 14..18,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 19..22,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Sep,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 22..24,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 24..26,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
KEYWORD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: EOI,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 26..26,
|
||||
source: "if true; then echo foo; fi",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
]
|
||||
282
src/tests/snapshots/fern__tests__parser__parse_conjunction.snap
Normal file
282
src/tests/snapshots/fern__tests__parser__parse_conjunction.snap
Normal file
@@ -0,0 +1,282 @@
|
||||
---
|
||||
source: src/tests/parser.rs
|
||||
expression: nodes
|
||||
---
|
||||
[
|
||||
Match(
|
||||
Node {
|
||||
class: CmdList {
|
||||
elements: [
|
||||
ConjunctNode {
|
||||
cmd: Node {
|
||||
class: Pipeline {
|
||||
cmds: [
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
pipe_err: false,
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
operator: And,
|
||||
},
|
||||
ConjunctNode {
|
||||
cmd: Node {
|
||||
class: Pipeline {
|
||||
cmds: [
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 12..16,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 17..20,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 12..16,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 17..20,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
pipe_err: false,
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 12..16,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 17..20,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
operator: Null,
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: And,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 9..11,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 12..16,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 17..20,
|
||||
source: "echo foo && echo bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,962 @@
|
||||
---
|
||||
source: src/tests/parser.rs
|
||||
expression: nodes
|
||||
---
|
||||
[
|
||||
Match(
|
||||
Node {
|
||||
class: CmdList {
|
||||
elements: [
|
||||
ConjunctNode {
|
||||
cmd: Node {
|
||||
class: Pipeline {
|
||||
cmds: [
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
pipe_err: false,
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
operator: And,
|
||||
},
|
||||
ConjunctNode {
|
||||
cmd: Node {
|
||||
class: Pipeline {
|
||||
cmds: [
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 28..32,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 33..36,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 28..32,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 33..36,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 39..42,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 43..52,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 39..42,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 43..52,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
pipe_err: false,
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 28..32,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 33..36,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Pipe,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 37..38,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 39..42,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 43..52,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
operator: Or,
|
||||
},
|
||||
ConjunctNode {
|
||||
cmd: Node {
|
||||
class: Pipeline {
|
||||
cmds: [
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 56..60,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 61..64,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 65..68,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 56..60,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 61..64,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 65..68,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 71..74,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 75..80,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 81..88,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 89..93,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 71..74,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 75..80,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 81..88,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 89..93,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
pipe_err: false,
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 56..60,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 61..64,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 65..68,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Pipe,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 69..70,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 71..74,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 75..80,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 81..88,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 89..93,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
operator: Null,
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
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/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: And,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 25..27,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 28..32,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 33..36,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Pipe,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 37..38,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 39..42,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 43..52,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Or,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 53..55,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 56..60,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 61..64,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 65..68,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Pipe,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 69..70,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 71..74,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 75..80,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 81..88,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 89..93,
|
||||
source: "echo foo | sed s/foo/bar && echo bar | sed s/bar/foo || echo foo bar | sed s/foo bar/bar foo/",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
]
|
||||
278
src/tests/snapshots/fern__tests__parser__parse_pipeline.snap
Normal file
278
src/tests/snapshots/fern__tests__parser__parse_pipeline.snap
Normal file
@@ -0,0 +1,278 @@
|
||||
---
|
||||
source: src/tests/parser.rs
|
||||
expression: nodes
|
||||
---
|
||||
[
|
||||
Match(
|
||||
Node {
|
||||
class: CmdList {
|
||||
elements: [
|
||||
ConjunctNode {
|
||||
cmd: Node {
|
||||
class: Pipeline {
|
||||
cmds: [
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..14,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..14,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
pipe_err: false,
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Pipe,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 9..10,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..14,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
operator: Null,
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..8,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Pipe,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 9..10,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..14,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 15..24,
|
||||
source: "echo foo | sed s/foo/bar",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
]
|
||||
193
src/tests/snapshots/fern__tests__parser__parse_simple.snap
Normal file
193
src/tests/snapshots/fern__tests__parser__parse_simple.snap
Normal file
@@ -0,0 +1,193 @@
|
||||
---
|
||||
source: src/tests/parser.rs
|
||||
expression: nodes
|
||||
---
|
||||
[
|
||||
Match(
|
||||
Node {
|
||||
class: CmdList {
|
||||
elements: [
|
||||
ConjunctNode {
|
||||
cmd: Node {
|
||||
class: Pipeline {
|
||||
cmds: [
|
||||
Node {
|
||||
class: Command {
|
||||
assignments: [],
|
||||
argv: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..10,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..16,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..10,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..16,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
pipe_err: false,
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..10,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..16,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
operator: Null,
|
||||
},
|
||||
],
|
||||
},
|
||||
flags: NdFlags(
|
||||
0x0,
|
||||
),
|
||||
redirs: [],
|
||||
tokens: [
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 0..4,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
IS_CMD,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 5..10,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
Tk {
|
||||
class: Str,
|
||||
err_span: None,
|
||||
err: Null,
|
||||
span: Span {
|
||||
range: 11..16,
|
||||
source: "echo hello world",
|
||||
},
|
||||
flags: TkFlags(
|
||||
0x0,
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
source: src/tests/term.rs
|
||||
expression: styled
|
||||
---
|
||||
[44m[1mtext with background[0m
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
source: src/tests/term.rs
|
||||
expression: styled
|
||||
---
|
||||
[31m[1m[4mstyled text[0m
|
||||
5
src/tests/snapshots/fern__tests__term__styled_reset.snap
Normal file
5
src/tests/snapshots/fern__tests__term__styled_reset.snap
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
source: src/tests/term.rs
|
||||
expression: styled
|
||||
---
|
||||
[1m[0mreset test[0m
|
||||
5
src/tests/snapshots/fern__tests__term__styled_rgb.snap
Normal file
5
src/tests/snapshots/fern__tests__term__styled_rgb.snap
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
source: src/tests/term.rs
|
||||
expression: styled
|
||||
---
|
||||
[38;2;255;99;71mRGB styled text[0m
|
||||
5
src/tests/snapshots/fern__tests__term__styled_set.snap
Normal file
5
src/tests/snapshots/fern__tests__term__styled_set.snap
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
source: src/tests/term.rs
|
||||
expression: styled
|
||||
---
|
||||
[35m[3mmulti-style text[0m
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
source: src/tests/term.rs
|
||||
expression: styled
|
||||
---
|
||||
[32mhello world[0m
|
||||
41
src/tests/term.rs
Normal file
41
src/tests/term.rs
Normal file
@@ -0,0 +1,41 @@
|
||||
use libsh::term::{Style, StyleSet, Styled};
|
||||
|
||||
use super::super::*;
|
||||
#[test]
|
||||
fn styled_simple() {
|
||||
let input = "hello world";
|
||||
let styled = input.styled(Style::Green);
|
||||
|
||||
insta::assert_snapshot!(styled)
|
||||
}
|
||||
#[test]
|
||||
fn styled_multiple() {
|
||||
let input = "styled text";
|
||||
let styled = input.styled(Style::Red | Style::Bold | Style::Underline);
|
||||
insta::assert_snapshot!(styled);
|
||||
}
|
||||
#[test]
|
||||
fn styled_rgb() {
|
||||
let input = "RGB styled text";
|
||||
let styled = input.styled(Style::RGB(255, 99, 71)); // Tomato color
|
||||
insta::assert_snapshot!(styled);
|
||||
}
|
||||
#[test]
|
||||
fn styled_background() {
|
||||
let input = "text with background";
|
||||
let styled = input.styled(Style::BgBlue | Style::Bold);
|
||||
insta::assert_snapshot!(styled);
|
||||
}
|
||||
#[test]
|
||||
fn styled_set() {
|
||||
let input = "multi-style text";
|
||||
let style_set = StyleSet::new().add(Style::Magenta).add(Style::Italic);
|
||||
let styled = input.styled(style_set);
|
||||
insta::assert_snapshot!(styled);
|
||||
}
|
||||
#[test]
|
||||
fn styled_reset() {
|
||||
let input = "reset test";
|
||||
let styled = input.styled(Style::Bold | Style::Reset);
|
||||
insta::assert_snapshot!(styled);
|
||||
}
|
||||
Reference in New Issue
Block a user