diff --git a/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java b/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java index b5014a19a..c49e5d125 100644 --- a/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java +++ b/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java @@ -355,4 +355,47 @@ public class CompletionUtils { } return false; } + + public static boolean completeOptions(Completion completion, List handlers) { + List tokens = completion.lineTokens(); + /** + *
+         * 比如 ` --name a`,这样子的tokens
+         * 
+ */ + if (tokens.size() >= 3) { + CliToken cliToken_2 = tokens.get(tokens.size() - 2); + CliToken cliToken_3 = tokens.get(tokens.size() - 3); + + if (cliToken_2.isBlank()) { + String token_3 = cliToken_3.value(); + + for (OptionCompleteHandler handler : handlers) { + if (handler.matchName(token_3)) { + return handler.complete(completion); + } + } + } + } + + /** + *
+         * 比如 ` --name `,这样子的tokens
+         * 
+ */ + if (tokens.size() >= 2) { + CliToken cliToken_1 = tokens.get(tokens.size() - 1); + CliToken cliToken_2 = tokens.get(tokens.size() - 2); + if (cliToken_1.isBlank()) { + String token_2 = cliToken_2.value(); + for (OptionCompleteHandler handler : handlers) { + if (handler.matchName(token_2)) { + return handler.complete(completion); + } + } + } + } + + return false; + } } diff --git a/core/src/main/java/com/taobao/arthas/core/shell/cli/OptionCompleteHandler.java b/core/src/main/java/com/taobao/arthas/core/shell/cli/OptionCompleteHandler.java new file mode 100644 index 000000000..48778164f --- /dev/null +++ b/core/src/main/java/com/taobao/arthas/core/shell/cli/OptionCompleteHandler.java @@ -0,0 +1,12 @@ +package com.taobao.arthas.core.shell.cli; + +/** + * + * @author hengyunabc 2021-04-29 + * + */ +public interface OptionCompleteHandler { + boolean matchName(String token); + + boolean complete(Completion completion); +}