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)