|
|
@@ -7,11 +7,9 @@
|
|
|
//! # Contributors
|
|
|
//! Please keep these lists sorted. If you're using vim, :sort i
|
|
|
|
|
|
-use ansiterm::Style;
|
|
|
use phf::{phf_map, Map};
|
|
|
|
|
|
use crate::fs::File;
|
|
|
-use crate::theme::FileColours;
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
pub enum FileType {
|
|
|
@@ -24,7 +22,7 @@ pub enum FileType {
|
|
|
Compressed,
|
|
|
Temp,
|
|
|
Compiled,
|
|
|
- Immediate // An “immediate” file is something that can be run or activated somehow in order to
|
|
|
+ Build // A “build file is something that can be run or activated somehow in order to
|
|
|
// kick off the build of a project. It’s usually only present in directories full of
|
|
|
// source code.
|
|
|
}
|
|
|
@@ -32,47 +30,47 @@ pub enum FileType {
|
|
|
/// Mapping from full filenames to file type.
|
|
|
const FILENAME_TYPES: Map<&'static str, FileType> = phf_map! {
|
|
|
/* Immediate file - kick off the build of a project */
|
|
|
- "Brewfile" => FileType::Immediate,
|
|
|
- "bsconfig.json" => FileType::Immediate,
|
|
|
- "BUILD" => FileType::Immediate,
|
|
|
- "BUILD.bazel" => FileType::Immediate,
|
|
|
- "build.gradle" => FileType::Immediate,
|
|
|
- "build.sbt" => FileType::Immediate,
|
|
|
- "build.xml" => FileType::Immediate,
|
|
|
- "Cargo.toml" => FileType::Immediate,
|
|
|
- "CMakeLists.txt" => FileType::Immediate,
|
|
|
- "composer.json" => FileType::Immediate,
|
|
|
- "configure" => FileType::Immediate,
|
|
|
- "Containerfile" => FileType::Immediate,
|
|
|
- "Dockerfile" => FileType::Immediate,
|
|
|
- "Earthfile" => FileType::Immediate,
|
|
|
- "flake.nix" => FileType::Immediate,
|
|
|
- "Gemfile" => FileType::Immediate,
|
|
|
- "GNUmakefile" => FileType::Immediate,
|
|
|
- "Gruntfile.coffee" => FileType::Immediate,
|
|
|
- "Gruntfile.js" => FileType::Immediate,
|
|
|
- "jsconfig.json" => FileType::Immediate,
|
|
|
- "Justfile" => FileType::Immediate,
|
|
|
- "justfile" => FileType::Immediate,
|
|
|
- "Makefile" => FileType::Immediate,
|
|
|
- "makefile" => FileType::Immediate,
|
|
|
- "meson.build" => FileType::Immediate,
|
|
|
- "mix.exs" => FileType::Immediate,
|
|
|
- "package.json" => FileType::Immediate,
|
|
|
- "Pipfile" => FileType::Immediate,
|
|
|
- "PKGBUILD" => FileType::Immediate,
|
|
|
- "Podfile" => FileType::Immediate,
|
|
|
- "pom.xml" => FileType::Immediate,
|
|
|
- "Procfile" => FileType::Immediate,
|
|
|
- "pyproject.toml" => FileType::Immediate,
|
|
|
- "Rakefile" => FileType::Immediate,
|
|
|
- "RoboFile.php" => FileType::Immediate,
|
|
|
- "SConstruct" => FileType::Immediate,
|
|
|
- "tsconfig.json" => FileType::Immediate,
|
|
|
- "Vagrantfile" => FileType::Immediate,
|
|
|
- "webpack.config.cjs" => FileType::Immediate,
|
|
|
- "webpack.config.js" => FileType::Immediate,
|
|
|
- "WORKSPACE" => FileType::Immediate,
|
|
|
+ "Brewfile" => FileType::Build,
|
|
|
+ "bsconfig.json" => FileType::Build,
|
|
|
+ "BUILD" => FileType::Build,
|
|
|
+ "BUILD.bazel" => FileType::Build,
|
|
|
+ "build.gradle" => FileType::Build,
|
|
|
+ "build.sbt" => FileType::Build,
|
|
|
+ "build.xml" => FileType::Build,
|
|
|
+ "Cargo.toml" => FileType::Build,
|
|
|
+ "CMakeLists.txt" => FileType::Build,
|
|
|
+ "composer.json" => FileType::Build,
|
|
|
+ "configure" => FileType::Build,
|
|
|
+ "Containerfile" => FileType::Build,
|
|
|
+ "Dockerfile" => FileType::Build,
|
|
|
+ "Earthfile" => FileType::Build,
|
|
|
+ "flake.nix" => FileType::Build,
|
|
|
+ "Gemfile" => FileType::Build,
|
|
|
+ "GNUmakefile" => FileType::Build,
|
|
|
+ "Gruntfile.coffee" => FileType::Build,
|
|
|
+ "Gruntfile.js" => FileType::Build,
|
|
|
+ "jsconfig.json" => FileType::Build,
|
|
|
+ "Justfile" => FileType::Build,
|
|
|
+ "justfile" => FileType::Build,
|
|
|
+ "Makefile" => FileType::Build,
|
|
|
+ "makefile" => FileType::Build,
|
|
|
+ "meson.build" => FileType::Build,
|
|
|
+ "mix.exs" => FileType::Build,
|
|
|
+ "package.json" => FileType::Build,
|
|
|
+ "Pipfile" => FileType::Build,
|
|
|
+ "PKGBUILD" => FileType::Build,
|
|
|
+ "Podfile" => FileType::Build,
|
|
|
+ "pom.xml" => FileType::Build,
|
|
|
+ "Procfile" => FileType::Build,
|
|
|
+ "pyproject.toml" => FileType::Build,
|
|
|
+ "Rakefile" => FileType::Build,
|
|
|
+ "RoboFile.php" => FileType::Build,
|
|
|
+ "SConstruct" => FileType::Build,
|
|
|
+ "tsconfig.json" => FileType::Build,
|
|
|
+ "Vagrantfile" => FileType::Build,
|
|
|
+ "webpack.config.cjs" => FileType::Build,
|
|
|
+ "webpack.config.js" => FileType::Build,
|
|
|
+ "WORKSPACE" => FileType::Build,
|
|
|
/* Cryptology files */
|
|
|
"id_dsa" => FileType::Crypto,
|
|
|
"id_ecdsa" => FileType::Crypto,
|
|
|
@@ -86,7 +84,7 @@ const FILENAME_TYPES: Map<&'static str, FileType> = phf_map! {
|
|
|
/// extension is added also update the extension icon map.
|
|
|
const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
|
|
|
/* Immediate file - kick off the build of a project */
|
|
|
- "ninja" => FileType::Immediate,
|
|
|
+ "ninja" => FileType::Build,
|
|
|
/* Image files */
|
|
|
"arw" => FileType::Image,
|
|
|
"avif" => FileType::Image,
|
|
|
@@ -269,10 +267,10 @@ impl FileType {
|
|
|
/// Lookup the file type based on the file's name, by the file name
|
|
|
/// lowercase extension, or if the file could be compiled from related
|
|
|
/// source code.
|
|
|
- fn get_file_type(file: &File<'_>) -> Option<FileType> {
|
|
|
+ pub(crate) fn get_file_type(file: &File<'_>) -> Option<FileType> {
|
|
|
// Case-insensitive readme is checked first for backwards compatibility.
|
|
|
if file.name.to_lowercase().starts_with("readme") {
|
|
|
- return Some(Self::Immediate)
|
|
|
+ return Some(Self::Build)
|
|
|
}
|
|
|
if let Some(file_type) = FILENAME_TYPES.get(&file.name) {
|
|
|
return Some(file_type.clone())
|
|
|
@@ -291,27 +289,3 @@ impl FileType {
|
|
|
None
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-#[derive(Debug)]
|
|
|
-pub struct FileTypeColor;
|
|
|
-
|
|
|
-impl FileColours for FileTypeColor {
|
|
|
- /// Map from the file type to the display style/color for the file.
|
|
|
- fn colour_file(&self, file: &File<'_>) -> Option<Style> {
|
|
|
- use ansiterm::Colour::*;
|
|
|
-
|
|
|
- match FileType::get_file_type(file) {
|
|
|
- Some(FileType::Compiled) => Some(Yellow.normal()),
|
|
|
- Some(FileType::Compressed) => Some(Red.normal()),
|
|
|
- Some(FileType::Crypto) => Some(Green.bold()),
|
|
|
- Some(FileType::Document) => Some(Green.normal()),
|
|
|
- Some(FileType::Image) => Some(Purple.normal()),
|
|
|
- Some(FileType::Immediate) => Some(Yellow.bold().underline()),
|
|
|
- Some(FileType::Lossless) => Some(Cyan.bold()),
|
|
|
- Some(FileType::Music) => Some(Cyan.normal()),
|
|
|
- Some(FileType::Temp) => Some(White.normal()),
|
|
|
- Some(FileType::Video) => Some(Purple.bold()),
|
|
|
- _ => None
|
|
|
- }
|
|
|
- }
|
|
|
-}
|