From 52361b8938acd93894b0f3ec3d5992e602929400 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 24 Oct 2026 23:16:03 +0100 Subject: Add strip command --- .../zwobble/hobgoblin/compiler/HobgoblinCli.java | 25 +++++-- .../hobgoblin/compiler/HobgoblinCompiler.java | 19 +++++ .../hobgoblin/compiler/output/CodeWriter.java | 80 ++++++++++++++++++++-- .../compiler/output/generators/Generator.java | 1 + .../compiler/output/generators/Stripper.java | 12 ++++ .../output/generators/java/JavaGenerator.java | 5 ++ .../JavaPreciselyMatchersGenerator.java | 6 ++ .../javatransient0/JavaTransient0Generator.java | 6 ++ .../generators/javatypes/JavaTypesGenerator.java | 7 ++ .../output/generators/rust/RustGenerator.java | 5 ++ .../rusttransient0/RustTransient0Generator.java | 6 ++ .../generators/rusttypes/RustTypesGenerator.java | 6 ++ .../generators/sqlscripts/SqlScriptsGenerator.java | 6 ++ .../generators/typescript/TypescriptGenerator.java | 5 ++ .../typescripttypes/TypescriptTypesGenerator.java | 6 ++ .../compiler/output/lang/java/JavaWriter.java | 5 ++ .../compiler/output/lang/rust/RustWriter.java | 5 ++ .../compiler/output/lang/sql/SqlWriter.java | 5 ++ .../output/lang/typescript/TypescriptWriter.java | 5 ++ 19 files changed, 204 insertions(+), 11 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Stripper.java (limited to 'src/main/java') 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(); + 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> existing, + SequencedMap> existing, CodeWriterConfig config ) { public static CustomAreas read( String existingString, CodeWriterConfig config ) { - var existing = new HashMap>(); + var existing = new LinkedHashMap>(); Iterable lines = () -> existingString.lines().iterator(); Optional 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 namespaces, TypesInfo typesInfo) throws IOException; + List 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 strippers(Path sourceRootDirectory) { + return List.of(JavaWriter.stripper(sourceRootDirectory)); + } + public JavaPackageName namespaceToJavaPackageName(NamespaceName namespaceName) { var ancestorNamespaceName = namespaceName; var remainingNamespaceNameParts = new ArrayList(); 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 strippers() { + return this.javaGenerator.strippers(this.sourceRootDirectory); + } + private List generateNamespace(TypedNamespaceNode namespace, Context context) { var javaCompilationUnits = new ArrayList(); 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 strippers() { + return this.javaGenerator.strippers(this.sourceRootDirectory); + } + private void write(List 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 strippers() { + return this.javaGenerator.strippers(this.sourceRootDirectory); + } + private List generateNamespace(TypedNamespaceNode namespace, Context context) { var javaCompilationUnits = new ArrayList(); 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 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 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 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 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 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 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) { -- cgit v1.2.3