118 lines
2.8 KiB
Python
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")
|