RX0116

Domain: Parsing

Error message

an unlabeled role: %s (%s)

In the message, %s marks a value that the engine fills in when it raises the error.

The story

Two of your arguments have the same type but play different roles, and only one of them was labeled. Let's use substring as the example. It takes a start and an end. Both are numbers. If you write only the end with a label and leave the start bare, you are counting on the reader to work out the start by elimination. But in rush, position never carries a role. So both must be labeled: start, one, end, three. There is one exception: the being of the call, the one main thing it works on, stays bare. So range of one, with end ten, is fine, because the start is range's being. And when two arguments share both type and role, like the two operands of an addition, nothing needs a label. The message names the call, the two parameters, their type, and their roles. The fix: add the missing label so each role is visible by name. Then anyone reading the call knows which number means what, without guessing.

Text from the Rush engine's error catalogue.