1
我需要真的 untypecheck我的宏发出的树。这意味着不仅要移除推断的类型和所有这些,还要移除由编译器推断的隐含参数。甚至没有resetAllAttrs
似乎照顾这一点。如何在宏中删除所有推断的含义?
Symbol
s似乎有一个方法isSynthetic
,指示代码是否由编译器生成,但显然该标志仅针对自动生成的getter和setter等设置,而不针对编译器插入的隐式值。
我当然可以手动查找所有隐式参数列表并删除它们,但是我也将删除由我的宏的用户明确提供的列表。
所以最好为下面的代码
scala> def foo(a: Int)(implicit e: DummyImplicit) = a
foo: (a: Int)(implicit e: DummyImplicit)Int
scala> myMacro{ foo(4); foo(2)(DummyImplicit.dummyImplicit) }
myMacro
会发出树
{
foo(4);
foo(2)(Predef.this.DummyImplicit.dummyImplicit)
}
被再次typechecked和编译。
但我恐怕这不能做...
Thanks!这个API很可能会很快改变吗? (无论如何,一切都将改变为scala.meta) –
我不知道什么是源代码。在2.13之前我不太可能下注。 –