Warning
Incomplete and abandoned. I'm leaving this up in case anyone finds it useful, but even I'm questioning why past me didn't split up the razor and csharp parts completely so I'm not sure this will be worth forking
C# grammar for tree-sitter based upon the Roslyn grammar with changes in order to:
- Deal with differences between the parsing technologies
- Work around some bugs in that grammar
- Handle
#if,#else,#elif,#endifblocks - Support syntax highlighting/parsing of fragments
- Simplify the output tree
Comprehensive supports C# 1 through 10.0 with the following exceptions:
-
async,varandawaitcannot be used as identifiers everywhere they are valid
- global using directives
- File-scoped namespace declaration
- Extended property patterns
- Allow const interpolated strings
- Record types can seal ToString()
- Allow both assignment and declaration in the same deconstruction
- Allow AsyncMethodBuilder attribute on methods
- Record structs
- Lambda improvements
- Generic attributes
- Static abstract members in interfaces
- Newlines in string interpolations
- List patterns
- Slice pattern
- Required members
- File scoped classes
- Raw string literals
- File scoped types
- Scoped ref
- Official C# 6 Language Spec provides chapters that formally define the language grammar.
- Roslyn C# language grammar export
- SharpLab (web-based syntax tree playground based on Roslyn)