|
| 1 | +import re |
1 | 2 | import sublime, sublime_plugin |
2 | 3 | from . import cs_cljfmt, cs_common, cs_parser, cs_printer |
3 | 4 |
|
@@ -158,6 +159,27 @@ def run(self, edit): |
158 | 159 | formatted = cs_printer.format(form, node, limit = cs_common.wrap_width(view)) |
159 | 160 | view.replace(edit, region, formatted) |
160 | 161 |
|
| 162 | +class ClojureSublimedToggleCommentCommand(sublime_plugin.TextCommand): |
| 163 | + def run(self, edit): |
| 164 | + view = self.view |
| 165 | + change_id = view.change_id() |
| 166 | + for region in [r for r in view.sel()]: |
| 167 | + region = view.transform_region_from(region, change_id) |
| 168 | + line = view.line(region) |
| 169 | + line_text = view.substr(line) |
| 170 | + # uncomment ; |
| 171 | + if m := re.match(r'^(\s*)(;[;\s]*)(.*)', line_text): |
| 172 | + view.replace(edit, line, m[1] + m[3]) |
| 173 | + continue |
| 174 | + parsed = cs_parser.parse_tree(view) |
| 175 | + # uncomment #_ |
| 176 | + if node := cs_parser.search(parsed, region.begin(), pred = lambda node: node.name == "discard"): |
| 177 | + view.replace(edit, sublime.Region(node.start, node.body.start), '') |
| 178 | + continue |
| 179 | + # prepend ; |
| 180 | + if m := re.match(r'^(\s*)([^\s].*)', line_text): |
| 181 | + view.replace(edit, line, m[1] + '; ' + m[2]) |
| 182 | + |
161 | 183 | def cljfmt_indent(view, point): |
162 | 184 | i = None |
163 | 185 | try: |
|
0 commit comments