Main.hx 959 B

123456789101112131415161718192021222324252627282930313233343536
  1. import haxe.display.Position;
  2. import haxe.macro.Context;
  3. import haxe.macro.PositionTools;
  4. class Main {
  5. static function main() {
  6. var s = "待到来年九月八";
  7. posChecking("我花开后百花杀");
  8. }
  9. macro static function posChecking(expr) {
  10. var info = PositionTools.getInfos(expr.pos);
  11. var txtPos = PositionTools.make({
  12. min: info.min,
  13. max: info.max,
  14. file: info.file + '.txt'
  15. });
  16. var hxLoc = PositionTools.toLocation(expr.pos);
  17. var txtLoc = PositionTools.toLocation(txtPos);
  18. if(!equalRanges(hxLoc.range, txtLoc.range)) {
  19. var msg = 'position numbers should be the same';
  20. Context.warning(msg, expr.pos);
  21. Context.error(msg, txtPos);
  22. }
  23. return expr;
  24. }
  25. static function equalRanges(r1:Range, r2:Range):Bool {
  26. return equalPositions(r1.start, r2.start) && equalPositions(r1.end, r2.end);
  27. }
  28. static function equalPositions(p1:Position, p2:Position) {
  29. return p1.line == p2.line && p1.character == p2.character;
  30. }
  31. }