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),
};