feat: Add a new filetype for source code files

This commit is contained in:
Robert Minsk 2023-10-18 01:23:58 -07:00
parent 879a0c9e95
commit 5f4e8ac3bf
6 changed files with 114 additions and 3 deletions

View file

@ -40,8 +40,9 @@ files; setting `EZA_COLORS="reset"` will highlight nothing.
- Documents (pdf, doc, dvi) are a less faint blue.
- Compressed files (zip, tgz, Z) are red.
- Temporary files (tmp, swp, ~) are grey.
- Compiled files (class, o, pyc) are faint orange. A file is also counted as compiled if it uses a common extension and is
- Compiled files (class, o, pyc) are yellow. A file is also counted as compiled if it uses a common extension and is
in the same directory as one of its source files: styles.css will count as compiled when next to styles.less or styles.sass, and scripts.js when next to scripts.ts or scripts.coffee.
- Source files (cpp, js, java) are bright yellow.
## See also

View file

@ -282,6 +282,9 @@ LIST OF CODES
`bu`
: a regular file that is used to build a project (ex: Makefile)
`sc`
: a regular file that is source code
`Sn`
: No security context on a file

View file

@ -23,8 +23,9 @@ pub enum FileType {
Temp,
Compiled,
Build, // A “build file is something that can be run or activated somehow in order to
// kick off the build of a project. Its usually only present in directories full of
// source code.
// kick off the build of a project. Its usually only present in directories full of
// source code.
Source,
}
/// Mapping from full filenames to file type.
@ -131,6 +132,7 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
/* Video files */
"avi" => FileType::Video,
"flv" => FileType::Video,
"h264" => FileType::Video,
"heics" => FileType::Video,
"m2ts" => FileType::Video,
"m2v" => FileType::Video,
@ -156,10 +158,15 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
"opus" => FileType::Music,
"wma" => FileType::Music,
/* Lossless music, rather than any other kind of data... */
"aif" => FileType::Lossless,
"aifc" => FileType::Lossless,
"aiff" => FileType::Lossless,
"alac" => FileType::Lossless,
"ape" => FileType::Lossless,
"flac" => FileType::Lossless,
"pcm" => FileType::Lossless,
"wav" => FileType::Lossless,
"wv" => FileType::Lossless,
/* Cryptology files */
"asc" => FileType::Crypto, // GnuPG ASCII armored file
"gpg" => FileType::Crypto, // GnuPG encrypted file
@ -201,6 +208,7 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
/* Compressed/archive files */
"7z" => FileType::Compressed,
"ar" => FileType::Compressed,
"arj" => FileType::Compressed,
"br" => FileType::Compressed,
"bz" => FileType::Compressed,
"bz2" => FileType::Compressed,
@ -240,8 +248,10 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
"bak" => FileType::Temp,
"bk" => FileType::Temp,
"bkp" => FileType::Temp,
"crdownload" => FileType::Temp,
"download" => FileType::Temp,
"fdmdownload"=> FileType::Temp,
"part" => FileType::Temp,
"swn" => FileType::Temp,
"swo" => FileType::Temp,
"swp" => FileType::Temp,
@ -250,6 +260,10 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
"a" => FileType::Compiled, // Unix static library
"bundle" => FileType::Compiled, // Mac OS X application bundle
"class" => FileType::Compiled, // Java class file
"cma" => FileType::Compiled, // OCaml bytecode library
"cmi" => FileType::Compiled, // OCaml interface
"cmo" => FileType::Compiled, // OCaml bytecode object
"cmx" => FileType::Compiled, // OCaml bytecode object for inlining
"dll" => FileType::Compiled, // Windows dynamic link library
"dylib" => FileType::Compiled, // Mach-O dynamic library
"elc" => FileType::Compiled, // Emacs compiled lisp
@ -262,6 +276,93 @@ const EXTENSION_TYPES: Map<&'static str, FileType> = phf_map! {
"pyo" => FileType::Compiled, // Python optimized code
"so" => FileType::Compiled, // Unix shared library
"zwc" => FileType::Compiled, // zsh compiled file
/* Source code */
"applescript"=> FileType::Source, // Apple script
"as" => FileType::Source, // Action script
"asa" => FileType::Source, // asp
"awk" => FileType::Source, // awk
"c" => FileType::Source, // C/C++
"c++" => FileType::Source, // C/C++
"cabal" => FileType::Source, // Cabal
"cc" => FileType::Source, // C/C++
"clj" => FileType::Source, // Clojure
"cp" => FileType::Source, // C/C++ Xcode
"cpp" => FileType::Source, // C/C++
"cr" => FileType::Source, // Crystal
"cs" => FileType::Source, // C#
"css" => FileType::Source, // css
"csx" => FileType::Source, // C#
"cu" => FileType::Source, // CUDA
"cxx" => FileType::Source, // C/C++
"d" => FileType::Source, // D
"dart" => FileType::Source, // Dart
"di" => FileType::Source, // D
"dpr" => FileType::Source, // Delphi Pascal
"el" => FileType::Source, // Lisp
"elm" => FileType::Source, // Elm
"erl" => FileType::Source, // Erlang
"ex" => FileType::Source, // Elixir
"exs" => FileType::Source, // Elixir
"fs" => FileType::Source, // F#
"fsh" => FileType::Source, // Fragment shader
"fsi" => FileType::Source, // F#
"fsx" => FileType::Source, // F#
"go" => FileType::Source, // Go
"gradle" => FileType::Source, // Gradle
"groovy" => FileType::Source, // Groovy
"gvy" => FileType::Source, // Groovy
"h" => FileType::Source, // C/C++
"h++" => FileType::Source, // C/C++
"hpp" => FileType::Source, // C/C++
"hs" => FileType::Source, // Haskell
"htc" => FileType::Source, // Javascript
"hxx" => FileType::Source, // C/C++
"inc" => FileType::Source,
"inl" => FileType::Source, // C/C++ Microsoft
"ipynb" => FileType::Source, // Jupyter Notebook
"java" => FileType::Source, // Java
"jl" => FileType::Source, // Julia
"js" => FileType::Source, // Javascript
"jsx" => FileType::Source, // React
"kt" => FileType::Source, // Kotlin
"kts" => FileType::Source, // Kotlin
"less" => FileType::Source, // less
"lhs" => FileType::Source, // Haskell
"lisp" => FileType::Source, // Lisp
"ltx" => FileType::Source, // LaTeX
"lua" => FileType::Source, // Lua
"m" => FileType::Source, // Matlab
"matlab" => FileType::Source, // Matlab
"ml" => FileType::Source, // OCaml
"mli" => FileType::Source, // OCaml
"mn" => FileType::Source, // Matlab
"nb" => FileType::Source, // Mathematica
"p" => FileType::Source, // Pascal
"pas" => FileType::Source, // Pascal
"php" => FileType::Source, // PHP
"pl" => FileType::Source, // Perl
"pm" => FileType::Source, // Perl
"pod" => FileType::Source, // Perl
"pp" => FileType::Source, // Puppet
"ps1" => FileType::Source, // PowerShell
"psd1" => FileType::Source, // PowerShell
"psm1" => FileType::Source, // PowerShell
"purs" => FileType::Source, // PureScript
"py" => FileType::Source, // Python
"r" => FileType::Source, // R
"rb" => FileType::Source, // Ruby
"rs" => FileType::Source, // Rust
"sass" => FileType::Source, // Sass
"scala" => FileType::Source, // Scala
"scss" => FileType::Source, // Sass
"sql" => FileType::Source, // SQL
"swift" => FileType::Source, // Swift
"tcl" => FileType::Source, // TCL
"tex" => FileType::Source, // LaTeX
"ts" => FileType::Source, // TypeScript
"v" => FileType::Source, // V
"vb" => FileType::Source, // Visual Basic
"vsh" => FileType::Source, // Vertex shader
};
impl FileType {

View file

@ -104,6 +104,7 @@ impl UiStyles {
temp: White.normal(),
compiled: Yellow.normal(),
build: Yellow.bold().underline(),
source: Yellow.bold(), // Need to discuss color
},
punctuation: DarkGray.bold(),

View file

@ -216,6 +216,7 @@ impl FileStyle for FileTypes {
Some(FileType::Temp) => Some(theme.ui.file_type.temp),
Some(FileType::Compiled) => Some(theme.ui.file_type.compiled),
Some(FileType::Build) => Some(theme.ui.file_type.build),
Some(FileType::Source) => Some(theme.ui.file_type.source),
None => None
};
}
@ -602,6 +603,8 @@ mod customs_test {
test!(exa_tm: ls "", exa "tm=38;5;135" => colours c -> { c.file_type.temp = Fixed(135).normal(); });
test!(exa_cm: ls "", exa "cm=38;5;136" => colours c -> { c.file_type.compiled = Fixed(136).normal(); });
test!(exa_ie: ls "", exa "bu=38;5;137" => colours c -> { c.file_type.build = Fixed(137).normal(); });
test!(exa_bu: ls "", exa "bu=38;5;137" => colours c -> { c.file_type.build = Fixed(137).normal(); });
test!(exa_sc: ls "", exa "sc=38;5;138" => colours c -> { c.file_type.source = Fixed(138).normal(); });
test!(exa_Sn: ls "", exa "Sn=38;5;128" => colours c -> { c.security_context.none = Fixed(128).normal(); });
test!(exa_Su: ls "", exa "Su=38;5;129" => colours c -> { c.security_context.selinux.user = Fixed(129).normal(); });

View file

@ -155,6 +155,7 @@ pub struct FileType {
pub temp: Style, // tm - temporary file
pub compiled: Style, // cm - compilation artifact
pub build: Style, // bu - file that is used to build a project
pub source: Style, // sc - source code
}
impl UiStyles {
@ -269,6 +270,7 @@ impl UiStyles {
"tm" => self.file_type.temp = pair.to_style(),
"cm" => self.file_type.compiled = pair.to_style(),
"bu" => self.file_type.build = pair.to_style(),
"sc" => self.file_type.source = pair.to_style(),
"Sn" => self.security_context.none = pair.to_style(),
"Su" => self.security_context.selinux.user = pair.to_style(),