A small dataclass refactoring

This commit is contained in:
Dave Halter
2019-07-19 11:44:11 +02:00
parent 5722a3458e
commit 0dc60fb535
2 changed files with 13 additions and 20 deletions

View File

@@ -169,16 +169,13 @@ class ParamNameInterface(object):
class BaseTreeParamName(ParamNameInterface, AbstractTreeName): class BaseTreeParamName(ParamNameInterface, AbstractTreeName):
def get_default_node(self): annotation_node = None
return None default_node = None
def get_annotation_node(self):
return None
def to_string(self): def to_string(self):
output = self._kind_string() + self.string_name output = self._kind_string() + self.string_name
annotation = self.get_annotation_node() annotation = self.annotation_node
default = self.get_default_node() default = self.default_node
if annotation is not None: if annotation is not None:
output += ': ' + annotation.get_code(include_prefix=False) output += ': ' + annotation.get_code(include_prefix=False)
if default is not None: if default is not None:
@@ -190,10 +187,12 @@ class ParamName(BaseTreeParamName):
def _get_param_node(self): def _get_param_node(self):
return search_ancestor(self.tree_name, 'param') return search_ancestor(self.tree_name, 'param')
def get_annotation_node(self): @property
def annotation_node(self):
return self._get_param_node().annotation return self._get_param_node().annotation
def get_default_node(self): @property
def default_node(self):
return self._get_param_node().default return self._get_param_node().default
@property @property

View File

@@ -566,24 +566,18 @@ class DataclassSignature(AbstractSignature):
class DataclassParamName(BaseTreeParamName): class DataclassParamName(BaseTreeParamName):
def __init__(self, parent_context, tree_name, annotation_node, default_node): def __init__(self, parent_context, tree_name, annotation_node, default_node):
super(DataclassParamName, self).__init__(parent_context, tree_name) super(DataclassParamName, self).__init__(parent_context, tree_name)
self._annotation_node = annotation_node self.annotation_node = annotation_node
self._default_node = default_node self.default_node = default_node
def get_kind(self): def get_kind(self):
return Parameter.POSITIONAL_OR_KEYWORD return Parameter.POSITIONAL_OR_KEYWORD
#TODO get_param? #TODO get_param?
def get_annotation_node(self):
return self._annotation_node
def get_default_node(self):
return self._default_node
def infer(self): def infer(self):
if self._annotation_node is None: if self.annotation_node is None:
return NO_CONTEXTS # TODO implement return NO_CONTEXTS
else: else:
return self.parent_context.eval_node(self._annotation_node) return self.parent_context.eval_node(self.annotation_node)
class ItemGetterCallable(ContextWrapper): class ItemGetterCallable(ContextWrapper):