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

# scala-macro-tools

梦境迷离'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] |
梦境迷离's avatar
梦境迷离 已提交
12 13 14 15 16 17 18 19 20 21 22 23

该库的目的
--

学习Scala宏编程(macro)和抽象语法树(ast)。

> 本项目目前处于实验阶段,有建议、意见或者问题欢迎提issue。如果本项目对你有帮助,欢迎点个star。

**[中文说明](./README_CN.md) | [English](./README.md)**

# 环境

梦境迷离's avatar
梦境迷离 已提交
24
- Java 8、11 编译通过
梦境迷离's avatar
梦境迷离 已提交
25
- Scala 2.11.12、2.12.14、2.13.8 编译通过
梦境迷离's avatar
梦境迷离 已提交
26

梦境迷离's avatar
梦境迷离 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39
# 文档

[详细文档 https://bitlap.org/zh-CN/lab/smt](https://bitlap.org/zh-CN/lab/smt)

# 如何使用

添加库依赖,下面是如何在 SBT 中使用

> 在gradle,maven中,通常`smt-tools`被替换为`smt-tools_2.12`这种。其中,`2.12`表示Scala版本号。

## csv-core

- `Converter` 基础的CSV转换器
梦境迷离's avatar
梦境迷离 已提交
40 41
- `CsvableBuilder` 支持以自定义的方式将Scala`case class`转化为一行CSV字符串
- `ScalableBuilder` 支持以自定义的方式将一行CSV字符串转化为Scala`case class`
梦境迷离's avatar
梦境迷离 已提交
42 43 44
- 零依赖,类型安全

```scala
梦境迷离's avatar
梦境迷离 已提交
45
"org.bitlap" %% "smt-csv-core" % "<VERSION>" // 从0.5.2开始 
梦境迷离's avatar
梦境迷离 已提交
46
```
47

梦境迷离's avatar
梦境迷离 已提交
48 49 50 51 52
## csv-derive

- `DeriveCsvConverter` 为Scala`case class`自动派生`Converter`实例

```scala
梦境迷离's avatar
梦境迷离 已提交
53
"org.bitlap" %% "smt-csv-derive" % "<VERSION>" // 从0.5.2开始 
梦境迷离's avatar
梦境迷离 已提交
54 55 56
```

## tools
梦境迷离's avatar
梦境迷离 已提交
57 58 59 60 61 62 63 64

- `@toString`
- `@json`
- `@builder`
- `@log`
- `@apply`
- `@constructor`
- `@equalsAndHashCode`
65
- `@jacksonEnum`
梦境迷离's avatar
梦境迷离 已提交
66
- `@elapsed`
67
- `@javaCompatible`
梦境迷离's avatar
梦境迷离 已提交
68
- `ProcessorCreator`
梦境迷离's avatar
梦境迷离 已提交
69

梦境迷离's avatar
梦境迷离 已提交
70
> Intellij插件 `Scala-Macro-Tools`。
梦境迷离's avatar
梦境迷离 已提交
71

梦境迷离's avatar
梦境迷离 已提交
72 73 74 75 76
```scala
"org.bitlap" %% "smt-tools" % "<VERSION>" //从0.4.0开始名字改成 smt-tools 
```

## cacheable-core
77 78 79 80 81 82

基于zio的类似Spring`@Cacheable``@CacheEvict`注解的缓存API定义。该模块不包含具体的存储媒介。

- `@cacheable` / `Cache.apply`
- `@cacheEvict` / `Cache.evict`

梦境迷离's avatar
梦境迷离 已提交
83
```scala
84
// 内部包含的依赖: zio, zio-streams, zio-logging
梦境迷离's avatar
FIX  
梦境迷离 已提交
85
"org.bitlap" %% "smt-cacheable-core" % "<VERSION>" // 不支持Scala2.11.x
梦境迷离's avatar
梦境迷离 已提交
86 87
```

梦境迷离's avatar
梦境迷离 已提交
88 89 90
## cacheable-redis

基于zio和zio-redis的分布式缓存实现,内部依赖`cacheable-core`
梦境迷离's avatar
梦境迷离 已提交
91

梦境迷离's avatar
梦境迷离 已提交
92
> TODO,目前不可用,无分布式锁
梦境迷离's avatar
梦境迷离 已提交
93 94

```scala
梦境迷离's avatar
梦境迷离 已提交
95
// 分布式缓存, 内部包含的依赖: zio-redis, config, zio-schema, zio-schema-json, 可选的 (zio-schema-derivation用于样例类序列化)
梦境迷离's avatar
FIX  
梦境迷离 已提交
96 97
// 依赖于`smt-cacheable-core`
"org.bitlap" %% "smt-cacheable-redis" % "<VERSION>" // 不支持Scala2.11.x
梦境迷离's avatar
梦境迷离 已提交
98 99
```

梦境迷离's avatar
梦境迷离 已提交
100 101 102
## cacheable-caffeine

基于zio和caffeine的内存缓存实现,内部依赖`cacheable-core`
梦境迷离's avatar
梦境迷离 已提交
103 104

```scala
105
// 本地缓存, 内部包含的依赖: config, caffeine
梦境迷离's avatar
梦境迷离 已提交
106
// 依赖于`smt-cacheable-core`
梦境迷离's avatar
FIX  
梦境迷离 已提交
107
"org.bitlap" %% "smt-cacheable-caffeine" % "<VERSION>" // 不支持Scala2.11.x
梦境迷离's avatar
梦境迷离 已提交
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
```

该库已发布到maven中央仓库,请使用最新版本。仅将本库导入构建系统(例如gradle、sbt)是不够的。你需要多走一步。

| Scala 2.11               | Scala 2.12               | Scala 2.13                            |
| ------------------------ | ------------------------ | ------------------------------------- |
| 导入 macro paradise 插件 | 导入 macro paradise 插件 | 开启 编译器标记 `-Ymacro-annotations` |

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

`<your-scala-version>`必须是Scala版本号的完整编号,如`2.12.13`,而不是`2.12`

如果这不起作用,可以谷歌寻找替代品。

梦境迷离's avatar
梦境迷离 已提交
124
`scala 2.13.x`版本中,macro paradise的功能直接包含在scala编译器中。然而,仍然必须启用编译器标志`-Ymacro annotations`
梦境迷离's avatar
梦境迷离 已提交
125 126 127

[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
梦境迷离 已提交
128
[Badge-Scaladex]: https://index.scala-lang.org/bitlap/scala-macro-tools/smt-tools/latest-by-scala-version.svg?platform=jvm
梦境迷离's avatar
梦境迷离 已提交
129 130
[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
梦境迷离 已提交
131
[Badge-Snapshots]: https://img.shields.io/nexus/s/org.bitlap/smt-tools_2.13?server=https%3A%2F%2Fs01.oss.sonatype.org
梦境迷离's avatar
梦境迷离 已提交
132 133 134

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