/
Generation.kt
88 lines (75 loc) · 2.93 KB
/
Generation.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
* This file contains code for codegen: generating a list of WarningNames and adjusting current year for (c)opyright inspection tests.
*/
package org.cqfn.diktat.ruleset.generation
import org.cqfn.diktat.ruleset.constants.Warnings
import org.cqfn.diktat.ruleset.rules.chapter2.comments.HeaderCommentRule.Companion.afterCopyrightRegex
import org.cqfn.diktat.ruleset.rules.chapter2.comments.HeaderCommentRule.Companion.curYear
import org.cqfn.diktat.ruleset.rules.chapter2.comments.HeaderCommentRule.Companion.hyphenRegex
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import java.nio.file.Files
import java.nio.file.Paths
import kotlin.io.path.createTempFile
import kotlin.io.path.name
import kotlin.io.path.readLines
import kotlin.io.path.writeLines
/**
* The comment that will be added to the generated sources file.
*/
private val autoGenerationComment =
"""
| This document was auto generated, please don't modify it.
| This document contains all enum properties from Warnings.kt as Strings.
""".trimMargin()
fun main() {
generateWarningNames()
validateYear()
}
private fun generateWarningNames() {
val enumValNames = Warnings.values().map { it.name }
val propertyList = enumValNames.map {
PropertySpec
.builder(it, String::class)
.addModifiers(KModifier.CONST)
.initializer("\"$it\"")
.build()
}
val fileBody = TypeSpec
.objectBuilder("WarningNames")
.addProperties(propertyList)
.build()
val kotlinFile = FileSpec
.builder("generated", "WarningNames")
.addType(fileBody)
.indent(" ")
.addFileComment(autoGenerationComment)
.build()
kotlinFile.writeTo(Paths.get("diktat-rules/src/main/kotlin")) // fixme: need to add it to pom
}
private fun validateYear() {
val folder = Paths.get("diktat-rules/src/test/resources/test/paragraph2/header")
Files.list(folder)
.filter { !it.name.contains("CopyrightDifferentYearTest.kt") }
.forEach { file ->
val tempFile = createTempFile()
tempFile.writeLines(file.readLines()
.map { line ->
when {
line.contains(hyphenRegex) -> line.replace(hyphenRegex) {
val years = it.value.split("-")
"${years[0]}-$curYear"
}
line.contains(afterCopyrightRegex) -> line.replace(afterCopyrightRegex) {
val copyrightYears = it.value.split("(c)", "(C)", "©")
"${copyrightYears[0]}-$curYear"
}
else -> line
}
})
Files.delete(file)
Files.move(tempFile, file)
}
}