-
-
Notifications
You must be signed in to change notification settings - Fork 31
/
source.gleam.js
110 lines (108 loc) · 3.4 KB
/
source.gleam.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/gleam-lang/vscode-gleam>
// and licensed `apache-2.0`.
// See <https://github.com/wooorm/starry-night> for more info.
/**
* @import {Grammar} from '@wooorm/starry-night'
*/
/** @type {Grammar} */
const grammar = {
extensions: ['.gleam'],
names: ['gleam'],
patterns: [
{include: '#comments'},
{include: '#keywords'},
{include: '#strings'},
{include: '#constant'},
{include: '#entity'},
{include: '#discards'}
],
repository: {
binary_number: {
match: '\\b0[bB]0*1[01_]*\\b',
name: 'constant.numeric.binary.gleam'
},
comments: {patterns: [{match: '//.*', name: 'comment.line.gleam'}]},
constant: {
patterns: [
{include: '#binary_number'},
{include: '#octal_number'},
{include: '#hexadecimal_number'},
{include: '#decimal_number'},
{include: '#boolean'},
{match: '[[:upper:]][[:alnum:]]*', name: 'entity.name.type.gleam'}
]
},
decimal_number: {
match:
'\\b(0*[1-9][0-9_]*|0)(\\.(0*[1-9][0-9_]*|0)?(e-?0*[1-9][0-9]*)?)?\\b',
name: 'constant.numeric.decimal.gleam'
},
discards: {match: '\\b_(?:[[:word:]]+)?\\b', name: 'comment.unused.gleam'},
entity: {
patterns: [
{
begin: '\\b([[:lower:]][[:word:]]*)\\b[[:space:]]*\\(',
captures: {1: {name: 'entity.name.function.gleam'}},
end: '\\)',
patterns: [{include: '$self'}]
},
{
match: '\\b([[:lower:]][[:word:]]*):\\s',
name: 'variable.parameter.gleam'
},
{
match: '\\b([[:lower:]][[:word:]]*):',
name: 'entity.name.namespace.gleam'
}
]
},
hexadecimal_number: {
match: '\\b0[xX]0*[1-9a-zA-Z][0-9a-zA-Z]*\\b',
name: 'constant.numeric.hexadecimal.gleam'
},
keywords: {
patterns: [
{
match:
'\\b(as|use|case|if|fn|import|let|assert|pub|type|opaque|const|todo|panic|else|try)\\b',
name: 'keyword.control.gleam'
},
{match: '(<\\-|\\->)', name: 'keyword.operator.arrow.gleam'},
{match: '\\|>', name: 'keyword.operator.pipe.gleam'},
{match: '\\.\\.', name: 'keyword.operator.splat.gleam'},
{match: '(==|!=)', name: 'keyword.operator.comparison.gleam'},
{
match: '(<=\\.|>=\\.|<\\.|>\\.)',
name: 'keyword.operator.comparison.float.gleam'
},
{match: '(<=|>=|<|>)', name: 'keyword.operator.comparison.int.gleam'},
{match: '(&&|\\|\\|)', name: 'keyword.operator.logical.gleam'},
{match: '<>', name: 'keyword.operator.string.gleam'},
{match: '\\|', name: 'keyword.operator.other.gleam'},
{
match: '(\\+\\.|\\-\\.|/\\.|\\*\\.)',
name: 'keyword.operator.arithmetic.float.gleam'
},
{
match: '(\\+|\\-|/|\\*|%)',
name: 'keyword.operator.arithmetic.int.gleam'
},
{match: '=', name: 'keyword.operator.assignment.gleam'}
]
},
octal_number: {
match: '\\b0[oO]0*[1-7][0-7]*\\b',
name: 'constant.numeric.octal.gleam'
},
strings: {
begin: '"',
end: '"',
name: 'string.quoted.double.gleam',
patterns: [{match: '\\\\.', name: 'constant.character.escape.gleam'}]
}
},
scopeName: 'source.gleam'
}
export default grammar