haxe: получить номер строки и позицию строки из haxe.macro.Position
В макросе haxe для каждого выражения мы можем получить его позицию в виде http://api.haxe.org/haxe/macro/Position.html:
{
file:String, // filename - relative to source path
min:Int, // position of first character in file
max:Int // position of last character in file
}
Я хочу получить номер строки и положение в строке для минимальных и максимальных переменных.
Я определенно могу сделать это, открыв файл
FileSystem.absolutePath(Context.resolvePath(posInfo.file));
и вычисление номера строки, но haxe уже делает это, гораздо лучше получить эту информацию от компилятора. Является ли это возможным?
1 ответ
В текущих версиях Haxe вы можете использовать PositionTools.toLocation
class Macro {
public static macro function log(args:Array<Expr>):Expr {
var loc = PositionTools.toLocation(Context.currentPos());
var locStr = loc.file + ":" + loc.range.start.line;
args.unshift(macro $v{locStr});
return macro SomeExtern.logFunc($a{args});
}
}
иметь Macro.log("hi!")
перевести на SomeExtern.logFunc("Main:5", "hi!")
Я знаю, что несколько проектов делают это вручную (например, стиль проверки)
Загрузите содержимое файла, найдите символы возврата каретки (\ n, \ r или \ n \ r), отметьте позицию символа для каждой новой строки, найдите ваш pos.min по этим позициям
Я думаю, это может быть более проблематичным, если у вас есть многобайтовые символы в файле...