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 по этим позициям

Я думаю, это может быть более проблематичным, если у вас есть многобайтовые символы в файле...

В haxe 4 PositionTools.toLocation добавлена ​​функция.

Другие вопросы по тегам