mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-16 02:27:06 +08:00
Get a first classmethod extraction working
This commit is contained in:
@@ -8,6 +8,7 @@ from parso import split_lines
|
|||||||
from jedi import debug
|
from jedi import debug
|
||||||
from jedi.api.exceptions import RefactoringError
|
from jedi.api.exceptions import RefactoringError
|
||||||
from jedi.common.utils import indent_block
|
from jedi.common.utils import indent_block
|
||||||
|
from jedi.parser_utils import function_is_classmethod, function_is_staticmethod
|
||||||
|
|
||||||
_EXPRESSION_PARTS = (
|
_EXPRESSION_PARTS = (
|
||||||
'or_test and_test not_test comparison '
|
'or_test and_test not_test comparison '
|
||||||
@@ -380,8 +381,6 @@ def _is_not_extractable_syntax(node):
|
|||||||
|
|
||||||
|
|
||||||
def extract_function(inference_state, path, module_context, name, pos, until_pos):
|
def extract_function(inference_state, path, module_context, name, pos, until_pos):
|
||||||
is_class_method = False
|
|
||||||
is_method = False
|
|
||||||
is_expression = True
|
is_expression = True
|
||||||
nodes = _find_nodes(module_context.tree_node, pos, until_pos)
|
nodes = _find_nodes(module_context.tree_node, pos, until_pos)
|
||||||
return_variables = []
|
return_variables = []
|
||||||
@@ -405,13 +404,14 @@ def extract_function(inference_state, path, module_context, name, pos, until_pos
|
|||||||
output_var_str = ', '.join(return_variables)
|
output_var_str = ', '.join(return_variables)
|
||||||
code_block += '\nreturn ' + output_var_str + '\n'
|
code_block += '\nreturn ' + output_var_str + '\n'
|
||||||
|
|
||||||
if not context.is_bound_method():
|
decorator = ''
|
||||||
|
if context.is_bound_method():
|
||||||
|
if function_is_classmethod(context.tree_node):
|
||||||
|
decorator = '@classmethod\n'
|
||||||
|
else:
|
||||||
code_block += '\n'
|
code_block += '\n'
|
||||||
|
|
||||||
function_call = '%s(%s)' % (name, ', '.join(params))
|
function_call = '%s(%s)' % (name, ', '.join(params))
|
||||||
decorator = ''
|
|
||||||
if is_class_method:
|
|
||||||
decorator = '@classmethod\n'
|
|
||||||
function_code = '%sdef %s:\n%s' % (decorator, function_call, indent_block(code_block))
|
function_code = '%sdef %s:\n%s' % (decorator, function_call, indent_block(code_block))
|
||||||
|
|
||||||
if is_expression:
|
if is_expression:
|
||||||
|
|||||||
@@ -61,3 +61,19 @@ class X:
|
|||||||
def f(x):
|
def f(x):
|
||||||
#? 11 text {'new_name': 'ab'}
|
#? 11 text {'new_name': 'ab'}
|
||||||
return ab()
|
return ab()
|
||||||
|
# -------------------------------------------------- in-classmethod-1
|
||||||
|
class X:
|
||||||
|
@classmethod
|
||||||
|
def f(x):
|
||||||
|
#? 16 text {'new_name': 'ab'}
|
||||||
|
return 25
|
||||||
|
# ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
class X:
|
||||||
|
@classmethod
|
||||||
|
def ab():
|
||||||
|
return 25
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def f(x):
|
||||||
|
#? 16 text {'new_name': 'ab'}
|
||||||
|
return x.ab()
|
||||||
|
|||||||
Reference in New Issue
Block a user