diff --git a/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt b/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt index fb07803da..d32e1a312 100644 --- a/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt +++ b/annotation-processors/src/main/kotlin/com/intellij/vim/FileWriter.kt @@ -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) } } \ No newline at end of file diff --git a/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt b/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt index 9e9505116..6dc14fb60 100644 --- a/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt +++ b/annotation-processors/src/main/kotlin/com/intellij/vim/processors/VimscriptFunctionProcessor.kt @@ -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) {