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

133 lines
3.1 KiB
Python

from talon import Context, Module, actions, settings
from ..tags.operators import Operators
ctx = Context()
mod = Module()
ctx.matches = r"""
code.language: go
"""
# Primitive Types
ctx.lists["self.code_type"] = {
"boolean": "bool",
"int": "int",
"float": "float",
"byte": "byte",
"double": "double",
"short": "short",
"long": "long",
"char": "char",
"string": "string",
"rune": "rune",
"void": "void",
"channel": "channel",
}
ctx.lists["user.code_keyword"] = {
"break": "break",
"continue": "continue",
"struct": "struct",
"type": "type",
"return": "return",
"package": "package",
"import": "import",
"null": "nil",
"nil": "nil",
"true": "true",
"false": "false",
"defer": "defer",
"go": "go",
"if": "if",
"else": "else",
"switch": "switch",
"select": "select",
"const": "const",
}
operators = Operators(
# code_operators_array
SUBSCRIPT=lambda: actions.user.insert_between("[", "]"),
# code_operators_assignment
ASSIGNMENT=" = ",
ASSIGNMENT_ADDITION=" += ",
ASSIGNMENT_SUBTRACTION=" -= ",
ASSIGNMENT_MULTIPLICATION=" *= ",
ASSIGNMENT_DIVISION=" /= ",
ASSIGNMENT_MODULO=" %= ",
ASSIGNMENT_INCREMENT="++",
ASSIGNMENT_BITWISE_AND=" &= ",
ASSIGNMENT_BITWISE_OR=" |= ",
ASSIGNMENT_BITWISE_EXCLUSIVE_OR=" ^= ",
ASSIGNMENT_BITWISE_LEFT_SHIFT=" <<= ",
ASSIGNMENT_BITWISE_RIGHT_SHIFT=" >>= ",
# code_operators_bitwise
BITWISE_AND=" & ",
BITWISE_OR=" | ",
BITWISE_EXCLUSIVE_OR=" ^ ",
BITWISE_LEFT_SHIFT=" << ",
BITWISE_RIGHT_SHIFT=" >> ",
# code_operators_lambda
LAMBDA=" -> ",
# code_operators_math
MATH_ADD=" + ",
MATH_SUBTRACT=" - ",
MATH_MULTIPLY=" * ",
MATH_DIVIDE=" / ",
MATH_MODULO=" % ",
MATH_EQUAL=" == ",
MATH_NOT_EQUAL=" != ",
MATH_OR=" || ",
MATH_AND=" && ",
MATH_EXPONENT=" ^ ",
MATH_GREATER_THAN=" > ",
MATH_LESS_THAN=" < ",
MATH_GREATER_THAN_OR_EQUAL=" >= ",
MATH_LESS_THAN_OR_EQUAL=" <= ",
# code_operators_pointer
POINTER_ADDRESS_OF="&",
POINTER_INDIRECTION="*",
)
@ctx.action_class("user")
class UserActions:
def code_get_operators() -> Operators:
return operators
def code_self():
actions.insert("this")
def code_operator_object_accessor():
actions.insert(".")
def code_insert_null():
actions.insert("nil")
def code_insert_is_null():
actions.insert(" == nil")
def code_insert_is_not_null():
actions.insert(" != nil")
def code_insert_true():
actions.insert("true")
def code_insert_false():
actions.insert("false")
def code_insert_function(text: str, selection: str):
text += f"({selection or ''})"
actions.user.paste(text)
actions.edit.left()
def code_private_function(text: str):
"""Inserts private function declaration"""
result = "func {}".format(
actions.user.formatted_text(
text, settings.get("user.code_private_function_formatter")
)
)
actions.user.code_insert_function(result, None)