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

I
IceMimosa 已提交
3 4
# scala-macro-tools 

梦境迷离's avatar
梦境迷离 已提交
5
[![Build](https://github.com/jxnu-liguobin/scala-macro-tools/actions/workflows/ScalaCI.yml/badge.svg)](https://github.com/jxnu-liguobin/scala-macro-tools/actions/workflows/ScalaCI.yml) [![Maven Central](https://img.shields.io/maven-central/v/io.github.jxnu-liguobin/scala-macro-tools_2.13.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22io.github.jxnu-liguobin%22%20AND%20a:%22scala-macro-tools_2.13%22)
I
IceMimosa 已提交
6 7
[![Version](https://img.shields.io/jetbrains/plugin/v/17202-scala-macro-tools)](https://plugins.jetbrains.com/plugin/17202-scala-macro-tools)

8
该库的目的
梦境迷离's avatar
梦境迷离 已提交
9
--
梦境迷离's avatar
梦境迷离 已提交
10

11
学习Scala宏编程(macro)和抽象语法树(ast)。
梦境迷离's avatar
梦境迷离 已提交
12

梦境迷离's avatar
梦境迷离 已提交
13
> 本项目目前处于实验阶段,有建议、意见或者问题欢迎提issue。如果本项目对你有帮助,欢迎点个star。
梦境迷离's avatar
梦境迷离 已提交
14

15
**[中文说明](./README.md) | [English](./README_EN.md)**
16

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
# 我能学到什么

- Scala2 宏编程
  - 了解Scala反射
  - 熟悉插值语法的应用,了解Scala Spec
  - 了解Scala AST相关的基本使用 
  - 知道如何编写宏注解(宏拓展)
  - 知道如何使用宏生成对象,类,方法,字段  
- 其他    
  - 知道劝退人的SBT如何优雅配置,诸如发布到云仓库,多版本构建,多模块项目
  - 了解如何利用Intellij-Scala插件编写自己的Scala插件
  - 了解Intellij是怎样支持语法提示的,插件工作流程
  - 知道如何写好scalatest单元测试
  - 类似的其他思考
    
# 环境

- 使用 Java 8, 11 编译通过
- 使用 Scala 2.11.x ~ 2.13.x 编译通过
36 37 38 39 40 41 42 43 44

# 功能

- `@toString`
- `@json`
- `@builder`
- `@synchronized`
- `@log`
- `@apply`
梦境迷离's avatar
梦境迷离 已提交
45 46
- `@constructor`

梦境迷离's avatar
梦境迷离 已提交
47 48
> 涉及到交互操作的注解在IDEA插件中都得到了支持。在插件市场中搜索`Scala-Macro-Tools`可下载。

49
[各个注解的说明](./docs/howToUse.md)
50 51 52 53

# 如何使用

添加库依赖,在sbt中
梦境迷离's avatar
梦境迷离 已提交
54

55
> 在gradle,maven中,通常`scala-macro-tools`被替换为`scala-macro-tools_2.12`这种。其中,`2.12`表示Scala版本号。
梦境迷离's avatar
梦境迷离 已提交
56

梦境迷离's avatar
梦境迷离 已提交
57 58 59 60
```scala
"io.github.jxnu-liguobin" %% "scala-macro-tools" % "<VERSION>"
```

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

63 64 65
| Scala 2.11               | Scala 2.12               | Scala 2.13                            |
| ------------------------ | ------------------------ | ------------------------------------- |
| 导入 macro paradise 插件 | 导入 macro paradise 插件 | 开启 编译器标记 `-Ymacro-annotations` |
梦境迷离's avatar
梦境迷离 已提交
66 67 68 69 70

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

71
`<your-scala-version>`必须是Scala版本号的完整编号,如`2.12.13`,而不是`2.12`
梦境迷离's avatar
梦境迷离 已提交
72

73
如果这不起作用,可以谷歌寻找替代品。
梦境迷离's avatar
梦境迷离 已提交
74

75
`scala 2.13.x`版本中,macro paradise的功能直接包含在scala编译器中。然而,仍然必须启用编译器标志`-Ymacro annotations`