Haxe Code Cookbook
Haxe programming cookbookMacrosCode completion from URL

Code completion from URL

Reading time: 1 minute

This example will load an URL, scrape all id's from the HTML page and use them for auto-completion.

import haxe.macro.Context;
import haxe.macro.Expr;

class MyMacro {
  public static function build(url:String) {
    var h = haxe.Http.requestUrl(url);

    //trace(h);

    var r = ~/id=["']([A-Za-z0-9]+)["']/;
    var ids = [];
    while (r.match(h)) {
      var id = r.matched(1);
      ids.remove(id);
      ids.push(id);
      h = r.matchedRight();
    }

    var fields = Context.getBuildFields();
    var gtype = TAnonymous([for (id in ids) { 
      name : id, 
      pos : Context.currentPos(), 
      kind : FVar(macro:String) 
    }]);
    
    var gids:Field = {
      name : "gids",
      pos : Context.currentPos(),
      kind : FVar(gtype),
      access : [AStatic],
    };
    fields.push(gids);
    return fields;
  }
}

Usage

@:build(MyMacro.build("http://www.msn.com/en-us/"))
class Main {
  static function main() {
    Main.gids; // auto-complete here
  }
}

Demo

Code completion from URL

Explanation in video

Start at 21:00

More info: https://haxe.org/blog/nicolas-about-haxe-3


Contributors:
Last modified:
Created:
Category:  Macros