diff --git a/src/elements/subword/unquoted.rs b/src/elements/subword/unquoted.rs index 7713a8c2..ef9f318c 100644 --- a/src/elements/subword/unquoted.rs +++ b/src/elements/subword/unquoted.rs @@ -14,21 +14,24 @@ impl Subword for UnquotedSubword { } impl UnquotedSubword { - fn new() -> UnquotedSubword { + fn new(s: &str) -> UnquotedSubword { UnquotedSubword { - text: String::new(), + text: s.to_string(), } - } + } pub fn parse(feeder: &mut Feeder, core: &mut ShellCore) -> Option { - let mut ans = Self::new(); + if feeder.starts_with("{") + || feeder.starts_with(",") + || feeder.starts_with("}") { + return Some(Self::new( &feeder.consume(1) )); + } let len = feeder.scanner_word(core); if len == 0 { return None; } - ans.text = feeder.consume(len); - Some(ans) + Some( Self::new(&feeder.consume(len)) ) } } diff --git a/src/elements/word.rs b/src/elements/word.rs index bca0153e..1e2c9c15 100644 --- a/src/elements/word.rs +++ b/src/elements/word.rs @@ -20,7 +20,12 @@ impl Word { } pub fn parse(feeder: &mut Feeder, core: &mut ShellCore) -> Option { + if feeder.starts_with("#") { + return None; + } + let mut ans = Word::new(); + while let Some(sw) = subword::parse(feeder, core) { ans.text += &sw.get_text(); ans.subwords.push(sw); @@ -29,6 +34,7 @@ impl Word { if ans.text.len() == 0 { None }else{ + //dbg!("{:?}", &ans); Some(ans) } } diff --git a/src/feeder/scanner.rs b/src/feeder/scanner.rs index c234740b..9a7f14f9 100644 --- a/src/feeder/scanner.rs +++ b/src/feeder/scanner.rs @@ -42,14 +42,7 @@ impl Feeder { } pub fn scanner_word(&mut self, core: &mut ShellCore) -> usize { - if self.remaining.starts_with("#") { - return 0; - } - - let ng = match core.word_nest.last().unwrap().as_str() { - "{" => " \t\n;&|()<>},", - _ => " \t\n;&|()<>", - }; + let ng = " \t\n;&|()<>{},"; let mut next_line = false; let mut ans = 0;