mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-08-16 04:31:46 +02:00
.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
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")
|
|
}
|
|
}
|