Last active
January 1, 2016 18:39
-
-
Save KellyLSB/8184857 to your computer and use it in GitHub Desktop.
Ruby Post Processing Plugin for `Sublime Text 2`
Place in `~/Library/Application Support/Sublime Text 2/Packages/User/ruby_post_process.py`
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sublime, sublime_plugin, os, re | |
class RubyPostProcess(sublime_plugin.EventListener): | |
def on_pre_save(self, view): | |
syntax = os.path.basename(view.settings().get('syntax')) | |
syntax = os.path.splitext(syntax)[0] | |
filepath = view.file_name() | |
filename = os.path.basename(filepath) | |
if syntax == "Ruby": | |
print "Cleaning up Ruby file: %(filename)s" % locals() | |
# Tabs to spaces | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"\t", sublime.IGNORECASE, " ", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# Remove spaces between ends | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r" (end|.*)\n[\n]+([ ]*)end", sublime.IGNORECASE, " \\1\n\\2end", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# New lines between method | |
# and spec definitions | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r" end\n[\n]*([ ]*)(def|it|describe|context|before|let)", sublime.IGNORECASE, " end\n\n\\1\\2", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# Ruby hash format | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"([{|(| ]{1}):([a-z_]+)[ ]*=>[ ]*", sublime.IGNORECASE, "\\1\\2: ", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# Spec file only replacements | |
filename = view.file_name() | |
if re.search('[sS]{1}pec\.rb$', filename): | |
# Fix missing before each | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"before(\(\)|)[ ]+do", sublime.IGNORECASE, "before(:each) do", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# Spec replacements add parentheses to the before methods | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"^([ ]*)(before)[ ]+(.*)[ ]+do[ ]*(| #(.*))$", sublime.IGNORECASE, "\\1\\2(\\3) do\\4", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# Spec replacements remove parentheses | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"^([ ]*)(describe|it|context)\((.*)\)[ ]*do[ ]*(.*| #(.*))$", sublime.IGNORECASE, "\\1\\2 \\3 do\\4", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# Replace should be ? to nicer format | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"\.should[ ]*==[ ]*(true|false|nil)", sublime.IGNORECASE, ".should be_\\1", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# Replace should include to nicer format | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"\.should[ ]+include[ ]+(.*)$", sublime.IGNORECASE, ".should include(\\1)", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# New lines between end of let segments | |
# and spec definitions | |
replacements = [] | |
edit = view.begin_edit() | |
regions_result = view.find_all(r"(\}|end)\n[\n]*([ ]*)(((?!let).)*)\(", sublime.IGNORECASE, "\\1\n\n\\2\\3(", replacements) | |
for i, thisregion in reversed(list(enumerate(regions_result))): | |
view.replace(edit, thisregion, replacements[i]) | |
view.end_edit(edit) | |
# # Replace should eq empty to nicer format | |
# replacements = [] | |
# edit = view.begin_edit() | |
# regions_result = view.find_all(r"\.should[ ]*==[ ]*(\[\]|{})", sublime.IGNORECASE, ".should be_empty", replacements) | |
# for i, thisregion in reversed(list(enumerate(regions_result))): | |
# view.replace(edit, thisregion, replacements[i]) | |
# view.end_edit(edit) | |
# # Replace should be to nicer format | |
# replacements = [] | |
# edit = view.begin_edit() | |
# regions_result = view.find_all(r"\.should[ ]*==[ ]*(.*?)(|[ ]+#[^{]{1}.*[^\"]{1})$", sublime.IGNORECASE, ".should be(\\1)\\2", replacements) | |
# for i, thisregion in reversed(list(enumerate(regions_result))): | |
# view.replace(edit, thisregion, replacements[i]) | |
# view.end_edit(edit) | |
print "Finished cleaning up Ruby file: %(filename)s" % locals() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment