diff --git a/hxformat.json b/hxformat.json index b8e0be6e..e6079953 100644 --- a/hxformat.json +++ b/hxformat.json @@ -1,5 +1,13 @@ { "indentation": { "character": " " + }, + "wrapping": { + "callParameter": { + "defaultWrap": "keep" + }, + "arrayWrap": { + "defaultWrap": "keep" + } } } \ No newline at end of file diff --git a/kiss/src/kiss/Helpers.hx b/kiss/src/kiss/Helpers.hx index 4e1343a3..9e16fc40 100644 --- a/kiss/src/kiss/Helpers.hx +++ b/kiss/src/kiss/Helpers.hx @@ -328,4 +328,20 @@ class Helpers { }; return def.withPosOf(exp); } + + // Return convenient functions for succinctly making new ReaderExps that link back to an original exp's + // position in source code + public static function expBuilder(posRef:ReaderExp) { + return { + call: (func:ReaderExp, args:Array) -> CallExp(func, args).withPosOf(posRef), + list: (exps:Array) -> ListExp(exps).withPosOf(posRef), + str: (s:String) -> StrExp(s).withPosOf(posRef), + symbol: (name:String) -> Symbol(name).withPosOf(posRef), + raw: (code:String) -> RawHaxe(code).withPosOf(posRef), + typed: (path:String, exp:ReaderExp) -> TypedExp(path, exp).withPosOf(posRef), + meta: (m:String, exp:ReaderExp) -> MetaExp(m, exp).withPosOf(posRef), + field: (f:String, exp:ReaderExp) -> FieldExp(f, exp).withPosOf(posRef), + keyValue: (key:ReaderExp, value:ReaderExp) -> KeyValueExp(key, value).withPosOf(posRef), + }; + } } diff --git a/kiss/src/kiss/Macros.hx b/kiss/src/kiss/Macros.hx index f4821e09..b4483c2c 100644 --- a/kiss/src/kiss/Macros.hx +++ b/kiss/src/kiss/Macros.hx @@ -22,7 +22,14 @@ class Macros { function destructiveVersion(op:String, assignOp:String) { macros[assignOp] = (wholeExp:ReaderExp, exps:Array, k) -> { wholeExp.checkNumArgs(2, null, '($assignOp [var] [v1] [values...])'); - CallExp(Symbol("set").withPosOf(wholeExp), [exps[0], CallExp(Symbol(op).withPosOf(wholeExp), exps).withPosOf(wholeExp)]).withPosOf(wholeExp); + var b = wholeExp.expBuilder(); + b.call( + b.symbol("set"), [ + exps[0], + b.call( + b.symbol(op), + exps) + ]); }; }