Come rendere Illij Idea riconoscere il codice creato da macro?
-
21-12-2019 - |
Domanda
Sfondo
Ho un progetto Scala gestito da SBT che utilizza Layout del progetto SBT usuale per progetti Scala con macro, ovvero un sottoprogetto che contiene i macro un progetto principale che è l'applicazione effettiva e che dipende dal sottoprogetto macro. Le macro sono Annotazioni macro che, in sostanza, generare oggetti compagni per classi regolari. Gli oggetti Companion generati dichiarano, tra gli altri membri, applicano / metodi non apply.
Ho usato il plugin SBT-IDEA per generare un corrispondente progetto Intellij Idea, e io uso la console SBT dal plugin SBT IDEA per compilare ed eseguire la mia applicazione Scala.
Tutto funziona più o meno bene, tranne che gli oggetti compagni generati e, soprattutto, i loro membri come applicare / disposizione non applicano, non sono riconosciuti dall'idea. Quindi, ottengo una linea ondulata ovunque io, ad es., Un metodo applicabile.
La mia configurazione è Intellij Idea CE 133.471 con i plugin SBT 1.5.1 e Scala 0.28.363 su Windows 7 x64.
Domande
Come posso ottenere Illij Idea per riconoscere il codice (classi, oggetti, metodi, ...) che è stato generato da Macro Scala (macro Annotazioni, da precisione)?
sono altri IDES, E.G., ECLIPSE, noto per funzionare meglio in una tale impostazione?
Questa domanda (che è meno dettagliata) essenzialmente chiede lo stesso, ma non ha ancora ottenuto una risposta (2014-02 -26).
Secondo uno sviluppatore Jetbrains La funzione che ho richiesto è sul loro a lungo termine Elenco, ma non verrà implementato presto (2014-03-05).
Soluzione
Con l'ultima installazione di Scala Plugin, c'è un'API che può essere utilizzata per scrivere il proprio plugin per supportare i tuoi macro: http://blog.jetbrains.com/scala/2015/10/14/inteltellij-api--build-scala-macros-support/
.Ora, tutti possono usare questa API per rendere le loro macche più amichevoli per il loro IDE preferito.Per farlo, devi implementare syntheticmembersiniettore e registrarlo nel file plugin.xml:
.<extensions defaultExtensionNs="org.intellij.scala"> <syntheticMemberInjector implementation="org.jetbrains.example.injector.Injector"/> </extensions>
Altri suggerimenti
Sembra che ci sia un supporto limitato se presente.
Quote di questo link: http://blog.jetbrains.com/scala/2014/01/23/heading-t-the-perfect-scala-code-analysysis/
Alexander Podkhalyuzin says:
.
30 gennaio 2014 alle 10:13 AM
Abbiamo iniziato il supporto per Macro Scala, ma non è un compito semplice, quindi non posso prometterlo sarà fatto presto.
Cordiali saluti, Alexander Podkhalyuzin.