You can install these plugins via Preferences > Browse Packages > User and create [toolname].py file for every tool. Then in Preferences > Key Bindings, add the keybinding provided or add keybinding of your choice.
1. gorename
The gorename command performs precise type-safe renaming of identifiers in Go source code.
Installation
go get golang.org/x/tools/cmd/gorename
Plugin
import sublime
import sublime_plugin
from subprocess import call
import threading
class Rename(threading.Thread):
def __init__(self, offset, word):
threading.Thread.__init__(self)
self.offset = offset
self.word = word
def run(self):
call(["/Users/anarchyrucks/go/bin/gorename", "-offset", self.offset, "-to", self.word])
print(self.offset)
self.view.run_command("gs_fmt")
class GoRenameCommand(sublime_plugin.TextCommand):
def run(self, edit):
word = ""
for region in self.view.sel():
word = self.view.substr(self.view.word(region))
self.view.window().show_input_panel("Go Rename:", word, self.do_rename, None, None)
def do_rename(self, word):
filepath = self.view.file_name()
name = filepath.split('/')[-1]
row, col = self.view.rowcol(self.view.sel()[0].begin())
offset = self.view.text_point(row, col)
offset_arg = filepath + ":#" + str(offset)
ren = Rename(offset_arg, word)
ren.start()
Key binding
{ "keys": ["super+shift+r"],"command": "go_rename" }
2. gokeyify
gokeyify turns unkeyed struct literals T{1, 2, 3}
into keyed ones T{A: 1, B: 2, C: 3}
.
Install
go get honnef.co/go/tools/cmd/keyify
Plugin
import sublime
import sublime_plugin
from subprocess import Popen, PIPE
import json
class GoKeyifyCommand(sublime_plugin.TextCommand):
def run(self, edit):
filepath = self.view.file_name()
name = filepath.split('/')[-1]
row, col = self.view.rowcol(self.view.sel()[0].begin())
offset = self.view.text_point(row, col)
offset_arg = filepath + ":#" + str(offset)
process = Popen(["/Users/anarchyrucks/go/bin/keyify", "-json", offset_arg], stdout=PIPE)
output_bytes, err = process.communicate()
if err != None:
print("Couldn't get the output")
return
else:
output = output_bytes.decode('utf-8')
try:
json_output = json.loads(output)
start = json_output['start']
end = json_output['end']
replacement = json_output['replacement']
select_region = sublime.Region(start, end)
self.view.replace(edit, select_region, replacement)
self.view.run_command("gs_fmt")
except:
print("Couldn't find/parse struct")
Key binding
{ "keys": ["super+shift+k"],"command": "go_keyify" }
3. goalternate
Switch between the _test.go
file and the .go
program file with a single command.
Plugin
import sublime
import sublime_plugin
import os
import time
import threading
class Eraser(threading.Thread):
def __init__(self, view):
threading.Thread.__init__(self)
self.view = view
def run(self):
time.sleep(5)
print("here")
self.view.erase_status("1")
class GoAlternateCommand(sublime_plugin.TextCommand):
def run(self, edit):
filepath = self.view.file_name()
name = filepath.split('/')[-1]
path = filepath.split(name)[0]
if name.endswith("_test.go"):
altpath = path + name.split("_test.go")[0] + ".go"
if os.path.isfile(altpath):
self.view.window().open_file(altpath)
return
else:
altpath = path + name.split('.go')[0] + "_test.go"
if os.path.isfile(altpath):
self.view.window().open_file(altpath)
return
self.view.set_status("1", "Alternate file not found")
er = Eraser(self.view)
er.start()
Key binding
{
"keys": ["alt+super+t"],
"command": "go_alternate",
"context": [
{
"key": "selector",
"operator": "equal",
"operand": "source.go"
}
]
}
4. gomodifytags
Add json:"keyName"
automatically for your struct field tags.
Convert
type Name struct {
First string
Last string
}
to
type Name struct {
First string `json:"first"`
Last string `json:"last"`
}
with a single command.
Install
go get github.com/fatih/gomodifytags
Plugin
import sublime
import sublime_plugin
from subprocess import Popen, PIPE
import json
def replace(self, edit, process):
output_bytes, err = process.communicate()
if err != None:
print("Couldn't get the output")
return
else:
output = output_bytes.decode('utf-8')
try:
json_output = json.loads(output)
start_line = json_output['start']
end_line = json_output['end']
print(start_line, end_line)
start = self.view.text_point(start_line - 1, 0)
end = self.view.text_point(end_line + 1, 0)
print(start, end)
lines = json_output['lines']
replacement = ""
for line in lines:
replacement += line + "\n"
if replacement != "":
select_region = sublime.Region(start, end)
self.view.replace(edit, select_region, replacement)
self.view.run_command("gs_fmt")
except:
print("Couldn't find/parse struct")
class GoAddTagsCommand(sublime_plugin.TextCommand):
def run(self, edit):
filepath = self.view.file_name()
name = filepath.split('/')[-1]
row, col = self.view.rowcol(self.view.sel()[0].begin())
offset = self.view.text_point(row, col)
process = Popen(["/Users/anarchyrucks/go/bin/gomodifytags", "-file", filepath, "-offset", str(offset), "-add-tags", "json", "-format", "json", "-transform", "camelcase"], stdout=PIPE)
replace(self, edit, process)
class GoRemoveTagsCommand(sublime_plugin.TextCommand):
def run(self, edit):
filepath = self.view.file_name()
name = filepath.split('/')[-1]
row, col = self.view.rowcol(self.view.sel()[0].begin())
offset = self.view.text_point(row, col)
process = Popen(["/Users/anarchyrucks/go/bin/gomodifytags", "-file", filepath, "-offset", str(offset), "-remove-tags", "json", "-format", "json", "-transform", "camelcase"], stdout=PIPE)
replace(self, edit, process)
Key binding
{ "keys": ["super+alt+a"],"command": "go_add_tags" }
{ "keys": ["super+alt+r"],"command": "go_remove_tags" }
Congratulations @anarchyrucks! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
You made your First Comment
You got a First Reply
Award for the number of upvotes
Award for the number of upvotes received
Click on any badge to view your own Board of Honnor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
By upvoting this notification, you can help all Steemit users. Learn how here!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Quite useful. Thanks for posting these.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
thanks!!!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
कमेन्ट् हो यो :पि
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
हो हो
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @anarchyrucks! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit