WIP compiling text files into code
This commit is contained in:
36
hank/DirectoryLoadingMacro.hx
Normal file
36
hank/DirectoryLoadingMacro.hx
Normal 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
29
hank/FileLoadingMacro.hx
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user