tft 0.1.1

Text file type list and detection similar to that of Neovim
Documentation
use phf::{phf_map, Map};

use crate::{detect, FileType, FileTypeResolver};

pub(crate) static FILENAME: Map<&'static str, FileTypeResolver> = phf_map! {
    "a2psrc" => FileTypeResolver::Static(FileType::A2ps),
    ".a2psrc" => FileTypeResolver::Static(FileType::A2ps),
    ".asoundrc" => FileTypeResolver::Static(FileType::AlsaConf),
    "build.xml" => FileTypeResolver::Static(FileType::Ant),
    ".htaccess" => FileTypeResolver::Static(FileType::Apache),
    "apt.conf" => FileTypeResolver::Static(FileType::AptConf),
    "=tagging-method" => FileTypeResolver::Static(FileType::Arch),
    ".arch-inventory" => FileTypeResolver::Static(FileType::Arch),
    "GNUmakefile.am" => FileTypeResolver::Static(FileType::Automake),
    "named.root" => FileTypeResolver::Static(FileType::Bindzone),
    "WORKSPACE" => FileTypeResolver::Static(FileType::Bzl),
    "WORKSPACE.bzlmod" => FileTypeResolver::Static(FileType::Bzl),
    "BUCK" => FileTypeResolver::Static(FileType::Bzl),
    "BUILD" => FileTypeResolver::Static(FileType::Bzl),
    "cabal.project" => FileTypeResolver::Static(FileType::CabalProject),
    "cabal.config" => FileTypeResolver::Static(FileType::CabalConfig),
    "calendar" => FileTypeResolver::Static(FileType::Calendar),
    "catalog" => FileTypeResolver::Static(FileType::Catalog),
    ".cdrdao" => FileTypeResolver::Static(FileType::CdrdaoConf),
    "cfengine.conf" => FileTypeResolver::Static(FileType::CfEngine),
    "CMakeLists.txt" => FileTypeResolver::Static(FileType::CMake),
    ".alias" => FileTypeResolver::Dynamic(detect::csh),
    ".cshrc" => FileTypeResolver::Dynamic(detect::csh),
    ".login" => FileTypeResolver::Dynamic(detect::csh),
    "csh.cshrc" => FileTypeResolver::Dynamic(detect::csh),
    "csh.login" => FileTypeResolver::Dynamic(detect::csh),
    "csh.logout" => FileTypeResolver::Dynamic(detect::csh),
    "auto.master" => FileTypeResolver::Static(FileType::Conf),
    "configure.in" => FileTypeResolver::Static(FileType::Config),
    "configure.ac" => FileTypeResolver::Static(FileType::Config),
    "crontab" => FileTypeResolver::Static(FileType::Crontab),
    ".cvsrc" => FileTypeResolver::Static(FileType::Cvsrc),
    "changelog.dch" => FileTypeResolver::Static(FileType::DebChangelog),
    "changelog.Debian" => FileTypeResolver::Static(FileType::DebChangelog),
    "NEWS.dch" => FileTypeResolver::Static(FileType::DebChangelog),
    "NEWS.Debian" => FileTypeResolver::Static(FileType::DebChangelog),
    "denyhosts.conf" => FileTypeResolver::Static(FileType::DenyHosts),
    "dict.conf" => FileTypeResolver::Static(FileType::DictConf),
    ".dictrc" => FileTypeResolver::Static(FileType::DictConf),
    ".dir_colors" => FileTypeResolver::Static(FileType::DirColors),
    ".dircolors" => FileTypeResolver::Static(FileType::DirColors),
    "Containerfile" => FileTypeResolver::Static(FileType::Dockerfile),
    "dockerfile" => FileTypeResolver::Static(FileType::Dockerfile),
    "Dockerfile" => FileTypeResolver::Static(FileType::Dockerfile),
    "npmrc" => FileTypeResolver::Static(FileType::DosIni),
    ".npmrc" => FileTypeResolver::Static(FileType::DosIni),
    "mpv.conf" => FileTypeResolver::Static(FileType::ConfIni),
    "dune" => FileTypeResolver::Static(FileType::Dune),
    "jbuild" => FileTypeResolver::Static(FileType::Dune),
    "dune-workspace" => FileTypeResolver::Static(FileType::Dune),
    "dune-project" => FileTypeResolver::Static(FileType::Dune),
    ".editorconfig" => FileTypeResolver::Static(FileType::EditorConfig),
    "elinks.conf" => FileTypeResolver::Static(FileType::ELinks),
    "mix.lock" => FileTypeResolver::Static(FileType::Elixir),
    "filter-rules" => FileTypeResolver::Static(FileType::ElmFilt),
    "exim.conf" => FileTypeResolver::Static(FileType::Exim),
    "exports" => FileTypeResolver::Static(FileType::Exports),
    ".fetchmailrc" => FileTypeResolver::Static(FileType::FetchMail),
    "fvSchemes" => FileTypeResolver::Dynamic(detect::foam),
    "fvSolution" => FileTypeResolver::Dynamic(detect::foam),
    "fvConstraints" => FileTypeResolver::Dynamic(detect::foam),
    "fvModels" => FileTypeResolver::Dynamic(detect::foam),
    "fstab" => FileTypeResolver::Static(FileType::FsTab),
    "mtab" => FileTypeResolver::Static(FileType::FsTab),
    ".gdbinit" => FileTypeResolver::Static(FileType::Gdb),
    "gdbinit" => FileTypeResolver::Static(FileType::Gdb),
    ".gdbearlyinit" => FileTypeResolver::Static(FileType::Gdb),
    "gdbearlyinit" => FileTypeResolver::Static(FileType::Gdb),
    "lltxxxxx.txt" => FileTypeResolver::Static(FileType::Gedcom),
    "TAG_EDITMSG" => FileTypeResolver::Static(FileType::GitCommit),
    "MERGE_MSG" => FileTypeResolver::Static(FileType::GitCommit),
    "COMMIT_EDITMSG" => FileTypeResolver::Static(FileType::GitCommit),
    "NOTES_EDITMSG" => FileTypeResolver::Static(FileType::GitCommit),
    "EDIT_DESCRIPTION" => FileTypeResolver::Static(FileType::GitCommit),
    ".gitconfig" => FileTypeResolver::Static(FileType::GitConfig),
    ".gitmodules" => FileTypeResolver::Static(FileType::GitConfig),
    ".gitattributes" => FileTypeResolver::Static(FileType::GitAttributes),
    ".gitignore" => FileTypeResolver::Static(FileType::GitIgnore),
    "gitolite.conf" => FileTypeResolver::Static(FileType::GitOlite),
    "git-rebase-todo" => FileTypeResolver::Static(FileType::GitRebase),
    "gkrellmrc" => FileTypeResolver::Static(FileType::Gkrellmrc),
    ".gnashrc" => FileTypeResolver::Static(FileType::Gnash),
    ".gnashpluginrc" => FileTypeResolver::Static(FileType::Gnash),
    "gnashpluginrc" => FileTypeResolver::Static(FileType::Gnash),
    "gnashrc" => FileTypeResolver::Static(FileType::Gnash),
    ".gnuplot" => FileTypeResolver::Static(FileType::GnuPlot),
    "go.sum" => FileTypeResolver::Static(FileType::GoSum),
    "go.work.sum" => FileTypeResolver::Static(FileType::GoSum),
    "go.work" => FileTypeResolver::Static(FileType::GoWork),
    ".gprc" => FileTypeResolver::Static(FileType::Gp),
    "Jenkinsfile" => FileTypeResolver::Static(FileType::Groovy),
    ".gtkrc" => FileTypeResolver::Static(FileType::Gtkrc),
    "gtkrc" => FileTypeResolver::Static(FileType::Gtkrc),
    "snort.conf" => FileTypeResolver::Static(FileType::Hog),
    "vision.conf" => FileTypeResolver::Static(FileType::Hog),
    ".indent.pro" => FileTypeResolver::Static(FileType::Indent),
    "indentrc" => FileTypeResolver::Static(FileType::Indent),
    "inittab" => FileTypeResolver::Static(FileType::InitTab),
    "ipf.conf" => FileTypeResolver::Static(FileType::IpFilter),
    "ipf6.conf" => FileTypeResolver::Static(FileType::IpFilter),
    "ipf.rules" => FileTypeResolver::Static(FileType::IpFilter),
    "Pipfile.lock" => FileTypeResolver::Static(FileType::Json),
    ".firebaserc" => FileTypeResolver::Static(FileType::Json),
    ".prettierrc" => FileTypeResolver::Static(FileType::Json),
    ".stylelintrc" => FileTypeResolver::Static(FileType::Json),
    ".babelrc" => FileTypeResolver::Static(FileType::JsonC),
    ".eslintrc" => FileTypeResolver::Static(FileType::JsonC),
    ".hintrc" => FileTypeResolver::Static(FileType::JsonC),
    ".jsfmtrc" => FileTypeResolver::Static(FileType::JsonC),
    ".jshintrc" => FileTypeResolver::Static(FileType::JsonC),
    ".swrc" => FileTypeResolver::Static(FileType::JsonC),
    "Kconfig" => FileTypeResolver::Static(FileType::KConfig),
    "Kconfig.debug" => FileTypeResolver::Static(FileType::KConfig),
    "lftp.conf" => FileTypeResolver::Static(FileType::Lftp),
    ".lftprc" => FileTypeResolver::Static(FileType::Lftp),
    ".libao" => FileTypeResolver::Static(FileType::Libao),
    "lilo.conf" => FileTypeResolver::Static(FileType::Lilo),
    ".emacs" => FileTypeResolver::Static(FileType::Lisp),
    "sbclrc" => FileTypeResolver::Static(FileType::Lisp),
    ".sbclrc" => FileTypeResolver::Static(FileType::Lisp),
    ".sawfishrc" => FileTypeResolver::Static(FileType::Lisp),
    ".lsl" => FileTypeResolver::Dynamic(detect::lsl),
    ".busted" => FileTypeResolver::Static(FileType::Lua),
    ".luacheckrc" => FileTypeResolver::Static(FileType::Lua),
    "lynx.cfg" => FileTypeResolver::Static(FileType::Lynx),
    "m3overrides" => FileTypeResolver::Static(FileType::M3Build),
    "m3makefile" => FileTypeResolver::Static(FileType::M3Build),
    "cm3.cfg" => FileTypeResolver::Static(FileType::M3Quake),
    ".followup" => FileTypeResolver::Static(FileType::Mail),
    ".article" => FileTypeResolver::Static(FileType::Mail),
    ".letter" => FileTypeResolver::Static(FileType::Mail),
    "mailcap" => FileTypeResolver::Static(FileType::MailCap),
    ".mailcap" => FileTypeResolver::Static(FileType::MailCap),
    "man.config" => FileTypeResolver::Static(FileType::ManConf),
    "maxima-init.mac" => FileTypeResolver::Static(FileType::Maxima),
    "meson.build" => FileTypeResolver::Static(FileType::Meson),
    "meson.options" => FileTypeResolver::Static(FileType::Meson),
    "meson_options.txt" => FileTypeResolver::Static(FileType::Meson),
    "mplayer.conf" => FileTypeResolver::Static(FileType::MPlayerConf),
    "mrxvtrc" => FileTypeResolver::Static(FileType::Mrxvtrc),
    ".mrxvtrc" => FileTypeResolver::Static(FileType::Mrxvtrc),
    "Neomuttrc" => FileTypeResolver::Static(FileType::Neomuttrc),
    ".netrc" => FileTypeResolver::Static(FileType::Netrc),
    "NEWS" => FileTypeResolver::Dynamic(detect::news),
    "env.nu" => FileTypeResolver::Static(FileType::Nu),
    "config.nu" => FileTypeResolver::Static(FileType::Nu),
    ".ocamlinit" => FileTypeResolver::Static(FileType::OCaml),
    ".octaverc" => FileTypeResolver::Static(FileType::Octave),
    "octaverc" => FileTypeResolver::Static(FileType::Octave),
    "octave.conf" => FileTypeResolver::Static(FileType::Octave),
    "opam" => FileTypeResolver::Static(FileType::Opam),
    "pam_env.conf" => FileTypeResolver::Static(FileType::PamEnv),
    ".pam_environment" => FileTypeResolver::Static(FileType::PamEnv),
    "latexmkrc" => FileTypeResolver::Static(FileType::Perl),
    ".latexmkrc" => FileTypeResolver::Static(FileType::Perl),
    "pf.conf" => FileTypeResolver::Static(FileType::Pf),
    "main.cf" => FileTypeResolver::Static(FileType::PfMain),
    "main.cf.proto" => FileTypeResolver::Static(FileType::PfMain),
    "pinerc" => FileTypeResolver::Static(FileType::Pine),
    ".pinercex" => FileTypeResolver::Static(FileType::Pine),
    ".pinerc" => FileTypeResolver::Static(FileType::Pine),
    "pinercex" => FileTypeResolver::Static(FileType::Pine),
    ".pinforc" => FileTypeResolver::Static(FileType::PInfo),
    ".povrayrc" => FileTypeResolver::Static(FileType::PovIni),
    "printcap" => FileTypeResolver::Static(FileType::PtcapPrint),
    "termcap" => FileTypeResolver::Static(FileType::PtcapTerm),
    ".procmailrc" => FileTypeResolver::Static(FileType::ProcMail),
    ".procmail" => FileTypeResolver::Static(FileType::ProcMail),
    "indent.pro" => FileTypeResolver::Dynamic(|_, content| detect::proto(content, FileType::Indent)),
    "INDEX" => FileTypeResolver::Dynamic(detect::psf),
    "INFO" => FileTypeResolver::Dynamic(detect::psf),
    ".pythonstartup" => FileTypeResolver::Static(FileType::Python),
    ".pythonrc" => FileTypeResolver::Static(FileType::Python),
    "SConstruct" => FileTypeResolver::Static(FileType::Python),
    "qmldir" => FileTypeResolver::Static(FileType::QmlDir),
    ".Rprofile" => FileTypeResolver::Static(FileType::R),
    "Rprofile" => FileTypeResolver::Static(FileType::R),
    "Rprofile.site" => FileTypeResolver::Static(FileType::R),
    "ratpoisonrc" => FileTypeResolver::Static(FileType::RatPoison),
    ".ratpoisonrc" => FileTypeResolver::Static(FileType::RatPoison),
    "inputrc" => FileTypeResolver::Static(FileType::Readline),
    ".inputrc" => FileTypeResolver::Static(FileType::Readline),
    ".reminders" => FileTypeResolver::Static(FileType::Remind),
    "resolv.conf" => FileTypeResolver::Static(FileType::Resolv),
    "robots.txt" => FileTypeResolver::Static(FileType::Robots),
    "Gemfile" => FileTypeResolver::Static(FileType::Ruby),
    "Puppetfile" => FileTypeResolver::Static(FileType::Ruby),
    ".irbrc" => FileTypeResolver::Static(FileType::Ruby),
    "irbrc" => FileTypeResolver::Static(FileType::Ruby),
    "Vagrantfile" => FileTypeResolver::Static(FileType::Ruby),
    "smb.conf" => FileTypeResolver::Static(FileType::Samba),
    "screenrc" => FileTypeResolver::Static(FileType::Screen),
    ".screenrc" => FileTypeResolver::Static(FileType::Screen),
    "bash.bashrc" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))),
    "bashrc" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))),
    ".bashrc" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))),
    ".env" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, None)),
    ".kshrc" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Ksh))),
    ".profile" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, None)),
    "APKBUILD" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))),
    "PKGBUILD" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Bash))),
    ".tcshrc" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Tcsh))),
    "tcsh.login" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Tcsh))),
    "tcsh.tcshrc" => FileTypeResolver::Dynamic(|_, content| detect::sh(content, Some(FileType::Tcsh))),
    ".slrnrc" => FileTypeResolver::Static(FileType::Slrnrc),
    "sendmail.cf" => FileTypeResolver::Static(FileType::Sm),
    "squid.conf" => FileTypeResolver::Static(FileType::Squid),
    "ssh_config" => FileTypeResolver::Static(FileType::SshConfig),
    "sshd_config" => FileTypeResolver::Static(FileType::SshdConfig),
    "sudoers.tmp" => FileTypeResolver::Static(FileType::Sudoers),
    "tags" => FileTypeResolver::Static(FileType::Tags),
    "pending.data" => FileTypeResolver::Static(FileType::TaskData),
    "completed.data" => FileTypeResolver::Static(FileType::TaskData),
    "undo.data" => FileTypeResolver::Static(FileType::TaskData),
    ".tclshrc" => FileTypeResolver::Static(FileType::Tcl),
    ".wishrc" => FileTypeResolver::Static(FileType::Tcl),
    "tclsh.rc" => FileTypeResolver::Static(FileType::Tcl),
    "texmf.cnf" => FileTypeResolver::Static(FileType::TexMF),
    "COPYING" => FileTypeResolver::Static(FileType::Text),
    "README" => FileTypeResolver::Static(FileType::Text),
    "LICENSE" => FileTypeResolver::Static(FileType::Text),
    "AUTHORS" => FileTypeResolver::Static(FileType::Text),
    "tfrc" => FileTypeResolver::Static(FileType::Tf),
    ".tfrc" => FileTypeResolver::Static(FileType::Tf),
    "tidy.conf" => FileTypeResolver::Static(FileType::Tidy),
    "tidyrc" => FileTypeResolver::Static(FileType::Tidy),
    ".tidyrc" => FileTypeResolver::Static(FileType::Tidy),
    ".tmux.conf" => FileTypeResolver::Static(FileType::Tmux),
    "Pipfile" => FileTypeResolver::Static(FileType::Toml),
    "Gopkg.lock" => FileTypeResolver::Static(FileType::Toml),
    "Cargo.lock" => FileTypeResolver::Static(FileType::Toml),
    "trustees.conf" => FileTypeResolver::Static(FileType::Trustees),
    "fdrupstream.log" => FileTypeResolver::Static(FileType::UpstreamLog),
    "vgrindefs" => FileTypeResolver::Static(FileType::Vgrindefs),
    ".exrc" => FileTypeResolver::Static(FileType::Vim),
    "_exrc" => FileTypeResolver::Static(FileType::Vim),
    "_viminfo" => FileTypeResolver::Static(FileType::VimInfo),
    ".viminfo" => FileTypeResolver::Static(FileType::VimInfo),
    ".wgetrc" => FileTypeResolver::Static(FileType::Wget),
    ".wget2rc" => FileTypeResolver::Static(FileType::Wget2),
    "wgetrc" => FileTypeResolver::Static(FileType::Wget),
    "wget2rc" => FileTypeResolver::Static(FileType::Wget2),
    ".wvdialrc" => FileTypeResolver::Static(FileType::WvDial),
    "wvdial.conf" => FileTypeResolver::Static(FileType::WvDial),
    ".Xresources" => FileTypeResolver::Static(FileType::XDefaults),
    ".Xpdefaults" => FileTypeResolver::Static(FileType::XDefaults),
    "xdm-config" => FileTypeResolver::Static(FileType::XDefaults),
    ".Xdefaults" => FileTypeResolver::Static(FileType::XDefaults),
    "xorg.conf" => FileTypeResolver::Static(FileType::XF86Conf4),
    "xorg.conf-4" => FileTypeResolver::Static(FileType::XF86Conf4),
    "XF86Config" => FileTypeResolver::Dynamic(detect::xfree86),
    "fglrxrc" => FileTypeResolver::Static(FileType::Xml),
    ".clangd" => FileTypeResolver::Static(FileType::Yaml),
    ".clang-format" => FileTypeResolver::Static(FileType::Yaml),
    ".clang-tidy" => FileTypeResolver::Static(FileType::Yaml),
    ".zlogin" => FileTypeResolver::Static(FileType::Zsh),
    ".zlogout" => FileTypeResolver::Static(FileType::Zsh),
    ".zshrc" => FileTypeResolver::Static(FileType::Zsh),
    ".zprofile" => FileTypeResolver::Static(FileType::Zsh),
    ".zcompdump" => FileTypeResolver::Static(FileType::Zsh),
    ".zshenv" => FileTypeResolver::Static(FileType::Zsh),
    ".zfbfmarks" => FileTypeResolver::Static(FileType::Zsh),
};