diff --git a/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java b/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java index 215c6cd8e..0b37d70ef 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java +++ b/core/src/main/java/com/taobao/arthas/core/command/basic1000/HelpCommand.java @@ -1,5 +1,6 @@ package com.taobao.arthas.core.command.basic1000; +import com.taobao.arthas.core.command.model.*; import com.taobao.arthas.core.shell.cli.Completion; import com.taobao.arthas.core.shell.cli.CompletionUtils; import com.taobao.arthas.core.shell.command.AnnotatedCommand; @@ -9,24 +10,15 @@ import com.taobao.arthas.core.shell.command.CommandResolver; import com.taobao.arthas.core.shell.session.Session; import com.taobao.arthas.core.util.usage.StyledUsageFormatter; import com.taobao.middleware.cli.CLI; +import com.taobao.middleware.cli.Option; import com.taobao.middleware.cli.annotations.Argument; import com.taobao.middleware.cli.annotations.Description; import com.taobao.middleware.cli.annotations.Name; import com.taobao.middleware.cli.annotations.Summary; -import com.taobao.text.Color; -import com.taobao.text.Decoration; -import com.taobao.text.Style; -import com.taobao.text.ui.Element; -import com.taobao.text.ui.LabelElement; -import com.taobao.text.ui.TableElement; -import com.taobao.text.util.RenderUtil; import java.util.ArrayList; import java.util.List; -import static com.taobao.text.ui.Element.label; -import static com.taobao.text.ui.Element.row; - /** * @author vlinux on 14/10/26. */ @@ -47,16 +39,91 @@ public class HelpCommand extends AnnotatedCommand { public void process(CommandProcess process) { List commands = allCommands(process.session()); Command targetCmd = findCommand(commands); - String message; if (targetCmd == null) { - message = RenderUtil.render(mainHelp(commands), process.width()); + process.appendResult(createHelpModel(commands)); } else { - message = commandHelp(targetCmd, process.width()); + process.appendResult(createHelpDetailModel(targetCmd)); } - process.write(message); process.end(); } + public HelpModel createHelpDetailModel(Command targetCmd) { + return new HelpModel(createCommandVO(targetCmd, true)); + } + + private HelpModel createHelpModel(List commands) { + HelpModel helpModel = new HelpModel(); + for (Command command : commands) { + if(command.cli() == null || command.cli().isHidden()){ + continue; + } + helpModel.addCommandVO(createCommandVO(command, false)); + } + return helpModel; + } + + private CommandVO createCommandVO(Command command, boolean withDetail) { + CLI cli = command.cli(); + CommandVO commandVO = new CommandVO(); + commandVO.setName(command.name()); + if (cli!=null){ + commandVO.setSummary(cli.getSummary()); + if (withDetail){ + commandVO.setCli(cli); + StyledUsageFormatter usageFormatter = new StyledUsageFormatter(null); + String usageLine = usageFormatter.computeUsageLine(null, cli); + commandVO.setUsage(usageLine); + commandVO.setDescription(cli.getDescription()); + + //以线程安全的方式遍历options + List