Skip to content

Commit dbc8202

Browse files
committed
chore: Clean up code warnings
1 parent 3e4fac7 commit dbc8202

File tree

7 files changed

+16
-69
lines changed

7 files changed

+16
-69
lines changed

src/exec.rs

-2
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ impl ShellContext<'_, '_> {
168168
redir: RedirectConfig,
169169
) -> WaitableProcess {
170170
self.function_args.push(args);
171-
//TODO: input redirection
172171
let process = self.exec_compound_command(&commands, redir);
173172
self.function_args.pop();
174173
process
@@ -725,7 +724,6 @@ impl ShellContext<'_, '_> {
725724
"source" => SpawnableProcess::builtin(
726725
BuiltinCommand::Source {
727726
path: self.working_directory.join(&command_words[1]),
728-
cwd: self.working_directory.clone(),
729727
},
730728
redir,
731729
printable_command,

src/out.rs

-3
Original file line numberDiff line numberDiff line change
@@ -399,9 +399,6 @@ pub fn process_finish(output_stream: &StandardStream, status: &ProcessExit) {
399399
fn exec_error(error: &CommandExecError) -> String {
400400
match error {
401401
CommandExecError::CommandFailed { err } => format!("{}", err),
402-
CommandExecError::BadStarPositional { err } => {
403-
format!("Could not parse positional parameter: {}", err)
404-
} //TODO: Which parameter in particular?
405402
CommandExecError::InvalidGlob { glob, err } => {
406403
format!("Invalid glob pattern: {}: {}", glob, err)
407404
}

src/parser/mod.rs

+1-7
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use parse::{CommandGroupDelimiters, ParseError, Parser};
1313
use crate::script::Overrideable::*;
1414
use crate::script::*;
1515

16-
use self::ast::{AtomicTopLevelCommand, ComplexWord};
16+
use self::ast::AtomicTopLevelCommand;
1717
use self::lexer::Lexer;
1818

1919
#[derive(Debug, Clone)]
@@ -69,12 +69,6 @@ pub fn parse_command(command: &str) -> Result<AtomicTopLevelCommand, ParseError>
6969
parser.complete_command().map(Option::unwrap)
7070
}
7171

72-
pub fn parse_word(word: &str) -> Result<ComplexWord, ParseError> {
73-
let lexer = Lexer::new(word.chars());
74-
let mut parser = Parser::<_>::new(lexer);
75-
parser.word().map(Option::unwrap)
76-
}
77-
7872
pub fn parse_runscript(source: SourceFile) -> Result<Runscript, RunscriptParseError> {
7973
let line_indices = source
8074
.source

src/parser/parse.rs

+12-34
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// FIXME: consider parsing [[ exr ]] as keywords? otherwise [[ foo && bar ]] won't get parsed right
33
// FIXME: consider parsing out array index syntax? (e.g. ${array[some index]}
44
// FIXME: arithmetic substitutions don't currently support param/comand substitutions
5+
// TODO: To retrieve source/iterator positions, see commit 3e4fac7 or earlier
56

67
use std::error::Error;
78
use std::fmt;
@@ -290,10 +291,9 @@ impl<I: Iterator<Item = Token>> Parser<I> {
290291
/// token in the iterator will be used (or `UnexpectedEOF` if none left).
291292
#[inline]
292293
fn make_unexpected_err(&mut self) -> ParseError {
293-
let pos = self.iter.pos();
294294
self.iter
295295
.next()
296-
.map_or(ParseError::UnexpectedEOF, |t| ParseError::Unexpected(t))
296+
.map_or(ParseError::UnexpectedEOF, ParseError::Unexpected)
297297
}
298298

299299
/// Parses a single complete command.
@@ -496,7 +496,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
496496
let mut list = Vec::new();
497497
loop {
498498
self.skip_whitespace();
499-
let start_pos = self.iter.pos();
500499
match self.redirect()? {
501500
Some(Ok(io)) => list.push(io),
502501
Some(Err(_)) => return Err(ParseError::BadFd),
@@ -608,7 +607,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
608607
dash.to_string(),
609608
)))
610609
} else {
611-
let path_start_pos = $parser.iter.pos();
612610
let path = if let Some(p) = $parser.word_preserve_trailing_whitespace()? {
613611
p
614612
} else {
@@ -899,7 +897,7 @@ impl<I: Iterator<Item = Token>> Parser<I> {
899897

900898
let mut tok_backup = TokenIterWrapper::Buffered(tok_iter);
901899
mem::swap(&mut self.iter, &mut tok_backup);
902-
let mut body = self.word_interpolated_raw(None, heredoc_start_pos)?;
900+
let mut body = self.word_interpolated_raw(None)?;
903901
let _ = mem::replace(&mut self.iter, tok_backup);
904902

905903
if body.len() > 1 {
@@ -1025,7 +1023,7 @@ impl<I: Iterator<Item = Token>> Parser<I> {
10251023
}
10261024

10271025
DoubleQuote => ast::Word::DoubleQuoted(
1028-
self.word_interpolated_raw(Some((DoubleQuote, DoubleQuote)), start_pos)?,
1026+
self.word_interpolated_raw(Some((DoubleQuote, DoubleQuote)))?,
10291027
),
10301028

10311029
// Parameters and backticks should have been
@@ -1070,7 +1068,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
10701068
fn word_interpolated_raw(
10711069
&mut self,
10721070
delim: Option<(Token, Token)>,
1073-
start_pos: SourcePos,
10741071
) -> ParseResult<Vec<ast::SimpleWord>> {
10751072
let (delim_open, delim_close) = match delim {
10761073
Some((o, c)) => (Some(o), Some(c)),
@@ -1188,7 +1185,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
11881185
/// returns an `Word`, which will capture both cases where a literal or
11891186
/// parameter is parsed.
11901187
fn parameter_raw(&mut self) -> ParseResult<ast::SimpleWord> {
1191-
let start_pos = self.iter.pos();
11921188
match self.iter.next() {
11931189
Some(ParamPositional(p)) => {
11941190
Ok(ast::SimpleWord::Param(Parameter::Positional(p as usize)))
@@ -1215,10 +1211,7 @@ impl<I: Iterator<Item = Token>> Parser<I> {
12151211
///
12161212
/// All tokens that normally cannot be part of a word will be treated
12171213
/// as literals.
1218-
fn parameter_substitution_word_raw(
1219-
&mut self,
1220-
curly_open_pos: SourcePos,
1221-
) -> ParseResult<Option<ast::ComplexWord>> {
1214+
fn parameter_substitution_word_raw(&mut self) -> ParseResult<Option<ast::ComplexWord>> {
12221215
let mut words = Vec::new();
12231216
'capture_words: loop {
12241217
'capture_literals: loop {
@@ -1337,14 +1330,12 @@ impl<I: Iterator<Item = Token>> Parser<I> {
13371330
fn parameter_substitution_body_raw(
13381331
&mut self,
13391332
param: Parameter,
1340-
curly_open_pos: SourcePos,
13411333
) -> ParseResult<ast::SimpleWord> {
13421334
let has_colon = eat_maybe!(self, {
13431335
Colon => { true };
13441336
_ => { false },
13451337
});
13461338

1347-
let op_pos = self.iter.pos();
13481339
let op = match self.iter.next() {
13491340
Some(tok @ Dash) | Some(tok @ Equals) | Some(tok @ Question) | Some(tok @ Plus) => tok,
13501341

@@ -1354,7 +1345,7 @@ impl<I: Iterator<Item = Token>> Parser<I> {
13541345
None => return Err(ParseError::Unmatched(CurlyOpen)),
13551346
};
13561347

1357-
let word = self.parameter_substitution_word_raw(curly_open_pos)?;
1348+
let word = self.parameter_substitution_word_raw()?;
13581349
let maybe_len = param == Parameter::Pound && !has_colon && word.is_none();
13591350

13601351
// We must carefully check if we get ${#-} or ${#?}, in which case
@@ -1380,7 +1371,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
13801371
/// Parses a parameter substitution in the form of `${...}`, `$(...)`, or `$((...))`.
13811372
/// Nothing is passed to the builder.
13821373
fn parameter_substitution_raw(&mut self) -> ParseResult<ast::SimpleWord> {
1383-
let start_pos = self.iter.pos();
13841374
match self.iter.peek() {
13851375
Some(&ParenOpen) => {
13861376
let is_arith = {
@@ -1418,7 +1408,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
14181408
}
14191409

14201410
Some(&CurlyOpen) => {
1421-
let curly_open_pos = start_pos;
14221411
self.iter.next();
14231412

14241413
let param = self.parameter_inner()?;
@@ -1427,11 +1416,11 @@ impl<I: Iterator<Item = Token>> Parser<I> {
14271416
self.iter.next();
14281417
eat_maybe!(self, {
14291418
Percent => {
1430-
let word = self.parameter_substitution_word_raw(curly_open_pos);
1419+
let word = self.parameter_substitution_word_raw();
14311420
ast::ParameterSubstitution::RemoveLargestSuffix(param, word?.map(Box::new))
14321421
};
14331422
_ => {
1434-
let word = self.parameter_substitution_word_raw(curly_open_pos);
1423+
let word = self.parameter_substitution_word_raw();
14351424
ast::ParameterSubstitution::RemoveSmallestSuffix(param, word?.map(Box::new))
14361425
}
14371426
})
@@ -1441,11 +1430,11 @@ impl<I: Iterator<Item = Token>> Parser<I> {
14411430
self.iter.next();
14421431
eat_maybe!(self, {
14431432
Pound => {
1444-
let word = self.parameter_substitution_word_raw(curly_open_pos);
1433+
let word = self.parameter_substitution_word_raw();
14451434
ast::ParameterSubstitution::RemoveLargestPrefix(param, word?.map(Box::new))
14461435
};
14471436
_ => {
1448-
match self.parameter_substitution_word_raw(curly_open_pos)? {
1437+
match self.parameter_substitution_word_raw()? {
14491438
// Handle ${##} case
14501439
None if Parameter::Pound == param => ast::ParameterSubstitution::Len(Parameter::Pound),
14511440
w => ast::ParameterSubstitution::RemoveSmallestPrefix(param, w.map(Box::new)),
@@ -1459,7 +1448,7 @@ impl<I: Iterator<Item = Token>> Parser<I> {
14591448
| Some(&CurlyClose)
14601449
if Parameter::Pound == param =>
14611450
{
1462-
return self.parameter_substitution_body_raw(param, curly_open_pos)
1451+
return self.parameter_substitution_body_raw(param)
14631452
}
14641453

14651454
// Otherwise we must have ${#param}
@@ -1468,7 +1457,7 @@ impl<I: Iterator<Item = Token>> Parser<I> {
14681457
eat!(self, { CurlyClose => { ast::ParameterSubstitution::Len(param) } })
14691458
}
14701459

1471-
_ => return self.parameter_substitution_body_raw(param, curly_open_pos),
1460+
_ => return self.parameter_substitution_body_raw(param),
14721461
};
14731462

14741463
Ok(ast::SimpleWord::Subst(subst))
@@ -1480,7 +1469,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
14801469

14811470
/// Parses a valid parameter that can appear inside a set of curly braces.
14821471
fn parameter_inner(&mut self) -> ParseResult<Parameter> {
1483-
let start_pos = self.iter.pos();
14841472
let param = match self.iter.next() {
14851473
Some(Star) => Parameter::Star,
14861474
Some(Pound) => Parameter::Pound,
@@ -1507,7 +1495,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
15071495
/// reserved words. Each of the reserved words must be a literal token, and cannot be
15081496
/// quoted or concatenated.
15091497
pub fn do_group(&mut self) -> ParseResult<CommandGroup<ast::Command>> {
1510-
let start_pos = self.iter.pos();
15111498
self.reserved_word(&[DO])
15121499
.map_err(|_| self.make_unexpected_err())?;
15131500
let result = self.command_group(CommandGroupDelimiters {
@@ -1524,7 +1511,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
15241511
pub fn brace_group(&mut self) -> ParseResult<CommandGroup<ast::Command>> {
15251512
// CurlyClose must be encountered as a stand alone word,
15261513
// even though it is represented as its own token
1527-
let start_pos = self.iter.pos();
15281514
self.reserved_token(&[CurlyOpen])?;
15291515
let cmds = self.command_group(CommandGroupDelimiters {
15301516
reserved_tokens: &[CurlyClose],
@@ -1548,7 +1534,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
15481534
&mut self,
15491535
empty_body_ok: bool,
15501536
) -> ParseResult<CommandGroup<ast::Command>> {
1551-
let start_pos = self.iter.pos();
15521537
eat!(self, { ParenOpen => {} });
15531538

15541539
// Parens are always special tokens
@@ -1731,7 +1716,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
17311716
/// the entire loop) this method returns the relevant parts of the loop command,
17321717
/// without constructing an AST node, it so that the caller can do so with redirections.
17331718
pub fn loop_command(&mut self) -> ParseResult<(LoopKind, ast::GuardBodyPair)> {
1734-
let start_pos = self.iter.pos();
17351719
let kind = match self
17361720
.reserved_word(&[WHILE, UNTIL])
17371721
.map_err(|_| self.make_unexpected_err())?
@@ -1762,7 +1746,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
17621746
/// method returns the relevant parts of the `if` command, without constructing an
17631747
/// AST node, it so that the caller can do so with redirections.
17641748
pub fn if_command(&mut self) -> ParseResult<IfFragments<ast::Command>> {
1765-
let start_pos = self.iter.pos();
17661749
self.reserved_word(&[IF])
17671750
.map_err(|_| self.make_unexpected_err())?;
17681751

@@ -1825,7 +1808,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
18251808
/// method returns the relevant parts of the `for` command, without constructing an
18261809
/// AST node, it so that the caller can do so with redirections.
18271810
pub fn for_command(&mut self) -> ParseResult<ForFragments<ast::ComplexWord, ast::Command>> {
1828-
let start_pos = self.iter.pos();
18291811
self.reserved_word(&[FOR])
18301812
.map_err(|_| self.make_unexpected_err())?;
18311813

@@ -1836,7 +1818,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
18361818
_ => return Err(self.make_unexpected_err()),
18371819
}
18381820

1839-
let var_pos = self.iter.pos();
18401821
let var = match self.iter.next() {
18411822
Some(Name(v)) => v,
18421823
Some(Literal(s)) => return Err(ParseError::BadIdent(s)),
@@ -1901,8 +1882,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
19011882
/// method returns the relevant parts of the `case` command, without constructing an
19021883
/// AST node, it so that the caller can do so with redirections.
19031884
pub fn case_command(&mut self) -> ParseResult<CaseFragments<ast::ComplexWord>> {
1904-
let start_pos = self.iter.pos();
1905-
19061885
macro_rules! missing_in {
19071886
() => {
19081887
|_| ParseError::IncompleteCmd(CASE, IN)
@@ -2054,7 +2033,6 @@ impl<I: Iterator<Item = Token>> Parser<I> {
20542033
_ => return Err(self.make_unexpected_err()),
20552034
}
20562035

2057-
let ident_pos = self.iter.pos();
20582036
let name = match self.iter.next() {
20592037
Some(Name(n)) => n,
20602038
Some(Literal(s)) => return Err(ParseError::BadIdent(s)),

src/parser/parse/iter.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ pub struct Multipeek<'a> {
313313

314314
impl<'a> Drop for Multipeek<'a> {
315315
fn drop(&mut self) {
316-
let tokens = mem::replace(&mut self.buf, Vec::new());
316+
let tokens = mem::take(&mut self.buf);
317317
self.iter.rewind(tokens);
318318
}
319319
}

src/parser/token.rs

-5
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,6 @@ impl fmt::Display for Token {
183183
}
184184

185185
impl Token {
186-
/// Returns whether the token's length is zero.
187-
pub fn is_empty(&self) -> bool {
188-
self.len() == 0
189-
}
190-
191186
/// Returns the number of characters it took to recognize a token.
192187
pub fn len(&self) -> usize {
193188
self.as_str().len()

src/process.rs

+2-17
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ use glob::PatternError;
1010
use crate::exec::{BaseExecContext, ShellContext};
1111
use crate::out::{self, Printable, PrintableEnvRemap};
1212
use crate::parser::ast::CompoundCommand;
13-
use crate::parser::parse::ParseError;
14-
use crate::parser::{RunscriptSource, SourceFile};
13+
use crate::parser::SourceFile;
1514
use crate::ptr::Ref;
1615

1716
#[derive(Debug)]
1817
pub enum CommandExecError {
19-
BadStarPositional { err: ParseError },
2018
InvalidGlob { glob: String, err: PatternError },
2119
NoGlobMatches { glob: String },
2220
CommandFailed { err: std::io::Error },
@@ -376,18 +374,6 @@ impl SpawnableProcess<'_> {
376374
}
377375
}
378376

379-
pub fn empty_success() -> Self {
380-
Self::new(
381-
SpawnableProcessType::Finished(FinishedProcess {
382-
status: ProcessExit::Bool(true),
383-
stdout: vec![],
384-
stderr: vec![],
385-
}),
386-
RedirectConfig::default_bg(),
387-
None,
388-
)
389-
}
390-
391377
pub fn empty_error(error: CommandExecError) -> Self {
392378
Self::new(
393379
SpawnableProcessType::Finished(FinishedProcess {
@@ -682,7 +668,6 @@ pub enum BuiltinCommand {
682668
Source {
683669
/// Path should be `join`ed with `context.working_directory` already
684670
path: PathBuf,
685-
cwd: PathBuf,
686671
},
687672
}
688673

@@ -712,7 +697,7 @@ impl BuiltinCommand {
712697
}
713698
WaitableProcess::empty_success()
714699
}
715-
BuiltinCommand::Source { path, cwd } => {
700+
BuiltinCommand::Source { path } => {
716701
let source = SourceFile {
717702
source: match std::fs::read_to_string(&path) {
718703
Ok(source) => source,

0 commit comments

Comments
 (0)