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:
parent
7491d19309
commit
9707704f57
annotation-processors/src/main/kotlin/com/intellij/vim
@ -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)
|
||||
}
|
||||
}
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user