doc
[protos/libecoli.git] / lib / todo.txt
index 0001de1..b8c692b 100644 (file)
@@ -9,27 +9,24 @@ X tk_re
 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
@@ -37,14 +34,15 @@ X rename:
   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
 
 dependencies
 ============
@@ -82,6 +80,8 @@ examples
 - example with libedit
 - mini script language
 - configuration file
+- mini shell: cd, ls, cat, stat
+- mini network console based on ip
 
 doc
 ===
@@ -202,7 +202,7 @@ return values:
 - 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:
@@ -210,6 +210,7 @@ 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)
@@ -251,6 +252,11 @@ partial: beginning of a completion, does not match the token
          (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
@@ -274,15 +280,15 @@ a node can filter the completions
 
 [] ->
   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)
@@ -308,13 +314,23 @@ a node can filter the completions
 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"]
+  
 
 -----
 
@@ -359,3 +375,41 @@ int main(void)
 
        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