Closed Sveder closed 1 month ago
I've grown more confident this is indeed a bug. My research leads me to believe that tuple_pattern
clause in variable_declarator
is wrong in this case. The commit introducing it is explicitly deviating from the C# spec:
https://github.com/tree-sitter/tree-sitter-c-sharp/commit/57ba56f25b415da5b3dd2e7381387fa99d71b314
My best idea is currently to have a specific variable_declarator
(say a using_variable_declarator
) that doesn't allow tuples inside using statements. It is hard to reason about this since it is not part of the spec, but seems like a safe change to me. Does this make sense @maxbrunsfeld?
So is this project unmaintained? @damieng @amaanq @tamasvajk (just randomly pinging people who seem to have committed a lot lately as there is no CODEOWNERS file).
There are maintainers around but like a lot of projects we're fixing the issues we individually need/want fixing and shepherding external pull requests given we're all volunteers and not financially backed.
Not sure why your PR didn't show up on my notifications - I'll take a look.
Thinking out loud, I think there are multiple ways to fix this:
using
statement, as in https://github.com/tree-sitter/tree-sitter-c-sharp/pull/327using
statements have a non-optional equals_value_clause
type tuple_pattern
is only valid if type
is implicit_type
, also, there can't be multiple tuple patterns in the same variable declaration, for example var (x,y) = (1,2), (a,b) = (3,4);
is not valid.
I'm testing some parsing with big projects and in two instances I think I found the same parsing error. It also reproduces in the TreeSitter playground for csharp.
Simplified issue:
parses into a using_statement->variable_declaration
removing the parameters to the function results in the correct using_statement -> invocation_expression. Example code:
parses into:
Actual file to parse/copy paste into playground: https://github.com/NancyFx/Nancy/blob/master/test/Nancy.Hosting.Self.Tests/NancySelfHostFixture.cs#L80 This file has a few using statements - some without arguments that parse to an invocation (as they should) and some, like I linked, with arguments that is parsed to a variable_declarator.
I've started looking at the grammar.js and C# spec to find the issue, it might just be a precedence issues, but wanted to open this issue to ask:
Thanks :)