2025-08-19 08:06:37 -04:00

118 lines
2.8 KiB
Python

from talon import Context, Module, actions
from ..tags.operators import Operators
ctx = Context()
mod = Module()
ctx.matches = r"""
code.language: terraform
"""
types = {
"string": "string",
"number": "number",
"bool": "bool",
"list": "list",
"map": "map",
"null": "null",
}
ctx.lists["user.code_type"] = types
common_properties = {
"name": "name",
"type": "type",
"description": "description",
"default": "default",
"for each": "for_each",
"count": "count",
"prevent destroy": "prevent_destroy",
"nullable": "nullable",
"sensitive": "sensitive",
"depends on": "depends_on",
"provider": "provider",
"source": "source",
}
mod.list("terraform_common_property", desc="Terraform Modifier")
ctx.lists["self.terraform_common_property"] = common_properties
module_blocks = {
"variable": "variable",
"output": "output",
"provider": "provider",
"module": "module",
}
mod.list("terraform_module_block", desc="Simple Terraform Block")
ctx.lists["self.terraform_module_block"] = module_blocks
operators = Operators(
# code_operators_assignment
ASSIGNMENT=" = ",
# code_operators_lambda
LAMBDA=" => ",
# code_operators_math
MATH_ADD=" + ",
MATH_SUBTRACT=" - ",
MATH_MULTIPLY=" * ",
MATH_DIVIDE=" / ",
MATH_MODULO=" % ",
MATH_EQUAL=" == ",
MATH_NOT_EQUAL=" != ",
MATH_GREATER_THAN=" > ",
MATH_GREATER_THAN_OR_EQUAL=" >= ",
MATH_LESS_THAN=" < ",
MATH_LESS_THAN_OR_EQUAL=" <= ",
MATH_AND=" && ",
MATH_OR=" || ",
)
@mod.action_class
class Actions:
def code_terraform_module_block(text: str):
"""Inserts a new module-related block of a given type (e.g. variable, output, provider...)"""
def code_terraform_resource(text: str):
"""Inserts a new resource block with given name"""
def code_terraform_data_source(text: str):
"""Inserts a new data block with given name"""
@ctx.action_class("user")
class UserActions:
def code_get_operators() -> Operators:
return operators
def code_terraform_module_block(text: str):
actions.user.insert_between(text + ' "', '"')
def code_terraform_resource(text: str):
result = f"resource \"{actions.user.formatted_text(text, 'SNAKE_CASE')}\" \"\""
actions.insert(result)
actions.key("left")
def code_terraform_data_source(text: str):
result = f"data \"{actions.user.formatted_text(text, 'SNAKE_CASE')}\" \"\""
actions.insert(result)
actions.key("left")
def code_insert_true():
actions.insert("true")
def code_insert_false():
actions.insert("false")
def code_insert_null():
actions.insert("null")
def code_insert_is_null():
actions.insert(" == null")
def code_insert_is_not_null():
actions.insert(" != null")