mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
(core) Update attributes of Table.all when column is renamed
Summary: Adds an InferenceTip which treats `Table.all` similarly to `Table.lookupRecords(...)`, so that `Table.all.foo` is changed to `Table.all.bar` when the column `foo` is renamed to `bar`. Test Plan: Extended test for the `lookupRecords` case. Reviewers: georgegevoian Reviewed By: georgegevoian Differential Revision: https://phab.getgrist.com/D3521
This commit is contained in:
parent
c0852761b9
commit
29fb3360b6
@ -247,6 +247,23 @@ class InferLookupReference(InferenceTip):
|
|||||||
def infer(cls, node, context=None):
|
def infer(cls, node, context=None):
|
||||||
yield astroid.bases.Instance(infer(node.func.expr))
|
yield astroid.bases.Instance(infer(node.func.expr))
|
||||||
|
|
||||||
|
|
||||||
|
class InferAllReference(InferenceTip):
|
||||||
|
"""
|
||||||
|
Inference helper to treat the return value of `Table.all` as returning instances
|
||||||
|
of table `Table`.
|
||||||
|
"""
|
||||||
|
node_class = astroid.nodes.Attribute
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def filter(cls, node):
|
||||||
|
return node.attrname == "all" and _is_table(infer(node.expr))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def infer(cls, node, context=None):
|
||||||
|
yield astroid.bases.Instance(infer(node.expr))
|
||||||
|
|
||||||
|
|
||||||
class InferLookupComprehension(InferenceTip):
|
class InferLookupComprehension(InferenceTip):
|
||||||
node_class = astroid.nodes.AssignName
|
node_class = astroid.nodes.AssignName
|
||||||
|
|
||||||
@ -255,9 +272,11 @@ class InferLookupComprehension(InferenceTip):
|
|||||||
compr = node.parent
|
compr = node.parent
|
||||||
if not isinstance(compr, astroid.nodes.Comprehension):
|
if not isinstance(compr, astroid.nodes.Comprehension):
|
||||||
return False
|
return False
|
||||||
if not isinstance(compr.iter, astroid.nodes.Call):
|
if isinstance(compr.iter, astroid.nodes.Call):
|
||||||
return False
|
return InferLookupReference.filter(compr.iter)
|
||||||
return InferLookupReference.filter(compr.iter)
|
if isinstance(compr.iter, astroid.nodes.Attribute):
|
||||||
|
return InferAllReference.filter(compr.iter)
|
||||||
|
return False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def infer(cls, node, context=None):
|
def infer(cls, node, context=None):
|
||||||
@ -311,7 +330,7 @@ def parse_grist_names(builder):
|
|||||||
code_text = builder.get_text()
|
code_text = builder.get_text()
|
||||||
|
|
||||||
with use_inferences(InferReferenceColumn, InferReferenceFormula, InferLookupReference,
|
with use_inferences(InferReferenceColumn, InferReferenceFormula, InferLookupReference,
|
||||||
InferLookupComprehension):
|
InferLookupComprehension, InferAllReference):
|
||||||
atok = asttokens.ASTTokens(code_text, tree=astroid.builder.parse(code_text))
|
atok = asttokens.ASTTokens(code_text, tree=astroid.builder.parse(code_text))
|
||||||
|
|
||||||
def make_tuple(start, end, table_id, col_id):
|
def make_tuple(start, end, table_id, col_id):
|
||||||
|
@ -213,6 +213,7 @@ class TestRenames(test_engine.EngineTestCase):
|
|||||||
self.load_sample(self.sample)
|
self.load_sample(self.sample)
|
||||||
self.add_column("Address", "people", formula="People.lookupOne(addr=$id, city=$city).name")
|
self.add_column("Address", "people", formula="People.lookupOne(addr=$id, city=$city).name")
|
||||||
self.add_column("Address", "people2", formula="People.lookupRecords(addr=$id).name")
|
self.add_column("Address", "people2", formula="People.lookupRecords(addr=$id).name")
|
||||||
|
self.add_column("Address", "people3", formula="People.all.name")
|
||||||
out_actions = self.apply_user_action(["RenameColumn", "People", "name", "nombre"])
|
out_actions = self.apply_user_action(["RenameColumn", "People", "name", "nombre"])
|
||||||
self.assertPartialOutActions(out_actions, { "stored": [
|
self.assertPartialOutActions(out_actions, { "stored": [
|
||||||
["RenameColumn", "People", "name", "nombre"],
|
["RenameColumn", "People", "name", "nombre"],
|
||||||
@ -220,11 +221,14 @@ class TestRenames(test_engine.EngineTestCase):
|
|||||||
"People.lookupOne(addr=$id, city=$city).nombre"}],
|
"People.lookupOne(addr=$id, city=$city).nombre"}],
|
||||||
["ModifyColumn", "Address", "people2", {"formula":
|
["ModifyColumn", "Address", "people2", {"formula":
|
||||||
"People.lookupRecords(addr=$id).nombre"}],
|
"People.lookupRecords(addr=$id).nombre"}],
|
||||||
["BulkUpdateRecord", "_grist_Tables_column", [22, 25, 26], {
|
["ModifyColumn", "Address", "people3", {"formula":
|
||||||
"colId": ["nombre", "people", "people2"],
|
"People.all.nombre"}],
|
||||||
|
["BulkUpdateRecord", "_grist_Tables_column", [22, 25, 26, 27], {
|
||||||
|
"colId": ["nombre", "people", "people2", "people3"],
|
||||||
"formula": ["",
|
"formula": ["",
|
||||||
"People.lookupOne(addr=$id, city=$city).nombre",
|
"People.lookupOne(addr=$id, city=$city).nombre",
|
||||||
"People.lookupRecords(addr=$id).nombre"]
|
"People.lookupRecords(addr=$id).nombre",
|
||||||
|
"People.all.nombre"]
|
||||||
}],
|
}],
|
||||||
]})
|
]})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user