1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-08-16 04:31:46 +02:00
Files
.github
.idea
.teamcity
assets
doc
gradle
resources
src
com
maddyhome
idea
vim
action
command
common
config
ex
extension
group
handler
helper
key
listener
option
regexp
ui
vimscript
model
commands
datatypes
expressions
operators
BinExpression.kt
DictionaryExpression.kt
EnvVariableExpression.kt
Expression.kt
FalsyExpression.kt
FuncrefCallExpression.kt
FunctionCallExpression.kt
LambdaExpression.kt
LambdaFunctionCallExpression.kt
ListExpression.kt
OneElementSublistExpression.kt
OptionExpression.kt
Register.kt
Scope.kt
SimpleExpression.kt
SublistExpression.kt
TernaryExpression.kt
UnaryExpression.kt
Variable.kt
functions
statements
Executable.kt
ExecutionResult.kt
Script.kt
parser
services
Executor.kt
DynamicLoaderStopper.kt
EventFacade.java
KeyHandler.java
PluginStartup.kt
RegisterActions.java
VimBundledDictionaryProvider.kt
VimPlugin.java
VimProjectService.kt
VimTypedActionHandler.kt
package-info.java
icons
main
test
vimscript-info
.editorconfig
.gitignore
.gitmodules
AUTHORS.md
CHANGES.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE.txt
README.md
build.gradle.kts
gradle.properties
gradlew
gradlew.bat
qodana.yaml
settings.gradle
IntelliJ-IdeaVim/src/com/maddyhome/idea/vim/vimscript/model/expressions/FunctionCallExpression.kt
2021-10-08 00:02:36 +03:00

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")
}
}