dte test coverage


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 50.0% high: ≥ 85.0%
Coverage Exec / Excl / Total
Lines: 100.0% 18 / 0 / 18
Functions: 100.0% 1 / 0 / 1
Branches: 100.0% 16 / 0 / 16

src/filetype/extensions.c
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 {"hwdb", CONFIG}, // Linux udev hwdb(7) file (/usr/lib/udev/hwdb.d/*.hwdb)
111 {"hxx", CPLUSPLUS},
112 {"ini", INI},
113 {"ino", CPLUSPLUS}, // https://arduino.github.io/arduino-cli/1.0/sketch-build-process/#pre-processing
114 {"ins", TEX},
115 {"java", JAVA},
116 {"jl", JULIA},
117 {"jq", JQ},
118 {"js", JAVASCRIPT},
119 {"jslib", JAVASCRIPT},
120 {"json", JSON},
121 {"jsonc", JSONC},
122 {"jsonl", JSON},
123 {"jspre", JAVASCRIPT},
124 {"kdl", KDL},
125 {"kml", XML},
126 {"ksh", SH},
127 {"kt", KOTLIN},
128 {"kts", KOTLIN},
129 {"latex", TEX},
130 {"lrc", LRC},
131 {"lsp", LISP},
132 {"ltx", TEX},
133 {"lua", LUA},
134 {"m3u", CONFIG},
135 {"m3u8", CONFIG},
136 {"m4", M4},
137 {"mak", MAKE},
138 {"make", MAKE},
139 {"markdown", MARKDOWN},
140 {"mawk", AWK},
141 {"mcmeta", JSON},
142 {"md", MARKDOWN},
143 {"mdown", MARKDOWN},
144 {"mk", MAKE},
145 {"mkd", MARKDOWN},
146 {"mkdn", MARKDOWN},
147 {"ml", OCAML},
148 {"mli", OCAML},
149 {"moon", MOONSCRIPT},
150 {"mount", INI},
151 {"nawk", AWK},
152 {"nft", NFTABLES},
153 {"nginx", NGINX},
154 {"nginxconf", NGINX},
155 {"nim", NIM},
156 {"ninja", NINJA},
157 {"nix", NIX},
158 {"nomad", HCL},
159 {"odin", ODIN},
160 {"opml", XML},
161 {"page", XML},
162 {"pas", PASCAL},
163 {"patch", DIFF},
164 {"path", INI},
165 {"pc", PKGCONFIG},
166 {"perl", PERL},
167 {"php", PHP},
168 {"pl", PERL},
169 {"plist", XML},
170 {"pls", INI},
171 {"plt", GNUPLOT},
172 {"pm", PERL},
173 {"po", GETTEXT},
174 {"podspec", RUBY},
175 {"pot", GETTEXT},
176 {"pp", RUBY},
177 {"proto", PROTOBUF},
178 {"ps", POSTSCRIPT},
179 {"ps1", POWERSHELL},
180 {"psd1", POWERSHELL},
181 {"psm1", POWERSHELL},
182 {"py", PYTHON},
183 {"py3", PYTHON},
184 {"qrc", XML},
185 {"rake", RUBY},
186 {"rb", RUBY},
187 {"rbi", RUBY},
188 {"rbx", RUBY},
189 {"rdf", XML},
190 {"re", C}, // re2c
191 {"rkt", RACKET},
192 {"rktd", RACKET},
193 {"rktl", RACKET},
194 {"rockspec", LUA},
195 {"roff", ROFF},
196 {"rs", RUST},
197 {"rss", XML},
198 {"rst", RST},
199 {"ru", RUBY},
200 {"sarif", JSON},
201 {"scad", SCAD},
202 {"scala", SCALA},
203 {"scm", SCHEME},
204 {"scss", SCSS},
205 {"scxml", XML},
206 {"sed", SED},
207 {"service", INI},
208 {"sh", SH},
209 {"sld", SCHEME},
210 {"slice", INI},
211 {"slint", SLINT},
212 {"sls", SCHEME},
213 {"socket", INI},
214 {"spec", RPMSPEC},
215 {"sql", SQL},
216 {"ss", SCHEME},
217 {"sty", TEX},
218 {"supp", CONFIG},
219 {"svg", XML},
220 {"swift", SWIFT},
221 {"target", INI},
222 {"tcl", TCL},
223 {"tcsh", CSH},
224 {"tcshrc", CSH},
225 {"terminfo", TERMINFO},
226 {"tex", TEX},
227 {"texi", TEXINFO},
228 {"texinfo", TEXINFO},
229 {"tf", HCL},
230 {"tfvars", HCL},
231 {"thor", RUBY},
232 {"timer", INI},
233 {"tlv", TLVERILOG},
234 {"toml", TOML},
235 {"topojson", JSON},
236 {"tr", ROFF},
237 {"ts", TYPESCRIPT},
238 {"tsv", TSV},
239 {"tsx", TYPESCRIPT},
240 {"typ", TYPST},
241 {"ui", XML},
242 {"vala", VALA},
243 {"vapi", VALA},
244 {"vcard", VCARD},
245 {"vcf", VCARD},
246 {"ver", VERILOG},
247 {"vert", GLSL},
248 {"vh", VHDL},
249 {"vhd", VHDL},
250 {"vhdl", VHDL},
251 {"vim", VIML},
252 {"weechatlog", WEECHATLOG},
253 {"wsgi", PYTHON},
254 {"xbel", XML},
255 {"xhtml", HTML},
256 {"xml", XML},
257 {"xsd", XML},
258 {"xsl", XML},
259 {"xslt", XML},
260 {"xspf", XML},
261 {"yaml", YAML},
262 {"yml", YAML},
263 {"zig", ZIG},
264 {"zsh", SH},
265 };
266
267 156 static FileTypeEnum filetype_from_extension(const StringView ext)
268 {
269
2/2
✓ Branch 2 → 3 taken 87 times.
✓ Branch 2 → 17 taken 69 times.
156 if (ext.length == 0 || ext.length >= sizeof(extensions[0].ext)) {
270 return NONE;
271 }
272
273
2/2
✓ Branch 3 → 4 taken 28 times.
✓ Branch 3 → 14 taken 59 times.
87 if (ext.length == 1) {
274
10/10
✓ Branch 4 → 5 taken 16 times.
✓ Branch 4 → 6 taken 2 times.
✓ Branch 4 → 7 taken 2 times.
✓ Branch 4 → 8 taken 1 time.
✓ Branch 4 → 9 taken 1 time.
✓ Branch 4 → 10 taken 1 time.
✓ Branch 4 → 11 taken 1 time.
✓ Branch 4 → 12 taken 1 time.
✓ Branch 4 → 13 taken 1 time.
✓ Branch 4 → 17 taken 2 times.
28 switch (ext.data[0]) {
275 case '1': case '2': case '3':
276 case '4': case '5': case '6':
277 case '7': case '8': case '9':
278 return ROFF;
279 16 case 'c': case 'h':
280 16 return C;
281 2 case 'C': case 'H':
282 2 return CPLUSPLUS;
283 2 case 'S': case 's':
284 2 return ASM;
285 1 case 'd': return D;
286 1 case 'l': return LEX;
287 1 case 'm': return OBJC;
288 1 case 'v': return VERILOG;
289 1 case 'y': return YACC;
290 }
291 1 return NONE;
292 }
293
294 59 const struct FileExtensionMap *e = BSEARCH(&ext, extensions, ft_compare);
295
2/2
✓ Branch 15 → 16 taken 30 times.
✓ Branch 15 → 17 taken 29 times.
59 return e ? e->filetype : NONE;
296 }
297