Skip to content

Commit 345d41d

Browse files
authored
Merge pull request #293 from wise0704/lambda
Fix lambda expressions and anonymous methods
2 parents 1fc58ea + 29a37e5 commit 345d41d

File tree

4 files changed

+452
-237
lines changed

4 files changed

+452
-237
lines changed

grammars/csharp.tmLanguage

Lines changed: 142 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -7277,7 +7277,7 @@
72777277
(?<type_args>\s*<(?:[^<>]|\g<type_args>)+>\s*)?
72787278
)
72797279
(?:\s*\.\s*\g<name_and_type_args>)* | # Are there any more names being dotted into?
7280-
(?<tuple>\s*\((?:[^\(\)]|\g<tuple>)+\))
7280+
(?<tuple>\s*\((?:[^()]|\g<tuple>)+\))
72817281
)
72827282
(?:\s*\?\s*)? # nullable suffix?
72837283
(?:\s* # array suffix?
@@ -7903,7 +7903,12 @@
79037903
<key>begin</key>
79047904
<string>(?x)
79057905
((?:\b(?:async|static)\b\s*)*)
7906-
(@?[_[:alpha:]][_[:alnum:]]*)\b\s*
7906+
(?:
7907+
(@?[_[:alpha:]][_[:alnum:]]*)\b|
7908+
(\()
7909+
(?&lt;tuple&gt;(?:[^()]|\(\g&lt;tuple&gt;\))*)
7910+
(\))
7911+
)\s*
79077912
(=&gt;)</string>
79087913
<key>beginCaptures</key>
79097914
<dict>
@@ -7927,90 +7932,98 @@
79277932
<key>3</key>
79287933
<dict>
79297934
<key>name</key>
7930-
<string>keyword.operator.arrow.cs</string>
7931-
</dict>
7932-
</dict>
7933-
<key>end</key>
7934-
<string>(?=\)|;|}|,)</string>
7935-
<key>patterns</key>
7936-
<array>
7937-
<dict>
7938-
<key>include</key>
7939-
<string>#block</string>
7940-
</dict>
7941-
<dict>
7942-
<key>include</key>
7943-
<string>#ref-modifier</string>
7944-
</dict>
7945-
<dict>
7946-
<key>include</key>
7947-
<string>#expression</string>
7935+
<string>punctuation.parenthesis.open.cs</string>
79487936
</dict>
7949-
</array>
7950-
</dict>
7951-
<dict>
7952-
<key>begin</key>
7953-
<string>(?x)
7954-
((?:\b(?:async|static)\b\s*)*)
7955-
(?&lt;tuple&gt;
7956-
\(
7957-
(?:[^()]|\g&lt;tuple&gt;)*
7958-
\)
7959-
)\s*
7960-
(=&gt;)</string>
7961-
<key>beginCaptures</key>
7962-
<dict>
7963-
<key>1</key>
7937+
<key>4</key>
79647938
<dict>
79657939
<key>patterns</key>
79667940
<array>
79677941
<dict>
7968-
<key>match</key>
7969-
<string>async|static</string>
7970-
<key>name</key>
7971-
<string>storage.modifier.$0.cs</string>
7942+
<key>include</key>
7943+
<string>#comment</string>
7944+
</dict>
7945+
<dict>
7946+
<key>include</key>
7947+
<string>#explicit-anonymous-function-parameter</string>
79727948
</dict>
7973-
</array>
7974-
</dict>
7975-
<key>2</key>
7976-
<dict>
7977-
<key>patterns</key>
7978-
<array>
79797949
<dict>
79807950
<key>include</key>
7981-
<string>#lambda-parameter-list</string>
7951+
<string>#implicit-anonymous-function-parameter</string>
7952+
</dict>
7953+
<dict>
7954+
<key>include</key>
7955+
<string>#default-argument</string>
7956+
</dict>
7957+
<dict>
7958+
<key>include</key>
7959+
<string>#punctuation-comma</string>
79827960
</dict>
79837961
</array>
79847962
</dict>
7985-
<key>3</key>
7963+
<key>5</key>
7964+
<dict>
7965+
<key>name</key>
7966+
<string>punctuation.parenthesis.close.cs</string>
7967+
</dict>
7968+
<key>6</key>
79867969
<dict>
79877970
<key>name</key>
79887971
<string>keyword.operator.arrow.cs</string>
79897972
</dict>
79907973
</dict>
79917974
<key>end</key>
7992-
<string>(?=\)|;|}|,)</string>
7975+
<string>(?=[,;)}])</string>
79937976
<key>patterns</key>
79947977
<array>
79957978
<dict>
79967979
<key>include</key>
7997-
<string>#block</string>
7980+
<string>#intrusive</string>
79987981
</dict>
79997982
<dict>
8000-
<key>include</key>
8001-
<string>#ref-modifier</string>
7983+
<key>begin</key>
7984+
<string>(?={)</string>
7985+
<key>end</key>
7986+
<string>(?=[,;)}])</string>
7987+
<key>patterns</key>
7988+
<array>
7989+
<dict>
7990+
<key>include</key>
7991+
<string>#block</string>
7992+
</dict>
7993+
<dict>
7994+
<key>include</key>
7995+
<string>#intrusive</string>
7996+
</dict>
7997+
</array>
80027998
</dict>
80037999
<dict>
8004-
<key>include</key>
8005-
<string>#expression</string>
8000+
<key>begin</key>
8001+
<string>\b(ref)\b|(?=\S)</string>
8002+
<key>beginCaptures</key>
8003+
<dict>
8004+
<key>1</key>
8005+
<dict>
8006+
<key>name</key>
8007+
<string>storage.modifier.ref.cs</string>
8008+
</dict>
8009+
</dict>
8010+
<key>end</key>
8011+
<string>(?=[,;)}])</string>
8012+
<key>patterns</key>
8013+
<array>
8014+
<dict>
8015+
<key>include</key>
8016+
<string>#expression</string>
8017+
</dict>
8018+
</array>
80068019
</dict>
80078020
</array>
80088021
</dict>
80098022
<dict>
80108023
<key>begin</key>
80118024
<string>(?x)
80128025
((?:\b(?:async|static)\b\s*)*)
8013-
(?:\b(delegate)\b\s*)</string>
8026+
\b(delegate)\b\s*</string>
80148027
<key>beginCaptures</key>
80158028
<dict>
80168029
<key>1</key>
@@ -8032,12 +8045,49 @@
80328045
</dict>
80338046
</dict>
80348047
<key>end</key>
8035-
<string>(?=\)|;|}|,)</string>
8048+
<string>(?&lt;=})|(?=[,;)}])</string>
80368049
<key>patterns</key>
80378050
<array>
80388051
<dict>
80398052
<key>include</key>
8040-
<string>#parenthesized-parameter-list</string>
8053+
<string>#intrusive</string>
8054+
</dict>
8055+
<dict>
8056+
<key>begin</key>
8057+
<string>\(</string>
8058+
<key>beginCaptures</key>
8059+
<dict>
8060+
<key>0</key>
8061+
<dict>
8062+
<key>name</key>
8063+
<string>punctuation.parenthesis.open.cs</string>
8064+
</dict>
8065+
</dict>
8066+
<key>end</key>
8067+
<string>\)</string>
8068+
<key>endCaptures</key>
8069+
<dict>
8070+
<key>0</key>
8071+
<dict>
8072+
<key>name</key>
8073+
<string>punctuation.parenthesis.close.cs</string>
8074+
</dict>
8075+
</dict>
8076+
<key>patterns</key>
8077+
<array>
8078+
<dict>
8079+
<key>include</key>
8080+
<string>#intrusive</string>
8081+
</dict>
8082+
<dict>
8083+
<key>include</key>
8084+
<string>#explicit-anonymous-function-parameter</string>
8085+
</dict>
8086+
<dict>
8087+
<key>include</key>
8088+
<string>#punctuation-comma</string>
8089+
</dict>
8090+
</array>
80418091
</dict>
80428092
<dict>
80438093
<key>include</key>
@@ -8047,63 +8097,21 @@
80478097
</dict>
80488098
</array>
80498099
</dict>
8050-
<key>lambda-parameter-list</key>
8051-
<dict>
8052-
<key>begin</key>
8053-
<string>\(</string>
8054-
<key>beginCaptures</key>
8055-
<dict>
8056-
<key>0</key>
8057-
<dict>
8058-
<key>name</key>
8059-
<string>punctuation.parenthesis.open.cs</string>
8060-
</dict>
8061-
</dict>
8062-
<key>end</key>
8063-
<string>\)</string>
8064-
<key>endCaptures</key>
8065-
<dict>
8066-
<key>0</key>
8067-
<dict>
8068-
<key>name</key>
8069-
<string>punctuation.parenthesis.close.cs</string>
8070-
</dict>
8071-
</dict>
8072-
<key>patterns</key>
8073-
<array>
8074-
<dict>
8075-
<key>include</key>
8076-
<string>#comment</string>
8077-
</dict>
8078-
<dict>
8079-
<key>include</key>
8080-
<string>#attribute-section</string>
8081-
</dict>
8082-
<dict>
8083-
<key>include</key>
8084-
<string>#lambda-parameter</string>
8085-
</dict>
8086-
<dict>
8087-
<key>include</key>
8088-
<string>#punctuation-comma</string>
8089-
</dict>
8090-
</array>
8091-
</dict>
8092-
<key>lambda-parameter</key>
8100+
<key>explicit-anonymous-function-parameter</key>
80938101
<dict>
80948102
<key>match</key>
80958103
<string>(?x)
8096-
(?:\b(ref|out|in)\b)?\s*
8097-
(?:(?&lt;type_name&gt;
8104+
(?:\b(ref|params|out|in)\b\s*)?
8105+
(?&lt;type_name&gt;
80988106
(?:
80998107
(?:
81008108
(?:(?&lt;identifier&gt;@?[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
81018109
(?&lt;name_and_type_args&gt; # identifier + type arguments (if any)
81028110
\g&lt;identifier&gt;\s*
8103-
(?&lt;type_args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)+&gt;\s*)?
8111+
(?&lt;type_args&gt;&lt;(?:[^&lt;&gt;]|\g&lt;type_args&gt;)*&gt;\s*)?
81048112
)
81058113
(?:\s*\.\s*\g&lt;name_and_type_args&gt;)* | # Are there any more names being dotted into?
8106-
(?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
8114+
(?&lt;tuple&gt;\s*\((?:[^()]|\g&lt;tuple&gt;)*\))
81078115
)
81088116
(?:\s*\?\s*)? # nullable suffix?
81098117
(?:\s* # array suffix?
@@ -8115,9 +8123,8 @@
81158123
\s*
81168124
)*
81178125
)
8118-
)\s+)?
8119-
(\g&lt;identifier&gt;)\b\s*
8120-
(?=[,)])</string>
8126+
)\s*
8127+
\b(\g&lt;identifier&gt;)\b</string>
81218128
<key>captures</key>
81228129
<dict>
81238130
<key>1</key>
@@ -8142,6 +8149,35 @@
81428149
</dict>
81438150
</dict>
81448151
</dict>
8152+
<key>implicit-anonymous-function-parameter</key>
8153+
<dict>
8154+
<key>match</key>
8155+
<string>\@?[_[:alpha:]][_[:alnum:]]*\b</string>
8156+
<key>name</key>
8157+
<string>entity.name.variable.parameter.cs</string>
8158+
</dict>
8159+
<key>default-argument</key>
8160+
<dict>
8161+
<key>begin</key>
8162+
<string>=</string>
8163+
<key>beginCaptures</key>
8164+
<dict>
8165+
<key>0</key>
8166+
<dict>
8167+
<key>name</key>
8168+
<string>keyword.operator.assignment.cs</string>
8169+
</dict>
8170+
</dict>
8171+
<key>end</key>
8172+
<string>(?=,|\))</string>
8173+
<key>patterns</key>
8174+
<array>
8175+
<dict>
8176+
<key>include</key>
8177+
<string>#expression</string>
8178+
</dict>
8179+
</array>
8180+
</dict>
81458181
<key>type</key>
81468182
<dict>
81478183
<key>patterns</key>

0 commit comments

Comments
 (0)