1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-05-22 01: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 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 import java.io.File
class FileWriter { class FileWriter {
fun generateResourceFile(fileName: String, content: String, environment: SymbolProcessorEnvironment) { fun getYAML(comment: String, any: Any): String {
val resourcesDir = environment.options["generated_directory"] val options = DumperOptions()
val file = File("$resourcesDir/$fileName") 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) file.writeText(content)
} }
} }

View File

@ -31,32 +31,23 @@ class VimscriptFunctionProcessor(private val environment: SymbolProcessorEnviron
} }
private val visitor = VimscriptFunctionVisitor() private val visitor = VimscriptFunctionVisitor()
private val writer = FileWriter() private val writer = FileWriter()
private val nameToFunction = mutableMapOf<String, KSClassDeclaration>() private val nameToClass = mutableMapOf<String, String>()
override fun process(resolver: Resolver): List<KSAnnotated> { override fun process(resolver: Resolver): List<KSAnnotated> {
resolver.getAllFiles().forEach { it.accept(visitor, Unit) } 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() 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 // todo inspection that annotation is properly used on proper classes
private inner class VimscriptFunctionVisitor : KSVisitorVoid() { private inner class VimscriptFunctionVisitor : KSVisitorVoid() {
@OptIn(KspExperimental::class) @OptIn(KspExperimental::class)
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) { override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
val vimscriptFunctionAnnotation = classDeclaration.getAnnotationsByType(VimscriptFunction::class).firstOrNull() ?: return val vimscriptFunctionAnnotation = classDeclaration.getAnnotationsByType(VimscriptFunction::class).firstOrNull() ?: return
val functionName = vimscriptFunctionAnnotation.name val functionName = vimscriptFunctionAnnotation.name
nameToFunction[functionName] = classDeclaration nameToClass[functionName] = classDeclaration.qualifiedName!!.asString()
} }
override fun visitFile(file: KSFile, data: Unit) { override fun visitFile(file: KSFile, data: Unit) {