Set correct type when indexing into Var[str] (#2469)
* Index into strings * Write tests
This commit is contained in:
parent
b2c749fc9f
commit
01c2a1ed7d
@ -572,11 +572,10 @@ class Var:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Get the type of the indexed var.
|
# Get the type of the indexed var.
|
||||||
type_ = (
|
if types.is_generic_alias(self._var_type):
|
||||||
types.get_args(self._var_type)[0]
|
type_ = types.get_args(self._var_type)[0]
|
||||||
if types.is_generic_alias(self._var_type)
|
elif types._issubclass(self._var_type, str):
|
||||||
else Any
|
type_ = str
|
||||||
)
|
|
||||||
|
|
||||||
# Use `at` to support negative indices.
|
# Use `at` to support negative indices.
|
||||||
return self._replace(
|
return self._replace(
|
||||||
|
@ -406,6 +406,22 @@ def test_var_indexing_lists(var):
|
|||||||
assert str(var[-1]) == f"{{{var._var_name}.at(-1)}}"
|
assert str(var[-1]) == f"{{{var._var_name}.at(-1)}}"
|
||||||
|
|
||||||
|
|
||||||
|
def test_var_indexing_str():
|
||||||
|
"""Test that we can index into str vars."""
|
||||||
|
str_var = BaseVar(_var_name="str", _var_type=str)
|
||||||
|
|
||||||
|
# Test that indexing gives a type of Var[str].
|
||||||
|
assert isinstance(str_var[0], Var)
|
||||||
|
assert str_var[0]._var_type == str
|
||||||
|
|
||||||
|
# Test basic indexing.
|
||||||
|
assert str(str_var[0]) == "{str.at(0)}"
|
||||||
|
assert str(str_var[1]) == "{str.at(1)}"
|
||||||
|
|
||||||
|
# Test negative indexing.
|
||||||
|
assert str(str_var[-1]) == "{str.at(-1)}"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"var, index",
|
"var, index",
|
||||||
[
|
[
|
||||||
|
Loading…
Reference in New Issue
Block a user