Skip to content

Commit 452fc72

Browse files
portal-chanKalitaAlexey
authored andcommitted
Add union highlighting (zargony#113)
1 parent 0a5774f commit 452fc72

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

grammars/rust.cson

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@
413413
# Type declaration
414414
{
415415
'comment': 'Type declaration'
416-
'begin': '\\b(enum|struct|trait)\\s+([a-zA-Z_][a-zA-Z0-9_]*)'
416+
'begin': '\\b(enum|struct|trait|union)\\s+([a-zA-Z_][a-zA-Z0-9_]*)'
417417
'end': '[\\{\\(;]'
418418
'beginCaptures': {
419419
'1': { 'name': 'storage.type.rust' }

spec/rust-spec.coffee

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,27 @@ describe 'Rust grammar', ->
441441
expect(tokens[4]).toEqual value: 'MyTupleStruct', scopes: ['source.rust', 'entity.name.type.rust']
442442
expect(tokens[6]).toEqual value: 'pub', scopes: ['source.rust', 'storage.modifier.visibility.rust']
443443

444+
it 'tokenizes unions', ->
445+
tokens = grammar.tokenizeLines('''
446+
pub union MyUnion<'foo> {
447+
pub one: u32,
448+
two: Option<'a, MyEnum>,
449+
three: &'foo i32,
450+
}
451+
''')
452+
expect(tokens[0][0]).toEqual value: 'pub', scopes: ['source.rust', 'storage.modifier.visibility.rust']
453+
expect(tokens[0][2]).toEqual value: 'union', scopes: ['source.rust', 'storage.type.rust']
454+
expect(tokens[0][4]).toEqual value: 'MyUnion', scopes: ['source.rust', 'entity.name.type.rust']
455+
expect(tokens[0][5]).toEqual value: '<', scopes: ['source.rust', 'meta.type_params.rust']
456+
expect(tokens[0][6]).toEqual value: '\'', scopes: ['source.rust', 'meta.type_params.rust', 'storage.modifier.lifetime.rust']
457+
expect(tokens[0][7]).toEqual value: 'foo', scopes: ['source.rust', 'meta.type_params.rust', 'storage.modifier.lifetime.rust', 'entity.name.lifetime.rust']
458+
expect(tokens[1][1]).toEqual value: 'pub', scopes: ['source.rust', 'storage.modifier.visibility.rust']
459+
expect(tokens[2][3]).toEqual value: '\'', scopes: ['source.rust', 'storage.modifier.lifetime.rust']
460+
expect(tokens[2][4]).toEqual value: 'a', scopes: ['source.rust', 'storage.modifier.lifetime.rust', 'entity.name.lifetime.rust']
461+
expect(tokens[3][2]).toEqual value: '\'', scopes: ['source.rust', 'storage.modifier.lifetime.rust']
462+
expect(tokens[3][3]).toEqual value: 'foo', scopes: ['source.rust', 'storage.modifier.lifetime.rust', 'entity.name.lifetime.rust']
463+
464+
444465
it 'tokenizes type aliases', ->
445466
{tokens} = grammar.tokenizeLine('type MyType = u32;')
446467
expect(tokens[0]).toEqual value: 'type', scopes: ['source.rust', 'storage.type.rust']

0 commit comments

Comments
 (0)