Skip to content

Commit 36c9514

Browse files
committed
working on pymode.
1 parent f817d92 commit 36c9514

File tree

6 files changed

+101
-13
lines changed

6 files changed

+101
-13
lines changed

autoload/pymode/lint.vim

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ fun! pymode#lint#check() "{{{
5656
let errors = getqflist()
5757
if empty(errors)
5858
call pymode#wide_message('Code checking is completed. No errors found.')
59-
return
6059
endif
6160

6261
if g:pymode_lint_cwindow

autoload/pymode/rope.vim

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,24 @@ fun! pymode#rope#autoimport(word) "{{{
166166
endif
167167
PymodePython rope.autoimport()
168168
endfunction "}}}
169+
170+
fun! pymode#rope#generate_function() "{{{
171+
if !pymode#save()
172+
return 0
173+
endif
174+
PymodePython rope.GenerateElementRefactoring('function').run()
175+
endfunction "}}}
176+
177+
fun! pymode#rope#generate_class() "{{{
178+
if !pymode#save()
179+
return 0
180+
endif
181+
PymodePython rope.GenerateElementRefactoring('class').run()
182+
endfunction "}}}
183+
184+
fun! pymode#rope#generate_package() "{{{
185+
if !pymode#save()
186+
return 0
187+
endif
188+
PymodePython rope.GenerateElementRefactoring('package').run()
189+
endfunction "}}}

ftplugin/python/pymode.vim

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,18 @@ if g:pymode_rope
145145
exe "noremap <silent> <buffer> " . g:pymode_rope_use_function_bind . " :call pymode#rope#use_function()<CR>"
146146
end
147147

148+
if g:pymode_rope_generate_function_bind != ""
149+
exe "noremap <silent> <buffer> " . g:pymode_rope_generate_function_bind . " :call pymode#rope#generate_function()<CR>"
150+
end
151+
152+
if g:pymode_rope_generate_package_bind != ""
153+
exe "noremap <silent> <buffer> " . g:pymode_rope_generate_package_bind . " :call pymode#rope#generate_package()<CR>"
154+
end
155+
156+
if g:pymode_rope_generate_class_bind != ""
157+
exe "noremap <silent> <buffer> " . g:pymode_rope_generate_class_bind . " :call pymode#rope#generate_class()<CR>"
158+
end
159+
148160
if g:pymode_rope_module_to_package_bind != ""
149161
exe "noremap <silent> <buffer> " . g:pymode_rope_module_to_package_bind . " :call pymode#rope#module_to_package()<CR>"
150162
end

plugin/pymode.vim

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,15 @@ call pymode#default('g:pymode_rope_inline_bind', '<C-c>ri')
202202
" Move refactoring
203203
call pymode#default('g:pymode_rope_move_bind', '<C-c>rv')
204204

205+
" Generate function
206+
call pymode#default('g:pymode_rope_generate_function_bind', '<C-c>rnf')
207+
208+
" Generate class
209+
call pymode#default('g:pymode_rope_generate_class_bind', '<C-c>rnc')
210+
211+
" Generate package
212+
call pymode#default('g:pymode_rope_generate_package_bind', '<C-c>rnp')
213+
205214
" Change signature
206215
call pymode#default('g:pymode_rope_change_signature_bind', '<C-c>rs')
207216

pymode/lint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def code_check():
2626
if root:
2727
path = os.path.relpath(path, root)
2828

29-
if options.skip and any(p.match(path) for p in options.skip):
29+
if getattr(options, 'skip', None) and any(p.match(path) for p in options.skip): # noqa
3030
pymode_message('Skip code checking.')
3131
vim.command('return')
3232
return False

pymode/rope.py

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
from rope.base import project, libutils, exceptions, change, worder # noqa
2222
from rope.base.fscommands import FileSystemCommands # noqa
23-
from rope.contrib import autoimport as rope_autoimport, codeassist, findit # noqa
24-
from rope.refactor import ModuleToPackage, ImportOrganizer, rename, extract, inline, usefunction, move, change_signature # noqa
23+
from rope.contrib import autoimport as rope_autoimport, codeassist, findit, generate # noqa
24+
from rope.refactor import ModuleToPackage, ImportOrganizer, rename, extract, inline, usefunction, move, change_signature, importutils # noqa
2525
from rope.base.taskhandle import TaskHandle # noqa
2626

2727

@@ -337,11 +337,11 @@ def autoimport():
337337

338338
source, _ = get_assist_params()
339339
if len(modules) == 1:
340-
_insert_import(word, modules[0], ctx, source)
340+
_insert_import(word, modules[0], ctx)
341341

342342
else:
343343
module = pymode_inputlist('Wich module to import:', modules)
344-
_insert_import(word, module, ctx, source)
344+
_insert_import(word, module, ctx)
345345

346346
return True
347347

@@ -756,6 +756,32 @@ def get_changes(self, refactor, input_string):
756756
return refactor.get_changes(changers)
757757

758758

759+
class GenerateElementRefactoring(Refactoring):
760+
761+
""" Class description. """
762+
763+
def __init__(self, kind, *args, **kwargs):
764+
""" Function description. """
765+
self.kind = kind
766+
super(GenerateElementRefactoring, self).__init__(*args, **kwargs)
767+
768+
def get_refactor(self, ctx):
769+
""" Function description.
770+
771+
:return Rename:
772+
773+
"""
774+
_, offset = get_assist_params()
775+
return generate.create_generate(
776+
self.kind, ctx.project, ctx.resource, offset)
777+
778+
def get_changes(self, refactor, input_str):
779+
""" Function description. """
780+
781+
print(refactor)
782+
return refactor.get_changes()
783+
784+
759785
def reload_changes(changes):
760786
""" Reload changed buffers. """
761787

@@ -849,19 +875,40 @@ def complete_check():
849875

850876
source, _ = get_assist_params()
851877
if len(modules) == 1:
852-
_insert_import(name, modules[0], ctx, source)
878+
_insert_import(name, modules[0], ctx)
853879

854880
else:
855881
module = pymode_inputlist('With module to import:', modules)
856882
if module:
857-
_insert_import(name, module, ctx, source)
883+
_insert_import(name, module, ctx)
858884

859885
vim.command('call pymode#save()')
860886
regenerate()
861887

862888

863-
def _insert_import(name, module, ctx, source):
864-
linenum = int(ctx.importer.find_insertion_line(source))
865-
line = 'from %s import %s' % (module, name)
866-
vim.current.buffer[linenum - 1:linenum - 1] = [line]
867-
vim.current.buffer[linenum:linenum] = ['']
889+
def _insert_import(name, module, ctx):
890+
pyobject = ctx.project.pycore.resource_to_pyobject(ctx.resource)
891+
import_tools = importutils.ImportTools(ctx.project.pycore)
892+
module_imports = import_tools.module_imports(pyobject)
893+
new_import = importutils.FromImport(module, 0, [[name, None]])
894+
module_imports.add_import(new_import)
895+
changes = change.ChangeContents(
896+
ctx.resource, module_imports.get_changed_source())
897+
898+
action = pymode_inputlist(
899+
'Choose what to do:', ['perform', 'preview'])
900+
901+
if not action:
902+
return False
903+
904+
if action == 'preview':
905+
print("\n ")
906+
print("-------------------------------")
907+
print("\n%s\n" % changes.get_description())
908+
print("-------------------------------\n\n")
909+
if not pymode_confirm(False):
910+
return False
911+
912+
progress = ProgressHandler('Apply changes ...')
913+
ctx.project.do(changes, task_handle=progress.handle)
914+
reload_changes(changes)

0 commit comments

Comments
 (0)