WIP compiling text files into code

This commit is contained in:
2019-05-12 18:16:35 -06:00
parent 571bd38421
commit a049385a94
3 changed files with 68 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
package hank;
class DirectoryLoadingMacro {
public static macro function build(directory: String, recursive: Bool=true): Array<Field> {
var files = if (recursive) {
recursiveLoop(directory, []);
} else {
sys.FileSystem.readDirectory(directory);
}
return FileLoadingMacro.build(files);
}
// this function is nabbed from https://code.haxe.org/category/beginner/using-filesystem.html
static function recursiveLoop(directory:String, files: Array<String>): Array<String> {
if (sys.FileSystem.exists(directory)) {
trace("directory found: " + directory);
for (file in sys.FileSystem.readDirectory(directory)) {
var path = haxe.io.Path.join([directory, file]);
if (!sys.FileSystem.isDirectory(path)) {
trace("file found: " + path);
// do something with file
files.push(path.toString());
} else {
var directory = haxe.io.Path.addTrailingSlash(path);
trace("directory found: " + directory);
files = recursiveLoop(directory, files);
}
}
} else {
trace('"$directory" does not exists');
}
return files;
}
}

29
hank/FileLoadingMacro.hx Normal file
View File

@@ -0,0 +1,29 @@
package hank;
import haxe.macro.Context;
import haxe.macro.Expr;
import haxe.Serializer;
class FileLoadingMacro {
public static macro function build(files: Array<String>): Array<Field> {
var fields = Context.getBuildFields();
var files = [for (file in files) file => sys.io.File.getContent(file)];
var serializer = new Serializer();
serializer.serialize(files);
var filesField = {
name: "_serializedFiles",
doc: null,
meta: [],
access: [AStatic, APrivate],
kind: FVar(macro : String, {expr: EConst(CString(serializer.toString())), pos: Context.currentPos()}),
pos: Context.currentPos()
};
fields.push(filesField);
return fields;
}
}

View File

@@ -7,6 +7,7 @@ import hank.LogUtil;
import haxe.CallStack;
import utest.Assert;
@:build(hank.FileLoadingMacro.build(["README.md"]))
class StoryTestCase extends utest.Test {
var testsDirectory: String;
@@ -17,6 +18,8 @@ class StoryTestCase extends utest.Test {
}
public function testAllExamples() {
trace(_serializedFiles);//['README.md']);
return;
var exampleFolders = sys.FileSystem.readDirectory(testsDirectory);
// Iterate through every example in the examples folder