@willbooster/tree-sitter-c-sharp 1.0.26 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/grammar.js +136 -6
- package/package.json +3 -3
- package/queries/highlights.scm +6 -0
- package/src/node-types.json +91 -0
- package/tree-sitter-c_sharp.wasm +0 -0
- package/tree-sitter.json +1 -1
package/README.md
CHANGED
|
@@ -31,13 +31,16 @@ Known gaps:
|
|
|
31
31
|
- A pointer dereference can be assigned to only when its operand is a variable, an address, a parenthesized or
|
|
32
32
|
postfix expression, or a cast of one of these or of an invocation (`*p = 1`, `*(p + 1) = 1`, `*(int*)p = 1`,
|
|
33
33
|
`*dst++ = 1`); `*++p = 1` and `*f() = 1` are not recognized
|
|
34
|
-
- File-based apps preprocessor directives (`#:property`, `#:package`, `#:sdk`, `#:project`) are not yet recognized
|
|
35
34
|
|
|
36
35
|
## Usage
|
|
37
36
|
|
|
38
37
|
The npm package ships `tree-sitter-c_sharp.wasm` for
|
|
39
38
|
[@willbooster/web-tree-sitter](https://www.npmjs.com/package/@willbooster/web-tree-sitter), which runs in Node.js, Bun,
|
|
40
|
-
browsers, and Cloudflare Workers.
|
|
39
|
+
browsers, and Cloudflare Workers. Use runtime version 1.1.2 or later: browser loading requires its asynchronous
|
|
40
|
+
instantiation support for this grammar. Install the runtime alongside the grammar when using the Wasm parser; it
|
|
41
|
+
remains an optional peer for consumers that only use the grammar source or queries.
|
|
42
|
+
|
|
43
|
+
In Node.js and Bun, load it from the package:
|
|
41
44
|
|
|
42
45
|
```js
|
|
43
46
|
import { fileURLToPath } from 'node:url';
|
|
@@ -85,8 +88,8 @@ fuzzed with, whose fixes keep incremental reparses consistent with fresh parses
|
|
|
85
88
|
|
|
86
89
|
```toml
|
|
87
90
|
[dependencies]
|
|
88
|
-
tree-sitter = { package = "willbooster-tree-sitter", version = "1.
|
|
89
|
-
tree-sitter-c-sharp = { package = "willbooster-tree-sitter-c-sharp", version = "
|
|
91
|
+
tree-sitter = { package = "willbooster-tree-sitter", version = "1.1.2" }
|
|
92
|
+
tree-sitter-c-sharp = { package = "willbooster-tree-sitter-c-sharp", version = "2" }
|
|
90
93
|
```
|
|
91
94
|
|
|
92
95
|
```rust
|
package/grammar.js
CHANGED
|
@@ -36,6 +36,10 @@ const PREC = {
|
|
|
36
36
|
SELECT: 0,
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
+
const directiveHorizontal = String.raw` \t\v\f\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF`;
|
|
40
|
+
const directiveLineBreak = String.raw`\r\n\u0085\u2028\u2029`;
|
|
41
|
+
const directiveWhitespace = directiveHorizontal + directiveLineBreak;
|
|
42
|
+
|
|
39
43
|
const decimalDigitSequence = /([0-9][0-9_]*[0-9]|[0-9])/;
|
|
40
44
|
|
|
41
45
|
const stringEncoding = /(u|U)8/;
|
|
@@ -147,6 +151,7 @@ module.exports = grammar({
|
|
|
147
151
|
$._lambda_paren_open,
|
|
148
152
|
$._end_of_input,
|
|
149
153
|
$._directive_crlf,
|
|
154
|
+
$._file_directive_preproc_arg,
|
|
150
155
|
],
|
|
151
156
|
|
|
152
157
|
extras: ($) => [
|
|
@@ -161,6 +166,7 @@ module.exports = grammar({
|
|
|
161
166
|
$.preproc_warning,
|
|
162
167
|
$.preproc_define,
|
|
163
168
|
$.preproc_undef,
|
|
169
|
+
$.file_directive,
|
|
164
170
|
],
|
|
165
171
|
|
|
166
172
|
inline: ($) => [
|
|
@@ -1748,6 +1754,7 @@ module.exports = grammar({
|
|
|
1748
1754
|
token(prec(-1, /[^\s\u0085\u2028\u2029]([^/\r\n\u0085\u2028\u2029]|\/[^*\r\n\u0085\u2028\u2029])*/)),
|
|
1749
1755
|
optional($._preproc_arg_slash)
|
|
1750
1756
|
),
|
|
1757
|
+
_file_directive_argument: ($) => seq($._file_directive_preproc_arg, optional($._preproc_arg_slash)),
|
|
1751
1758
|
_preproc_arg_slash: () => token.immediate(/\//),
|
|
1752
1759
|
preproc_directive: () => /#[ \t]*[a-zA-Z0-9]\w*/,
|
|
1753
1760
|
|
|
@@ -1790,10 +1797,19 @@ module.exports = grammar({
|
|
|
1790
1797
|
);
|
|
1791
1798
|
},
|
|
1792
1799
|
|
|
1793
|
-
preproc_region: ($) =>
|
|
1800
|
+
preproc_region: ($) =>
|
|
1801
|
+
seq(
|
|
1802
|
+
preprocessor('region'),
|
|
1803
|
+
optional(field('content', choice($.preproc_arg, alias($._file_directive_argument, $.preproc_arg)))),
|
|
1804
|
+
directiveEnd($)
|
|
1805
|
+
),
|
|
1794
1806
|
|
|
1795
1807
|
preproc_endregion: ($) =>
|
|
1796
|
-
seq(
|
|
1808
|
+
seq(
|
|
1809
|
+
preprocessor('endregion'),
|
|
1810
|
+
optional(field('content', choice($.preproc_arg, alias($._file_directive_argument, $.preproc_arg)))),
|
|
1811
|
+
directiveEnd($)
|
|
1812
|
+
),
|
|
1797
1813
|
|
|
1798
1814
|
preproc_line: ($) =>
|
|
1799
1815
|
seq(
|
|
@@ -1857,13 +1873,92 @@ module.exports = grammar({
|
|
|
1857
1873
|
directiveEnd($)
|
|
1858
1874
|
),
|
|
1859
1875
|
|
|
1860
|
-
preproc_error: ($) =>
|
|
1876
|
+
preproc_error: ($) =>
|
|
1877
|
+
seq(
|
|
1878
|
+
preprocessor('error'),
|
|
1879
|
+
choice($.preproc_arg, alias($._file_directive_argument, $.preproc_arg)),
|
|
1880
|
+
directiveEnd($)
|
|
1881
|
+
),
|
|
1861
1882
|
|
|
1862
|
-
preproc_warning: ($) =>
|
|
1883
|
+
preproc_warning: ($) =>
|
|
1884
|
+
seq(
|
|
1885
|
+
preprocessor('warning'),
|
|
1886
|
+
choice($.preproc_arg, alias($._file_directive_argument, $.preproc_arg)),
|
|
1887
|
+
directiveEnd($)
|
|
1888
|
+
),
|
|
1863
1889
|
|
|
1864
|
-
preproc_define: ($) =>
|
|
1890
|
+
preproc_define: ($) =>
|
|
1891
|
+
seq(
|
|
1892
|
+
preprocessor('define'),
|
|
1893
|
+
choice($.preproc_arg, alias($._file_directive_argument, $.preproc_arg)),
|
|
1894
|
+
directiveEnd($)
|
|
1895
|
+
),
|
|
1865
1896
|
|
|
1866
|
-
preproc_undef: ($) =>
|
|
1897
|
+
preproc_undef: ($) =>
|
|
1898
|
+
seq(
|
|
1899
|
+
preprocessor('undef'),
|
|
1900
|
+
choice($.preproc_arg, alias($._file_directive_argument, $.preproc_arg)),
|
|
1901
|
+
directiveEnd($)
|
|
1902
|
+
),
|
|
1903
|
+
|
|
1904
|
+
file_directive: ($) =>
|
|
1905
|
+
seq(
|
|
1906
|
+
choice(
|
|
1907
|
+
fileDirectiveArguments(
|
|
1908
|
+
$,
|
|
1909
|
+
choice(
|
|
1910
|
+
alias(token(prec(-2, /#:[sS][dD][kK]/)), '#:sdk'),
|
|
1911
|
+
alias(token(prec(-2, /#:[pP][aA][cC][kK][aA][gG][eE]/)), '#:package')
|
|
1912
|
+
),
|
|
1913
|
+
'@',
|
|
1914
|
+
'metadata'
|
|
1915
|
+
),
|
|
1916
|
+
fileDirectiveArguments(
|
|
1917
|
+
$,
|
|
1918
|
+
alias(token(prec(-2, /#:[pP][rR][oO][pP][eE][rR][tT][yY]/)), '#:property'),
|
|
1919
|
+
'=',
|
|
1920
|
+
'value'
|
|
1921
|
+
),
|
|
1922
|
+
seq(
|
|
1923
|
+
choice(
|
|
1924
|
+
alias(token(prec(-2, /#:[pP][rR][oO][jJ][eE][cC][tT]/)), '#:project'),
|
|
1925
|
+
alias(token(prec(-2, /#:[rR][eE][fF]/)), '#:ref'),
|
|
1926
|
+
alias(token(prec(-2, /#:[iI][nN][cC][lL][uU][dD][eE]/)), '#:include'),
|
|
1927
|
+
alias(token(prec(-2, /#:[eE][xX][cC][lL][uU][dD][eE]/)), '#:exclude')
|
|
1928
|
+
),
|
|
1929
|
+
optional(seq($._file_directive_spacing, field('value', $.file_directive_value)))
|
|
1930
|
+
),
|
|
1931
|
+
seq(
|
|
1932
|
+
$.file_directive_kind,
|
|
1933
|
+
optional(seq($._file_directive_spacing, optional(field('value', $.file_directive_value))))
|
|
1934
|
+
)
|
|
1935
|
+
),
|
|
1936
|
+
optional($._file_directive_spacing),
|
|
1937
|
+
choice(token.immediate(new RegExp(String.raw`\r\n|[${directiveLineBreak}]`)), $._end_of_input)
|
|
1938
|
+
),
|
|
1939
|
+
|
|
1940
|
+
file_directive_kind: () => token(prec(-2, new RegExp(`#:[^${directiveWhitespace}]*`))),
|
|
1941
|
+
|
|
1942
|
+
_file_directive_spacing: () => token.immediate(prec(1, new RegExp(`[${directiveHorizontal}]+`))),
|
|
1943
|
+
file_directive_name: () =>
|
|
1944
|
+
token.immediate(
|
|
1945
|
+
prec(
|
|
1946
|
+
2,
|
|
1947
|
+
choice(
|
|
1948
|
+
new RegExp(`[^${directiveWhitespace}@="]+`),
|
|
1949
|
+
new RegExp(String.raw`"([^"\\${directiveLineBreak}]|\\[^${directiveLineBreak}])*"`)
|
|
1950
|
+
)
|
|
1951
|
+
)
|
|
1952
|
+
),
|
|
1953
|
+
file_directive_value: () =>
|
|
1954
|
+
token.immediate(
|
|
1955
|
+
prec(
|
|
1956
|
+
1,
|
|
1957
|
+
new RegExp(
|
|
1958
|
+
`[^${directiveWhitespace}]([^${directiveLineBreak}]*[^${directiveWhitespace}])?|//[^${directiveLineBreak}]*`
|
|
1959
|
+
)
|
|
1960
|
+
)
|
|
1961
|
+
),
|
|
1867
1962
|
|
|
1868
1963
|
shebang_directive: () => token(seq('#!', /[^\r\n\u0085\u2028\u2029]*/)),
|
|
1869
1964
|
|
|
@@ -1871,6 +1966,41 @@ module.exports = grammar({
|
|
|
1871
1966
|
},
|
|
1872
1967
|
});
|
|
1873
1968
|
|
|
1969
|
+
/**
|
|
1970
|
+
* @param {GrammarSymbols<string>} $
|
|
1971
|
+
* @param {Rule} kind
|
|
1972
|
+
* @param {string} separator
|
|
1973
|
+
* @param {string} extraField
|
|
1974
|
+
* @returns {SeqRule}
|
|
1975
|
+
*/
|
|
1976
|
+
function fileDirectiveArguments($, kind, separator, extraField) {
|
|
1977
|
+
return seq(
|
|
1978
|
+
kind,
|
|
1979
|
+
optional(
|
|
1980
|
+
seq(
|
|
1981
|
+
$._file_directive_spacing,
|
|
1982
|
+
choice(
|
|
1983
|
+
seq(
|
|
1984
|
+
field('name', $.file_directive_name),
|
|
1985
|
+
optional(
|
|
1986
|
+
choice(
|
|
1987
|
+
seq(
|
|
1988
|
+
optional($._file_directive_spacing),
|
|
1989
|
+
token.immediate(prec(2, separator)),
|
|
1990
|
+
optional($._file_directive_spacing),
|
|
1991
|
+
optional(field('value', $.file_directive_value))
|
|
1992
|
+
),
|
|
1993
|
+
seq(optional($._file_directive_spacing), field(extraField, $.file_directive_value))
|
|
1994
|
+
)
|
|
1995
|
+
)
|
|
1996
|
+
),
|
|
1997
|
+
field('value', $.file_directive_value)
|
|
1998
|
+
)
|
|
1999
|
+
)
|
|
2000
|
+
)
|
|
2001
|
+
);
|
|
2002
|
+
}
|
|
2003
|
+
|
|
1874
2004
|
/**
|
|
1875
2005
|
* Ends a directive that opens no conditional section: at a line break, or at the end of the input, which a file may
|
|
1876
2006
|
* reach without a final line break.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@willbooster/tree-sitter-c-sharp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "C# grammar for tree-sitter",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"incremental",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@willbooster/oxfmt-config": "1.2.2",
|
|
48
48
|
"@willbooster/oxlint-config": "1.4.8",
|
|
49
49
|
"@willbooster/wb": "22.13.1",
|
|
50
|
-
"@willbooster/web-tree-sitter": "1.
|
|
50
|
+
"@willbooster/web-tree-sitter": "1.1.2",
|
|
51
51
|
"conventional-changelog-conventionalcommits": "10.4.0",
|
|
52
52
|
"lefthook": "2.1.14",
|
|
53
53
|
"oxfmt": "0.70.0",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"wrangler": "4.135.0"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
|
-
"@willbooster/web-tree-sitter": "^1.
|
|
66
|
+
"@willbooster/web-tree-sitter": "^1.1.2"
|
|
67
67
|
},
|
|
68
68
|
"peerDependenciesMeta": {
|
|
69
69
|
"@willbooster/web-tree-sitter": {
|
package/queries/highlights.scm
CHANGED
|
@@ -213,3 +213,9 @@
|
|
|
213
213
|
;; Method calls
|
|
214
214
|
|
|
215
215
|
(invocation_expression (member_access_expression name: (identifier) @function))
|
|
216
|
+
|
|
217
|
+
["#:sdk" "#:package" "#:property" "#:project" "#:ref" "#:include" "#:exclude"] @keyword.directive
|
|
218
|
+
(file_directive_name) @property
|
|
219
|
+
(file_directive_value) @string
|
|
220
|
+
|
|
221
|
+
(file_directive_kind) @keyword.directive
|
package/src/node-types.json
CHANGED
|
@@ -2788,6 +2788,53 @@
|
|
|
2788
2788
|
]
|
|
2789
2789
|
}
|
|
2790
2790
|
},
|
|
2791
|
+
{
|
|
2792
|
+
"type": "file_directive",
|
|
2793
|
+
"named": true,
|
|
2794
|
+
"extra": true,
|
|
2795
|
+
"fields": {
|
|
2796
|
+
"metadata": {
|
|
2797
|
+
"multiple": false,
|
|
2798
|
+
"required": false,
|
|
2799
|
+
"types": [
|
|
2800
|
+
{
|
|
2801
|
+
"type": "file_directive_value",
|
|
2802
|
+
"named": true
|
|
2803
|
+
}
|
|
2804
|
+
]
|
|
2805
|
+
},
|
|
2806
|
+
"name": {
|
|
2807
|
+
"multiple": false,
|
|
2808
|
+
"required": false,
|
|
2809
|
+
"types": [
|
|
2810
|
+
{
|
|
2811
|
+
"type": "file_directive_name",
|
|
2812
|
+
"named": true
|
|
2813
|
+
}
|
|
2814
|
+
]
|
|
2815
|
+
},
|
|
2816
|
+
"value": {
|
|
2817
|
+
"multiple": false,
|
|
2818
|
+
"required": false,
|
|
2819
|
+
"types": [
|
|
2820
|
+
{
|
|
2821
|
+
"type": "file_directive_value",
|
|
2822
|
+
"named": true
|
|
2823
|
+
}
|
|
2824
|
+
]
|
|
2825
|
+
}
|
|
2826
|
+
},
|
|
2827
|
+
"children": {
|
|
2828
|
+
"multiple": false,
|
|
2829
|
+
"required": false,
|
|
2830
|
+
"types": [
|
|
2831
|
+
{
|
|
2832
|
+
"type": "file_directive_kind",
|
|
2833
|
+
"named": true
|
|
2834
|
+
}
|
|
2835
|
+
]
|
|
2836
|
+
}
|
|
2837
|
+
},
|
|
2791
2838
|
{
|
|
2792
2839
|
"type": "file_scoped_namespace_declaration",
|
|
2793
2840
|
"named": true,
|
|
@@ -6711,6 +6758,34 @@
|
|
|
6711
6758
|
"type": "\"",
|
|
6712
6759
|
"named": false
|
|
6713
6760
|
},
|
|
6761
|
+
{
|
|
6762
|
+
"type": "#:exclude",
|
|
6763
|
+
"named": false
|
|
6764
|
+
},
|
|
6765
|
+
{
|
|
6766
|
+
"type": "#:include",
|
|
6767
|
+
"named": false
|
|
6768
|
+
},
|
|
6769
|
+
{
|
|
6770
|
+
"type": "#:package",
|
|
6771
|
+
"named": false
|
|
6772
|
+
},
|
|
6773
|
+
{
|
|
6774
|
+
"type": "#:project",
|
|
6775
|
+
"named": false
|
|
6776
|
+
},
|
|
6777
|
+
{
|
|
6778
|
+
"type": "#:property",
|
|
6779
|
+
"named": false
|
|
6780
|
+
},
|
|
6781
|
+
{
|
|
6782
|
+
"type": "#:ref",
|
|
6783
|
+
"named": false
|
|
6784
|
+
},
|
|
6785
|
+
{
|
|
6786
|
+
"type": "#:sdk",
|
|
6787
|
+
"named": false
|
|
6788
|
+
},
|
|
6714
6789
|
{
|
|
6715
6790
|
"type": "#define",
|
|
6716
6791
|
"named": false
|
|
@@ -6927,6 +7002,10 @@
|
|
|
6927
7002
|
"type": "??=",
|
|
6928
7003
|
"named": false
|
|
6929
7004
|
},
|
|
7005
|
+
{
|
|
7006
|
+
"type": "@",
|
|
7007
|
+
"named": false
|
|
7008
|
+
},
|
|
6930
7009
|
{
|
|
6931
7010
|
"type": "Cdecl",
|
|
6932
7011
|
"named": false
|
|
@@ -7132,6 +7211,18 @@
|
|
|
7132
7211
|
"type": "file",
|
|
7133
7212
|
"named": false
|
|
7134
7213
|
},
|
|
7214
|
+
{
|
|
7215
|
+
"type": "file_directive_kind",
|
|
7216
|
+
"named": true
|
|
7217
|
+
},
|
|
7218
|
+
{
|
|
7219
|
+
"type": "file_directive_name",
|
|
7220
|
+
"named": true
|
|
7221
|
+
},
|
|
7222
|
+
{
|
|
7223
|
+
"type": "file_directive_value",
|
|
7224
|
+
"named": true
|
|
7225
|
+
},
|
|
7135
7226
|
{
|
|
7136
7227
|
"type": "finally",
|
|
7137
7228
|
"named": false
|
package/tree-sitter-c_sharp.wasm
CHANGED
|
Binary file
|