Alconna 1.7.0
破坏性改动:
用户侧
ShortcutArgs
不再需要options
, 其合并至args
Alconna.parse
移除参数interrupt
, 由CompSession
替代
开发侧
- 使用
NEPattern
0.5 以上版本 - 使用
tarina
替代部分功能 DataCollectionContainer
,Analyser
,handle_xxx
和analyser_xxx
等移动至arclet.alconna._internal
DataCollectionContainer
重命名为Argv
Argv.config
移出为独立函数argv_config
Argv.text_sign
现在是Argv.to_text
, 其返回值为str | None
新增:
Option
新增参数compact
, 允许选项名后的第一个参数紧随其头部Option
新增参数default
, 允许设置选项的默认值:- 传入的任意值会被包装为
OptionResult
, 除非其为None
- 直接传入
OptionResult
会被直接使用 - 若想设置 args 的默认值, 请传入
OptionResult
- 传入的任意值会被包装为
Subcommand
新增参数default
, 允许设置子命令的默认值- 传入的任意值会被包装为
SubcommandResult
, 除非其为None
- 直接传入
SubcommandResult
会被直接使用 - 若想设置 args 的默认值, 请传入
SubcommandResult
- 传入的任意值会被包装为
CommandMeta
与Namespace
新增compact
属性, 允许命令传入的第一个参数紧随其头部Namespace
新增to_text
属性, 其与Argv.to_text
一致- 加入
CompSession
, 用于交互式命令补全session.available
: 表示当前补全会话是否可用session.current()
: 当前选中的补全选项的文本session.tab([, offset])
: 切换补全选项session.enter([, content])
: 确认当前补全选项
Alconna
的名字与前缀无传入时,取用 sys.argv[0] 作为其名字Alconna
现支持__call__
, 即直接调用实例; 当命令名与 sys.argv[0] 接近时, 传入命令不需要输入命令头Action
改动, 现在Action
功能更接近于argparse
:- args 为空时:
store
: 默认的 action, 存放...
或default
的值store_value
,store_true
,store_false
: 存放特殊值append
: 追加...
或default
的值append_value
: 追加特殊值count
: 计数
- args 不为空时:
store_xxx
,count
: 最新的 args 结果会覆盖上一次append_xxx
: 此次的 args 结果会与之前的合并成列表
- args 为空时:
- 新增
set_default_argv_type
函数, 用于设置默认的Argv
类型 CommandMeta.example
现在会将$
替换为可能的命令前缀Completion
选项增加别名'?'
改进:
- 由
name
与requires
合成的dest
也会去掉name
的前缀 Argv
不再是Analyser
的属性, 而是其方法的传入参数compile
函数现在作为Alconna
的方法- shortcut 使用方法改变:
ShortcutArgs
增加fuzzy
参数, 用于指定该快捷命令是否允许后随参数, 默认为True
- 可以通过
{%X_n}
来引用传入的快捷命令的第 n 个参数 - 可以通过
{*(SEP)}
来引用传入的快捷命令的所有参数, 其中 SEP 为可选的分隔符
- bracket header 现在支持进行类型转换
- 性能优化, 提升25% ~ 30%
set_default
的arg
,option
,subcommand
合并为path
, 原参数仍可用Arg
中name
的后缀标识符不强制需要';'
作为分割, 即foo;?
与foo?
等价Argv.preprocessor
与Argv.filter_out
现在接收 type 而不是 str- 移除
Alconna.reset_behaviors
修复:
- 修复
anti args
的 bug - 修复
Formatter.remove
的 bug