Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5f959f788e | ||
![]() |
4f84570bb7 | ||
![]() |
e398d0e694 | ||
![]() |
13d11f4f66 | ||
![]() |
d6142847eb | ||
![]() |
e6a0304016 | ||
![]() |
69368937a4 | ||
![]() |
df2389d2c8 | ||
![]() |
aad80afec2 | ||
![]() |
b68c6ac4a1 | ||
![]() |
682aeacce8 | ||
![]() |
9bcec770eb | ||
![]() |
2310b6d8e4 | ||
![]() |
7f13916154 |
2
.haxerc
2
.haxerc
@@ -1 +1 @@
|
||||
{"version":"3.4.4","resolveLibs":"scoped"}
|
||||
{"version":"3.4.7","resolveLibs":"scoped"}
|
53
.travis.yml
53
.travis.yml
@@ -1,28 +1,41 @@
|
||||
sudo: required
|
||||
dist: trusty
|
||||
|
||||
language: haxe
|
||||
haxe:
|
||||
- 3.2.1
|
||||
- development
|
||||
stages:
|
||||
- test
|
||||
- deploy
|
||||
|
||||
matrix:
|
||||
allow_failures:
|
||||
- haxe: development
|
||||
language: node_js
|
||||
node_js: 8
|
||||
|
||||
install:
|
||||
- haxelib install travix
|
||||
- haxelib run travix install
|
||||
- haxelib install hx3compat
|
||||
|
||||
script:
|
||||
- haxelib run travix node -lib hx3compat
|
||||
os:
|
||||
- linux
|
||||
# - osx
|
||||
|
||||
env:
|
||||
secure: T4SCtY5qmEsK1ARWPevJmqLm23tv4CobLrbPOQV3FsoQno7FCP1S/+9GmuoJKzeTjWMzdTeDsp8TVwZ6AyGjvhl2nZNjhU+QTsir4tfbYYRyvsz/QK6pveFbPQVv7OsnnaB4wbZtqGZ8mzFeQf7Ol4tsNe7iUFJb/iVc+4/lUxo=
|
||||
- HAXE_VERSION=3.4.7
|
||||
- HAXE_VERSION=latest
|
||||
|
||||
install:
|
||||
- npm i -g lix
|
||||
- lix install haxe $HAXE_VERSION
|
||||
- lix download
|
||||
|
||||
deploy:
|
||||
provider: script
|
||||
script: haxe && haxelib run travix release
|
||||
on:
|
||||
tags: true
|
||||
script:
|
||||
- lix run travix node -lib hx3compat
|
||||
|
||||
jobs:
|
||||
include:
|
||||
# - stage: test # should uncomment this when there is no matrix above (e.g. only one os, one env, etc)
|
||||
- stage: deploy
|
||||
language: haxe
|
||||
haxe: "3.4.7"
|
||||
os: linux
|
||||
install: skip
|
||||
script: skip
|
||||
env:
|
||||
secure: T4SCtY5qmEsK1ARWPevJmqLm23tv4CobLrbPOQV3FsoQno7FCP1S/+9GmuoJKzeTjWMzdTeDsp8TVwZ6AyGjvhl2nZNjhU+QTsir4tfbYYRyvsz/QK6pveFbPQVv7OsnnaB4wbZtqGZ8mzFeQf7Ol4tsNe7iUFJb/iVc+4/lUxo=
|
||||
after_success:
|
||||
- haxelib install travix
|
||||
- haxelib run travix install
|
||||
- haxelib run travix release
|
||||
|
3
haxe_libraries/hx3compat.hxml
Normal file
3
haxe_libraries/hx3compat.hxml
Normal file
@@ -0,0 +1,3 @@
|
||||
-D hx3compat=1.0.0
|
||||
# @install: lix --silent download "haxelib:/hx3compat#1.0.0" into hx3compat/1.0.0/haxelib
|
||||
-cp ${HAXE_LIBCACHE}/hx3compat/1.0.0/haxelib/std
|
8
haxe_libraries/tink_cli.hxml
Normal file
8
haxe_libraries/tink_cli.hxml
Normal file
@@ -0,0 +1,8 @@
|
||||
-D tink_cli=0.3.1
|
||||
# @install: lix --silent download "haxelib:/tink_cli#0.3.1" into tink_cli/0.3.1/haxelib
|
||||
-lib tink_io
|
||||
-lib tink_stringly
|
||||
-lib tink_macro
|
||||
-cp ${HAXE_LIBCACHE}/tink_cli/0.3.1/haxelib/src
|
||||
# Make sure docs are generated
|
||||
-D use-rtti-doc
|
5
haxe_libraries/tink_io.hxml
Normal file
5
haxe_libraries/tink_io.hxml
Normal file
@@ -0,0 +1,5 @@
|
||||
-D tink_io=0.5.0
|
||||
# @install: lix --silent download "haxelib:/tink_io#0.5.0" into tink_io/0.5.0/haxelib
|
||||
-lib tink_streams
|
||||
-lib tink_core
|
||||
-cp ${HAXE_LIBCACHE}/tink_io/0.5.0/haxelib/src
|
4
haxe_libraries/tink_streams.hxml
Normal file
4
haxe_libraries/tink_streams.hxml
Normal file
@@ -0,0 +1,4 @@
|
||||
-D tink_streams=0.2.1
|
||||
# @install: lix --silent download "haxelib:/tink_streams#0.2.1" into tink_streams/0.2.1/haxelib
|
||||
-lib tink_core
|
||||
-cp ${HAXE_LIBCACHE}/tink_streams/0.2.1/haxelib/src
|
4
haxe_libraries/tink_stringly.hxml
Normal file
4
haxe_libraries/tink_stringly.hxml
Normal file
@@ -0,0 +1,4 @@
|
||||
-D tink_stringly=0.2.0
|
||||
# @install: lix --silent download "haxelib:/tink_stringly#0.2.0" into tink_stringly/0.2.0/haxelib
|
||||
-lib tink_core
|
||||
-cp ${HAXE_LIBCACHE}/tink_stringly/0.2.0/haxelib/src
|
@@ -1,4 +1,6 @@
|
||||
# @run: haxelib run-dir travix ${HAXESHIM_LIBCACHE}/travix/0.10.3/haxelib
|
||||
# @install: lix --silent download "haxelib:travix#0.10.3" into travix/0.10.3/haxelib
|
||||
-D travix=0.10.3
|
||||
-cp ${HAXESHIM_LIBCACHE}/travix/0.10.3/haxelib/src
|
||||
-D travix=0.12.2
|
||||
# @install: lix --silent download "gh://github.com/back2dos/travix#f46e67b6330d2e85b487a9fd512b10e4e0f1058f" into travix/0.12.2/github/f46e67b6330d2e85b487a9fd512b10e4e0f1058f
|
||||
# @post-install: cd ${HAXE_LIBCACHE}/travix/0.12.2/github/f46e67b6330d2e85b487a9fd512b10e4e0f1058f && haxe -cp src --run travix.PostDownload
|
||||
# @run: haxelib run-dir travix ${HAXE_LIBCACHE}/travix/0.12.2/github/f46e67b6330d2e85b487a9fd512b10e4e0f1058f
|
||||
-lib tink_cli
|
||||
-cp ${HAXE_LIBCACHE}/travix/0.12.2/github/f46e67b6330d2e85b487a9fd512b10e4e0f1058f/src
|
||||
|
24
haxelib.json
24
haxelib.json
@@ -1,20 +1,20 @@
|
||||
{
|
||||
"name": "tink_macro",
|
||||
"license": "MIT",
|
||||
"description": "The macro toolkit ;)",
|
||||
"classPath": "src",
|
||||
"dependencies": {
|
||||
"tink_core": ""
|
||||
},
|
||||
"url": "http://haxetink.org/tink_macro",
|
||||
"contributors": [
|
||||
"back2dos"
|
||||
],
|
||||
"version": "0.17.1",
|
||||
"releasenote": "Improve type parameter treatment. Add helper for getting field suggestions. Make type comparator available.",
|
||||
"tags": [
|
||||
"tink",
|
||||
"macro",
|
||||
"utility"
|
||||
],
|
||||
"classPath": "src",
|
||||
"description": "The macro toolkit ;)",
|
||||
"contributors": [
|
||||
"back2dos"
|
||||
],
|
||||
"releasenote": "Add haxe3 polyfill for ObjectField.",
|
||||
"version": "0.16.6",
|
||||
"url": "http://haxetink.org/tink_macro",
|
||||
"dependencies": {
|
||||
"tink_core": ""
|
||||
}
|
||||
"license": "MIT"
|
||||
}
|
@@ -39,7 +39,7 @@ class MacroApi {
|
||||
}
|
||||
|
||||
|
||||
#if (haxe >= 4)
|
||||
#if (haxe_ver >= 4)
|
||||
typedef ObjectField = haxe.macro.Expr.ObjectField;
|
||||
typedef QuoteStatus = haxe.macro.Expr.QuoteStatus;
|
||||
#else
|
||||
|
@@ -70,7 +70,16 @@ class Sisyphus {
|
||||
case TInst(_.get() => classType, params):
|
||||
switch (classType.kind) {
|
||||
case KTypeParameter(_):
|
||||
direct();//TODO: check if the parameter is in scope, in which case the name can simply be used
|
||||
var ct = Types.asComplexType(classType.name);
|
||||
switch Types.toType(ct) {
|
||||
case Success(TInst(_.get() => cl, _)) if (
|
||||
cl.kind.match(KTypeParameter(_))
|
||||
&& cl.module == classType.module
|
||||
&& cl.pack.join('.') == classType.pack.join('.')
|
||||
): ct;
|
||||
default:
|
||||
direct();
|
||||
}
|
||||
default:
|
||||
TPath(toTypePath(classType, params));
|
||||
}
|
||||
|
@@ -5,7 +5,6 @@ import haxe.ds.BalancedTree;
|
||||
import haxe.macro.Context;
|
||||
import haxe.macro.Type;
|
||||
|
||||
using haxe.macro.Tools;
|
||||
using tink.MacroApi;
|
||||
|
||||
class TypeMap<V> extends BalancedTree<Type, V> implements IMap<Type, V> {
|
||||
@@ -16,18 +15,7 @@ class TypeMap<V> extends BalancedTree<Type, V> implements IMap<Type, V> {
|
||||
super();
|
||||
}
|
||||
|
||||
override function compare(k1:Type, k2:Type):Int {
|
||||
|
||||
if (follow) {
|
||||
k1 = k1.reduce();
|
||||
k2 = k2.reduce();
|
||||
}
|
||||
|
||||
return switch k1.getIndex() - k2.getIndex() {
|
||||
case 0:
|
||||
Reflect.compare(k1.toString(), k2.toString());//much to my surprise, this actually seems to work (at least with 3.4)
|
||||
case v: v;
|
||||
}
|
||||
}
|
||||
override function compare(k1:Type, k2:Type):Int
|
||||
return k1.compare(k2, follow);
|
||||
|
||||
}
|
@@ -1,15 +1,13 @@
|
||||
package tink.macro;
|
||||
|
||||
import haxe.macro.Printer;
|
||||
import Type in Enums;
|
||||
|
||||
import haxe.macro.Context;
|
||||
import haxe.macro.Expr;
|
||||
import haxe.macro.Type;
|
||||
|
||||
using tink.macro.Exprs;
|
||||
using tink.macro.Positions;
|
||||
using tink.macro.Functions;
|
||||
using haxe.macro.Tools;
|
||||
using tink.MacroApi;
|
||||
using tink.CoreApi;
|
||||
|
||||
class Types {
|
||||
@@ -183,6 +181,33 @@ class Types {
|
||||
return ret;
|
||||
}
|
||||
|
||||
static public function intersect(types:Array<ComplexType>, ?pos:Position):Outcome<ComplexType, Error> {
|
||||
|
||||
if (types.length == 1) return Success(types[1]);
|
||||
|
||||
var paths = [],
|
||||
fields = [];
|
||||
|
||||
for (t in types)
|
||||
switch t {
|
||||
case TPath(p): paths.push(p);
|
||||
case TAnonymous(f):
|
||||
|
||||
for (f in f) fields.push(f);
|
||||
|
||||
case TExtend(p, f):
|
||||
|
||||
for (f in f) fields.push(f);
|
||||
for (p in p) paths.push(p);
|
||||
|
||||
default:
|
||||
|
||||
return Failure(new Error(t.toString() + ' cannot be interesected', pos));
|
||||
}
|
||||
|
||||
return Success(TExtend(paths, fields));
|
||||
}
|
||||
|
||||
static public function lazyComplex(f:Void->Type)
|
||||
return
|
||||
TPath({
|
||||
@@ -201,4 +226,25 @@ class Types {
|
||||
throw 'assert';
|
||||
}
|
||||
|
||||
static public function compare(t1:Type, t2:Type, ?follow:Bool = true) {
|
||||
if (follow) {
|
||||
t1 = t1.reduce();
|
||||
t2 = t2.reduce();
|
||||
}
|
||||
|
||||
return switch t1.getIndex() - t2.getIndex() {
|
||||
case 0:
|
||||
Reflect.compare(t1.toString(), t2.toString());//much to my surprise, this actually seems to work (at least with 3.4)
|
||||
case v: v;
|
||||
}
|
||||
}
|
||||
|
||||
static var SUGGESTIONS = ~/ \(Suggestions?: .*\)$/;
|
||||
|
||||
static public function getFieldSuggestions(type:ComplexType, name:String):String
|
||||
return switch (macro (null : $type).$name).typeof() {
|
||||
case Failure(SUGGESTIONS.match(_.message) => true): SUGGESTIONS.matched(0);
|
||||
default: '';
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user