Skip to content

Commit 436456e

Browse files
Ensure that 'await' is highlighted properly in situations where it might look like a local declaration
1 parent 33e8236 commit 436456e

File tree

6 files changed

+65
-2
lines changed

6 files changed

+65
-2
lines changed

grammars/csharp.tmLanguage

+26
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,10 @@
309309
<key>include</key>
310310
<string>#yield-statement</string>
311311
</dict>
312+
<dict>
313+
<key>include</key>
314+
<string>#await-statement</string>
315+
</dict>
312316
<dict>
313317
<key>include</key>
314318
<string>#try-statement</string>
@@ -2529,6 +2533,28 @@
25292533
</dict>
25302534
</dict>
25312535
</dict>
2536+
<key>await-statement</key>
2537+
<dict>
2538+
<key>begin</key>
2539+
<string>(?&lt;!\.)\b(await)\b</string>
2540+
<key>beginCaptures</key>
2541+
<dict>
2542+
<key>1</key>
2543+
<dict>
2544+
<key>name</key>
2545+
<string>keyword.other.await.cs</string>
2546+
</dict>
2547+
</dict>
2548+
<key>end</key>
2549+
<string>(?=;)</string>
2550+
<key>patterns</key>
2551+
<array>
2552+
<dict>
2553+
<key>include</key>
2554+
<string>#expression</string>
2555+
</dict>
2556+
</array>
2557+
</dict>
25322558
<key>if-statement</key>
25332559
<dict>
25342560
<key>begin</key>

grammars/csharp.tmLanguage.cson

+14
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,9 @@ repository:
216216
{
217217
include: "#yield-statement"
218218
}
219+
{
220+
include: "#await-statement"
221+
}
219222
{
220223
include: "#try-statement"
221224
}
@@ -1587,6 +1590,17 @@ repository:
15871590
name: "keyword.control.flow.yield.cs"
15881591
"2":
15891592
name: "keyword.control.flow.break.cs"
1593+
"await-statement":
1594+
begin: "(?<!\\.)\\b(await)\\b"
1595+
beginCaptures:
1596+
"1":
1597+
name: "keyword.other.await.cs"
1598+
end: "(?=;)"
1599+
patterns: [
1600+
{
1601+
include: "#expression"
1602+
}
1603+
]
15901604
"if-statement":
15911605
begin: "(?<!\\.)\\b(if)\\b\\s*(?=\\()"
15921606
beginCaptures:

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@
3434
"gulp": "^3.9.1",
3535
"gulp-json2cson": "^1.0.1",
3636
"gulp-mocha": "^3.0.1",
37-
"gulp-typescript": "^3.1.3",
37+
"gulp-typescript": "^3.2.2",
3838
"gulp-yaml": "^1.0.1",
3939
"js-yaml": "^3.7.0",
4040
"mocha": "^3.2.0",
4141
"plist": "^2.0.1",
42-
"typescript": "^2.3.3",
42+
"typescript": "^2.5.2",
4343
"vscode-textmate": "^2.3.2"
4444
}
4545
}

src/csharp.tmLanguage.yml

+11
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ repository:
9191
- include: '#break-or-continue-statement'
9292
- include: '#throw-statement'
9393
- include: '#yield-statement'
94+
- include: '#await-statement'
9495
- include: '#try-statement'
9596
- include: '#checked-unchecked-statement'
9697
- include: '#lock-statement'
@@ -934,6 +935,16 @@ repository:
934935
'1': { name: keyword.control.flow.yield.cs }
935936
'2': { name: keyword.control.flow.break.cs }
936937

938+
# Technically, there isn't an "await statement" in the C# grammar. However, including one here makes it easier to handle
939+
# the scenario where an await-expression will be match by local-declaration first. (e.g. await x;)
940+
await-statement:
941+
begin: (?<!\.)\b(await)\b
942+
beginCaptures:
943+
'1': { name: keyword.other.await.cs }
944+
end: (?=;)
945+
patterns:
946+
- include: '#expression'
947+
937948
if-statement:
938949
begin: (?<!\.)\b(if)\b\s*(?=\()
939950
beginCaptures:

test/expressions.tests.ts

+11
Original file line numberDiff line numberDiff line change
@@ -968,6 +968,17 @@ var x = new
968968
Token.Punctuation.Semicolon
969969
]);
970970
});
971+
972+
it("statement level (issue #83)", () => {
973+
const input = Input.InMethod(`await x;`);
974+
const tokens = tokenize(input);
975+
976+
tokens.should.deep.equal([
977+
Token.Keywords.Await,
978+
Token.Variables.ReadWrite("x"),
979+
Token.Punctuation.Semicolon
980+
]);
981+
});
971982
});
972983

973984
describe("Casts", () => {

tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"rootDir": ".",
88
"noImplicitReturns": true
99
},
10+
"compileOnSave": true,
1011
"exclude": [
1112
"node_modules"
1213
]

0 commit comments

Comments
 (0)