Skip to content

Latest commit

 

History

History
126 lines (85 loc) · 4.55 KB

README.md

File metadata and controls

126 lines (85 loc) · 4.55 KB

https://bitlap.org

scala-macro-tools

Project Stage CI Codecov
Stage CI codecov
Scaladex Jetbrains Plugin Nexus Snapshots
scala-macro-tools Scala version support Version Sonatype Nexus (Snapshots)

Motivation

Learn Scala macro and abstract syntax tree.

The project is currently experimental

中文说明 | English

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

https://bitlap.org/lab/smt

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.