powerquery-parser
powerquery-parser copied to clipboard
[BUG] - Recursive Section Member Reference Isn't Accepted as Valid
Expected behavior
The M language specification and the existing Power Query SDK allow a section member to use an exclusive identifier reference to refer to itself (e.g. the SumConsecutive(x - 1)
reference in the below example).
section SomeSection;
SumConsecutive = (x) => if x <= 0 then 0 else x + SumConsecutive(x - 1);
Actual behavior
The parser considers the above-mentioned reference an error, complaining that it "cannot find the name 'SumConsecutive'".
To Reproduce In VSCode, create a new Power Query document. Paste in the above M code. The error shown in the screenshot will then be displayed.
Additional context Power Query / M Language extension version: v0.1.42
Thank you for your help with this, and for the VSCode extension!
I don't believe this is a bug. Recursive functions should have the @
prefix, and if you add that prefix then the parser doesn't experience an error.
Thoughts?
Hi @JordanBoltonMN,
Thanks for taking a look at this!
Recursive functions should have the @ prefix[....]
I believe this is only true when the identifier being referenced is a record field or let expression variable.
From the language specification's discussion on Identifier references:
It is an error for an exclusive-identifier-reference to refer to an identifier that is currently being initialized if the referenced identifier is defined inside a record-initializer-expression or let-expression.
In this issue, the referenced identifier is a section member, so based on the above quote from the language specification (and as discussed in https://github.com/MicrosoftDocs/query-docs/pull/9#discussion_r949411116), I believe an exclusive identifier reference (no @
) should be considered valid in this case.
I believe you're right in that it's not a requirement on section members. If I had to guess this was a bug in the C# parser that went unnoticed, but in any case it's been shipped for who knows how long so it's now a feature. I'll have to update the scope generation for section members to include both @name
and name
.
Thank you, @JordanBoltonMN!