問題タブ [scala-macro-paradise]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2116 参照

scala - SBT プラグイン: 下流に伝播されない依存関係としてコンパイラ プラグインを追加する方法は?

私はSBTプラグインを書いています。Circe JSON ライブラリを使用したいのですが、Scala 2.10 の Macro Paradise コンパイラ プラグインが必要です。

通常、コンパイラ プラグインを にbuild.sbt、SBT プラグインを に追加しproject/plugins.sbtます。

SBT プラグインをビルドすると、他のプラグインが依存関係になるため、それらを配置するbuild.sbtと、SBT プラグインを使用するプロジェクトに伝播されます。

build.sbtSBT プラグインに次のスニペットを挿入すると、次のようになります。

Paradise コンパイラ プラグインはダウンストリーム プロジェクトに伝播しますか?

0 投票する
1 に答える
221 参照

scala - Scala マクロ: 生成されたクラスが実装されていないメンバーでコンパイルに失敗する

私の問題は、生成されたクラスのメンバーが実装されていると認識されないことです。これは Scala 2.10/2.11/2.12 用に構築されており、2.11 がデフォルトです。マクロパラダイス2.10を使用。

これの目的は、いくつかの特性をフリーズ可能としてマークし、データにアクセスするときにメソッドが呼び出されるscala.util.Tryフリーズ可能な各メソッドを受け取るそれぞれの実装クラスを生成することでした。getフリーズできないメソッドはすべて で埋められthrow new IllegalStateExceptionます。そして、特性によって定義されたメソッドを使用して、必要なデータが入力されたクラスのインスタンスを作成するカスタムfreezeメソッドが作成されます。Frozen

特性に配置する注釈マクロを設定し、以下のように呼び出される内部クラスを持つコンパニオン オブジェクトを生成します。Frozen

trait でマクロを実行しようとすると、次のエラーが発生しますJavaInfo

特性自体は次のとおりです。

Frozen構築中のツリーに実装が表示されているにもかかわらず、クラスによって何も実装されていないというエラーが発生します。

問題のコードはこちら: https://github.com/chipsenkbeil/scala-debugger/blob/AddFreezableMacroSupport/scala-debugger-macros/src/main/scala/org/scaladebugger/macros/freeze/FreezableMacro.scala

そのブランチをチェックアウトして を実行すると、失敗をテストできsbt scalaDebuggerApi/compileます。これにより、Scala 2.11 用のマクロ プロジェクトがコンパイルされ、続いて API 自体がコンパイルされます。

0 投票する
0 に答える
85 参照

scala - 吸血鬼のメソッド、型プロバイダー マクロ、欠落している runtime.VolatileObjectRef

このgist で説明されている吸血鬼のメソッドのトリックを使用する型プロバイダー マクロを作成しようとしています。これは私の実装の最小モデルです:

これはばかげた例です。実際の実装では、このトリックを使用して、リフレクション呼び出しなしでアクセスできる派生型クラス インスタンスのバンドルを作成しようとします。class実際のバージョンとこれの両方の問題は、関数で使用すると正常に動作しますが、またはobject定義のルートで使用しようとするとコンパイラがクラッシュすることです。

これを修正するための助けは大歓迎です、ありがとう。