4 X evaluate expression tree in ec_tk_expr
12 - ec_completed_item_update()
13 - ec_completed_item_set_display_value()
18 - properly manage quotes in shlex
19 X remove the _new() functions
20 - iterate children nodes without chaining them
21 - add a tk vector type: will be used in several nodes (ex: or, seq, ...)
22 - check allocation model everywhere
24 - use linux style (update .emacs)
27 - use errno when returning pointers
28 - missing static / const
29 - license: "s/neither the name...may/the names of its contributors may not/"
30 - check all completion nodes
32 - cache results when appropriate?
33 - size_t or unsigned int?
36 X ec_parsed_tk -> ec_parsed
37 X ec_completed_tk -> ec_completed
38 X tk, gen_tk, token, ... -> node
39 X tokens -> input_str / input_strvec ?
40 - use is_err() or errno for funcs returning ptrs, or use errno for all funcs
41 - save node path in completion to fix help string
43 - try to hide structures
44 - anything better than weakref?
45 - add get_max_parse_len() for all relevant nodes
46 - add ec_node_defaults.[ch] providing usual implementations of node methods
52 X pass the current parsed state when parsing/completing
54 - new node "condition"
64 X register nodes by name
65 - interface to add attributes: all nodes must be configurable through a
73 - yaml interface to create nodes
79 - example which parses arguments (argc/argv)
80 - example that acts as bash completion (ip link ?)
81 - calculator example (var assignation, expression evaluation)
82 - example with libedit
83 - mini script language
91 - generate automatic api doc
93 - coding rules, process
96 - say that it stops at first match (no ambigous support)
97 - say that completion must be exhaustive
103 - split libs, tests and examples
111 - complete automatic tests with "make test"
117 - node which always matches
118 - file + partial completion
120 - fusion node: need to match several children, same for completion
127 - support utf-8 and other encodings
134 - demonstration example that parses yang file and generate cli
138 -----------------------
142 [tab] list possible completions (matches/partial only)
143 [?] list what is expected, example:
145 "command [foo] toto|titi|<int>"
161 - ec_node: a node that can be parsed/completed
162 - ec_parse: a tree describing the result of parse(node, input)
163 - ec_comp: a list describing the result of complete(node, input)
183 parse() returns a tree
186 - each node of the tree refers to a ec_node
187 - each node points to the strvec that matches
188 - parse returns the first matching solution
189 - usually try to match as many str in the vecs (seq node)
197 The parse cb of the node is:
199 parse_cb(node, current_parse_state, strvec, *nmatch)
202 - 0: success, child->strvec is set by node (NULL = no_match)
203 - -1: error (errno is set)
204 maybe complex to use:
205 - the node must set it (ex: "return ec_parsed_node_match()")
206 - the caller must use accessor to check if it matches or not
208 alternative idea for return values:
209 - >= 0: match, ret == nb_tk
210 - -1: error (errno is set)
211 - -2 or MAX_INT: success, but no match
212 This is strange to have a specific value for no match
214 alternative idea for return values:
215 - ec_parse_result_match(n_tokens >= 0)
216 - ec_parse_result_nomatch()
217 - ec_parse_result_error(errno)
219 A node always try to consume the maximum number of tokens.
227 [foo, foo, bar] matches
228 [foo, bar] does *not* match
230 complete() returns a list of possible completions
234 - partial completion: in a path dir/file, completion stops once
236 - displayed value is not the completion token: when completing a
237 file in several subdirectories, the full path is not displayed
238 - any parent node can modify the completions, ex: add missing quotes
239 in ec_node_sh_lex(), filter completions in case of a ec_node_filter()
240 - a command line may want to display the help from the most specific
242 - some specific nodes can complete several tokens
246 type: full, partial, unknown
249 full: the completion item matches token
250 partial: beginning of a completion, does not match the token
251 (good example is a directory in a path)
252 unknown: could complete, but the node does not know how
254 struct completed_elt {
255 ec_parsed *parse_tree; // current tree state
256 ec_node *last; // last node of the tree
257 list of items; // list of items for this parse tree
266 complete_cb(node, current_complete_state, current_parse_state, strvec)
268 - 0 = success, the current complete state is updated
269 - -1 = error (set errno?)
272 a node can filter the completions
309 - a completion item should contain a strvec for the value
310 (the display string remains a string)
311 - use a INT_MIN or a specific
312 - there is maybe no good reason to split in:
313 - ec_completed_item()
314 - ec_completed_item_set()
315 - ec_completed_item_set_display()
316 - ec_completed_item_add()
329 static inline bool is_success(struct res r)
337 static inline struct res res(int a)
352 printf("success: %d\n", r.a);
358 printf("success: %d\n", r.a);