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) {