From eef0470389d88de6169a6962f14a9d422175e4c2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 12 Jan 2025 21:02:50 +0000 Subject: Create separate sourcefiles package --- .../java/org/shedlang/compiler/ShedCompiler.java | 3 +- .../java/org/shedlang/compiler/SourceFile.java | 8 --- .../java/org/shedlang/compiler/SourceFiles.java | 84 ---------------------- .../shedlang/compiler/sourcefiles/SourceFile.java | 8 +++ .../shedlang/compiler/sourcefiles/SourceFiles.java | 84 ++++++++++++++++++++++ 5 files changed, 94 insertions(+), 93 deletions(-) delete mode 100644 src/main/java/org/shedlang/compiler/SourceFile.java delete mode 100644 src/main/java/org/shedlang/compiler/SourceFiles.java create mode 100644 src/main/java/org/shedlang/compiler/sourcefiles/SourceFile.java create mode 100644 src/main/java/org/shedlang/compiler/sourcefiles/SourceFiles.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java index d1bd6101..e2be53a2 100644 --- a/src/main/java/org/shedlang/compiler/ShedCompiler.java +++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java @@ -9,6 +9,7 @@ import org.shedlang.compiler.config.ProjectConfig; import org.shedlang.compiler.parser.Parser; import org.shedlang.compiler.shid.ShidCodeGen; import org.shedlang.compiler.shid.ShidNamespace; +import org.shedlang.compiler.sourcefiles.SourceFile; import org.shedlang.compiler.typechecker.TypeChecker; import org.shedlang.compiler.typechecker.TypeCheckerContext; import org.shedlang.compiler.types.Effects; @@ -24,8 +25,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.*; -import static org.shedlang.compiler.SourceFiles.collectSourceFiles; import static org.shedlang.compiler.parser.Tokeniser.tokenise; +import static org.shedlang.compiler.sourcefiles.SourceFiles.collectSourceFiles; import static org.shedlang.compiler.typechecker.NamespaceDependencyLineariser.orderNamespaces; public class ShedCompiler { diff --git a/src/main/java/org/shedlang/compiler/SourceFile.java b/src/main/java/org/shedlang/compiler/SourceFile.java deleted file mode 100644 index b3ca3578..00000000 --- a/src/main/java/org/shedlang/compiler/SourceFile.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.shedlang.compiler; - -import org.shedlang.compiler.types.NamespaceName; - -import java.nio.file.Path; - -public record SourceFile(Path path, NamespaceName namespaceName) { -} diff --git a/src/main/java/org/shedlang/compiler/SourceFiles.java b/src/main/java/org/shedlang/compiler/SourceFiles.java deleted file mode 100644 index 38c3ade3..00000000 --- a/src/main/java/org/shedlang/compiler/SourceFiles.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.shedlang.compiler; - -import org.shedlang.compiler.parser.TokenType; -import org.shedlang.compiler.parser.Tokeniser; -import org.shedlang.compiler.types.NamespaceName; -import org.zwobble.sourcetext.SourceText; - -import java.io.IOException; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Optional; - -public class SourceFiles { - private SourceFiles() { - } - - public static List collectSourceFiles( - Path sourceRoot - ) throws IOException { - var sourceFiles = new ArrayList(); - - Files.walkFileTree(sourceRoot, new SimpleFileVisitor() { - @Override - public FileVisitResult visitFile( - Path file, - BasicFileAttributes attrs - ) { - var namespaceName = relativeSourcePathToNamespaceName( - sourceRoot.relativize(file) - ); - if (namespaceName.isPresent()) { - var sourceFile = new SourceFile(file, namespaceName.get()); - sourceFiles.add(sourceFile); - } - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult postVisitDirectory( - Path dir, - IOException exc - ) { - return FileVisitResult.CONTINUE; - } - }); - sourceFiles.sort(Comparator.comparing(x -> x.path(), Comparator.naturalOrder())); - return sourceFiles; - } - - private static Optional relativeSourcePathToNamespaceName( - Path relativeSourcePath - ) { - var fileName = relativeSourcePath.getFileName().toString(); - var shedSuffix = ".shed"; - if (!fileName.endsWith(shedSuffix)) { - return Optional.empty(); - } - var namespaceNameParts = new ArrayList(); - - for (var i = 0; i < relativeSourcePath.getNameCount() - 1; i++) { - namespaceNameParts.add(relativeSourcePath.getName(i).toString()); - } - - namespaceNameParts.add(fileName.substring(0, fileName.length() - shedSuffix.length())); - - for (var part : namespaceNameParts) { - var tokens = Tokeniser.tokenise(SourceText.fromString("", part)); - if (!( - tokens.peek().tokenType() == TokenType.IDENTIFIER && - tokens.peek(1).tokenType() == TokenType.END - )) { - return Optional.empty(); - } - } - - return Optional.of(new NamespaceName(namespaceNameParts)); - } -} diff --git a/src/main/java/org/shedlang/compiler/sourcefiles/SourceFile.java b/src/main/java/org/shedlang/compiler/sourcefiles/SourceFile.java new file mode 100644 index 00000000..922cc366 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/sourcefiles/SourceFile.java @@ -0,0 +1,8 @@ +package org.shedlang.compiler.sourcefiles; + +import org.shedlang.compiler.types.NamespaceName; + +import java.nio.file.Path; + +public record SourceFile(Path path, NamespaceName namespaceName) { +} diff --git a/src/main/java/org/shedlang/compiler/sourcefiles/SourceFiles.java b/src/main/java/org/shedlang/compiler/sourcefiles/SourceFiles.java new file mode 100644 index 00000000..c239fce8 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/sourcefiles/SourceFiles.java @@ -0,0 +1,84 @@ +package org.shedlang.compiler.sourcefiles; + +import org.shedlang.compiler.parser.TokenType; +import org.shedlang.compiler.parser.Tokeniser; +import org.shedlang.compiler.types.NamespaceName; +import org.zwobble.sourcetext.SourceText; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; + +public class SourceFiles { + private SourceFiles() { + } + + public static List collectSourceFiles( + Path sourceRoot + ) throws IOException { + var sourceFiles = new ArrayList(); + + Files.walkFileTree(sourceRoot, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile( + Path file, + BasicFileAttributes attrs + ) { + var namespaceName = relativeSourcePathToNamespaceName( + sourceRoot.relativize(file) + ); + if (namespaceName.isPresent()) { + var sourceFile = new SourceFile(file, namespaceName.get()); + sourceFiles.add(sourceFile); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory( + Path dir, + IOException exc + ) { + return FileVisitResult.CONTINUE; + } + }); + sourceFiles.sort(Comparator.comparing(x -> x.path(), Comparator.naturalOrder())); + return sourceFiles; + } + + private static Optional relativeSourcePathToNamespaceName( + Path relativeSourcePath + ) { + var fileName = relativeSourcePath.getFileName().toString(); + var shedSuffix = ".shed"; + if (!fileName.endsWith(shedSuffix)) { + return Optional.empty(); + } + var namespaceNameParts = new ArrayList(); + + for (var i = 0; i < relativeSourcePath.getNameCount() - 1; i++) { + namespaceNameParts.add(relativeSourcePath.getName(i).toString()); + } + + namespaceNameParts.add(fileName.substring(0, fileName.length() - shedSuffix.length())); + + for (var part : namespaceNameParts) { + var tokens = Tokeniser.tokenise(SourceText.fromString("", part)); + if (!( + tokens.peek().tokenType() == TokenType.IDENTIFIER && + tokens.peek(1).tokenType() == TokenType.END + )) { + return Optional.empty(); + } + } + + return Optional.of(new NamespaceName(namespaceNameParts)); + } +} -- cgit v1.2.3