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