| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | static const struct FileExtensionMap { | ||
| 2 | const char ext[11]; | ||
| 3 | const uint8_t filetype; // FileTypeEnum | ||
| 4 | } extensions[] = { | ||
| 5 | {"ada", ADA}, | ||
| 6 | {"adb", ADA}, | ||
| 7 | {"adoc", ASCIIDOC}, | ||
| 8 | {"ads", ADA}, | ||
| 9 | {"asciidoc", ASCIIDOC}, | ||
| 10 | {"asd", LISP}, | ||
| 11 | {"asm", ASM}, | ||
| 12 | {"auk", AWK}, | ||
| 13 | {"automount", INI}, | ||
| 14 | {"avsc", JSON}, | ||
| 15 | {"awk", AWK}, | ||
| 16 | {"bash", SH}, | ||
| 17 | {"bat", BATCH}, | ||
| 18 | {"bats", SH}, // https://github.com/bats-core/bats-core | ||
| 19 | {"bbl", TEX}, | ||
| 20 | {"bib", BIBTEX}, | ||
| 21 | {"btm", BATCH}, | ||
| 22 | {"bzl", PYTHON}, // https://bazel.build/rules/language | ||
| 23 | {"c++", CPLUSPLUS}, | ||
| 24 | {"c++m", CPLUSPLUS}, | ||
| 25 | {"cbl", COBOL}, | ||
| 26 | {"cc", CPLUSPLUS}, | ||
| 27 | {"ccm", CPLUSPLUS}, | ||
| 28 | {"cjs", JAVASCRIPT}, | ||
| 29 | {"cl", LISP}, | ||
| 30 | {"clj", CLOJURE}, | ||
| 31 | {"cls", TEX}, | ||
| 32 | {"cmake", CMAKE}, | ||
| 33 | {"cmd", BATCH}, | ||
| 34 | {"cnc", GCODE}, | ||
| 35 | {"cob", COBOL}, | ||
| 36 | {"cobol", COBOL}, | ||
| 37 | {"cocci", COCCINELLE}, | ||
| 38 | {"coffee", COFFEESCRIPT}, | ||
| 39 | {"cpp", CPLUSPLUS}, | ||
| 40 | {"cppm", CPLUSPLUS}, // https://clang.llvm.org/docs/StandardCPlusPlusModules.html#file-name-requirements | ||
| 41 | {"cr", RUBY}, | ||
| 42 | {"cs", CSHARP}, | ||
| 43 | {"csh", CSH}, | ||
| 44 | {"cshrc", CSH}, | ||
| 45 | {"cson", COFFEESCRIPT}, | ||
| 46 | {"css", CSS}, | ||
| 47 | {"csv", CSV}, | ||
| 48 | {"cxx", CPLUSPLUS}, | ||
| 49 | {"cxxm", CPLUSPLUS}, | ||
| 50 | {"d2", D2}, | ||
| 51 | {"dart", DART}, | ||
| 52 | {"desktop", INI}, | ||
| 53 | {"di", D}, | ||
| 54 | {"diff", DIFF}, | ||
| 55 | {"dircolors", CONFIG}, | ||
| 56 | {"doap", XML}, | ||
| 57 | {"docbook", XML}, | ||
| 58 | {"docker", DOCKER}, | ||
| 59 | {"dot", DOT}, | ||
| 60 | {"doxy", CONFIG}, | ||
| 61 | {"dterc", DTE}, | ||
| 62 | {"dts", DEVICETREE}, | ||
| 63 | {"dtsi", DEVICETREE}, | ||
| 64 | {"dtx", TEX}, | ||
| 65 | {"ebuild", SH}, | ||
| 66 | {"el", LISP}, | ||
| 67 | {"emacs", LISP}, | ||
| 68 | {"eml", MAIL}, | ||
| 69 | {"eps", POSTSCRIPT}, | ||
| 70 | {"erl", ERLANG}, | ||
| 71 | {"ex", ELIXIR}, | ||
| 72 | {"exs", ELIXIR}, | ||
| 73 | {"fish", FISH}, | ||
| 74 | {"flatpakref", INI}, | ||
| 75 | {"frag", GLSL}, | ||
| 76 | {"gawk", AWK}, | ||
| 77 | {"gco", GCODE}, | ||
| 78 | {"gcode", GCODE}, | ||
| 79 | {"gd", GDSCRIPT}, | ||
| 80 | {"gemspec", RUBY}, | ||
| 81 | {"geojson", JSON}, | ||
| 82 | {"gitignore", GITIGNORE}, | ||
| 83 | {"glsl", GLSL}, | ||
| 84 | {"glslf", GLSL}, | ||
| 85 | {"glslv", GLSL}, | ||
| 86 | {"gltf", JSON}, | ||
| 87 | {"gml", XML}, | ||
| 88 | {"gnuplot", GNUPLOT}, | ||
| 89 | {"go", GO}, | ||
| 90 | {"god", RUBY}, | ||
| 91 | {"gp", GNUPLOT}, | ||
| 92 | {"gperf", GPERF}, | ||
| 93 | {"gpi", GNUPLOT}, | ||
| 94 | {"gql", GRAPHQL}, | ||
| 95 | {"graphql", GRAPHQL}, | ||
| 96 | {"graphqls", GRAPHQL}, | ||
| 97 | {"groovy", GROOVY}, | ||
| 98 | {"grxml", XML}, | ||
| 99 | {"gsed", SED}, | ||
| 100 | {"gv", DOT}, | ||
| 101 | {"ha", HARE}, | ||
| 102 | {"har", JSON}, | ||
| 103 | {"hcl", HCL}, | ||
| 104 | {"hh", CPLUSPLUS}, | ||
| 105 | {"hpp", CPLUSPLUS}, | ||
| 106 | {"hrl", ERLANG}, | ||
| 107 | {"hs", HASKELL}, | ||
| 108 | {"htm", HTML}, | ||
| 109 | {"html", HTML}, | ||
| 110 | {"hxx", CPLUSPLUS}, | ||
| 111 | {"ini", INI}, | ||
| 112 | {"ino", CPLUSPLUS}, // https://arduino.github.io/arduino-cli/1.0/sketch-build-process/#pre-processing | ||
| 113 | {"ins", TEX}, | ||
| 114 | {"java", JAVA}, | ||
| 115 | {"jl", JULIA}, | ||
| 116 | {"jq", JQ}, | ||
| 117 | {"js", JAVASCRIPT}, | ||
| 118 | {"jslib", JAVASCRIPT}, | ||
| 119 | {"json", JSON}, | ||
| 120 | {"jsonc", JSONC}, | ||
| 121 | {"jsonl", JSON}, | ||
| 122 | {"jspre", JAVASCRIPT}, | ||
| 123 | {"kdl", KDL}, | ||
| 124 | {"kml", XML}, | ||
| 125 | {"ksh", SH}, | ||
| 126 | {"kt", KOTLIN}, | ||
| 127 | {"kts", KOTLIN}, | ||
| 128 | {"latex", TEX}, | ||
| 129 | {"lsp", LISP}, | ||
| 130 | {"ltx", TEX}, | ||
| 131 | {"lua", LUA}, | ||
| 132 | {"m3u", CONFIG}, | ||
| 133 | {"m3u8", CONFIG}, | ||
| 134 | {"m4", M4}, | ||
| 135 | {"mak", MAKE}, | ||
| 136 | {"make", MAKE}, | ||
| 137 | {"markdown", MARKDOWN}, | ||
| 138 | {"mawk", AWK}, | ||
| 139 | {"mcmeta", JSON}, | ||
| 140 | {"md", MARKDOWN}, | ||
| 141 | {"mdown", MARKDOWN}, | ||
| 142 | {"mk", MAKE}, | ||
| 143 | {"mkd", MARKDOWN}, | ||
| 144 | {"mkdn", MARKDOWN}, | ||
| 145 | {"ml", OCAML}, | ||
| 146 | {"mli", OCAML}, | ||
| 147 | {"moon", MOONSCRIPT}, | ||
| 148 | {"mount", INI}, | ||
| 149 | {"nawk", AWK}, | ||
| 150 | {"nft", NFTABLES}, | ||
| 151 | {"nginx", NGINX}, | ||
| 152 | {"nginxconf", NGINX}, | ||
| 153 | {"nim", NIM}, | ||
| 154 | {"ninja", NINJA}, | ||
| 155 | {"nix", NIX}, | ||
| 156 | {"nomad", HCL}, | ||
| 157 | {"odin", ODIN}, | ||
| 158 | {"opml", XML}, | ||
| 159 | {"page", XML}, | ||
| 160 | {"pas", PASCAL}, | ||
| 161 | {"patch", DIFF}, | ||
| 162 | {"path", INI}, | ||
| 163 | {"pc", PKGCONFIG}, | ||
| 164 | {"perl", PERL}, | ||
| 165 | {"php", PHP}, | ||
| 166 | {"pl", PERL}, | ||
| 167 | {"plist", XML}, | ||
| 168 | {"pls", INI}, | ||
| 169 | {"plt", GNUPLOT}, | ||
| 170 | {"pm", PERL}, | ||
| 171 | {"po", GETTEXT}, | ||
| 172 | {"podspec", RUBY}, | ||
| 173 | {"pot", GETTEXT}, | ||
| 174 | {"pp", RUBY}, | ||
| 175 | {"proto", PROTOBUF}, | ||
| 176 | {"ps", POSTSCRIPT}, | ||
| 177 | {"ps1", POWERSHELL}, | ||
| 178 | {"psd1", POWERSHELL}, | ||
| 179 | {"psm1", POWERSHELL}, | ||
| 180 | {"py", PYTHON}, | ||
| 181 | {"py3", PYTHON}, | ||
| 182 | {"qrc", XML}, | ||
| 183 | {"rake", RUBY}, | ||
| 184 | {"rb", RUBY}, | ||
| 185 | {"rbi", RUBY}, | ||
| 186 | {"rbx", RUBY}, | ||
| 187 | {"rdf", XML}, | ||
| 188 | {"re", C}, // re2c | ||
| 189 | {"rkt", RACKET}, | ||
| 190 | {"rktd", RACKET}, | ||
| 191 | {"rktl", RACKET}, | ||
| 192 | {"rockspec", LUA}, | ||
| 193 | {"roff", ROFF}, | ||
| 194 | {"rs", RUST}, | ||
| 195 | {"rss", XML}, | ||
| 196 | {"rst", RST}, | ||
| 197 | {"ru", RUBY}, | ||
| 198 | {"sarif", JSON}, | ||
| 199 | {"scad", SCAD}, | ||
| 200 | {"scala", SCALA}, | ||
| 201 | {"scm", SCHEME}, | ||
| 202 | {"scss", SCSS}, | ||
| 203 | {"scxml", XML}, | ||
| 204 | {"sed", SED}, | ||
| 205 | {"service", INI}, | ||
| 206 | {"sh", SH}, | ||
| 207 | {"sld", SCHEME}, | ||
| 208 | {"slice", INI}, | ||
| 209 | {"slint", SLINT}, | ||
| 210 | {"sls", SCHEME}, | ||
| 211 | {"socket", INI}, | ||
| 212 | {"spec", RPMSPEC}, | ||
| 213 | {"sql", SQL}, | ||
| 214 | {"ss", SCHEME}, | ||
| 215 | {"sty", TEX}, | ||
| 216 | {"supp", CONFIG}, | ||
| 217 | {"svg", XML}, | ||
| 218 | {"swift", SWIFT}, | ||
| 219 | {"target", INI}, | ||
| 220 | {"tcl", TCL}, | ||
| 221 | {"tcsh", CSH}, | ||
| 222 | {"tcshrc", CSH}, | ||
| 223 | {"terminfo", TERMINFO}, | ||
| 224 | {"tex", TEX}, | ||
| 225 | {"texi", TEXINFO}, | ||
| 226 | {"texinfo", TEXINFO}, | ||
| 227 | {"tf", HCL}, | ||
| 228 | {"tfvars", HCL}, | ||
| 229 | {"thor", RUBY}, | ||
| 230 | {"timer", INI}, | ||
| 231 | {"tlv", TLVERILOG}, | ||
| 232 | {"toml", TOML}, | ||
| 233 | {"topojson", JSON}, | ||
| 234 | {"tr", ROFF}, | ||
| 235 | {"ts", TYPESCRIPT}, | ||
| 236 | {"tsv", TSV}, | ||
| 237 | {"tsx", TYPESCRIPT}, | ||
| 238 | {"typ", TYPST}, | ||
| 239 | {"ui", XML}, | ||
| 240 | {"vala", VALA}, | ||
| 241 | {"vapi", VALA}, | ||
| 242 | {"vcard", VCARD}, | ||
| 243 | {"vcf", VCARD}, | ||
| 244 | {"ver", VERILOG}, | ||
| 245 | {"vert", GLSL}, | ||
| 246 | {"vh", VHDL}, | ||
| 247 | {"vhd", VHDL}, | ||
| 248 | {"vhdl", VHDL}, | ||
| 249 | {"vim", VIML}, | ||
| 250 | {"weechatlog", WEECHATLOG}, | ||
| 251 | {"wsgi", PYTHON}, | ||
| 252 | {"xbel", XML}, | ||
| 253 | {"xhtml", HTML}, | ||
| 254 | {"xml", XML}, | ||
| 255 | {"xsd", XML}, | ||
| 256 | {"xsl", XML}, | ||
| 257 | {"xslt", XML}, | ||
| 258 | {"xspf", XML}, | ||
| 259 | {"yaml", YAML}, | ||
| 260 | {"yml", YAML}, | ||
| 261 | {"zig", ZIG}, | ||
| 262 | {"zsh", SH}, | ||
| 263 | }; | ||
| 264 | |||
| 265 | 154 | static FileTypeEnum filetype_from_extension(const StringView ext) | |
| 266 | { | ||
| 267 |
2/2✓ Branch 0 (2→3) taken 86 times.
✓ Branch 1 (2→17) taken 68 times.
|
154 | if (ext.length == 0 || ext.length >= sizeof(extensions[0].ext)) { |
| 268 | return NONE; | ||
| 269 | } | ||
| 270 | |||
| 271 |
2/2✓ Branch 0 (3→4) taken 28 times.
✓ Branch 1 (3→14) taken 58 times.
|
86 | if (ext.length == 1) { |
| 272 |
10/10✓ Branch 0 (4→5) taken 16 times.
✓ Branch 1 (4→6) taken 2 times.
✓ Branch 2 (4→7) taken 2 times.
✓ Branch 3 (4→8) taken 1 times.
✓ Branch 4 (4→9) taken 1 times.
✓ Branch 5 (4→10) taken 1 times.
✓ Branch 6 (4→11) taken 1 times.
✓ Branch 7 (4→12) taken 1 times.
✓ Branch 8 (4→13) taken 1 times.
✓ Branch 9 (4→17) taken 2 times.
|
28 | switch (ext.data[0]) { |
| 273 | case '1': case '2': case '3': | ||
| 274 | case '4': case '5': case '6': | ||
| 275 | case '7': case '8': case '9': | ||
| 276 | return ROFF; | ||
| 277 | 16 | case 'c': case 'h': | |
| 278 | 16 | return C; | |
| 279 | 2 | case 'C': case 'H': | |
| 280 | 2 | return CPLUSPLUS; | |
| 281 | 2 | case 'S': case 's': | |
| 282 | 2 | return ASM; | |
| 283 | 1 | case 'd': return D; | |
| 284 | 1 | case 'l': return LEX; | |
| 285 | 1 | case 'm': return OBJC; | |
| 286 | 1 | case 'v': return VERILOG; | |
| 287 | 1 | case 'y': return YACC; | |
| 288 | } | ||
| 289 | 1 | return NONE; | |
| 290 | } | ||
| 291 | |||
| 292 | 58 | const struct FileExtensionMap *e = BSEARCH(&ext, extensions, ft_compare); | |
| 293 |
2/2✓ Branch 0 (15→16) taken 30 times.
✓ Branch 1 (15→17) taken 28 times.
|
58 | return e ? e->filetype : NONE; |
| 294 | } | ||
| 295 |