README.md 4.9 KB
Newer Older
1
<img align="right" width="20%" height="30%" src="img.png" alt="https://bitlap.org"/>
梦境迷离's avatar
梦境迷离 已提交
2

梦境迷离's avatar
梦境迷离 已提交
3
# scala-macro-tools
I
IceMimosa 已提交
4

梦境迷离's avatar
梦境迷离 已提交
5
| Project Stage | CI              | Codecov                                   |
梦境迷离's avatar
梦境迷离 已提交
6 7
| ------------- | --------------- | ----------------------------------------- |
| ![Stage]      | ![CI][Badge-CI] | [![codecov][Badge-Codecov]][Link-Codecov] |
8

梦境迷离's avatar
梦境迷离 已提交
9 10 11
| Scaladex                                                                    | Jetbrains Plugin                              | Nexus Snapshots                                                  |
| --------------------------------------------------------------------------- | --------------------------------------------- | ---------------------------------------------------------------- |
| [![scala-macro-tools Scala version support][Badge-Scaladex]][Link-Scaladex] | [![Version][Badge-Jetbrains]][Link-Jetbrains] | [![Sonatype Nexus (Snapshots)][Badge-Snapshots]][Link-Snapshots] |
I
IceMimosa 已提交
12

梦境迷离's avatar
梦境迷离 已提交
13
Motivation
梦境迷离's avatar
梦境迷离 已提交
14
--
梦境迷离's avatar
梦境迷离 已提交
15

梦境迷离's avatar
梦境迷离 已提交
16
Learn Scala macro and abstract syntax tree.
梦境迷离's avatar
梦境迷离 已提交
17

梦境迷离's avatar
梦境迷离 已提交
18
> The project is currently experimental
梦境迷离's avatar
梦境迷离 已提交
19

梦境迷离's avatar
梦境迷离 已提交
20
[中文说明](./README_CN.md) | [English](./README.md)
21

梦境迷离's avatar
梦境迷离 已提交
22
# Environment
23

梦境迷离's avatar
梦境迷离 已提交
24
- Compile passed in Java 8、11
梦境迷离's avatar
梦境迷离 已提交
25
- Compile passed in Scala 2.11.12、2.12.14、2.13.8
26

梦境迷离's avatar
梦境迷离 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
# Document

[https://bitlap.org/en-US/lab/smt](https://bitlap.org/en-US/lab/smt)

# How to use

## csv-core

- `Converter` A basic CSV converter
- `CsvableBuilder` Support for converting Scala `case class` to CSV in a custom way.
- `ScalableBuilder` Support for converting CSV to Scala `case class` in a custom way.
- Zero dependency, type-safe

```scala
"org.bitlap" %% "smt-csv-core" % "<VERSION>" // since 0.4.4 
```

## csv-derive
45

梦境迷离's avatar
梦境迷离 已提交
46 47 48 49 50 51 52
- `DeriveCsvConverter` 为Scala`case class`自动派生`Converter`实例

```scala
"org.bitlap" %% "smt-csv-derive" % "<VERSION>" // since 0.4.4 
```

## tools
53 54 55 56 57 58

- `@toString`
- `@json`
- `@builder`
- `@log`
- `@apply`
梦境迷离's avatar
梦境迷离 已提交
59
- `@constructor`
梦境迷离's avatar
梦境迷离 已提交
60
- `@equalsAndHashCode`
61
- `@jacksonEnum`
梦境迷离's avatar
梦境迷离 已提交
62
- `@elapsed`
63
- `@javaCompatible`
梦境迷离's avatar
梦境迷离 已提交
64
- `ProcessorCreator`
梦境迷离's avatar
梦境迷离 已提交
65

梦境迷离's avatar
梦境迷离 已提交
66
> The intellij plugin named `Scala-Macro-Tools` in marketplace.
67

梦境迷离's avatar
梦境迷离 已提交
68
```scala
69
"org.bitlap" %% "smt-tools" % "<VERSION>" // named smt-tools since 0.4.0 
梦境迷离's avatar
梦境迷离 已提交
70
```
71

梦境迷离's avatar
梦境迷离 已提交
72 73 74 75 76 77
## 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`
梦境迷离's avatar
梦境迷离 已提交
78 79 80

```scala
// cache API, include dependencies: zio, zio-streams, zio-logging
梦境迷离's avatar
FIX  
梦境迷离 已提交
81
"org.bitlap" %% "smt-cacheable-core" % "<VERSION>" // not support Scala2.11.x
梦境迷离's avatar
梦境迷离 已提交
82 83
```

梦境迷离's avatar
梦境迷离 已提交
84 85 86
## cacheable-redis

A distributed cache based on zio and zio-redis. It needs `cacheable-core` module.
梦境迷离's avatar
梦境迷离 已提交
87

梦境迷离's avatar
梦境迷离 已提交
88
> TODO Not unavailable, no distributed lock
梦境迷离's avatar
梦境迷离 已提交
89 90

```scala
梦境迷离's avatar
梦境迷离 已提交
91
// distributed cache, include dependencies: zio-redis, config, zio-schema, zio-schema-json, optional (zio-schema-derivation for case class)
梦境迷离's avatar
FIX  
梦境迷离 已提交
92 93
// dependsOn `smt-cacheable-core`
"org.bitlap" %% "smt-cacheable-redis" % "<VERSION>" // not support Scala2.11.x
梦境迷离's avatar
梦境迷离 已提交
94 95
```

梦境迷离's avatar
梦境迷离 已提交
96 97 98
## cacheable-caffeine

A memory cache based on zio and caffeine. It needs `cacheable-core` module.
梦境迷离's avatar
梦境迷离 已提交
99 100 101 102

```scala
// local cache, include dependencies: config, caffeine
// dependsOn `smt-cacheable-core`
梦境迷离's avatar
FIX  
梦境迷离 已提交
103
"org.bitlap" %% "smt-cacheable-caffeine" % "<VERSION>" // not support Scala2.11.x
梦境迷离's avatar
梦境迷离 已提交
104 105
```

梦境迷离's avatar
梦境迷离 已提交
106
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.
梦境迷离's avatar
梦境迷离 已提交
107

梦境迷离's avatar
梦境迷离 已提交
108 109 110
| Scala 2.11                   | Scala 2.12                   | Scala 2.13                                          |
| ---------------------------- | ---------------------------- | --------------------------------------------------- |
| Import macro paradise plugin | Import macro paradise plugin | Enable compiler flag `-Ymacro-annotations` required |
梦境迷离's avatar
梦境迷离 已提交
111 112 113 114 115

```scala
addCompilerPlugin("org.scalamacros" % "paradise_<your-scala-version>" % "<plugin-version>")
```

梦境迷离's avatar
梦境迷离 已提交
116
Where `<your-scala-version>` must be the full scala version. For example 2.12.13, and not 2.12.
梦境迷离's avatar
梦境迷离 已提交
117

梦境迷离's avatar
梦境迷离 已提交
118
If that doesn't work, google for alternatives.
梦境迷离's avatar
梦境迷离 已提交
119

梦境迷离's avatar
梦境迷离 已提交
120
In version scala`2.13.x`, the functionality of macro paradise has been included in the scala compiler directly. However,
梦境迷离's avatar
梦境迷离 已提交
121
you must still enable the compiler flag `-Ymacro-annotations`.
梦境迷离's avatar
梦境迷离 已提交
122 123 124

[Stage]: https://img.shields.io/badge/Project%20Stage-Experimental-yellow.svg
[Badge-CI]: https://github.com/bitlap/scala-macro-tools/actions/workflows/ScalaCI.yml/badge.svg
梦境迷离's avatar
梦境迷离 已提交
125
[Badge-Scaladex]: https://index.scala-lang.org/bitlap/scala-macro-tools/smt-tools/latest-by-scala-version.svg?platform=jvm
梦境迷离's avatar
梦境迷离 已提交
126 127
[Badge-Jetbrains]: https://img.shields.io/jetbrains/plugin/v/17202-scala-macro-tools
[Badge-Codecov]: https://codecov.io/gh/bitlap/scala-macro-tools/branch/master/graph/badge.svg?token=IA596YRTOT
梦境迷离's avatar
梦境迷离 已提交
128
[Badge-Snapshots]: https://img.shields.io/nexus/s/org.bitlap/smt-tools_2.13?server=https%3A%2F%2Fs01.oss.sonatype.org
梦境迷离's avatar
梦境迷离 已提交
129 130 131

[Link-Jetbrains]: https://plugins.jetbrains.com/plugin/17202-scala-macro-tools
[Link-Codecov]: https://codecov.io/gh/bitlap/scala-macro-tools
梦境迷离's avatar
梦境迷离 已提交
132
[Link-Scaladex]: https://index.scala-lang.org/bitlap/scala-macro-tools/smt-tools
梦境迷离's avatar
梦境迷离 已提交
133
[Link-Snapshots]: https://s01.oss.sonatype.org/content/repositories/snapshots/org/bitlap/