scala-macro-tools
Project Stage | CI | Codecov |
---|---|---|
Scaladex | Jetbrains Plugin | Nexus Snapshots |
---|---|---|
Motivation
Learn Scala macro and abstract syntax tree.
The project is currently experimental
Environment
- Compile passed in Java 8、11
- Compile passed in Scala 2.11.12、2.12.14、2.13.6
Module Features
tools
@toString
@json
@builder
@log
@apply
@constructor
@equalsAndHashCode
@jacksonEnum
@elapsed
@javaCompatible
ProcessorCreator
The intellij plugin named
Scala-Macro-Tools
in marketplace.
cacheable-core
A cache like Spring @Cacheable
and @cacheEvict
based on zio. It has no implementation of storage media.
-
@cacheable
/Cache.apply
-
@cacheEvict
/Cache.evict
cacheable-caffeine
A memory cache based on zio and caffeine. It needs cacheable-core
module.
cacheable-redis
A distributed cache based on zio and zio-redis. It needs cacheable-core
module.
Document
How to use
Add library dependency
Use smt-tools
"org.bitlap" %% "smt-tools" % "<VERSION>" // named smt-tools since 0.4.0
Only Usesmt-cacheable-core
// cache API, include dependencies: zio, zio-streams, zio-logging
"org.bitlap" %% "smt-cacheable-core" % "<VERSION>"
Use smt-cacheable-redis
TODO Not unavailable, no distributed lock
// distributed cache, include dependencies: zio-redis, config, zio-schema, zio-schema-json, optional (zio-schema-derivation for case class)
// dependsOn `smt-cacheable-core`(not support Scala2.11.x)
"org.bitlap" %% "smt-cacheable-redis" % "<VERSION>"
Use smt-cacheable-caffeine
// local cache, include dependencies: config, caffeine
// dependsOn `smt-cacheable-core`
"org.bitlap" %% "smt-cacheable-caffeine" % "<VERSION>"
The artefacts have been uploaded to Maven Central. Importing the library into your build system (e.g gradle, sbt), is not enough. You need to follow an extra step.
Scala 2.11 | Scala 2.12 | Scala 2.13 |
---|---|---|
Import macro paradise plugin | Import macro paradise plugin | Enable compiler flag -Ymacro-annotations required |
addCompilerPlugin("org.scalamacros" % "paradise_<your-scala-version>" % "<plugin-version>")
Where <your-scala-version>
must be the full scala version. For example 2.12.13, and not 2.12.
If that doesn't work, google for alternatives.
In version scala2.13.x
, the functionality of macro paradise has been included in the scala compiler directly. However,
you must still enable the compiler flag -Ymacro-annotations
.