1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-05-02 10:34:04 +02:00

Minor refactoring

This commit is contained in:
filipp 2023-05-05 16:15:21 +03:00
parent 7491d19309
commit 9707704f57
2 changed files with 15 additions and 17 deletions
annotation-processors/src/main/kotlin/com/intellij/vim

View File

@ -8,13 +8,20 @@
package com.intellij.vim
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import org.yaml.snakeyaml.DumperOptions
import org.yaml.snakeyaml.Yaml
import java.io.File
class FileWriter {
fun generateResourceFile(fileName: String, content: String, environment: SymbolProcessorEnvironment) {
val resourcesDir = environment.options["generated_directory"]
val file = File("$resourcesDir/$fileName")
fun getYAML(comment: String, any: Any): String {
val options = DumperOptions()
options.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK
val yaml = Yaml(options)
return comment + yaml.dump(any)
}
fun writeFile(filePath: String, content: String) {
val file = File(filePath)
file.writeText(content)
}
}

View File

@ -31,32 +31,23 @@ class VimscriptFunctionProcessor(private val environment: SymbolProcessorEnviron
}
private val visitor = VimscriptFunctionVisitor()
private val writer = FileWriter()
private val nameToFunction = mutableMapOf<String, KSClassDeclaration>()
private val nameToClass = mutableMapOf<String, String>()
override fun process(resolver: Resolver): List<KSAnnotated> {
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
writer.generateResourceFile(environment.options["vimscript_functions_file"]!!, generateFunctionDict(), environment)
val filePath = environment.options["generated_directory"]!! + "/" + environment.options["vimscript_functions_file"]!!
writer.writeFile(filePath, writer.getYAML(comment, nameToClass))
return emptyList()
}
private fun generateFunctionDict(): String {
val options = DumperOptions()
options.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK
val yaml = Yaml(options)
val dictToWrite: Map<String, String> = nameToFunction
.map { it.key to it.value.qualifiedName!!.asString() }
.toMap()
return comment + yaml.dump(dictToWrite)
}
// todo inspection that annotation is properly used on proper classes
private inner class VimscriptFunctionVisitor : KSVisitorVoid() {
@OptIn(KspExperimental::class)
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
val vimscriptFunctionAnnotation = classDeclaration.getAnnotationsByType(VimscriptFunction::class).firstOrNull() ?: return
val functionName = vimscriptFunctionAnnotation.name
nameToFunction[functionName] = classDeclaration
nameToClass[functionName] = classDeclaration.qualifiedName!!.asString()
}
override fun visitFile(file: KSFile, data: Unit) {