Skip to content

feat: 支持CompositeCommand间组合#2857

Open
hundun000 wants to merge 3 commits intomamoe:devfrom
hundun000:dev
Open

feat: 支持CompositeCommand间组合#2857
hundun000 wants to merge 3 commits intomamoe:devfrom
hundun000:dev

Conversation

@hundun000
Copy link
Copy Markdown
Contributor

#2125 误操作关闭,继续在此开发;
resolve #1804

@hundun000
Copy link
Copy Markdown
Contributor Author

hundun000 commented Aug 20, 2024

参考CommandReflector抽出SubCommandReflector,其将解析这样一种树:

  • fun findSubCommands()对应所有根到叶子的路径,一部分(val fromMemberFunctions)是直接是叶子,一部分(val fromMemberProperties)是来自子树的SubCommandGroup::overloads
  • 递归的,SubCommandGroup::overloads由其SubCommandReflector计算。

抽出SubCommandAnnotationResolver<T>,其决定树的指令路径特点:

  • T作为当前节点
  • 某些KFunction可作为叶子节点,其名字插入指令路径的末尾
  • 某些KProperty可作为非叶子节点,影响指令路径

则对于CompositeCommandSubCommandAnnotationResolver,其特点是:

  • Command作为当前节点
  • @SubCommand用于定义一个叶子节点,其名字插入指令路径的末尾
  • @FlattenSubCommands用于定义一个非叶子节点,不影响指令路径

新增GroupedCommandSubCommandAnnotationResolver,其特点是:

  • SubCommandGroup作为当前节点
  • @SubCommand用于定义一个叶子节点,其名字插入指令路径的末尾
  • @FlattenSubCommands用于定义一个非叶子节点,不影响指令路径

衍生性质:

  • 经过任意深度的@FlattenSubCommands到达的叶子节点,由于途中的树枝不影响指令路径,故等价于其在树根。

#2125 有过提议但不在本次PR处理计划内的性质,未来可另行新增,与本PR不冲突:

  • 进一步地,允许@SubCommand用于定义一个非叶子节点,其名字插入指令路径的对应位置

@hundun000 hundun000 marked this pull request as ready for review August 21, 2024 06:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

支持 多个主指令名相同的CompositeCommand注册的SubCommand均生效

1 participant