This commit is contained in:
Juraj Kirchheim
2020-08-20 12:45:33 +02:00
parent 59135d5cea
commit 6f4e6b9227
2 changed files with 24 additions and 7 deletions

View File

@@ -54,9 +54,16 @@ class MacroApi {
static public var completionPoint(default, null):Option<{ static public var completionPoint(default, null):Option<{
var file(default, never):String; var file(default, never):String;
var content(default, never):Null<String>;
var pos(default, never):Int; var pos(default, never):Int;
}>; }>;
static public function getBuildFields():Option<Array<haxe.macro.Expr.Field>>
return switch completionPoint {
case Some(v) if (v.content != null && (v.content.charAt(v.pos - 1) == '@' || (v.content.charAt(v.pos - 1) == ':' && v.content.charAt(v.pos - 2) == '@'))): None;
default: Some(haxe.macro.Context.getBuildFields());
}
static public var args(default, null):Iterable<String>; static public var args(default, null):Iterable<String>;
static var initialized = initArgs(); static var initialized = initArgs();
@@ -73,12 +80,15 @@ class MacroApi {
params:{ params:{
file:String, file:String,
offset:Int, offset:Int,
contents:String,
} }
} = haxe.Json.parse(arg); } = haxe.Json.parse(arg);
switch payload { switch payload {
case { jsonrpc: '2.0', method: 'display/completion' }: case { jsonrpc: '2.0', method: 'display/completion' }:
Some({ Some({
file: payload.params.file, file: payload.params.file,
content: payload.params.contents,
pos: payload.params.offset, pos: payload.params.offset,
}); });
default: None; default: None;

View File

@@ -23,7 +23,10 @@ class ClassBuilder {
target = Context.getLocalClass().get(); target = Context.getLocalClass().get();
if (fields == null) if (fields == null)
fields = Context.getBuildFields(); switch MacroApi.getBuildFields() {
case None: target.pos.error('Impossible to get builds fields now. Possible cause: https://github.com/HaxeFoundation/haxe/issues/9853');
case Some(_):
}
this.initializeFrom = fields; this.initializeFrom = fields;
this.target = target; this.target = target;
@@ -192,10 +195,14 @@ class ClassBuilder {
return m; return m;
} }
static public function run(plugins:Array<ClassBuilder->Void>, ?verbose) { static public function run(plugins:Array<ClassBuilder->Void>, ?verbose)
var builder = new ClassBuilder(); return switch MacroApi.getBuildFields() {
for (p in plugins) case None: null;
p(builder); case Some(fields):
return builder.export(verbose); var builder = new ClassBuilder(fields);
} for (p in plugins)
p(builder);
return builder.export(verbose);
}
} }