summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-10-24 23:16:03 +0100
committerMichael Williamson <mike@zwobble.org>2026-10-24 23:16:03 +0100
commit52361b8938acd93894b0f3ec3d5992e602929400 (patch)
treead4dc9d8ad9f9ecf03c843d432b3de86f6e4a7a4 /src/main/java
parent5c83ab1e74bf8877433c085340f7bf25d2079f77 (diff)
Add strip command
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java25
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java19
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/CodeWriter.java80
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Stripper.java12
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sqlscripts/SqlScriptsGenerator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/sql/SqlWriter.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java5
19 files changed, 204 insertions, 11 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java
index 7e2dcee..9a1e054 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java
@@ -3,6 +3,7 @@ package org.zwobble.hobgoblin.compiler;
import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;
+import net.sourceforge.argparse4j.inf.Subparser;
import org.zwobble.hobgoblin.compiler.errors.SourceError;
import org.zwobble.hobgoblin.compiler.sources.NullSource;
import org.zwobble.hobgoblin.compiler.util.argparse4j.PathArgumentType;
@@ -31,6 +32,9 @@ public class HobgoblinCli {
case COMPILE -> {
HobgoblinCompiler.compile(sourcePath);
}
+ case STRIP -> {
+ HobgoblinCompiler.strip(sourcePath);
+ }
}
}
@@ -40,12 +44,13 @@ public class HobgoblinCli {
var subparsers = parser.addSubparsers();
- var compileSubParser = subparsers.addParser("compile");
- compileSubParser.setDefault("command", Command.COMPILE);
- compileSubParser
- .addArgument("source")
- .type(new PathArgumentType())
- .required(true);
+ var compileSubparser = subparsers.addParser("compile");
+ compileSubparser.setDefault("command", Command.COMPILE);
+ addSourceArgument(compileSubparser);
+
+ var stripSubparser = subparsers.addParser("strip");
+ stripSubparser.setDefault("command", Command.STRIP);
+ addSourceArgument(stripSubparser);
try {
return parser.parseArgs(args);
@@ -56,7 +61,15 @@ public class HobgoblinCli {
}
}
+ private static void addSourceArgument(Subparser subparser) {
+ subparser
+ .addArgument("source")
+ .type(new PathArgumentType())
+ .required(true);
+ }
+
private enum Command {
COMPILE,
+ STRIP,
}
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
index 0bd9192..1a34f2b 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
@@ -3,6 +3,7 @@ package org.zwobble.hobgoblin.compiler;
import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceNode;
import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
import org.zwobble.hobgoblin.compiler.config.ProjectConfig;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.parser.Parser;
import org.zwobble.hobgoblin.compiler.typechecker.TypeChecker;
import org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerGlobalContext;
@@ -17,6 +18,7 @@ import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
public class HobgoblinCompiler {
@@ -63,6 +65,23 @@ public class HobgoblinCompiler {
}
}
+ public static void strip(Path projectRoot) throws IOException {
+ var config = ProjectConfig.read(projectRoot);
+ var generators = config.createGenerators();
+
+ // Multiple generators may write the same language to the same
+ // directory, so we de-duplicate strippers rather than asking the
+ // generator to strip directly.
+ var strippers = new HashSet<Stripper>();
+ for (var generator : generators) {
+ strippers.addAll(generator.strippers());
+ }
+
+ for (var stripper : strippers) {
+ stripper.strip();
+ }
+ }
+
static NamespaceName sourceFileNamespaceName(Path sourceDirectory, Path sourceFilePath) {
var relativePath = sourceDirectory.relativize(sourceFilePath);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/CodeWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/CodeWriter.java
index b9c5d85..551683e 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/CodeWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/CodeWriter.java
@@ -1,5 +1,7 @@
package org.zwobble.hobgoblin.compiler.output;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
+
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
@@ -74,14 +76,14 @@ public class CodeWriter implements AutoCloseable {
}
public record CustomAreas(
- Map<String, List<String>> existing,
+ SequencedMap<String, List<String>> existing,
CodeWriterConfig config
) {
public static CustomAreas read(
String existingString,
CodeWriterConfig config
) {
- var existing = new HashMap<String, List<String>>();
+ var existing = new LinkedHashMap<String, List<String>>();
Iterable<String> lines = () -> existingString.lines().iterator();
Optional<String> name = Optional.empty();
@@ -91,7 +93,9 @@ public class CodeWriter implements AutoCloseable {
if (trimmedLine.startsWith(config.customAreaStart)) {
name = Optional.of(trimmedLine.substring(config.customAreaStart.length()));
} else if (name.isPresent() && trimmedLine.startsWith(config.customAreaEnd + name.get())) {
- existing.put(name.get(), customAreaLines);
+ if (!customAreaLines.isEmpty()) {
+ existing.put(name.get(), customAreaLines);
+ }
customAreaLines = new ArrayList<>();
name = Optional.empty();
} else if (name.isPresent()) {
@@ -103,7 +107,7 @@ public class CodeWriter implements AutoCloseable {
}
public static CustomAreas empty(CodeWriterConfig config) {
- return new CustomAreas(Map.of(), config);
+ return new CustomAreas(new LinkedHashMap<>(), config);
}
public String customAreaStart() {
@@ -158,7 +162,7 @@ public class CodeWriter implements AutoCloseable {
) throws IOException {
var originalContents = readFile(file);
- if (originalContents.isPresent() && !originalContents.get().startsWith(config.header)) {
+ if (originalContents.isPresent() && !isGeneratedFile(originalContents.get(), config)) {
return;
}
@@ -169,6 +173,72 @@ public class CodeWriter implements AutoCloseable {
}
}
+ private static boolean isGeneratedFile(String contents, CodeWriterConfig config) {
+ return contents.startsWith(config.header);
+ }
+
+ public static Stripper stripper(
+ Path outputPath,
+ CodeWriterConfig config
+ ) {
+ return new Stripper(outputPath, config);
+ }
+
+ public static void strip(Path outputPath, CodeWriterConfig config) throws IOException {
+ try (var filesStream = Files.walk(outputPath)) {
+ var filesIterator = filesStream.iterator();
+ while (filesIterator.hasNext()) {
+ var path = filesIterator.next();
+ if (path.toFile().isFile()) {
+ // TODO: filter by extension?
+ // TODO: don't read entire string if not necessary.
+ var contents = Files.readString(path);
+ switch (stripFileContents(contents, config)) {
+ case StripResult.Delete _ -> {
+ Files.delete(path);
+ }
+ case StripResult.NewContent newContent -> {
+ Files.writeString(path, newContent.newContents);
+ }
+ case StripResult.Unchanged _ -> {
+ }
+ }
+ }
+ }
+ }
+ }
+
+ sealed interface StripResult {
+ record Unchanged() implements StripResult {}
+ record Delete() implements StripResult {}
+ record NewContent(String newContents) implements StripResult {}
+ }
+
+ static StripResult stripFileContents(String contents, CodeWriterConfig config) {
+ if (!isGeneratedFile(contents, config)) {
+ return new StripResult.Unchanged();
+ }
+
+ var stringWriter = new StringWriter();
+ var customAreas = CustomAreas.read(contents, config);
+ if (customAreas.existing.isEmpty()) {
+ return new StripResult.Delete();
+ }
+
+ var writer = new CodeWriter(stringWriter, config.header, customAreas);
+ try {
+ writer.writeHeader();
+ for (var customAreaName : customAreas.existing.keySet()) {
+ writer.writeCustomArea(customAreaName);
+ }
+ return new StripResult.NewContent(stringWriter.toString());
+ } catch (IOException exception) {
+ // In theory, writing to a StringWriter will always succeed, so
+ // we don't need to handle this especially well.
+ throw new RuntimeException(exception);
+ }
+ }
+
private static CustomAreas readCustomAreas(
CodeWriterFile file,
CodeWriterConfig config
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java
index 4a73000..dd8f46d 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java
@@ -8,4 +8,5 @@ import java.util.List;
public interface Generator {
void generate(List<TypedNamespaceNode> namespaces, TypesInfo typesInfo) throws IOException;
+ List<Stripper> strippers();
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Stripper.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Stripper.java
new file mode 100644
index 0000000..27241eb
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Stripper.java
@@ -0,0 +1,12 @@
+package org.zwobble.hobgoblin.compiler.output.generators;
+
+import org.zwobble.hobgoblin.compiler.output.CodeWriter;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+public record Stripper(Path path, CodeWriter.CodeWriterConfig codeWriterConfig) {
+ public void strip() throws IOException {
+ CodeWriter.strip(path, codeWriterConfig);
+ }
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
index 61fc237..f202f61 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
@@ -1,6 +1,7 @@
package org.zwobble.hobgoblin.compiler.output.generators.java;
import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter;
import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*;
import org.zwobble.hobgoblin.compiler.types.*;
@@ -40,6 +41,10 @@ public class JavaGenerator {
}
}
+ public List<Stripper> strippers(Path sourceRootDirectory) {
+ return List.of(JavaWriter.stripper(sourceRootDirectory));
+ }
+
public JavaPackageName namespaceToJavaPackageName(NamespaceName namespaceName) {
var ancestorNamespaceName = namespaceName;
var remainingNamespaceNameParts = new ArrayList<String>();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
index 1ae368e..c028a42 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
@@ -5,6 +5,7 @@ import org.zwobble.hobgoblin.compiler.ast.typed.*;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*;
@@ -80,6 +81,11 @@ public class JavaPreciselyMatchersGenerator implements Generator {
}
}
+ @Override
+ public List<Stripper> strippers() {
+ return this.javaGenerator.strippers(this.sourceRootDirectory);
+ }
+
private List<JavaCompilationUnit> generateNamespace(TypedNamespaceNode namespace, Context context) {
var javaCompilationUnits = new ArrayList<JavaCompilationUnit>();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
index 38bf9b6..d4bb4ba 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
@@ -6,6 +6,7 @@ import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.generators.transient0.Transient0TypeLevelValuesUnsupported;
@@ -96,6 +97,11 @@ public class JavaTransient0Generator implements Generator {
}
}
+ @Override
+ public List<Stripper> strippers() {
+ return this.javaGenerator.strippers(this.sourceRootDirectory);
+ }
+
private void write(List<JavaCompilationUnit> javaCompilationUnits) throws IOException {
JavaGenerator.write(this.sourceRootDirectory, javaCompilationUnits);
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
index e3f54cf..9c06fb1 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
@@ -7,9 +7,11 @@ import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaNativeTypeConfig;
+import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter;
import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*;
import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo;
import org.zwobble.hobgoblin.compiler.types.*;
@@ -90,6 +92,11 @@ public class JavaTypesGenerator implements Generator {
}
}
+ @Override
+ public List<Stripper> strippers() {
+ return this.javaGenerator.strippers(this.sourceRootDirectory);
+ }
+
private List<JavaCompilationUnit> generateNamespace(TypedNamespaceNode namespace, Context context) {
var javaCompilationUnits = new ArrayList<JavaCompilationUnit>();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java
index fae9066..1fd342f 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java
@@ -1,5 +1,6 @@
package org.zwobble.hobgoblin.compiler.output.generators.rust;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.lang.rust.RustWriter;
import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.*;
import org.zwobble.hobgoblin.compiler.types.*;
@@ -32,6 +33,10 @@ public class RustGenerator {
});
}
+ public List<Stripper> strippers() {
+ return List.of(RustWriter.stripper(this.outputPath));
+ }
+
public RustPath generateRustTypeExpression(Type type) {
return switch (type) {
case ConstructedType constructedType -> {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
index 8ecc7cc..44d144c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
@@ -5,6 +5,7 @@ import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.generators.transient0.Transient0TypeLevelValuesUnsupported;
@@ -90,6 +91,11 @@ public class RustTransient0Generator implements Generator {
}
}
+ @Override
+ public List<Stripper> strippers() {
+ return this.rustGenerator.strippers();
+ }
+
private void generateBuiltins() throws IOException {
var rustModuleName = builtinsModuleName();
var rustModule = new RustModule(
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
index f01e143..658fa53 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
@@ -4,6 +4,7 @@ import org.zwobble.hobgoblin.compiler.ast.typed.*;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.*;
@@ -76,6 +77,11 @@ public class RustTypesGenerator implements Generator {
}
}
+ @Override
+ public List<Stripper> strippers() {
+ return this.rustGenerator.strippers();
+ }
+
private RustModule generateNamespace(TypedNamespaceNode namespace, TypesInfo typesInfo) {
var rustModuleName = this.rustGenerator.namespaceNameToRustCrateModulePath(namespace.namespaceName());
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sqlscripts/SqlScriptsGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sqlscripts/SqlScriptsGenerator.java
index 60daf40..5089271 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sqlscripts/SqlScriptsGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/sqlscripts/SqlScriptsGenerator.java
@@ -7,6 +7,7 @@ import org.zwobble.hobgoblin.compiler.ast.typed.TypedTableDefinitionNode;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.generators.sql.SqlGenerator;
import org.zwobble.hobgoblin.compiler.output.lang.sql.SqlWriter;
import org.zwobble.hobgoblin.compiler.output.lang.sql.ast.SqlScript;
@@ -80,6 +81,11 @@ public class SqlScriptsGenerator implements Generator {
}
}
+ @Override
+ public List<Stripper> strippers() {
+ return List.of(SqlWriter.stripper(this.outputPath));
+ }
+
private void generateDatabaseSchemaDefinition(
TypedDatabaseSchemaDefinitionNode databaseSchemaDefinition,
NamespaceName namespaceName,
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java
index 68d1610..a16d1f3 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java
@@ -1,6 +1,7 @@
package org.zwobble.hobgoblin.compiler.output.generators.typescript;
import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.lang.typescript.TypescriptTypes;
import org.zwobble.hobgoblin.compiler.output.lang.typescript.TypescriptWriter;
import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.*;
@@ -33,6 +34,10 @@ public class TypescriptGenerator {
TypescriptWriter.writeTo(path, writer -> writer.writeModule(module));
}
+ public List<Stripper> strippers() {
+ return List.of(TypescriptWriter.stripper(this.outputPath));
+ }
+
public record RequiredType(SimpleType type, TypescriptIdentifier importName) {}
public static class Context {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
index 6dd8592..3c1ddfe 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
@@ -4,6 +4,7 @@ import org.zwobble.hobgoblin.compiler.ast.typed.*;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.lang.typescript.TypescriptTypes;
@@ -78,6 +79,11 @@ public class TypescriptTypesGenerator implements Generator {
}
}
+ @Override
+ public List<Stripper> strippers() {
+ return this.typescriptGenerator.strippers();
+ }
+
private TypescriptModule generateNamespace(
TypedNamespaceNode namespace,
TypesInfo typesInfo
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
index 2c659a7..2d17085 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
@@ -2,6 +2,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java;
import org.zwobble.hobgoblin.compiler.ast.DocComment;
import org.zwobble.hobgoblin.compiler.output.CodeWriter;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*;
import java.io.IOException;
@@ -37,6 +38,10 @@ public class JavaWriter implements AutoCloseable {
);
}
+ public static Stripper stripper(Path sourceRootDirectory) {
+ return CodeWriter.stripper(sourceRootDirectory, CONFIG);
+ }
+
private final CodeWriter writer;
public JavaWriter(CodeWriter writer) {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
index 8ecf2bc..076e150 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
@@ -2,6 +2,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust;
import org.zwobble.hobgoblin.compiler.ast.DocComment;
import org.zwobble.hobgoblin.compiler.output.CodeWriter;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.*;
import java.io.IOException;
@@ -37,6 +38,10 @@ public class RustWriter implements AutoCloseable {
);
}
+ public static Stripper stripper(Path outputPath) {
+ return CodeWriter.stripper(outputPath, CONFIG);
+ }
+
private final CodeWriter writer;
public RustWriter(CodeWriter writer) {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/sql/SqlWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/sql/SqlWriter.java
index 4c85a5a..ef1562e 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/sql/SqlWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/sql/SqlWriter.java
@@ -1,6 +1,7 @@
package org.zwobble.hobgoblin.compiler.output.lang.sql;
import org.zwobble.hobgoblin.compiler.output.CodeWriter;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.lang.sql.ast.*;
import java.io.IOException;
@@ -33,6 +34,10 @@ public class SqlWriter {
);
}
+ public static Stripper stripper(Path outputPath) {
+ return CodeWriter.stripper(outputPath, CONFIG);
+ }
+
private final CodeWriter writer;
public SqlWriter(CodeWriter writer) {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
index ab17902..72e9cf5 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
@@ -2,6 +2,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.typescript;
import org.zwobble.hobgoblin.compiler.ast.DocComment;
import org.zwobble.hobgoblin.compiler.output.CodeWriter;
+import org.zwobble.hobgoblin.compiler.output.generators.Stripper;
import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.*;
import java.io.IOException;
@@ -34,6 +35,10 @@ public class TypescriptWriter implements AutoCloseable {
);
}
+ public static Stripper stripper(Path outputPath) {
+ return CodeWriter.stripper(outputPath, CONFIG);
+ }
+
private final CodeWriter writer;
public TypescriptWriter(CodeWriter writer) {