cleanup / rework
================
-- ec_completed_item_update()
-- ec_completed_item_set_display_value()
-
-- add_no_match
-- add_partial_match
+X ec_completed_item_update()
+X ec_completed_item_set_display_value()
+X add_no_match
+X add_partial_match
- check XXX in code
-- properly manage quotes in shlex
+X properly manage quotes in shlex
X remove the _new() functions
-- iterate children nodes without chaining them
-- add a tk vector type: will be used in several nodes (ex: or, seq, ...)
+X iterate children nodes without chaining them
+- add a node vector type: will be used in several nodes (ex: or, seq, ...)
- check allocation model everywhere
- checkpatch?
- use linux style (update .emacs)
- better logs
-- return values
-- use errno when returning pointers
-- missing static / const
-- license: "s/neither the name...may/the names of its contributors may not/"
+- check return values (-1 or NULL) + use errno
+- check missing static / const
+- license: SPDX
- check all completion nodes
X split ecoli_tk.h
-- cache results when appropriate?
- size_t or unsigned int?
X rename:
X ec_tk -> ec_node
X ec_completed_tk -> ec_completed
X tk, gen_tk, token, ... -> node
X tokens -> input_str / input_strvec ?
-- use is_err() or errno for funcs returning ptrs, or use errno for all funcs
-- save node path in completion to fix help string
+X save node path in completion to fix help string
- code coverage
- try to hide structures
- anything better than weakref?
-- add get_max_parse_len() for all relevant nodes
- add ec_node_defaults.[ch] providing usual implementations of node methods
X use vec for strvec
+- ELOOP in case of loop
+- remove weakref?
+- sh_lex to provide offsets in attributes
+- accessors for all structs
dependencies
============
- example with libedit
- mini script language
- configuration file
+- mini shell: cd, ls, cat, stat
+- mini network console based on ip
doc
===
- 0: success, child->strvec is set by node (NULL = no_match)
- -1: error (errno is set)
maybe complex to use:
-- the node must set it (ex: "return ec_parsed_node_match()")
+- the node must set the match (ex: "return ec_parsed_node_match()")
- the caller must use accessor to check if it matches or not
alternative idea for return values:
- -1: error (errno is set)
- -2 or MAX_INT: success, but no match
This is strange to have a specific value for no match
+With MAX_INT, this is the best (less bad) alternative
alternative idea for return values:
- ec_parse_result_match(n_tokens >= 0)
(good example is a directory in a path)
unknown: could complete, but the node does not know how
+struct completion_item {
+ const char *value;
+ const char *disp;
+}
+
struct completed_elt {
ec_parsed *parse_tree; // current tree state
ec_node *last; // last node of the tree
[] ->
foo 3 str(foo)
- seq
- option
- str(foo) <-
+ seq
+ option
+ str(foo) <-
- ? 5 int(1,10)
- seq
- option
- or
- int <-
+ "" 5 int(1,10)
+ seq
+ option
+ or
+ int <-
bar 6 str(bar)
foo 7 str(bar)
changes:
- a completion item should contain a strvec for the value
(the display string remains a string)
-- use a INT_MIN or a specific
- there is maybe no good reason to split in:
- ec_completed_item()
- ec_completed_item_set()
- ec_completed_item_set_display()
- ec_completed_item_add()
+-----
+
+sh_lex
+ or
+ str(foo)
+ str(foo2)
+ str(bar)
+
+complete(sh_lex, ["'fo"])
+ complete(sh_lex, ["fo"]) -> ["foo", "foo2"]
+
-----
return 0;
}
+
+
+----
+
+
+expr expr expr
+
+[toto] | tutu
+
+[toto [titi]]
+
+
+
+pre_op = "!"
+post_op = "^"
+post = val |
+ pre_op expr |
+ "(" expr ")"
+term = post post_op*
+prod = term ( "*" term )*
+sum = prod ( "+" prod )*
+expr = sum
+
+
+-----
+
+break on malloc:
+
+b debug_malloc
+# or: b debug_realloc
+condition <breakoint num> malloc_seq >= <value>
+
+alternative
+
+watch malloc_seq
+condition <watchpoint num> malloc_seq == <value + 1>
+run <args...>
+c
+
+
+---------------
+
+