-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathModelGeneratorTask.php
More file actions
57 lines (51 loc) · 1.69 KB
/
Copy pathModelGeneratorTask.php
File metadata and controls
57 lines (51 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?hh
require_once('scripts/ModelGenerator.php');
require_once('scripts/ModelMutatorGenerator.php');
trait ModelGeneratorTrait {
public function taskGenModels() {
return new ModelGeneratorTask();
}
}
class ModelGeneratorTask extends Robo\Task\BaseTask
implements Robo\Contract\TaskInterface {
public function run(): Robo\Result {
$this->printTaskInfo('Generating Models');
self::generate();
return Robo\Result::success($this, "Finished Generating Models");
}
private static function generate(): void {
// Get all the php files in the cwd
$directory = new RecursiveDirectoryIterator(getcwd().'/models/schema');
$iterator = new RecursiveIteratorIterator($directory);
$files = new RegexIterator(
$iterator,
'/^.+(\.php|\.hh)$/i',
RegexIterator::MATCH,
RegexIterator::USE_KEY,
);
foreach ($files as $file) {
$classes = self::getClassesFromFile($file->getPathname());
foreach ($classes as $class) {
$controller = new $class();
if ($controller instanceof ModelSchema) {
(new Facebook\HackCodegen\ModelGenerator($controller))->generate();
(new Facebook\HackCodegen\ModelMutatorGenerator($controller))->generate();
}
}
}
}
private static function getClassesFromFile(string $file): Vector<string> {
$classes = Vector {};
$tokens = token_get_all(file_get_contents($file));
$count = count($tokens);
for ($i = 2; $i < $count; $i++) {
if ($tokens[$i - 2][0] == T_CLASS &&
$tokens[$i - 1][0] == T_WHITESPACE &&
$tokens[$i][0] == T_STRING) {
$class_name = $tokens[$i][1];
$classes[] = $class_name;
}
}
return $classes;
}
}