mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-11-04 09:01:56 +00:00 
			
		
		
		
	Reduce nesting in if blocks by short circuiting
This commit is contained in:
		
				
					committed by
					
						
						Martin Nordholts
					
				
			
			
				
	
			
			
			
						parent
						
							9124271eaf
						
					
				
				
					commit
					372e42f350
				
			@@ -255,57 +255,56 @@ impl HighlightingAssets {
 | 
			
		||||
    ) -> Result<SyntaxReferenceInSet> {
 | 
			
		||||
        if let Some(language) = language {
 | 
			
		||||
            let syntax_set = self.get_syntax_set_by_name(language)?;
 | 
			
		||||
            syntax_set
 | 
			
		||||
            return syntax_set
 | 
			
		||||
                .find_syntax_by_token(language)
 | 
			
		||||
                .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set })
 | 
			
		||||
                .ok_or_else(|| Error::UnknownSyntax(language.to_owned()))
 | 
			
		||||
        } else {
 | 
			
		||||
            let line_syntax = self.get_first_line_syntax(&mut input.reader)?;
 | 
			
		||||
                .ok_or_else(|| Error::UnknownSyntax(language.to_owned()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
            // Get the path of the file:
 | 
			
		||||
            // If this was set by the metadata, that will take priority.
 | 
			
		||||
            // If it wasn't, it will use the real file path (if available).
 | 
			
		||||
            let path_str =
 | 
			
		||||
                input
 | 
			
		||||
                    .metadata
 | 
			
		||||
                    .user_provided_name
 | 
			
		||||
                    .as_ref()
 | 
			
		||||
                    .or_else(|| match input.kind {
 | 
			
		||||
                        OpenedInputKind::OrdinaryFile(ref path) => Some(path),
 | 
			
		||||
                        _ => None,
 | 
			
		||||
                    });
 | 
			
		||||
        let line_syntax = self.get_first_line_syntax(&mut input.reader)?;
 | 
			
		||||
 | 
			
		||||
            if let Some(path_str) = path_str {
 | 
			
		||||
                // If a path was provided, we try and detect the syntax based on extension mappings.
 | 
			
		||||
                let path = Path::new(path_str);
 | 
			
		||||
                let absolute_path = PathAbs::new(path)
 | 
			
		||||
                    .ok()
 | 
			
		||||
                    .map(|p| p.as_path().to_path_buf())
 | 
			
		||||
                    .unwrap_or_else(|| path.to_owned());
 | 
			
		||||
        // Get the path of the file:
 | 
			
		||||
        // If this was set by the metadata, that will take priority.
 | 
			
		||||
        // If it wasn't, it will use the real file path (if available).
 | 
			
		||||
        let path_str = input
 | 
			
		||||
            .metadata
 | 
			
		||||
            .user_provided_name
 | 
			
		||||
            .as_ref()
 | 
			
		||||
            .or_else(|| match input.kind {
 | 
			
		||||
                OpenedInputKind::OrdinaryFile(ref path) => Some(path),
 | 
			
		||||
                _ => None,
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
                match mapping.get_syntax_for(absolute_path) {
 | 
			
		||||
                    Some(MappingTarget::MapToUnknown) => line_syntax
 | 
			
		||||
                        .ok_or_else(|| Error::UndetectedSyntax(path.to_string_lossy().into())),
 | 
			
		||||
        if let Some(path_str) = path_str {
 | 
			
		||||
            // If a path was provided, we try and detect the syntax based on extension mappings.
 | 
			
		||||
            let path = Path::new(path_str);
 | 
			
		||||
            let absolute_path = PathAbs::new(path)
 | 
			
		||||
                .ok()
 | 
			
		||||
                .map(|p| p.as_path().to_path_buf())
 | 
			
		||||
                .unwrap_or_else(|| path.to_owned());
 | 
			
		||||
 | 
			
		||||
                    Some(MappingTarget::MapTo(syntax_name)) => {
 | 
			
		||||
                        let syntax_set = self.get_syntax_set()?;
 | 
			
		||||
                        syntax_set
 | 
			
		||||
                            .find_syntax_by_name(syntax_name)
 | 
			
		||||
                            .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set })
 | 
			
		||||
                            .ok_or_else(|| Error::UnknownSyntax(syntax_name.to_owned()))
 | 
			
		||||
                    }
 | 
			
		||||
            match mapping.get_syntax_for(absolute_path) {
 | 
			
		||||
                Some(MappingTarget::MapToUnknown) => line_syntax
 | 
			
		||||
                    .ok_or_else(|| Error::UndetectedSyntax(path.to_string_lossy().into())),
 | 
			
		||||
 | 
			
		||||
                    None => {
 | 
			
		||||
                        let file_name = path.file_name().unwrap_or_default();
 | 
			
		||||
                        self.get_extension_syntax(file_name)?
 | 
			
		||||
                            .or(line_syntax)
 | 
			
		||||
                            .ok_or_else(|| Error::UndetectedSyntax(path.to_string_lossy().into()))
 | 
			
		||||
                    }
 | 
			
		||||
                Some(MappingTarget::MapTo(syntax_name)) => {
 | 
			
		||||
                    let syntax_set = self.get_syntax_set()?;
 | 
			
		||||
                    syntax_set
 | 
			
		||||
                        .find_syntax_by_name(syntax_name)
 | 
			
		||||
                        .map(|syntax| SyntaxReferenceInSet { syntax, syntax_set })
 | 
			
		||||
                        .ok_or_else(|| Error::UnknownSyntax(syntax_name.to_owned()))
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                None => {
 | 
			
		||||
                    let file_name = path.file_name().unwrap_or_default();
 | 
			
		||||
                    self.get_extension_syntax(file_name)?
 | 
			
		||||
                        .or(line_syntax)
 | 
			
		||||
                        .ok_or_else(|| Error::UndetectedSyntax(path.to_string_lossy().into()))
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                // If a path wasn't provided, we fall back to the detect first-line syntax.
 | 
			
		||||
                line_syntax.ok_or_else(|| Error::UndetectedSyntax("[unknown]".into()))
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            // If a path wasn't provided, we fall back to the detect first-line syntax.
 | 
			
		||||
            line_syntax.ok_or_else(|| Error::UndetectedSyntax("[unknown]".into()))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -100,17 +100,14 @@ pub fn get_languages(config: &Config) -> Result<String> {
 | 
			
		||||
            // Also skip if the 'extension' contains another real extension, likely
 | 
			
		||||
            // that is a full match file name like 'CMakeLists.txt' and 'Cargo.lock'
 | 
			
		||||
            if extension.starts_with('.') || Path::new(extension).extension().is_some() {
 | 
			
		||||
                true
 | 
			
		||||
            } else {
 | 
			
		||||
                let test_file = Path::new("test").with_extension(extension);
 | 
			
		||||
                let syntax_in_set = assets
 | 
			
		||||
                    .get_syntax_for_file_name(test_file, &config.syntax_mapping)
 | 
			
		||||
                    .unwrap(); // safe since .get_syntaxes() above worked
 | 
			
		||||
                match syntax_in_set {
 | 
			
		||||
                    Some(syntax_in_set) => syntax_in_set.syntax.name == lang_name,
 | 
			
		||||
                    None => false,
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            let test_file = Path::new("test").with_extension(extension);
 | 
			
		||||
            let syntax_in_set = assets
 | 
			
		||||
                .get_syntax_for_file_name(test_file, &config.syntax_mapping)
 | 
			
		||||
                .unwrap(); // safe since .get_syntaxes() above worked
 | 
			
		||||
            matches!(syntax_in_set, Some(syntax_in_set) if syntax_in_set.syntax.name == lang_name)
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								src/input.rs
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/input.rs
									
									
									
									
									
								
							@@ -256,18 +256,18 @@ impl<'a> InputReader<'a> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub(crate) fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
 | 
			
		||||
        if self.first_line.is_empty() {
 | 
			
		||||
            let res = self.inner.read_until(b'\n', buf).map(|size| size > 0)?;
 | 
			
		||||
 | 
			
		||||
            if self.content_type == Some(ContentType::UTF_16LE) {
 | 
			
		||||
                self.inner.read_until(0x00, buf).ok();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Ok(res)
 | 
			
		||||
        } else {
 | 
			
		||||
        if !self.first_line.is_empty() {
 | 
			
		||||
            buf.append(&mut self.first_line);
 | 
			
		||||
            Ok(true)
 | 
			
		||||
            return Ok(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let res = self.inner.read_until(b'\n', buf).map(|size| size > 0)?;
 | 
			
		||||
 | 
			
		||||
        if self.content_type == Some(ContentType::UTF_16LE) {
 | 
			
		||||
            let _ = self.inner.read_until(0x00, buf);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Ok(res)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								src/less.rs
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/less.rs
									
									
									
									
									
								
							@@ -11,13 +11,13 @@ pub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<usize> {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn parse_less_version(output: &[u8]) -> Option<usize> {
 | 
			
		||||
    if output.starts_with(b"less ") {
 | 
			
		||||
        let version = std::str::from_utf8(&output[5..]).ok()?;
 | 
			
		||||
        let end = version.find(|c: char| !c.is_ascii_digit())?;
 | 
			
		||||
        version[..end].parse::<usize>().ok()
 | 
			
		||||
    } else {
 | 
			
		||||
        None
 | 
			
		||||
    if !output.starts_with(b"less ") {
 | 
			
		||||
        return None;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let version = std::str::from_utf8(&output[5..]).ok()?;
 | 
			
		||||
    let end = version.find(|c: char| !c.is_ascii_digit())?;
 | 
			
		||||
    version[..end].parse::<usize>().ok()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
 
 | 
			
		||||
@@ -226,29 +226,29 @@ impl<'a> InteractivePrinter<'a> {
 | 
			
		||||
 | 
			
		||||
    fn create_fake_panel(&self, text: &str) -> String {
 | 
			
		||||
        if self.panel_width == 0 {
 | 
			
		||||
            "".to_string()
 | 
			
		||||
            return "".to_string();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let text_truncated: String = text.chars().take(self.panel_width - 1).collect();
 | 
			
		||||
        let text_filled: String = format!(
 | 
			
		||||
            "{}{}",
 | 
			
		||||
            text_truncated,
 | 
			
		||||
            " ".repeat(self.panel_width - 1 - text_truncated.len())
 | 
			
		||||
        );
 | 
			
		||||
        if self.config.style_components.grid() {
 | 
			
		||||
            format!("{} │ ", text_filled)
 | 
			
		||||
        } else {
 | 
			
		||||
            let text_truncated: String = text.chars().take(self.panel_width - 1).collect();
 | 
			
		||||
            let text_filled: String = format!(
 | 
			
		||||
                "{}{}",
 | 
			
		||||
                text_truncated,
 | 
			
		||||
                " ".repeat(self.panel_width - 1 - text_truncated.len())
 | 
			
		||||
            );
 | 
			
		||||
            if self.config.style_components.grid() {
 | 
			
		||||
                format!("{} │ ", text_filled)
 | 
			
		||||
            } else {
 | 
			
		||||
                text_filled
 | 
			
		||||
            }
 | 
			
		||||
            text_filled
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn preprocess(&self, text: &str, cursor: &mut usize) -> String {
 | 
			
		||||
        if self.config.tab_width > 0 {
 | 
			
		||||
            expand_tabs(text, self.config.tab_width, cursor)
 | 
			
		||||
        } else {
 | 
			
		||||
            *cursor += text.len();
 | 
			
		||||
            text.to_string()
 | 
			
		||||
            return expand_tabs(text, self.config.tab_width, cursor);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        *cursor += text.len();
 | 
			
		||||
        text.to_string()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user