GCC Code Coverage Report


Directory: lib/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 99.2% 240 / 0 / 242
Functions: 100.0% 15 / 0 / 15
Branches: 92.3% 289 / 0 / 313

format_completion_fish.c
Line Branch Exec Source
1 #include <ctype.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #include "ap_internal.h"
6
7 24112 static bool action_takes_no_value(ap_action action) {
8
3/4
✓ Branch 0 taken 16250 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16238 times.
✓ Branch 3 taken 12 times.
16250 return action == AP_ACTION_STORE_TRUE || action == AP_ACTION_STORE_FALSE ||
9
3/4
✓ Branch 0 taken 16250 times.
✓ Branch 1 taken 7862 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16238 times.
40362 action == AP_ACTION_COUNT || action == AP_ACTION_STORE_CONST;
10 }
11
12 24116 static bool option_takes_value(const ap_arg_def *def) {
13
5/6
✓ Branch 0 taken 24116 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 24112 times.
✓ Branch 3 taken 4 times.
✓ Branch 5 taken 16238 times.
✓ Branch 6 taken 7874 times.
24116 return def && def->is_optional && !action_takes_no_value(def->opts.action);
14 }
15
16 14942 static ap_completion_kind option_completion_kind(const ap_arg_def *def) {
17
2/2
✓ Branch 1 taken 6304 times.
✓ Branch 2 taken 8638 times.
14942 if (!option_takes_value(def)) {
18 6304 return AP_COMPLETION_KIND_NONE;
19 }
20
2/2
✓ Branch 0 taken 2468 times.
✓ Branch 1 taken 6170 times.
8638 if (def->opts.completion_kind != AP_COMPLETION_KIND_NONE) {
21 2468 return def->opts.completion_kind;
22 }
23
3/4
✓ Branch 0 taken 3634 times.
✓ Branch 1 taken 2536 times.
✓ Branch 2 taken 3634 times.
✗ Branch 3 not taken.
6170 if (def->opts.choices.items && def->opts.choices.count > 0) {
24 3634 return AP_COMPLETION_KIND_CHOICES;
25 }
26 2536 return AP_COMPLETION_KIND_NONE;
27 }
28
29 2658 static bool option_has_dynamic_completion(const ap_arg_def *def) {
30
3/4
✓ Branch 1 taken 2658 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 310 times.
✓ Branch 4 taken 2348 times.
2658 return option_takes_value(def) && def->opts.completion_callback != NULL;
31 }
32
33 2258 static const char *metavar_for(const ap_arg_def *def) {
34 static char fallback[64];
35 size_t i;
36
37
3/4
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2256 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2258 if (def->opts.metavar && def->opts.metavar[0] != '\0') {
38 2 return def->opts.metavar;
39 }
40
4/6
✓ Branch 0 taken 11684 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 11684 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 9428 times.
✓ Branch 5 taken 2256 times.
11684 for (i = 0; i < sizeof(fallback) - 1 && def->dest && def->dest[i] != '\0';
41 9428 i++) {
42 9428 char c = def->dest[i];
43
3/4
✓ Branch 0 taken 9420 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 9420 times.
✗ Branch 3 not taken.
9428 if (c >= 'a' && c <= 'z') {
44 9420 fallback[i] = (char)(c - 'a' + 'A');
45
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
8 } else if (c == '_') {
46 6 fallback[i] = '-';
47 } else {
48 2 fallback[i] = c;
49 }
50 }
51 2256 fallback[i] = '\0';
52 2256 return fallback;
53 }
54
55 21554 static int append_fish_double_quoted(ap_string_builder *sb, const char *text) {
56
1/2
✓ Branch 0 taken 21554 times.
✗ Branch 1 not taken.
21554 const unsigned char *p = (const unsigned char *)(text ? text : "");
57
58
2/2
✓ Branch 1 taken 90 times.
✓ Branch 2 taken 21464 times.
21554 if (ap_sb_appendf(sb, "\"") != 0) {
59 90 return -1;
60 }
61
2/2
✓ Branch 0 taken 177676 times.
✓ Branch 1 taken 20656 times.
198332 while (*p != '\0') {
62
6/6
✓ Branch 0 taken 177160 times.
✓ Branch 1 taken 516 times.
✓ Branch 2 taken 177148 times.
✓ Branch 3 taken 12 times.
✓ Branch 4 taken 504 times.
✓ Branch 5 taken 176644 times.
177676 if (*p == '\\' || *p == '"' || *p == '$') {
63
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1028 times.
1032 if (ap_sb_appendf(sb, "\\%c", (char)*p) != 0) {
64 4 return -1;
65 }
66
3/4
✓ Branch 0 taken 176150 times.
✓ Branch 1 taken 494 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 176150 times.
176644 } else if (*p == '\n' || *p == '\r') {
67
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 492 times.
494 if (ap_sb_appendf(sb, " ") != 0) {
68 2 return -1;
69 }
70
2/2
✓ Branch 1 taken 802 times.
✓ Branch 2 taken 175348 times.
176150 } else if (ap_sb_appendf(sb, "%c", (char)*p) != 0) {
71 802 return -1;
72 }
73 176868 p++;
74 }
75 20656 return ap_sb_appendf(sb, "\"");
76 }
77
78 18734 static int append_identifier(ap_string_builder *sb, const char *text) {
79 size_t i;
80
1/2
✓ Branch 0 taken 18734 times.
✗ Branch 1 not taken.
18734 const char *value = text ? text : "argparse_c";
81
82
2/2
✓ Branch 0 taken 105968 times.
✓ Branch 1 taken 18352 times.
124320 for (i = 0; value[i] != '\0'; i++) {
83 105968 unsigned char c = (unsigned char)value[i];
84
3/4
✓ Branch 0 taken 10586 times.
✓ Branch 1 taken 95382 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10586 times.
105968 if (isalnum(c) || c == '_') {
85
2/2
✓ Branch 1 taken 348 times.
✓ Branch 2 taken 95034 times.
95382 if (ap_sb_appendf(sb, "%c", (char)c) != 0) {
86 348 return -1;
87 }
88
2/2
✓ Branch 1 taken 34 times.
✓ Branch 2 taken 10552 times.
10586 } else if (ap_sb_appendf(sb, "_") != 0) {
89 34 return -1;
90 }
91 }
92 18352 return 0;
93 }
94
95 19016 static int append_parser_key(ap_string_builder *sb, const ap_parser *parser) {
96
3/4
✓ Branch 0 taken 19016 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14636 times.
✓ Branch 3 taken 4380 times.
19016 if (!parser || !parser->parent) {
97 14636 return ap_sb_appendf(sb, "root");
98 }
99
2/2
✓ Branch 1 taken 18 times.
✓ Branch 2 taken 4362 times.
4380 if (append_parser_key(sb, parser->parent) != 0) {
100 18 return -1;
101 }
102 4362 return ap_sb_appendf(sb, "/%s", parser->command_name);
103 }
104
105 4732 static int append_description(ap_string_builder *sb, const ap_arg_def *def) {
106 4732 const char *help = def->opts.help;
107
108
3/4
✓ Branch 0 taken 2460 times.
✓ Branch 1 taken 2272 times.
✓ Branch 2 taken 2460 times.
✗ Branch 3 not taken.
4732 if (help && help[0] != '\0') {
109
4/4
✓ Branch 1 taken 2448 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 390 times.
✓ Branch 4 taken 2058 times.
4908 if (ap_sb_appendf(sb, " -d ") != 0 ||
110 2448 append_fish_double_quoted(sb, help) != 0) {
111 402 return -1;
112 }
113
2/2
✓ Branch 1 taken 2270 times.
✓ Branch 2 taken 2 times.
2272 } else if (option_takes_value(def)) {
114
4/4
✓ Branch 1 taken 2258 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 74 times.
✓ Branch 4 taken 2184 times.
4528 if (ap_sb_appendf(sb, " -d ") != 0 ||
115 2258 append_fish_double_quoted(sb, metavar_for(def)) != 0) {
116 86 return -1;
117 }
118 }
119 4244 return 0;
120 }
121
122 4554 static int append_transition_cases(ap_string_builder *sb,
123 const ap_parser *parser) {
124 int i;
125
126
2/2
✓ Branch 0 taken 2794 times.
✓ Branch 1 taken 4512 times.
7306 for (i = 0; i < parser->subcommands_count; i++) {
127
2/2
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2788 times.
2794 if (ap_sb_appendf(sb, " case \"") != 0) {
128 6 return -1;
129 }
130
4/4
✓ Branch 1 taken 2782 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 2776 times.
✓ Branch 4 taken 6 times.
5570 if (append_parser_key(sb, parser) != 0 ||
131
2/2
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2770 times.
5558 ap_sb_appendf(sb, ":%s\"\n", parser->subcommands[i].name) != 0 ||
132 2776 ap_sb_appendf(sb, " set key \"") != 0) {
133 18 return -1;
134 }
135
4/4
✓ Branch 1 taken 2758 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2752 times.
5528 if (append_parser_key(sb, parser->subcommands[i].parser) != 0 ||
136 2758 ap_sb_appendf(sb, "\"\n") != 0) {
137 18 return -1;
138 }
139
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2752 times.
2752 if (append_transition_cases(sb, parser->subcommands[i].parser) != 0) {
140 return -1;
141 }
142 }
143 4512 return 0;
144 }
145
146 4156 static int append_choice_cases(ap_string_builder *sb, const ap_parser *parser) {
147 int i;
148 int j;
149 int k;
150
151
2/2
✓ Branch 0 taken 9712 times.
✓ Branch 1 taken 4036 times.
13748 for (i = 0; i < parser->defs_count; i++) {
152 9712 const ap_arg_def *def = &parser->defs[i];
153
2/2
✓ Branch 1 taken 2374 times.
✓ Branch 2 taken 7338 times.
9712 if (option_completion_kind(def) != AP_COMPLETION_KIND_CHOICES ||
154
2/4
✓ Branch 0 taken 2374 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2374 times.
2374 !def->opts.choices.items || def->opts.choices.count <= 0) {
155 7338 continue;
156 }
157
2/2
✓ Branch 0 taken 2374 times.
✓ Branch 1 taken 2254 times.
4628 for (j = 0; j < def->flags_count; j++) {
158
2/2
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2368 times.
2374 if (ap_sb_appendf(sb, " case \"") != 0) {
159 6 return -1;
160 }
161
4/4
✓ Branch 1 taken 2360 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2354 times.
4728 if (append_parser_key(sb, parser) != 0 ||
162 2360 ap_sb_appendf(sb, ":%s\"\n printf '%%s\\n'", def->flags[j]) !=
163 0) {
164 14 return -1;
165 }
166
2/2
✓ Branch 0 taken 4666 times.
✓ Branch 1 taken 2260 times.
6926 for (k = 0; k < def->opts.choices.count; k++) {
167
4/4
✓ Branch 1 taken 4654 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 82 times.
✓ Branch 4 taken 4572 times.
9320 if (ap_sb_appendf(sb, " ") != 0 ||
168 4654 append_fish_double_quoted(sb, def->opts.choices.items[k]) != 0) {
169 94 return -1;
170 }
171 }
172
2/2
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2254 times.
2260 if (ap_sb_appendf(sb, "\n") != 0) {
173 6 return -1;
174 }
175 }
176 }
177
178
2/2
✓ Branch 0 taken 2478 times.
✓ Branch 1 taken 3998 times.
6476 for (i = 0; i < parser->subcommands_count; i++) {
179
2/2
✓ Branch 1 taken 38 times.
✓ Branch 2 taken 2440 times.
2478 if (append_choice_cases(sb, parser->subcommands[i].parser) != 0) {
180 38 return -1;
181 }
182 }
183 3998 return 0;
184 }
185
186 5230 static int append_option_complete(ap_string_builder *sb, const char *prog,
187 const ap_parser *parser,
188 const ap_arg_def *def) {
189 int i;
190 5230 ap_completion_kind completion_kind = option_completion_kind(def);
191
192
4/4
✓ Branch 1 taken 5206 times.
✓ Branch 2 taken 24 times.
✓ Branch 3 taken 5026 times.
✓ Branch 4 taken 180 times.
10436 if (ap_sb_appendf(sb, "complete -c ") != 0 ||
193
2/2
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 5002 times.
10232 append_fish_double_quoted(sb, prog) != 0 ||
194 5026 ap_sb_appendf(sb, " -n '") != 0) {
195 228 return -1;
196 }
197
6/6
✓ Branch 1 taken 4978 times.
✓ Branch 2 taken 24 times.
✓ Branch 4 taken 4846 times.
✓ Branch 5 taken 132 times.
✓ Branch 6 taken 4822 times.
✓ Branch 7 taken 24 times.
9848 if (ap_sb_appendf(sb, "__ap_") != 0 || append_identifier(sb, prog) != 0 ||
198
2/2
✓ Branch 1 taken 4790 times.
✓ Branch 2 taken 32 times.
9668 ap_sb_appendf(sb, "_parser_is ") != 0 ||
199
2/2
✓ Branch 2 taken 24 times.
✓ Branch 3 taken 4766 times.
9612 append_parser_key(sb, parser) != 0 || ap_sb_appendf(sb, "'") != 0) {
200 236 return -1;
201 }
202
203
2/2
✓ Branch 0 taken 6682 times.
✓ Branch 1 taken 4732 times.
11414 for (i = 0; i < def->flags_count; i++) {
204 6682 const char *flag = def->flags[i];
205
2/2
✓ Branch 1 taken 1926 times.
✓ Branch 2 taken 4756 times.
6682 if (ap_is_short_flag(flag)) {
206
2/2
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1916 times.
1926 if (ap_sb_appendf(sb, " -s %c", flag[1]) != 0) {
207 10 return -1;
208 }
209
1/2
✓ Branch 1 taken 4756 times.
✗ Branch 2 not taken.
4756 } else if (ap_is_long_flag(flag)) {
210
2/2
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 4732 times.
4756 if (ap_sb_appendf(sb, " -l %s", flag + 2) != 0) {
211 24 return -1;
212 }
213 }
214 }
215
216
2/2
✓ Branch 1 taken 488 times.
✓ Branch 2 taken 4244 times.
4732 if (append_description(sb, def) != 0) {
217 488 return -1;
218 }
219
220
2/2
✓ Branch 1 taken 2672 times.
✓ Branch 2 taken 1572 times.
4244 if (option_takes_value(def)) {
221
2/2
✓ Branch 1 taken 14 times.
✓ Branch 2 taken 2658 times.
2672 if (ap_sb_appendf(sb, " -r") != 0) {
222 14 return -1;
223 }
224
2/2
✓ Branch 1 taken 310 times.
✓ Branch 2 taken 2348 times.
2658 if (option_has_dynamic_completion(def)) {
225
4/4
✓ Branch 1 taken 308 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 300 times.
✓ Branch 4 taken 8 times.
618 if (ap_sb_appendf(sb, " -a '(__ap_") != 0 ||
226
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 298 times.
608 append_identifier(sb, prog) != 0 ||
227 300 ap_sb_appendf(sb, "_dynamic_complete)'") != 0) {
228 12 return -1;
229 }
230 298 return ap_sb_appendf(sb, "\n");
231 }
232
5/5
✓ Branch 0 taken 1100 times.
✓ Branch 1 taken 364 times.
✓ Branch 2 taken 404 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 478 times.
2348 switch (completion_kind) {
233 1100 case AP_COMPLETION_KIND_CHOICES:
234
4/4
✓ Branch 1 taken 1094 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 1064 times.
✓ Branch 4 taken 30 times.
2194 if (ap_sb_appendf(sb, " -a '(__ap_") != 0 ||
235
2/2
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 1058 times.
2158 append_identifier(sb, prog) != 0 ||
236 1064 ap_sb_appendf(sb, "_value_choices ") != 0) {
237 42 return -1;
238 }
239
4/4
✓ Branch 1 taken 1050 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 1044 times.
2108 if (append_parser_key(sb, parser) != 0 ||
240 1050 ap_sb_appendf(sb, ":%s)'", def->flags[def->flags_count - 1]) != 0) {
241 14 return -1;
242 }
243 1044 break;
244 364 case AP_COMPLETION_KIND_FILE:
245
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 362 times.
364 if (ap_sb_appendf(sb, " -F") != 0) {
246 2 return -1;
247 }
248 362 break;
249 404 case AP_COMPLETION_KIND_DIRECTORY:
250
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 402 times.
404 if (ap_sb_appendf(sb, " -a '(__fish_complete_directories)'") != 0) {
251 2 return -1;
252 }
253 402 break;
254 2 case AP_COMPLETION_KIND_COMMAND:
255
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
2 if (ap_sb_appendf(sb, " -a '(__fish_complete_command)'") != 0) {
256 return -1;
257 }
258 2 break;
259 478 case AP_COMPLETION_KIND_NONE:
260 default:
261 478 break;
262 }
263 }
264
265 3860 return ap_sb_appendf(sb, "\n");
266 }
267
268 938 static int append_subcommand_complete(ap_string_builder *sb, const char *prog,
269 const ap_parser *parser,
270 const ap_subcommand_def *sub) {
271
4/4
✓ Branch 1 taken 932 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 884 times.
✓ Branch 4 taken 48 times.
1870 if (ap_sb_appendf(sb, "complete -c ") != 0 ||
272
2/2
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 878 times.
1816 append_fish_double_quoted(sb, prog) != 0 ||
273 884 ap_sb_appendf(sb, " -n '") != 0) {
274 60 return -1;
275 }
276
6/6
✓ Branch 1 taken 872 times.
✓ Branch 2 taken 6 times.
✓ Branch 4 taken 836 times.
✓ Branch 5 taken 36 times.
✓ Branch 6 taken 830 times.
✓ Branch 7 taken 6 times.
1714 if (ap_sb_appendf(sb, "__ap_") != 0 || append_identifier(sb, prog) != 0 ||
277
2/2
✓ Branch 1 taken 824 times.
✓ Branch 2 taken 6 times.
1666 ap_sb_appendf(sb, "_parser_is ") != 0 ||
278
2/2
✓ Branch 1 taken 818 times.
✓ Branch 2 taken 6 times.
1654 append_parser_key(sb, parser) != 0 ||
279
2/2
✓ Branch 1 taken 42 times.
✓ Branch 2 taken 776 times.
1642 ap_sb_appendf(sb, "' -f -a ") != 0 ||
280 818 append_fish_double_quoted(sb, sub->name) != 0) {
281 102 return -1;
282 }
283
3/4
✓ Branch 0 taken 776 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 270 times.
✓ Branch 3 taken 506 times.
776 if (sub->help && sub->help[0] != '\0') {
284
4/4
✓ Branch 1 taken 268 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 34 times.
✓ Branch 4 taken 234 times.
538 if (ap_sb_appendf(sb, " -d ") != 0 ||
285 268 append_fish_double_quoted(sb, sub->help) != 0) {
286 36 return -1;
287 }
288 }
289 740 return ap_sb_appendf(sb, "\n");
290 }
291
292 2124 static int append_complete_commands(ap_string_builder *sb, const char *prog,
293 const ap_parser *parser) {
294 int i;
295
296
2/2
✓ Branch 0 taken 5234 times.
✓ Branch 1 taken 1028 times.
6262 for (i = 0; i < parser->defs_count; i++) {
297 5234 const ap_arg_def *def = &parser->defs[i];
298
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 5230 times.
5234 if (!def->is_optional) {
299 4 continue;
300 }
301
2/2
✓ Branch 1 taken 1096 times.
✓ Branch 2 taken 4134 times.
5230 if (append_option_complete(sb, prog, parser, def) != 0) {
302 1096 return -1;
303 }
304 }
305
306
2/2
✓ Branch 0 taken 938 times.
✓ Branch 1 taken 404 times.
1342 for (i = 0; i < parser->subcommands_count; i++) {
307
2/2
✓ Branch 1 taken 204 times.
✓ Branch 2 taken 734 times.
938 if (append_subcommand_complete(sb, prog, parser, &parser->subcommands[i]) !=
308 0) {
309 204 return -1;
310 }
311
2/2
✓ Branch 1 taken 420 times.
✓ Branch 2 taken 314 times.
734 if (append_complete_commands(sb, prog, parser->subcommands[i].parser) !=
312 0) {
313 420 return -1;
314 }
315 }
316 404 return 0;
317 }
318
319 1874 char *ap_fish_completion_build(const ap_parser *parser) {
320 ap_string_builder sb;
321 const char *prog;
322
323
5/6
✓ Branch 0 taken 1872 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1872 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 1870 times.
1874 if (!parser || !parser->prog || parser->prog[0] == '\0') {
324 4 return NULL;
325 }
326
2/4
✓ Branch 0 taken 1870 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1870 times.
1870 prog = parser->command_name && parser->command_name[0] != '\0'
327 ? parser->command_name
328 : parser->prog;
329
330 1870 ap_sb_init(&sb);
331
4/4
✓ Branch 1 taken 1866 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 1862 times.
✓ Branch 4 taken 4 times.
3736 if (ap_sb_appendf(&sb, "# fish completion for %s\n", parser->prog) != 0 ||
332
2/2
✓ Branch 1 taken 1832 times.
✓ Branch 2 taken 30 times.
3728 ap_sb_appendf(&sb, "complete -c ") != 0 ||
333
2/2
✓ Branch 1 taken 1828 times.
✓ Branch 2 taken 4 times.
3694 append_fish_double_quoted(&sb, prog) != 0 ||
334
2/2
✓ Branch 1 taken 1806 times.
✓ Branch 2 taken 22 times.
3660 ap_sb_appendf(&sb, " -f\n\nfunction __ap_") != 0 ||
335
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1802 times.
3634 append_identifier(&sb, prog) != 0 ||
336 1806 ap_sb_appendf(&sb, "_parser_key\n"
337 " set -l tokens (commandline -opc)\n"
338 " set -e tokens[1]\n"
339 " set -l key root\n"
340 " for token in $tokens\n"
341 " switch \"$key:$token\"\n") != 0) {
342 68 ap_sb_free(&sb);
343 68 return NULL;
344 }
345
346
4/4
✓ Branch 1 taken 1760 times.
✓ Branch 2 taken 42 times.
✓ Branch 3 taken 1756 times.
✓ Branch 4 taken 4 times.
3562 if (append_transition_cases(&sb, parser) != 0 ||
347 1760 ap_sb_appendf(&sb,
348 " end\n"
349 " end\n"
350 " printf '%s\\n' \"$key\"\n"
351 "end\n\n"
352 "function __ap_",
353
2/2
✓ Branch 0 taken 1734 times.
✓ Branch 1 taken 22 times.
1756 "%s") != 0 ||
354
2/2
✓ Branch 1 taken 1730 times.
✓ Branch 2 taken 4 times.
3490 append_identifier(&sb, prog) != 0 ||
355 1734 ap_sb_appendf(&sb, "_parser_is\n"
356
2/2
✓ Branch 0 taken 1708 times.
✓ Branch 1 taken 22 times.
1730 " test (__ap_") != 0 ||
357
2/2
✓ Branch 1 taken 1704 times.
✓ Branch 2 taken 4 times.
3438 append_identifier(&sb, prog) != 0 ||
358 1708 ap_sb_appendf(&sb, "_parser_key) = \"$argv[1]\"\n"
359 "end\n\n"
360
2/2
✓ Branch 0 taken 1682 times.
✓ Branch 1 taken 22 times.
1704 "function __ap_") != 0 ||
361
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1678 times.
3386 append_identifier(&sb, prog) != 0 ||
362 1682 ap_sb_appendf(&sb, "_value_choices\n"
363 " switch \"$argv[1]\"\n") != 0) {
364 124 ap_sb_free(&sb);
365 124 return NULL;
366 }
367
368
4/4
✓ Branch 1 taken 1558 times.
✓ Branch 2 taken 120 times.
✓ Branch 3 taken 1554 times.
✓ Branch 4 taken 4 times.
3236 if (append_choice_cases(&sb, parser) != 0 ||
369 1558 ap_sb_appendf(&sb, " end\n"
370
2/2
✓ Branch 0 taken 1532 times.
✓ Branch 1 taken 22 times.
1554 "end\n\nfunction __ap_") != 0 ||
371
2/2
✓ Branch 1 taken 1528 times.
✓ Branch 2 taken 4 times.
3086 append_identifier(&sb, prog) != 0 ||
372 1532 ap_sb_appendf(&sb, "_dynamic_complete\n"
373 " set -l tokens (commandline -opc)\n"
374 " set -e tokens[1]\n"
375 " set -l current (commandline -ct)\n"
376
2/2
✓ Branch 0 taken 1498 times.
✓ Branch 1 taken 30 times.
1528 " ") != 0 ||
377
2/2
✓ Branch 1 taken 1494 times.
✓ Branch 2 taken 4 times.
3026 append_fish_double_quoted(&sb, prog) != 0 ||
378
2/2
✓ Branch 1 taken 1446 times.
✓ Branch 2 taken 48 times.
2992 ap_sb_appendf(&sb, " ") != 0 ||
379 1494 append_fish_double_quoted(&sb, ap_parser_completion_entrypoint(parser)) !=
380
2/2
✓ Branch 0 taken 1442 times.
✓ Branch 1 taken 4 times.
1446 0 ||
381 1446 ap_sb_appendf(&sb, " --shell fish -- $tokens $current\n"
382
2/2
✓ Branch 0 taken 1420 times.
✓ Branch 1 taken 22 times.
1442 "end\n\nfunction __ap_") != 0 ||
383
2/2
✓ Branch 1 taken 1416 times.
✓ Branch 2 taken 4 times.
2862 append_identifier(&sb, prog) != 0 ||
384 1420 ap_sb_appendf(&sb, "_positional_complete\n"
385 " set -l current (commandline -ct)\n"
386 " if string match -qr '^-' -- \"$current\"\n"
387 " return 1\n"
388 " end\n"
389
2/2
✓ Branch 0 taken 1394 times.
✓ Branch 1 taken 22 times.
1416 " __ap_") != 0 ||
390
2/2
✓ Branch 1 taken 1390 times.
✓ Branch 2 taken 4 times.
2810 append_identifier(&sb, prog) != 0 ||
391 1394 ap_sb_appendf(&sb, "_dynamic_complete\n"
392
2/2
✓ Branch 0 taken 90 times.
✓ Branch 1 taken 1300 times.
1390 "end\n\n") != 0 ||
393
2/2
✓ Branch 1 taken 86 times.
✓ Branch 2 taken 4 times.
1480 append_complete_commands(&sb, prog, parser) != 0 ||
394
2/2
✓ Branch 1 taken 56 times.
✓ Branch 2 taken 30 times.
176 ap_sb_appendf(&sb, "complete -c ") != 0 ||
395
2/2
✓ Branch 1 taken 52 times.
✓ Branch 2 taken 4 times.
142 append_fish_double_quoted(&sb, prog) != 0 ||
396
2/2
✓ Branch 1 taken 30 times.
✓ Branch 2 taken 22 times.
108 ap_sb_appendf(&sb, " -f -a '(__ap_") != 0 ||
397
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 26 times.
82 append_identifier(&sb, prog) != 0 ||
398 30 ap_sb_appendf(&sb, "_positional_complete)'\n") != 0) {
399 1652 ap_sb_free(&sb);
400 1652 return NULL;
401 }
402
403 26 return sb.data;
404 }
405