mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-05-16 12:34:04 +02:00
34 lines
1.7 KiB
Kotlin
34 lines
1.7 KiB
Kotlin
package com.maddyhome.idea.vim.vimscript.model.expressions
|
|
|
|
import com.intellij.openapi.actionSystem.DataContext
|
|
import com.intellij.openapi.editor.Editor
|
|
import com.maddyhome.idea.vim.ex.ExException
|
|
import com.maddyhome.idea.vim.vimscript.model.Executable
|
|
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimDataType
|
|
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimFuncref
|
|
import com.maddyhome.idea.vim.vimscript.model.functions.DefinedFunctionHandler
|
|
import com.maddyhome.idea.vim.vimscript.model.statements.FunctionFlag
|
|
import com.maddyhome.idea.vim.vimscript.services.FunctionStorage
|
|
import com.maddyhome.idea.vim.vimscript.services.VariableService
|
|
|
|
data class FunctionCallExpression(val scope: Scope?, val functionName: String, val arguments: MutableList<Expression>) :
|
|
Expression() {
|
|
|
|
override fun evaluate(editor: Editor, context: DataContext, parent: Executable): VimDataType {
|
|
val handler = FunctionStorage.getFunctionHandlerOrNull(scope, functionName, parent)
|
|
if (handler != null) {
|
|
if (handler is DefinedFunctionHandler && handler.function.flags.contains(FunctionFlag.DICT)) {
|
|
throw ExException("E725: Calling dict function without Dictionary: ${(if (scope != null) scope.c + ":" else "") + functionName}")
|
|
}
|
|
return handler.executeFunction(this.arguments, editor, context, parent)
|
|
}
|
|
|
|
val funcref = VariableService.getNullableVariableValue(Variable(scope, functionName), editor, context, parent)
|
|
if (funcref is VimFuncref) {
|
|
val name = (if (scope != null) scope.c + ":" else "") + functionName
|
|
return funcref.execute(name, arguments, editor, context, parent)
|
|
}
|
|
throw ExException("E117: Unknown function: ${if (scope != null) scope.c + ":" else ""}$functionName")
|
|
}
|
|
}
|