mirror of https://github.com/Wilfred/difftastic/
git-subtree-dir: vendor/tree-sitter-c-sharp git-subtree-mainline: |
||
|---|---|---|
| .. | ||
| .github/workflows | ||
| bindings | ||
| corpus | ||
| queries | ||
| script | ||
| src | ||
| test/queries | ||
| .gitattributes | ||
| .gitignore | ||
| .npmignore | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
| binding.gyp | ||
| grammar.js | ||
| index.js | ||
| package.json | ||
| test.js | ||
README.md
tree-sitter-c-sharp
C# grammar for tree-sitter based on an export of the Roslyn grammar export with various 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
Status
Comprehensive support for C# exists with the following exceptions:
async,varandawaitcannot be used as identifiers
C# 7.0 (complete)
- Tuples
- Discards
- Basic pattern matching
- Recursive pattern matching
- Ref locals and return
- Local function statements
- Expression bodied constructors
- Expression bodied destructors/finalizers
- Throw expressions
- Binary and
_literal support
C# 7.1 (complete)
asyncmain method- Default literals (as
default_expression) - Inferred tuple element names
- Generic type pattern matching
C# 7.2 (complete)
inparameter modifiersref readonlymethod returnsreadonly structref struct- Non-named trailing arguments
_leading binary and hex literalsprivate protectedmodifier- Conditional
refexpressions
C# 7.3 (complete)
stackallocarray initializersunmanagedgeneric type parameter constraint- Attributes attached to auto property backing fields
outsupport for parameters on initializers, constructors etc.
C# 8.0 (complete)
readonlymembers- Default interface methods
switchexpressionsswitchproperty patternsswitchtuple patternsstaticlocal functions- Nullable reference types
- Null-forgiving operator
- Null-coalescing assignment
C# 9.0 (complete)
- Covariant returns
- Extending partial methods
- Extension GetEnumerator
- Function pointers
- Init properties
- Lambda discard parameters
- Local function attributes
- Module initializers
- Native integers
- Patterns
- Simple type patterns
- Relational patterns
- Logical patterns
- Records
- Skip Locals Init
- Static anonymous functions
- Target-typed conditional expression
- Target-typed new
- Top-level statements
C# 10.0
- 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
References
- 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)