feat: add default inference behavior for basic types #13

Closed
gremond wants to merge 10 commits from basic_types_inference into develop
3 changed files with 16 additions and 11 deletions
Showing only changes of commit baa1968b26 - Show all commits

View file

@ -62,17 +62,20 @@ class Annotator(Walk): # pylint: disable=R0903
variable: dict, variable: dict,
) -> None: ) -> None:
multi = self.objectspace.multis.get(variable.path, False) multi = self.objectspace.multis.get(variable.path, False)
# variable's type inference from a default value with :term:`basic types`
types = {str: "string", int: "number", bool: "boolean", float: "float"} basic_types = {str: "string", int: "number", bool: "boolean", float: "float"}
if variable.version == "1.0":
# variable's type inference with a default value with a basic type # - version: 1.0, the default value is of type "string" by default
## XXX hack: convert None to string if variable.type is None:
variable.type = "string"
elif variable.version == "1.1":
# - version: 1.1, the default value has no type by default
if multi is False and variable.type is None:
if type(variable.default) in basic_types:
variable.type = basic_types[type(variable.default)]
else:
# XXX FIXME strange. weird. not good
variable.type = "string" variable.type = "string"
## XXX gérer le comportement suivant les versions
if multi is False and variable.type == "string" and type(variable.default) != str:
if type(variable.default) in types:
variable.type = types[type(variable.default)]
# a boolean must have value, the default value is "True" # a boolean must have value, the default value is "True"
if variable.type == "boolean" and multi is False and variable.default is None: if variable.type == "boolean" and multi is False and variable.default is None:
variable.default = True variable.default = True

View file

@ -679,6 +679,7 @@ class ParserVariable:
if not isinstance(filename, list): if not isinstance(filename, list):
filename = [filename] filename = [filename]
variable["xmlfiles"] = filename variable["xmlfiles"] = filename
variable["version"] = version
variable_type = self.get_family_or_variable_type(variable) variable_type = self.get_family_or_variable_type(variable)
obj = { obj = {
"symlink": SymLink, "symlink": SymLink,

View file

@ -439,6 +439,7 @@ class Variable(BaseModel):
test: Optional[list] = None test: Optional[list] = None
xmlfiles: List[str] = [] xmlfiles: List[str] = []
path: str path: str
version: str
# type will be set dynamically in `annotator/value.py`, default is None # type will be set dynamically in `annotator/value.py`, default is None
type: str = None type: str = None