aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/SourceFiles.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-01-12 21:02:50 +0000
committerMichael Williamson <mike@zwobble.org>2025-01-12 21:03:50 +0000
commiteef0470389d88de6169a6962f14a9d422175e4c2 (patch)
tree3497e6327d9cfb817afaec3bc3ccdadaa4ff653c /src/main/java/org/shedlang/compiler/SourceFiles.java
parente8bdea44688c37cc1ef983714514b933e66ab944 (diff)
Create separate sourcefiles package
Diffstat (limited to 'src/main/java/org/shedlang/compiler/SourceFiles.java')
-rw-r--r--src/main/java/org/shedlang/compiler/SourceFiles.java84
1 files changed, 0 insertions, 84 deletions
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<SourceFile> collectSourceFiles(
- Path sourceRoot
- ) throws IOException {
- var sourceFiles = new ArrayList<SourceFile>();
-
- Files.walkFileTree(sourceRoot, new SimpleFileVisitor<Path>() {
- @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<NamespaceName> relativeSourcePathToNamespaceName(
- Path relativeSourcePath
- ) {
- var fileName = relativeSourcePath.getFileName().toString();
- var shedSuffix = ".shed";
- if (!fileName.endsWith(shedSuffix)) {
- return Optional.empty();
- }
- var namespaceNameParts = new ArrayList<String>();
-
- 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("<string>", part));
- if (!(
- tokens.peek().tokenType() == TokenType.IDENTIFIER &&
- tokens.peek(1).tokenType() == TokenType.END
- )) {
- return Optional.empty();
- }
- }
-
- return Optional.of(new NamespaceName(namespaceNameParts));
- }
-}