X evaluate expression tree in ec_tk_expr
X cmd token
-- example
+X example
X tk_re
cleanup / rework
- better logs
- check return values (-1 or NULL) + use errno
- check missing static / const
-- license: SPDX
+X license: SPDX
- check all completion nodes
X split ecoli_tk.h
- size_t or unsigned int?
X save node path in completion to fix help string
- code coverage
- try to hide structures
-- anything better than weakref?
+X anything better than weakref?
- add ec_node_defaults.[ch] providing usual implementations of node methods
X use vec for strvec
-- ELOOP in case of loop
-- remove weakref?
+/ ELOOP in case of loop
+X remove weakref?
- sh_lex to provide offsets in attributes
- accessors for all structs
+- private vs user attributes?
dependencies
============
====
X register nodes by name
-- interface to add attributes: all nodes must be configurable through a
- generic api
- - attr string
- - attr string list
- - attr node
- - attr node list
- - attr int
-
-- yaml interface to create nodes
+X interface to add attributes: all nodes must be configurable through a
+ generic api:
+ X attr string
+ X attr string list
+ X attr node
+ X attr node list
+ X attr int
+
+X yaml interface to create nodes
- example
examples
- configuration file
- mini shell: cd, ls, cat, stat
- mini network console based on ip
+- dialog-like for use in shell
doc
===
- add make help
- add make config
- -fvisibility=
+- use meson
tests
=====
=========
- regexp
-- node which always matches
-- file + partial completion
+X node which always matches
+X file + partial completion
- ether, ip, network
-- fusion node: need to match several children, same for completion
+- fusion node: need to match several children, same for completion?
- float
- not
+- reparse: parse a tree with received strvec, then another tree
+ with strvec generated from first tree
encoding
========
netconf example
===============
-- demonstration example that parses yang file and generate cli
+/ demonstration example that parses yang file and generate cli
---------------
+about split in several libraries
+
+There are several options:
+
+1/ one library, config options to select libyaml, libedit
+ - need to manage dependencies in build system
+
+2/ one library for ecoli-core, one for ecoli-yaml, one for
+ ecoli-edit
+ - extra complexity
+
+3/ one library with core + yaml + edit
+ dependency is managed at runtime
+
+
+--------------
+
+current naming: ec_node_parse* and ec_comp_complete* are not
+so good names
+
+struct ec_comp
+alloc ec_complete()
+free ec_complete_free()
+action ec_comp_complete()
+action ec_comp_complete_strvec()
+action ec_comp_dump()
+action ec_comp_merge()
+accessors ec_comp_get()
+
+struct ec_parse
+alloc ec_parse()
+free ec_parse_free()
+action ec_node_parse()
+action ec_node_parse_strvec()
+accessors ...
+
+struct ec_node
+alloc ec_node()
+free ec_node_free()
+action ...
+accessors ...
+
+struct ec_strvec
+alloc ec_strvec()
+free ec_strvec_free()
+action ec_strvec_*()
+
+---------
+
+proposal
+
+- struct name must not be a verb (ex: not ec_parse)
+- allocator is the name of struct
+- actions are <structname>_<verb>() except for basic/common actions
+- basic actions are ec_<verb>()
+- accessors (get) are <structname>_<field>()
+- accessors (set) are <structname>_set_<field>()
+
+
+XXX list all functions to be sure
+XXX this could go in documentation (coding rules)
+
+struct ec_comp
+alloc ec_comp()
+free ec_comp_free()
+action ec_complete()
+action ec_complete_strvec()
+action ec_comp_dump()
+action ec_comp_merge()
+accessors ec_comp_id()
+accessors ec_comp_attrs()
+
+(pnode means parsed node)
+struct ec_pnode
+alloc ec_pnode()
+free ec_pnode_free()
+action ec_parse()
+action ec_parse_strvec()
+accessors ...
+
+(node means grammar node)
+struct ec_node
+alloc ec_node()
+free ec_node_free()
+action ...
+accessors ec_node_get*()
+
+struct ec_strvec
+alloc ec_strvec()
+free ec_strvec_free()
+action ec_strvec_*()
+