on master help sign in
Simplify access to first line
commitf98fc5f06afd76a8eeb914ef7c2caf384834eade authorsharkdp <davidpeter@web.de> dateSun 7 Oct 2018, 13:47 (8 years ago) parent1dbb4ef
2 files changed+10−18
src/assets.rs+1−3 src/inputfile.rs+9−15
src/assets.rs+1−3
@@ -180,10 +180,8 @@ impl HighlightingAssets {
180180 .find_syntax_by_extension(file_name)
181181 .or_else(|| self.syntax_set.find_syntax_by_extension(extension));
182182 let line_syntax = if ext_syntax.is_none() {
183− reader
184− .get_first_line()
183+ String::from_utf8(reader.first_line.clone())
185184 .ok()
186− .and_then(|v| String::from_utf8(v).ok())
187185 .and_then(|l| self.syntax_set.find_syntax_by_first_line(&l))
188186 } else {
189187 None
src/inputfile.rs+9−15
@@ -7,29 +7,25 @@ const THEME_PREVIEW_FILE: &[u8] = include_bytes!("../assets/theme_preview.rs");
77
88pub struct InputFileReader<'a> {
99 inner: Box<dyn BufRead + 'a>,
10− buffer: Vec<u8>,
10+ pub first_line: Vec<u8>,
1111}
1212
1313impl<'a> InputFileReader<'a> {
14− fn new<R: BufRead + 'a>(reader: R) -> InputFileReader<'a> {
14+ fn new<R: BufRead + 'a>(mut reader: R) -> InputFileReader<'a> {
15+ let mut first_line = vec![];
16+ reader.read_until(b'\n', &mut first_line).ok();
17+
1518 InputFileReader {
1619 inner: Box::new(reader),
17− buffer: vec![],
20+ first_line,
1821 }
1922 }
2023
21− pub fn get_first_line(&mut self) -> io::Result<Vec<u8>> {
22− assert!(self.buffer.is_empty());
23−
24− self.inner.read_until(b'\n', &mut self.buffer)?;
25− Ok(self.buffer.clone())
26− }
27−
2824 pub fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
29− if self.buffer.is_empty() {
25+ if self.first_line.is_empty() {
3026 self.inner.read_until(b'\n', buf).map(|size| size > 0)
3127 } else {
32− buf.append(&mut self.buffer);
28+ buf.append(&mut self.first_line);
3329 return Ok(true);
3430 }
3531 }
@@ -65,9 +61,7 @@ fn basic() {
6561 let content = b"#!/bin/bash\necho hello";
6662 let mut reader = InputFileReader::new(&content[..]);
6763
68− let first_line = reader.get_first_line();
69− assert!(first_line.is_ok());
70− assert_eq!(b"#!/bin/bash\n", &first_line.unwrap()[..]);
64+ assert_eq!(b"#!/bin/bash\n", &reader.first_line[..]);
7165
7266 let mut buffer = vec![];
7367