Skip to content

Commit

Permalink
Fix CLI help format and optimize runtime
Browse files Browse the repository at this point in the history
This commit fixes the CLI help output alignment so that it doesn't trim
leading spaces, causing the output to be misaligned. It also updates the
runtime plugin used to build the CLI, and it automaticall generates a
class data share used to speed up running the CLI.
  • Loading branch information
mtdowling committed May 9, 2020
1 parent e64b69c commit e138e6b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 19 deletions.
10 changes: 8 additions & 2 deletions smithy-cli/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ extra["moduleName"] = "software.amazon.smithy.cli"

plugins {
application
id("org.beryx.runtime") version "1.1.6"
id("org.beryx.runtime") version "1.8.4"
}

dependencies {
Expand All @@ -32,10 +32,16 @@ dependencies {
application {
mainClassName = "software.amazon.smithy.cli.SmithyCli"
applicationName = "smithy"
applicationDefaultJvmArgs = listOf("-XX:TieredStopAtLevel=2", "-Xshare:auto", "-XX:SharedArchiveFile=app-cds.jsa")
applicationDefaultJvmArgs = listOf("-XX:TieredStopAtLevel=2", "-Xshare:auto")
}

runtime {
addOptions("--compress", "0", "--strip-debug", "--no-header-files", "--no-man-pages")
addModules("java.logging")
}

tasks.register<Exec>("optimizeCli") {
commandLine("${project.buildDir}/image/bin/java", "-Xshare:dump")
}

tasks["runtime"].finalizedBy("optimizeCli")
32 changes: 15 additions & 17 deletions smithy-cli/src/main/java/software/amazon/smithy/cli/Cli.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import software.amazon.smithy.utils.SmithyUnstableApi;
import software.amazon.smithy.utils.StringUtils;

/**
* This class provides a very basic CLI abstraction.
Expand Down Expand Up @@ -274,7 +275,7 @@ private void printMainHelp() {
for (Map.Entry<String, Command> entry : commands.entrySet()) {
table.put(" " + entry.getKey(), entry.getValue().getSummary());
}
stdout(createTable(table).trim());
stdout(StringUtils.stripEnd(createTable(table), " \t\r\n"));
}

private String createTable(Map<String, String> table) {
Expand Down Expand Up @@ -302,14 +303,7 @@ private void printHelp(Command command, Parser parser) {
// Omit the built-in --help arguments.
if (!arg.getLongName().filter(name -> name.equals(HELP)).isPresent()) {
example.append(" [");
arg.getShortName().ifPresent(example::append);
if (arg.getShortName().isPresent() && arg.getLongName().isPresent()) {
example.append(" | ");
}
arg.getLongName().ifPresent(example::append);
if (arg.getArity() == Parser.Arity.MANY) {
example.append(" ...");
}
writeArgHelp(arg, example);
example.append("]");
}
});
Expand All @@ -326,14 +320,7 @@ private void printHelp(Command command, Parser parser) {
Map<String, String> table = new LinkedHashMap<>();
parser.getArgs().forEach(arg -> {
StringBuilder key = new StringBuilder(" ");
arg.getShortName().ifPresent(key::append);
if (arg.getShortName().isPresent() && arg.getLongName().isPresent()) {
key.append(" | ");
}
arg.getLongName().ifPresent(key::append);
if (arg.getArity() == Parser.Arity.MANY) {
key.append(" ...");
}
writeArgHelp(arg, key);
table.put(key.toString(), arg.getHelp());
});

Expand All @@ -352,6 +339,17 @@ private void printHelp(Command command, Parser parser) {
stdout(body.toString());
}

private void writeArgHelp(Parser.Argument arg, StringBuilder sink) {
arg.getShortName().ifPresent(sink::append);
if (arg.getShortName().isPresent() && arg.getLongName().isPresent()) {
sink.append(" | ");
}
arg.getLongName().ifPresent(sink::append);
if (arg.getArity() == Parser.Arity.MANY) {
sink.append(" ...");
}
}

private static final class BasicFormatter extends SimpleFormatter {
@Override
public synchronized String format(LogRecord r) {
Expand Down

0 comments on commit e138e6b

Please sign in to comment.