Skip to content

Commit

Permalink
dropping class hosh.spi.Printable
Browse files Browse the repository at this point in the history
  • Loading branch information
dfa1 committed Dec 23, 2023
1 parent ed5e649 commit 72131c1
Show file tree
Hide file tree
Showing 20 changed files with 124 additions and 289 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- JDK11 support
- old workaround class IgnoreWindowsUACExceptions for UAC exceptions in Windows 7
- `hosh.spi.Printable` class was replaced by `show` method
- it was really a bad design choice to use `PrintWriter`

## [v0.1.5] - 2023-12-20

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public class DurationParsing {

/**
* Parsing duration ISO 8601 format with possibility to omit leading 'PT' prefix.
* <p>
* Any invalid input, including null, returns empty.
*/
public static Optional<Duration> parse(String value) {
Expand Down
28 changes: 16 additions & 12 deletions modules/system/src/main/java/hosh/modules/system/SystemModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,16 @@
import hosh.spi.StateAware;
import hosh.spi.StateMutator;
import hosh.spi.StateMutatorAware;
import hosh.spi.Value;
import hosh.spi.Values;
import hosh.spi.VariableName;
import org.jline.reader.EndOfFileException;
import org.jline.reader.LineReader;
import org.jline.reader.UserInterruptException;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UncheckedIOException;
import java.lang.ProcessHandle.Info;
import java.nio.charset.StandardCharsets;
Expand All @@ -70,13 +70,15 @@
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.StringJoiner;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.function.Supplier;
import java.util.stream.Collectors;

public class SystemModule implements Module {

Expand Down Expand Up @@ -373,7 +375,7 @@ public void setNestedCommand(NestedCommand nestedCommand) {

@Override
public ExitStatus run(List<String> args, InputChannel in, OutputChannel out, OutputChannel err) {
if (args.size() != 0) {
if (!args.isEmpty()) {
err.send(Errors.usage("withTime { ... }"));
return ExitStatus.error();
}
Expand All @@ -394,7 +396,7 @@ public static class ProcessList implements Command {

@Override
public ExitStatus run(List<String> args, InputChannel in, OutputChannel out, OutputChannel err) {
if (args.size() != 0) {
if (!args.isEmpty()) {
err.send(Errors.usage("ps"));
return ExitStatus.error();
}
Expand Down Expand Up @@ -539,7 +541,7 @@ public ExitStatus run(List<String> args, InputChannel in, OutputChannel out, Out
return ExitStatus.error();
}
Duration sleep;
if (args.size() == 0) {
if (args.isEmpty()) {
sleep = Duration.ofSeconds(1);
} else {
Optional<Duration> maybeSleep = DurationParsing.parse(args.get(0));
Expand Down Expand Up @@ -932,13 +934,14 @@ public ExitStatus run(List<String> args, InputChannel in, OutputChannel out, Out
return ExitStatus.error();
}
Locale locale = Locale.getDefault();
StringWriter value = new StringWriter();
PrintWriter pw = new PrintWriter(value);
StringJoiner stringJoiner = new StringJoiner("");
for (Record incoming : InputChannel.iterate(in)) {
incoming.print(pw, locale);
for (Value value : incoming.values().toList()) {
stringJoiner.add(value.show(locale));
}
}
var newVariables = new HashMap<>(state.getVariables());
newVariables.put(name.get(), value.toString());
newVariables.put(name.get(), stringJoiner.toString());
stateMutator.mutateVariables(newVariables);
return ExitStatus.success();
}
Expand Down Expand Up @@ -966,10 +969,11 @@ public ExitStatus run(List<String> args, InputChannel in, OutputChannel out, Out
}
Locale locale = Locale.getDefault();
var path = state.getCwd().resolve(Paths.get(args.get(0)));
try (PrintWriter pw = new PrintWriter(new OutputStreamWriter(Files.newOutputStream(path, toOpenOptions(args)), StandardCharsets.UTF_8))) {
try (var writer = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(path, toOpenOptions(args)), StandardCharsets.UTF_8))) {
for (Record incoming : InputChannel.iterate(in)) {
incoming.print(pw, locale);
pw.println();
String line = incoming.values().map(v -> v.show(locale)).collect(Collectors.joining(" "));
writer.append(line);
writer.newLine();
}
return ExitStatus.success();
} catch (IOException e) {
Expand Down
22 changes: 6 additions & 16 deletions modules/text/src/main/java/hosh/modules/text/TextModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@
import hosh.spi.Value;
import hosh.spi.Values;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.Clock;
import java.util.ArrayList;
import java.util.Comparator;
Expand All @@ -58,6 +56,7 @@
import java.util.Queue;
import java.util.Random;
import java.util.Set;
import java.util.StringJoiner;
import java.util.concurrent.ThreadLocalRandom;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -164,20 +163,13 @@ public ExitStatus run(List<String> args, InputChannel in, OutputChannel out, Out
String sep = args.get(0);
Locale locale = Locale.getDefault();
for (Record record : InputChannel.iterate(in)) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
StringJoiner stringJoiner = new StringJoiner(sep);
Iterator<Value> values = record.values().iterator();
boolean skipSep = true;
while (values.hasNext()) {
Value value = values.next();
if (skipSep) {
skipSep = false;
} else {
sw.append(sep);
}
value.print(pw, locale);
stringJoiner.add(value.show(locale));
}
out.send(Records.singleton(Keys.TEXT, Values.ofText(sw.toString())));
out.send(Records.singleton(Keys.TEXT, Values.ofText(stringJoiner.toString())));
}
return ExitStatus.success();
}
Expand Down Expand Up @@ -239,12 +231,10 @@ public ExitStatus run(List<String> args, InputChannel in, OutputChannel out, Out
Key key = Keys.of(args.get(0));
Pattern pattern = Pattern.compile(args.get(1));
List<String> groupNames = extractNamedGroups(args.get(1));
Locale locale = Locale.getDefault();
for (Record record : InputChannel.iterate(in)) {
record.value(key).ifPresent(v -> {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
record.print(pw, Locale.getDefault());
Matcher matcher = pattern.matcher(sw.toString());
Matcher matcher = pattern.matcher(v.show(locale));
Records.Builder builder = Records.builder();
if (matcher.find()) {
for (String groupName : groupNames) {
Expand Down
19 changes: 2 additions & 17 deletions runtime/src/main/java/hosh/runtime/AutoTableChannel.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,8 @@
import hosh.spi.OutputChannel;
import hosh.spi.Record;
import hosh.spi.Records;
import hosh.spi.Value;
import hosh.spi.Values;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
Expand Down Expand Up @@ -120,7 +117,7 @@ private Map<Key, Integer> calculatePaddings(Collection<Record> records) {
Iterator<Record.Entry> entries = record.entries().iterator();
while (entries.hasNext()) {
Record.Entry entry = entries.next();
String formattedValue = valueAsString(entry.getValue());
String formattedValue = entry.getValue().show(Locale.getDefault());
int valueLength = lengthFor(formattedValue);
maxLengthPerColumn.compute(entry.getKey(), (k, v) -> v == null ? Math.max(k.name().length(), valueLength) : Math.max(v, valueLength));
}
Expand All @@ -133,14 +130,6 @@ private Map<Key, Integer> calculatePaddings(Collection<Record> records) {
return result;
}

// there are at least 3 or 4 variants of this method
private String valueAsString(Value value) {
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
value.print(printWriter, Locale.getDefault());
return writer.toString();
}

private int lengthFor(String value) {
return dropAnsi(value).length();
}
Expand All @@ -157,12 +146,8 @@ private void sendRow(Map<Key, Integer> paddings, Record record, OutputChannel ou
List<String> formattedValues = new ArrayList<>(record.size());
while (entries.hasNext()) {
Record.Entry entry = entries.next();
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
formatter.append(formatterFor(paddings.get(entry.getKey())));
entry.getValue().print(printWriter, locale);
String formattedValue = writer.toString();
formattedValues.add(formattedValue);
formattedValues.add(entry.getValue().show(locale));
}
String row = String.format(formatter.toString(), formattedValues.toArray());
out.send(Records.singleton(Keys.TEXT, Values.ofText(row)));
Expand Down
9 changes: 5 additions & 4 deletions runtime/src/main/java/hosh/runtime/ConsoleChannel.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

import java.io.PrintWriter;
import java.util.Locale;
import java.util.stream.Collectors;

public class ConsoleChannel implements OutputChannel {

Expand All @@ -45,10 +46,10 @@ public ConsoleChannel(Terminal terminal, Ansi.Style style) {
@Override
public void send(Record record) {
Locale locale = Locale.getDefault();
style.enable(printWriter);
record.print(printWriter, locale);
style.disable(printWriter);
printWriter.append(System.lineSeparator());
String line = record
.values().map(value -> value.show(locale))
.collect(Collectors.joining(" ", style.enable(), style.disable()));
printWriter.println(line);
printWriter.flush();
}

Expand Down
13 changes: 9 additions & 4 deletions runtime/src/main/java/hosh/runtime/ExternalCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,13 @@
import hosh.spi.Values;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UncheckedIOException;
import java.lang.ProcessBuilder.Redirect;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
Expand All @@ -52,6 +53,7 @@
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;

// used for any non-built-in commands (e.g. native commands such as 'vim' or 'ssh')
class ExternalCommand implements CompilerCommand, StateAware {
Expand Down Expand Up @@ -125,11 +127,14 @@ private void writeStdin(InputChannel in, Process process) {

private void pipeChannelToOutputStream(InputChannel in, OutputStream outputStream) {
Locale locale = Locale.getDefault();
try (PrintWriter pw = new PrintWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8))) {
try (BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8))) {
for (Record record : InputChannel.iterate(in)) {
record.print(pw, locale);
pw.println();
String line = record.values().map(v -> v.show(locale)).collect(Collectors.joining(" "));
bufferedWriter.append(line);
bufferedWriter.append(System.lineSeparator());
}
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,15 @@
import hosh.spi.Ansi;
import hosh.spi.State;

import java.io.PrintWriter;
import java.io.StringWriter;

public class DefaultPromptProvider implements PromptProvider {

@Todo(description = "use StyledPrompt class")
@Override
public String provide(State state) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
Ansi.Style.FG_GREEN.enable(pw);
pw.append("hosh");
Ansi.Style.FG_GREEN.disable(pw);
pw.append("> ");
Ansi.Style.RESET.enable(pw);
return sw.toString();
return Ansi.Style.FG_GREEN.enable() +
"hosh" +
Ansi.Style.FG_GREEN.disable() +
"> " +
Ansi.Style.RESET.enable();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.logging.Level;
Expand Down Expand Up @@ -73,15 +71,11 @@ public String provide(State state) {
if (currentBranch == null) {
return null; // nothing to do
}
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
pw.append("[");
Ansi.Style.FG_RED.enable(pw);
pw.append("git:").append(currentBranch);
Ansi.Style.FG_RED.disable(pw);
pw.append("]");
Ansi.Style.RESET.enable(pw);
return sw.toString();
return "[" +
Ansi.Style.FG_RED.enable() +
"git:" + currentBranch +
Ansi.Style.FG_RED.disable() +
"]";
}

private String getCurrentBranch(State state) {
Expand Down
13 changes: 6 additions & 7 deletions runtime/src/test/java/hosh/runtime/ConsoleChannelTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,23 +60,22 @@ void setup() {
@Test
void empty() {
sut.send(Records.empty());
then(printWriter).should().append(System.lineSeparator());
then(printWriter).should().println("");
then(printWriter).should().flush();
}

@Test
void oneValue() {
sut.send(Records.singleton(Keys.NAME, Values.ofText("foo")));
then(printWriter).should().append("foo");
then(printWriter).should().append(System.lineSeparator());
then(printWriter).should().println("foo");
then(printWriter).should().flush();
}

@Test
void twoValues() {
sut.send(Records.builder().entry(Keys.NAME, Values.ofText("foo")).entry(Keys.VALUE, Values.ofText("bar")).build());
then(printWriter).should().append("foo");
then(printWriter).should().append(" ");
then(printWriter).should().append("bar");
then(printWriter).should().append(System.lineSeparator());
then(printWriter).should().println("foo bar");
then(printWriter).should().flush();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ void workingGit() throws IOException {

// Then
then(process).should().destroy(); // important to not leak process handlers
assertThat(result).isEqualTo("[\u001B[31mgit:bugfix/npe-main\u001B[39m]\u001B[0m");
assertThat(result).isEqualTo("[\u001B[31mgit:bugfix/npe-main\u001B[39m]");
}

}
Loading

0 comments on commit 72131c1

Please sign in to comment.