Skip to content

prevent With clause name shadowing #359

@agentm

Description

@agentm

Name shadowing can be quite a footgun. Example:

TutorialD (master/main): x:=with (x as true) x
("with type",Relation (attributesFromList []) (RelationTupleSet {asList = []}))
("with type",Relation (attributesFromList []) (RelationTupleSet {asList = []}))
TutorialD (master/main): :showexpr x
ERR: RelVarAlreadyDefinedError "x"

The original expression should almost certainly be rejected, but the relational expression validation is sound, so we would need to check that the new relvarname "x" is not mentioned in the with clause names.

I am toying with the idea of preventing name shadowing of relvars or other with clause macro names (even macros shadowing macros). It does seem that name shadowing can be sometimes useful when moving subexpressions around, but the risk and cost of mistakes here is very high.

Any objection?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions