def func_at(view, pos): defs = _func_defs(view) if source(view, pos) == 'python': is_junk = lambda r: re_test('^(lambda|\s*\@)', view.substr(r)) defs = lremove(is_junk, defs) func_def = region_b(defs, pos) lang = source(view, pos) if lang == 'python': next_line = newline_f(view, func_def.end()) return func_def.cover(view.indented_region(next_line)) elif lang == 'js': start_bracket = view.find(r'{', func_def.end(), sublime.LITERAL) end_bracket = find_matching_bracket(view, start_bracket) return func_def.cover(end_bracket) else: return func_def
def run(self, edit): # Get expression sel = self.view.sel()[0] pos = sel.begin() expr = self.view.substr(sel) # Prepare new line line = self.view.line(pos) line_str = self.view.substr(line) prefix = re_find(r'^\s*', line_str) template, cursor_shift = self.TEMPLATES.get(source(self.view, pos), self.DEFAULT) exracted_line = prefix + template.format(expr) # Modify text self.view.insert(edit, line.begin(), exracted_line) # Create cursor for name name_pos = line.begin() + len(prefix) + cursor_shift self.view.sel().add(sublime.Region(name_pos, name_pos))
def find_functions(view): funcs = view.find_by_selector('meta.function') if source(view) == 'python': is_junk = lambda r: re_test('^(lambda|\s*\@)', view.substr(r)) funcs = lremove(is_junk, funcs) return funcs