I don't understand your rejection of this feature. In the example, y is certainly within scope when foo() is called. The problem arises because the scope determined by the return address is not correct until foo() returns. You select which set of locals to display by selecting a stack frame. If the called and calling function have identically named variables, they are in different stack frames. You'll see one when selecting one stack frame, the other when selecting the other stack frame. If this is not sufficient to keep the two apart, I guess that you will feel the same confusion when creating or modifying the code in a plain code editor, regardless of debugger features. [Edit: This was an answer to another reply that seems to have been subsequently deleted.]
Religious freedom is the freedom to say that two plus two make five.