Skip to content

Alconna 1.7.0

Compare
Choose a tag to compare
@RF-Tar-Railt RF-Tar-Railt released this 11 May 06:01
· 41 commits to main since this release

破坏性改动:

用户侧

  • ShortcutArgs 不再需要 options, 其合并至 args
  • Alconna.parse 移除参数 interrupt, 由 CompSession 替代

开发侧

  • 使用 NEPattern 0.5 以上版本
  • 使用 tarina 替代部分功能
  • DataCollectionContainer, Analyser, handle_xxxanalyser_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
  • CommandMetaNamespace 新增 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 结果会与之前的合并成列表
  • 新增 set_default_argv_type 函数, 用于设置默认的 Argv 类型
  • CommandMeta.example 现在会将 $ 替换为可能的命令前缀
  • Completion 选项增加别名 '?'

改进:

  • namerequires 合成的 dest 也会去掉 name 的前缀
  • Argv 不再是 Analyser 的属性, 而是其方法的传入参数
  • compile 函数现在作为 Alconna 的方法
  • shortcut 使用方法改变:
    • ShortcutArgs 增加 fuzzy 参数, 用于指定该快捷命令是否允许后随参数, 默认为 True
    • 可以通过 {%X_n} 来引用传入的快捷命令的第 n 个参数
    • 可以通过 {*(SEP)} 来引用传入的快捷命令的所有参数, 其中 SEP 为可选的分隔符
  • bracket header 现在支持进行类型转换
  • 性能优化, 提升25% ~ 30%
  • set_defaultarg, option, subcommand 合并为 path, 原参数仍可用
  • Argname 的后缀标识符不强制需要 ';' 作为分割, 即 foo;?foo? 等价
  • Argv.preprocessorArgv.filter_out 现在接收 type 而不是 str
  • 移除 Alconna.reset_behaviors

修复:

  • 修复 anti args 的 bug
  • 修复 Formatter.remove 的 bug