fix: tidy some TODOs
This commit is contained in:
@@ -232,7 +232,7 @@ class FrameManager:
|
|||||||
if col.name == name:
|
if col.name == name:
|
||||||
index = i
|
index = i
|
||||||
replace = True
|
replace = True
|
||||||
# TODO: check column type here to prevent changing it
|
# TODO: might want to check column type here to disallow changing it
|
||||||
new_columns.append(col)
|
new_columns.append(col)
|
||||||
|
|
||||||
new_col: DataFrameType.Column = DataFrameType.Column(
|
new_col: DataFrameType.Column = DataFrameType.Column(
|
||||||
|
|||||||
@@ -454,7 +454,6 @@ class PythonTyper(
|
|||||||
self.env.define(stmt.name, function)
|
self.env.define(stmt.name, function)
|
||||||
|
|
||||||
def visit_type_assign(self, stmt: p.TypeAssign) -> None:
|
def visit_type_assign(self, stmt: p.TypeAssign) -> None:
|
||||||
# TODO check not yet defined locally
|
|
||||||
type: Type = self.resolve_type_expr(stmt.type)
|
type: Type = self.resolve_type_expr(stmt.type)
|
||||||
self.env.define(stmt.name, type)
|
self.env.define(stmt.name, type)
|
||||||
|
|
||||||
@@ -844,7 +843,7 @@ class PythonTyper(
|
|||||||
def visit_ternary_expr(self, expr: p.TernaryExpr) -> Type:
|
def visit_ternary_expr(self, expr: p.TernaryExpr) -> Type:
|
||||||
test_type: Type = self.type_of(expr.test)
|
test_type: Type = self.type_of(expr.test)
|
||||||
|
|
||||||
# TODO Allow subtypes or any type
|
# Strict: test must be a subtype of bool, or UnknownType
|
||||||
if (
|
if (
|
||||||
not self.is_subtype(test_type, self.types.get_type("bool"))
|
not self.is_subtype(test_type, self.types.get_type("bool"))
|
||||||
and test_type != UnknownType()
|
and test_type != UnknownType()
|
||||||
@@ -1154,8 +1153,9 @@ class PythonTyper(
|
|||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
if key is None:
|
if key is None:
|
||||||
# TODO: check that value is always a dict
|
# If literal value is not a dict, invalid Python -> abort
|
||||||
assert isinstance(value_val, dict)
|
if not isinstance(value_val, dict):
|
||||||
|
return False, None
|
||||||
pairs.extend(value_val.items())
|
pairs.extend(value_val.items())
|
||||||
else:
|
else:
|
||||||
pairs.append((key_val, value_val))
|
pairs.append((key_val, value_val))
|
||||||
@@ -1281,9 +1281,7 @@ class PythonTyper(
|
|||||||
|
|
||||||
case BaseType():
|
case BaseType():
|
||||||
# TODO: do we want to allow cast(float, int)? would require runtime conversion
|
# TODO: do we want to allow cast(float, int)? would require runtime conversion
|
||||||
if not self.types.is_subtype(
|
if not self.types.are_equivalent(subject_type, target_type):
|
||||||
subject_type, target_type
|
|
||||||
) or not self.types.is_subtype(target_type, subject_type):
|
|
||||||
self.reporter.error(
|
self.reporter.error(
|
||||||
expr.location,
|
expr.location,
|
||||||
f"Value {lit_value!r} of type {subject_type} cannot be cast as {target_type}",
|
f"Value {lit_value!r} of type {subject_type} cannot be cast as {target_type}",
|
||||||
|
|||||||
@@ -213,7 +213,6 @@ class TypesRegistry:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
case (ColumnType(type=inner1), ColumnType(type=inner2)):
|
case (ColumnType(type=inner1), ColumnType(type=inner2)):
|
||||||
# TODO: invariant, replace ColumnType with simple GenericType
|
|
||||||
if not self.are_equivalent(inner1, inner2):
|
if not self.are_equivalent(inner1, inner2):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -354,7 +354,6 @@ class Generator(p.Stmt.Visitor[ast.stmt], p.Expr.Visitor[ast.expr]):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def visit_type_assign(self, stmt: p.TypeAssign) -> ast.stmt:
|
def visit_type_assign(self, stmt: p.TypeAssign) -> ast.stmt:
|
||||||
# TODO: is that ok?
|
|
||||||
return ast.Pass()
|
return ast.Pass()
|
||||||
|
|
||||||
def visit_assign_stmt(self, stmt: p.AssignStmt) -> ast.stmt:
|
def visit_assign_stmt(self, stmt: p.AssignStmt) -> ast.stmt:
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class StubsGenerator:
|
|||||||
self.import_pandas = False
|
self.import_pandas = False
|
||||||
for name, type in self.types._types.items():
|
for name, type in self.types._types.items():
|
||||||
# Skip builtin types, not just based on name so the user can override
|
# Skip builtin types, not just based on name so the user can override
|
||||||
# TODO: check if added members on builtin type
|
# TODO: check if added members on builtin type, or prevent it
|
||||||
match type:
|
match type:
|
||||||
case BaseType(name=name_) if name == name_:
|
case BaseType(name=name_) if name == name_:
|
||||||
continue
|
continue
|
||||||
@@ -105,7 +105,9 @@ class StubsGenerator:
|
|||||||
"""
|
"""
|
||||||
base_type: Type = type
|
base_type: Type = type
|
||||||
|
|
||||||
# TODO: improve
|
# Generate simple assignment for type aliases
|
||||||
|
# A type alias will have a name that is different from the type represents
|
||||||
|
# or will neither be a `DeriveType` nor a `GenericType`
|
||||||
match type:
|
match type:
|
||||||
case DerivedType(name=name_) | GenericType(name=name_) if name_ == name:
|
case DerivedType(name=name_) | GenericType(name=name_) if name_ == name:
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user