From c166189033bfd1c9f597830e68078e139e4d6798 Mon Sep 17 00:00:00 2001 From: mattirn Date: Fri, 24 Apr 2020 11:04:46 +0200 Subject: [PATCH] prnt command: improved Map collection value printing --- .../org/jline/builtins/ConsoleEngineImpl.java | 44 +++++++++++++++---- .../java/org/jline/script/GroovyCommand.java | 2 + 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java b/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java index be913d66e..a07752043 100644 --- a/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java +++ b/builtins/src/main/java/org/jline/builtins/ConsoleEngineImpl.java @@ -1440,8 +1440,18 @@ private List highlight(Map options, Object obj public List highlightList(Map options, List collection, int width) { List out = new ArrayList<>(); + highlightList(options, collection, width, 0, out); + return out; + } + + public void highlightList(Map options + , List collection, int width, int depth, List out) { Integer row = 0; - Integer tabsize = digits(collection.size()) + 2; + int indent = (int)options.get(Printer.INDENTION); + int tabsize = indent*depth; + if (options.containsKey(Printer.ROWNUM)) { + tabsize += digits(collection.size()) + 2; + } options.remove(Printer.MAX_COLUMN_WIDTH); for (Object o : collection) { AttributedStringBuilder asb = new AttributedStringBuilder().tabs(tabsize); @@ -1449,13 +1459,14 @@ public List highlightList(Map options, List options , AttributedStyle.DEFAULT.foreground(AttributedStyle.BLUE + AttributedStyle.BRIGHT)); Object elem = entry.getValue(); boolean convert = canConvert(elem); - if (depth < maxDepth && (elem instanceof Map || convert) && !options.containsKey(Printer.TO_STRING)) { - out.add(truncate(asb, width)); - Map childMap = convert ? objectToMap(options, elem) - : keysToString((Map) elem); - highlightMap(options, childMap, width, depth + 1, out); - } else { + boolean highlightValue = true; + if (depth < maxDepth && !options.containsKey(Printer.TO_STRING)) { + if (elem instanceof Map || convert) { + out.add(truncate(asb, width)); + Map childMap = convert ? objectToMap(options, elem) + : keysToString((Map) elem); + highlightMap(options, childMap, width, depth + 1, out); + highlightValue = false; + } else if (collectionObject(elem)) { + List collection = objectToList(elem); + if (!collection.isEmpty()) { + out.add(truncate(asb, width)); + Map listOptions = new HashMap<>(); + listOptions.putAll(options); + listOptions.put(Printer.TO_STRING, true); + highlightList(listOptions, collection, width, depth + 1, out); + highlightValue = false; + } + } + } + if (highlightValue) { AttributedString val = highlightMapValue(mapOptions, entry.getKey(), map, defaultStyle); if (map.size() == 1) { asb.append("\t"); diff --git a/groovy/src/main/java/org/jline/script/GroovyCommand.java b/groovy/src/main/java/org/jline/script/GroovyCommand.java index ff55664d1..788f9d34e 100644 --- a/groovy/src/main/java/org/jline/script/GroovyCommand.java +++ b/groovy/src/main/java/org/jline/script/GroovyCommand.java @@ -108,6 +108,8 @@ public Object inspect(CommandInput input) { Map options = new HashMap<>(); options.put(Printer.SKIP_DEFAULT_OPTIONS, true); options.put(Printer.COLUMNS, ObjectInspector.METHOD_COLUMNS); + options.put(Printer.MAX_DEPTH, 1); + options.put(Printer.INDENTION, 4); printer.println(options, out); return null; }