-
Notifications
You must be signed in to change notification settings - Fork 796
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lang/go: redo from scratch #1313
base: main
Are you sure you want to change the base?
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
list: user.code_common_function | ||
code.language: go | ||
- | ||
|
||
length: len | ||
append: append | ||
close: close | ||
capacity: cap | ||
clear: clear | ||
complex: complex | ||
delete: delete | ||
imaginary: imag | ||
max: max | ||
min: min | ||
new: new | ||
panic: panic | ||
print: print | ||
print line: println | ||
real: real | ||
recover: recover |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
list: user.code_type | ||
code.language: go | ||
- | ||
|
||
bool: bool | ||
boolean: bool | ||
|
||
byte: byte | ||
bite: byte | ||
|
||
complex sixty four: complex64 | ||
complex six four: complex64 | ||
complex one twenty eight: complex128 | ||
complex one two eight: complex128 | ||
|
||
number: int | ||
integer: int | ||
int: int | ||
integer eight: int8 | ||
integer sixteen: int16 | ||
integer thirty two: int32 | ||
integer sixty four: int64 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe these are more commonly pronounced
|
||
|
||
float: float64 | ||
float thirty two: float32 | ||
float sixty four: float64 | ||
|
||
character: rune | ||
rune: rune | ||
|
||
string: string | ||
|
||
machine word: uintptr | ||
raw pointer: uintptr | ||
|
||
comparable: comparable |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,211 @@ | ||||||||||||||||||||||||
from talon import Context, Module, actions | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
mod = Module() | ||||||||||||||||||||||||
ctx = Context() | ||||||||||||||||||||||||
ctx.matches = r""" | ||||||||||||||||||||||||
code.language: go | ||||||||||||||||||||||||
""" | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
ctx.lists["user.code_type"] = {} | ||||||||||||||||||||||||
Xe marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
def base_function(text: str, visibility: str): | ||||||||||||||||||||||||
"""Inserts a public function definition, this assumes a lot about how your editor works""" | ||||||||||||||||||||||||
result = f"func {actions.user.formatted_text(text, visibility)}() {{\n\n}}" | ||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This variable seems unused. |
||||||||||||||||||||||||
|
||||||||||||||||||||||||
actions.user.insert_between(f"func {text}() {{\n", "") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
@ctx.action_class("user") | ||||||||||||||||||||||||
class UserActions: | ||||||||||||||||||||||||
def code_insert_true(): | ||||||||||||||||||||||||
actions.auto_insert(" true ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_insert_false(): | ||||||||||||||||||||||||
actions.auto_insert(" false ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_insert_null(): | ||||||||||||||||||||||||
actions.auto_insert(" nil ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_insert_is_null(): | ||||||||||||||||||||||||
actions.auto_insert(" == nil ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_insert_is_not_null(): | ||||||||||||||||||||||||
actions.auto_insert(" != nil ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_comment_documentation(): | ||||||||||||||||||||||||
"""inserts godoc syntax""" | ||||||||||||||||||||||||
actions.key("up") | ||||||||||||||||||||||||
actions.auto_insert("// ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_default_function(text: str): | ||||||||||||||||||||||||
if text == "main" or text == "mane": | ||||||||||||||||||||||||
actions.user.code_private_function("main") | ||||||||||||||||||||||||
else: | ||||||||||||||||||||||||
actions.user.code_public_function(text) | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_public_function(text: str): | ||||||||||||||||||||||||
base_function(text, "PUBLIC_CAMEL_CASE") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_private_function(text: str): | ||||||||||||||||||||||||
base_function(text, "PRIVATE_CAMEL_CASE") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_insert_function(text: str, selection: str): | ||||||||||||||||||||||||
actions.insert(text) | ||||||||||||||||||||||||
actions.insert("()") | ||||||||||||||||||||||||
actions.key("left") | ||||||||||||||||||||||||
actions.insert(selection) | ||||||||||||||||||||||||
Comment on lines
+54
to
+57
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This can be simplified to
Suggested change
or potentially this may have the same side effect in most cases:
Suggested change
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_block(): | ||||||||||||||||||||||||
actions.user.insert_between("{\n", "") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_if(): | ||||||||||||||||||||||||
actions.user.insert_between(" if ", " {") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_else_if(): | ||||||||||||||||||||||||
actions.user.insert_between(" else if ", " {") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_else(): | ||||||||||||||||||||||||
actions.insert(" else ") | ||||||||||||||||||||||||
actions.user.code_block() | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_while(): | ||||||||||||||||||||||||
actions.user.code_state_for() | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_infinite_loop(): | ||||||||||||||||||||||||
actions.insert("for ") | ||||||||||||||||||||||||
actions.user.code_block() | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_for(): | ||||||||||||||||||||||||
actions.user.insert_between("for ", " {") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_for_each(): | ||||||||||||||||||||||||
actions.user.insert_between("for _, ", " := range {") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_switch(): | ||||||||||||||||||||||||
actions.user.insert_between("switch ", " {") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_case(): | ||||||||||||||||||||||||
actions.user.insert_between("case ", ":") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_go_to(): | ||||||||||||||||||||||||
actions.insert("goto ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_state_return(): | ||||||||||||||||||||||||
actions.insert("return ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_break(): | ||||||||||||||||||||||||
actions.insert("break ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_next(): | ||||||||||||||||||||||||
actions.insert("continue") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_import(): | ||||||||||||||||||||||||
actions.user.insert_between("import (", ")") | ||||||||||||||||||||||||
actions.insert("\n") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_subscript(): | ||||||||||||||||||||||||
actions.user.insert_between("[", "]") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" = ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_subtraction_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" -= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_addition_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" += ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_multiplication_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" *= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_division_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" /= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_modulo_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" %= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_increment(): | ||||||||||||||||||||||||
actions.auto_insert(" ++ ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_and_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" &= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_or_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" |= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_exclusive_or_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" ^= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_left_shift_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" <<= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_right_shift_assignment(): | ||||||||||||||||||||||||
actions.auto_insert(" >>= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_and(): | ||||||||||||||||||||||||
actions.auto_insert(" & ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_or(): | ||||||||||||||||||||||||
actions.auto_insert(" | ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_exclusive_or(): | ||||||||||||||||||||||||
actions.auto_insert(" ^ ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_left_shift(): | ||||||||||||||||||||||||
actions.auto_insert(" << ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_bitwise_right_shift(): | ||||||||||||||||||||||||
actions.auto_insert(" >> ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_lambda(): | ||||||||||||||||||||||||
actions.user.insert_between("func() {", "}") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_subtraction(): | ||||||||||||||||||||||||
actions.auto_insert(" - ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_addition(): | ||||||||||||||||||||||||
actions.auto_insert(" + ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_multiplication(): | ||||||||||||||||||||||||
actions.auto_insert(" * ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_division(): | ||||||||||||||||||||||||
actions.auto_insert(" / ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_modulo(): | ||||||||||||||||||||||||
actions.auto_insert(" % ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_equal(): | ||||||||||||||||||||||||
actions.auto_insert(" == ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_not_equal(): | ||||||||||||||||||||||||
actions.auto_insert(" != ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_less_than(): | ||||||||||||||||||||||||
actions.auto_insert(" < ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_greater_than(): | ||||||||||||||||||||||||
actions.auto_insert(" > ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_less_than_or_equal_to(): | ||||||||||||||||||||||||
actions.auto_insert(" <= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_greater_than_or_equal_to(): | ||||||||||||||||||||||||
actions.auto_insert(" >= ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_and(): | ||||||||||||||||||||||||
actions.auto_insert(" && ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_or(): | ||||||||||||||||||||||||
actions.auto_insert(" || ") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_indirection(): | ||||||||||||||||||||||||
actions.auto_insert("*") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_address_of(): | ||||||||||||||||||||||||
actions.auto_insert("&") | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
def code_operator_structure_dereference(): | ||||||||||||||||||||||||
actions.auto_insert(".") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This it the list of predeclared functions, but many of them aren't very common. (Also:
make
?)These are the top ten identifiers across a pretty large Go corpus:
len is #16 in the list. append is #35. close is #96. println is #197 (and note that that includes uses of fmt.Println!). clear is #1725. imag doesn't even make the top 5000.
I'd rather not worry about the built-ins and choose based on use.
My 2c: I'd keep len, append, close, cap, clear, delete, max, min, new, panic, and recover. And ditch the rest.
And consider maybe adding important std calls, such as
errors.New
,fmt.Errorf
,fmt.Printf
, and the like. If it'd be helpful, I can pull usage stats on those.FWIW, here's what I have for package fmt (some of which are pretty metal):
Also, there are common identifiers that are hard to pronounce but aren't function calls, like
req
,resp
,cmd
. How do those fit in here?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
apologies if i'm misunderstanding the context here
'make' is necessary to initialize maps, slices, chans. its pretty essential
what is the Go corpus you looked at?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, my parenthetical was saying we need
make
. :)The corpus: https://github.com/mvdan/corpus
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh man, i worried about that, sorry! The comment I was referring to is
My 2c: I'd keep len, append, close, cap, clear, delete, max, min, new, panic, and recover. And ditch the rest.
kinda interesting make doesnt show up that often then?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. In particular, I'm surprised that
new
shows up more thanmake
.Of course, that's a list of all identifiers, not just functions.