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,
) -> None:
multi = self.objectspace.multis.get(variable.path, False)
types = {str: "string", int: "number", bool: "boolean", float: "float"}
# variable's type inference with a default value with a basic type
## XXX hack: convert None to 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)]
# variable's type inference from a default value with :term:`basic types`
basic_types = {str: "string", int: "number", bool: "boolean", float: "float"}
if variable.version == "1.0":
# - version: 1.0, the default value is of type "string" by default
if variable.type is None:

This line is not correct to me.

Example:

my_var:
  type: string
  default: 3

is an invalid dictionary.

This line is not correct to me. Example: ``` my_var: type: string default: 3 ``` is an invalid dictionary.
variable.type = "string"
elif variable.version == "1.1":

Not only 1.1, should be "else:"

Not only 1.1, should be "else:"
# - 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"

If variable.type is "number" it will override by "string".

Multi value should be supported too (raise if type are different in this case).

If variable.type is "number" it will override by "string". Multi value should be supported too (raise if type are different in this case).
# a boolean must have value, the default value is "True"
if variable.type == "boolean" and multi is False and variable.default is None:
variable.default = True

View file

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

View file

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