Compare commits

..

No commits in common. "f949fc5474ca3f72a1782bad49616c556fae327a" and "3cc1b6743c956adc59a2f65f297268e16d7471d5" have entirely different histories.

2 changed files with 36 additions and 25 deletions

View file

@ -39,7 +39,7 @@ pub fn skip(cli: &Cli, writer: &mut impl Write) -> Result<()> {
None => Box::new(BufReader::new(std::io::stdin())), None => Box::new(BufReader::new(std::io::stdin())),
}; };
if let Some(line) = &cli.line { if let Some(line) = &cli.line {
skip_lines_matching(cli, reader, writer, line) skip_lines_matching(&cli, reader, writer, line)
} else if let Some(ref token) = cli.token { } else if let Some(ref token) = cli.token {
skip_tokens(cli, reader, writer, token) skip_tokens(cli, reader, writer, token)
} else { } else {
@ -49,9 +49,13 @@ pub fn skip(cli: &Cli, writer: &mut impl Write) -> Result<()> {
// skip a number of lines // skip a number of lines
fn skip_lines(cli: &Cli, reader: Box<dyn BufRead>, writer: &mut impl Write) -> Result<()> { fn skip_lines(cli: &Cli, reader: Box<dyn BufRead>, writer: &mut impl Write) -> Result<()> {
for (counter, current_line) in reader.lines().map_while(Option::Some).flatten().enumerate() { let mut counter = 0usize;
if counter >= cli.lines { for current_line in reader.lines() {
writeln!(writer, "{}", current_line)?; if let Ok(current_line) = current_line {
if counter >= cli.lines {
writeln!(writer, "{}", current_line)?;
}
counter += 1;
} }
} }
Ok(()) Ok(())
@ -65,12 +69,14 @@ fn skip_lines_matching(
line: &str, line: &str,
) -> Result<()> { ) -> Result<()> {
let mut counter = 0usize; let mut counter = 0usize;
for current_line in reader.lines().map_while(Option::Some).flatten() { for current_line in reader.lines() {
if counter >= cli.lines { if let Ok(current_line) = current_line {
writeln!(writer, "{}", current_line)?; if counter >= cli.lines {
} writeln!(writer, "{}", current_line)?;
if line == current_line { }
counter += 1; if line == current_line {
counter += 1;
}
} }
} }
Ok(()) Ok(())
@ -86,16 +92,18 @@ fn skip_tokens(
) -> Result<()> { ) -> Result<()> {
let mut counter = 0usize; let mut counter = 0usize;
for current_line in reader.lines().map_while(Option::Some).flatten() { for current_line in reader.lines() {
if counter >= cli.lines { if let Ok(current_line) = current_line {
writeln!(writer, "{}", current_line)?; if counter >= cli.lines {
} writeln!(writer, "{}", current_line)?;
if current_line.contains(token) { }
if cli.ignore_extras { if current_line.contains(&token) {
counter += 1; if cli.ignore_extras {
} else { counter += 1;
let occurances = current_line.matches(&token).count(); } else {
counter += occurances; let occurances = current_line.matches(&token).count();
counter += occurances;
}
} }
} }
} }
@ -143,7 +151,10 @@ mod tests {
skip(&cli, &mut lines)?; skip(&cli, &mut lines)?;
//then //then
assert_eq!(String::from_utf8(lines)?, ["alpha", "gamma\n"].join("\n")); assert_eq!(
String::from_utf8(lines)?,
vec!["alpha", "gamma\n"].join("\n")
);
Ok(()) Ok(())
} }
@ -185,7 +196,7 @@ mod tests {
//then //then
assert_eq!( assert_eq!(
String::from_utf8(lines)?, String::from_utf8(lines)?,
[ vec![
"Or help one fainting robin", "Or help one fainting robin",
"Unto his nest again,", "Unto his nest again,",
"I shall not live in vain.\n" "I shall not live in vain.\n"
@ -213,7 +224,7 @@ mod tests {
//then //then
assert_eq!( assert_eq!(
String::from_utf8(lines)?, String::from_utf8(lines)?,
[ vec![
//Lorem ipsum dolor sit amet, -- +2 = 2 //Lorem ipsum dolor sit amet, -- +2 = 2
//consectetur adipiscing elit, //consectetur adipiscing elit,
//sed do eiusmod tempor incididunt -- +1 = 3 //sed do eiusmod tempor incididunt -- +1 = 3
@ -246,7 +257,7 @@ mod tests {
//then //then
assert_eq!( assert_eq!(
String::from_utf8(lines)?, String::from_utf8(lines)?,
[ vec![
//Lorem ipsum dolor sit amet, -- 1 //Lorem ipsum dolor sit amet, -- 1
//consectetur adipiscing elit, //consectetur adipiscing elit,
//sed do eiusmod tempor incididunt -- 2 //sed do eiusmod tempor incididunt -- 2

View file

@ -6,7 +6,7 @@ SKIP="./target/debug/skip"
DIFF="diff -u --color" DIFF="diff -u --color"
if test ! -x $SKIP ; then if test ! -x $SKIP ; then
echo "File missing: $SKIP - try 'cargo build'" echo "File missing: $SKIP - try 'zig build'"
exit 1 exit 1
fi fi