Elysium - any place or state of perfect happiness; paradise.
Scala
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
core/src
core_test/src
debug/src
gen/src/main/scala/nz/daved/elysium/gen
manipulate/src
misc/src
misc_test/src
project
test/src/main/scala/nz/daved/elysium/test
test_test/src
verify/src/main/scala/nz/daved/elysium/verify/compiletime
.ensime
.gitignore
.scalafmt
.travis.yml
LICENSE
README.md
ROADMAP.md
appveyor.yml
build.sbt

README.md

codecov Codacy Badge

Linux/Mac: Build Status

Windows: Build status

Elysium

Join the chat at https://gitter.im/MetaElysium/Lobby

Important: Will be porting to scalameta/scalagen soon (tm)

Incredibly WIP/Experimental, everything is in a state of flux until scalameta/paradise hits 3.0.0. api's can change/dissapear at a moments notice

"Elysium - any place or state of perfect happiness; paradise."

Elysium has 3 goals.

  1. Make macro creation as simple as possible
  2. Teach people how to write macros
  3. Have a huge number of useful macros on hand for people to use

Some useful things

  • In core, Renamed and Decorator have examples of using arguments in macro
  • In misc, there is a simple

Modules

I have also detailed what kind of dependency is required. Mixed means can be either depending on how you use it

  • [Runtime] all - Aggregation of all projects
  • [Compile] core - The main things people will want when creating their own macros or using this library
  • [Runtime] debug - Macros for debugging (printing object state etc)
  • [Runtime] profile - Macros for profiling (accumulating statistics etc)
  • [Compile] log - Macros for generating loggers (will possibly use slf4j)
  • [Compile] gen - Macro/Inline generation tooling. This would be in core but has to be compiled seperately
  • [Mixed] manipulate - impicit classes to manipulate meta trees, The semantic api may replace some of this.
  • [Mixed] validate - things for improving the validation and error messages for macros
  • [Compile] misc - generic stuff, more for teaching purposes then anything else, there's usually a better way

Things delaying this project

Ordered by importance will tick when they are complete in scala meta.

Note: Im mainly refraining from working only the macro heavy parts of the project at the moment because once I can parse/generate inline macros I will be rewriting all existing macros.

  • Argument Macros
  • Inline Generation (Macros generating macros)
  • Macro Testing framework
  • Semantic API
  • Multiple Annotations
  • Def Macros

Navigating

Every module has an 'module_tests project'.

This is because we cannot test usages of the annotations in all cases without 3 compilation stages (including test:compile)

So to make a convention and stick with it...

  • a/src/main - Macro code etc.
  • a/src/test - Tests of macro compilation and structure output (eventually)
  • a_test/src/main - Objects that are required in the test code that need to be expanded (eg things annotated with macros)
  • a_test/src/test - General use case testing of macros.