@@ -14,44 +14,31 @@ describe "Clojure grammar", ->
14
14
15
15
it " tokenizes semi-colon comments" , ->
16
16
{tokens } = grammar .tokenizeLine " ; clojure"
17
- expect (tokens[0 ].value ).toEqual " ;"
18
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " comment.line.semicolon.clojure" , " punctuation.definition.comment.clojure" ]
19
- expect (tokens[1 ].value ).toEqual " clojure"
20
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " comment.line.semicolon.clojure" ]
17
+ expect (tokens[0 ]).toEqual value : " ;" , scopes : [" source.clojure" , " comment.line.semicolon.clojure" , " punctuation.definition.comment.clojure" ]
18
+ expect (tokens[1 ]).toEqual value : " clojure" , scopes : [" source.clojure" , " comment.line.semicolon.clojure" ]
21
19
22
20
it " tokenizes shebang comments" , ->
23
21
{tokens } = grammar .tokenizeLine " #!/usr/bin/env clojure"
24
- expect (tokens[0 ].value ).toEqual " #!"
25
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " comment.line.semicolon.clojure" , " punctuation.definition.comment.shebang.clojure" ]
26
- expect (tokens[1 ].value ).toEqual " /usr/bin/env clojure"
27
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " comment.line.semicolon.clojure" ]
22
+ expect (tokens[0 ]).toEqual value : " #!" , scopes : [" source.clojure" , " comment.line.semicolon.clojure" , " punctuation.definition.comment.shebang.clojure" ]
23
+ expect (tokens[1 ]).toEqual value : " /usr/bin/env clojure" , scopes : [" source.clojure" , " comment.line.semicolon.clojure" ]
28
24
29
25
it " tokenizes strings" , ->
30
- {tokens } = grammar .tokenizeLine " \" foo bar\" "
31
- expect (tokens[0 ].value ).toEqual " \" "
32
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.begin.clojure" ]
33
- expect (tokens[1 ].value ).toEqual " foo bar"
34
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " string.quoted.double.clojure" ]
35
- expect (tokens[2 ].value ).toEqual " \" "
36
- expect (tokens[2 ].scopes ).toEqual [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.end.clojure" ]
26
+ {tokens } = grammar .tokenizeLine ' "foo bar"'
27
+ expect (tokens[0 ]).toEqual value : ' "' , scopes : [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.begin.clojure" ]
28
+ expect (tokens[1 ]).toEqual value : ' foo bar' , scopes : [" source.clojure" , " string.quoted.double.clojure" ]
29
+ expect (tokens[2 ]).toEqual value : ' "' , scopes : [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.end.clojure" ]
37
30
38
31
it " tokenizes character escape sequences" , ->
39
- {tokens } = grammar .tokenizeLine " \"\\ n\" "
40
- expect (tokens[0 ].value ).toEqual " \" "
41
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.begin.clojure" ]
42
- expect (tokens[1 ].value ).toEqual " \\ n"
43
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " string.quoted.double.clojure" , " constant.character.escape.clojure" ]
44
- expect (tokens[2 ].value ).toEqual " \" "
45
- expect (tokens[2 ].scopes ).toEqual [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.end.clojure" ]
32
+ {tokens } = grammar .tokenizeLine ' "\\ n"'
33
+ expect (tokens[0 ]).toEqual value : ' "' , scopes : [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.begin.clojure" ]
34
+ expect (tokens[1 ]).toEqual value : ' \\ n' , scopes : [" source.clojure" , " string.quoted.double.clojure" , " constant.character.escape.clojure" ]
35
+ expect (tokens[2 ]).toEqual value : ' "' , scopes : [" source.clojure" , " string.quoted.double.clojure" , " punctuation.definition.string.end.clojure" ]
46
36
47
37
it " tokenizes regexes" , ->
48
- {tokens } = grammar .tokenizeLine " #\" foo\" "
49
- expect (tokens[0 ].value ).toEqual " #\" "
50
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " string.regexp.clojure" ]
51
- expect (tokens[1 ].value ).toEqual " foo"
52
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " string.regexp.clojure" ]
53
- expect (tokens[2 ].value ).toEqual " \" "
54
- expect (tokens[2 ].scopes ).toEqual [" source.clojure" , " string.regexp.clojure" ]
38
+ {tokens } = grammar .tokenizeLine ' #"foo"'
39
+ expect (tokens[0 ]).toEqual value : ' #"' , scopes : [" source.clojure" , " string.regexp.clojure" ]
40
+ expect (tokens[1 ]).toEqual value : ' foo' , scopes : [" source.clojure" , " string.regexp.clojure" ]
41
+ expect (tokens[2 ]).toEqual value : ' "' , scopes : [" source.clojure" , " string.regexp.clojure" ]
55
42
56
43
it " tokenizes numerics" , ->
57
44
numbers =
@@ -67,8 +54,7 @@ describe "Clojure grammar", ->
67
54
for scope, nums of numbers
68
55
for num in nums
69
56
{tokens } = grammar .tokenizeLine num
70
- expect (tokens[0 ].value ).toEqual num
71
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , scope]
57
+ expect (tokens[0 ]).toEqual value : num, scopes : [" source.clojure" , scope]
72
58
73
59
it " tokenizes booleans" , ->
74
60
booleans =
@@ -77,13 +63,11 @@ describe "Clojure grammar", ->
77
63
for scope, bools of booleans
78
64
for bool in bools
79
65
{tokens } = grammar .tokenizeLine bool
80
- expect (tokens[0 ].value ).toEqual bool
81
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , scope]
66
+ expect (tokens[0 ]).toEqual value : bool, scopes : [" source.clojure" , scope]
82
67
83
68
it " tokenizes nil" , ->
84
69
{tokens } = grammar .tokenizeLine " nil"
85
- expect (tokens[0 ].value ).toEqual " nil"
86
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " constant.language.nil.clojure" ]
70
+ expect (tokens[0 ]).toEqual value : " nil" , scopes : [" source.clojure" , " constant.language.nil.clojure" ]
87
71
88
72
it " tokenizes keywords" , ->
89
73
tests =
@@ -95,87 +79,67 @@ describe "Clojure grammar", ->
95
79
for metaScope, lines of tests
96
80
for line in lines
97
81
{tokens } = grammar .tokenizeLine line
98
- expect (tokens[1 ].value ).toEqual " :foo"
99
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , metaScope, " constant.keyword.clojure" ]
82
+ expect (tokens[1 ]).toEqual value : " :foo" , scopes : [" source.clojure" , metaScope, " constant.keyword.clojure" ]
100
83
101
84
it " tokenizes keyfns (keyword control)" , ->
102
85
keyfns = [" declare" , " declare-" , " ns" , " in-ns" , " import" , " use" , " require" , " load" , " compile" , " def" , " defn" , " defn-" , " defmacro" ]
103
86
104
87
for keyfn in keyfns
105
88
{tokens } = grammar .tokenizeLine " (#{ keyfn} )"
106
- expect (tokens[1 ].value ).toEqual keyfn
107
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " meta.expression.clojure" , " keyword.control.clojure" ]
89
+ expect (tokens[1 ]).toEqual value : keyfn, scopes : [" source.clojure" , " meta.expression.clojure" , " keyword.control.clojure" ]
108
90
109
91
it " tokenizes keyfns (storage control)" , ->
110
92
keyfns = [" if" , " when" , " for" , " cond" , " do" , " let" , " binding" , " loop" , " recur" , " fn" , " throw" , " try" , " catch" , " finally" , " case" ]
111
93
112
94
for keyfn in keyfns
113
95
{tokens } = grammar .tokenizeLine " (#{ keyfn} )"
114
- expect (tokens[1 ].value ).toEqual keyfn
115
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " meta.expression.clojure" , " storage.control.clojure" ]
96
+ expect (tokens[1 ]).toEqual value : keyfn, scopes : [" source.clojure" , " meta.expression.clojure" , " storage.control.clojure" ]
116
97
117
98
it " tokenizes global definitions" , ->
118
99
{tokens } = grammar .tokenizeLine " (def foo 'bar)"
119
- expect (tokens[1 ].value ).toEqual " def"
120
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " meta.expression.clojure" , " meta.definition.global.clojure" , " keyword.control.clojure" ]
121
- expect (tokens[3 ].value ).toEqual " foo"
122
- expect (tokens[3 ].scopes ).toEqual [" source.clojure" , " meta.expression.clojure" , " meta.definition.global.clojure" , " entity.global.clojure" ]
100
+ expect (tokens[1 ]).toEqual value : " def" , scopes : [" source.clojure" , " meta.expression.clojure" , " meta.definition.global.clojure" , " keyword.control.clojure" ]
101
+ expect (tokens[3 ]).toEqual value : " foo" , scopes : [" source.clojure" , " meta.expression.clojure" , " meta.definition.global.clojure" , " entity.global.clojure" ]
123
102
124
103
it " tokenizes dynamic variables" , ->
125
104
mutables = [" *ns*" , " *foo-bar*" ]
126
105
127
106
for mutable in mutables
128
107
{tokens } = grammar .tokenizeLine mutable
129
- expect (tokens[0 ].value ).toEqual mutable
130
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " meta.symbol.dynamic.clojure" ]
108
+ expect (tokens[0 ]).toEqual value : mutable, scopes : [" source.clojure" , " meta.symbol.dynamic.clojure" ]
131
109
132
110
it " tokenizes metadata" , ->
133
111
{tokens } = grammar .tokenizeLine " ^Foo"
134
- expect (tokens[0 ].value ).toEqual " ^"
135
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " meta.metadata.simple.clojure" ]
136
- expect (tokens[1 ].value ).toEqual " Foo"
137
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " meta.metadata.simple.clojure" , " meta.symbol.clojure" ]
112
+ expect (tokens[0 ]).toEqual value : " ^" , scopes : [" source.clojure" , " meta.metadata.simple.clojure" ]
113
+ expect (tokens[1 ]).toEqual value : " Foo" , scopes : [" source.clojure" , " meta.metadata.simple.clojure" , " meta.symbol.clojure" ]
138
114
139
115
{tokens } = grammar .tokenizeLine " ^{:foo true}"
140
- expect (tokens[0 ].value ).toEqual " ^{"
141
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " meta.metadata.map.clojure" , " punctuation.section.metadata.map.begin.clojure" ]
142
- expect (tokens[1 ].value ).toEqual " :foo"
143
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " meta.metadata.map.clojure" , " constant.keyword.clojure" ]
144
- expect (tokens[2 ].value ).toEqual " "
145
- expect (tokens[2 ].scopes ).toEqual [" source.clojure" , " meta.metadata.map.clojure" ]
146
- expect (tokens[3 ].value ).toEqual " true"
147
- expect (tokens[3 ].scopes ).toEqual [" source.clojure" , " meta.metadata.map.clojure" , " constant.language.boolean.clojure" ]
148
- expect (tokens[4 ].value ).toEqual " }"
149
- expect (tokens[4 ].scopes ).toEqual [" source.clojure" , " meta.metadata.map.clojure" , " punctuation.section.metadata.map.end.clojure" ]
116
+ expect (tokens[0 ]).toEqual value : " ^{" , scopes : [" source.clojure" , " meta.metadata.map.clojure" , " punctuation.section.metadata.map.begin.clojure" ]
117
+ expect (tokens[1 ]).toEqual value : " :foo" , scopes : [" source.clojure" , " meta.metadata.map.clojure" , " constant.keyword.clojure" ]
118
+ expect (tokens[2 ]).toEqual value : " " , scopes : [" source.clojure" , " meta.metadata.map.clojure" ]
119
+ expect (tokens[3 ]).toEqual value : " true" , scopes : [" source.clojure" , " meta.metadata.map.clojure" , " constant.language.boolean.clojure" ]
120
+ expect (tokens[4 ]).toEqual value : " }" , scopes : [" source.clojure" , " meta.metadata.map.clojure" , " punctuation.section.metadata.map.end.clojure" ]
150
121
151
122
it " tokenizes functions" , ->
152
123
expressions = [" (foo)" , " (foo 1 10)" ]
153
124
154
125
for expr in expressions
155
126
{tokens } = grammar .tokenizeLine expr
156
- expect (tokens[1 ].value ).toEqual " foo"
157
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" , " meta.expression.clojure" , " entity.name.function.clojure" ]
127
+ expect (tokens[1 ]).toEqual value : " foo" , scopes : [" source.clojure" , " meta.expression.clojure" , " entity.name.function.clojure" ]
158
128
159
129
it " tokenizes vars" , ->
160
130
{tokens } = grammar .tokenizeLine " (func #'foo)"
161
- expect (tokens[2 ].value ).toEqual " #"
162
- expect (tokens[2 ].scopes ).toEqual [" source.clojure" , " meta.expression.clojure" ]
163
- expect (tokens[3 ].value ).toEqual " 'foo"
164
- expect (tokens[3 ].scopes ).toEqual [" source.clojure" , " meta.expression.clojure" , " meta.var.clojure" ]
131
+ expect (tokens[2 ]).toEqual value : " #" , scopes : [" source.clojure" , " meta.expression.clojure" ]
132
+ expect (tokens[3 ]).toEqual value : " 'foo" , scopes : [" source.clojure" , " meta.expression.clojure" , " meta.var.clojure" ]
165
133
166
134
it " tokenizes symbols" , ->
167
135
{tokens } = grammar .tokenizeLine " foo/bar"
168
- expect (tokens[0 ].value ).toEqual " foo"
169
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " meta.symbol.namespace.clojure" ]
170
- expect (tokens[1 ].value ).toEqual " /"
171
- expect (tokens[1 ].scopes ).toEqual [" source.clojure" ]
172
- expect (tokens[2 ].value ).toEqual " bar"
173
- expect (tokens[2 ].scopes ).toEqual [" source.clojure" , " meta.symbol.clojure" ]
136
+ expect (tokens[0 ]).toEqual value : " foo" , scopes : [" source.clojure" , " meta.symbol.namespace.clojure" ]
137
+ expect (tokens[1 ]).toEqual value : " /" , scopes : [" source.clojure" ]
138
+ expect (tokens[2 ]).toEqual value : " bar" , scopes : [" source.clojure" , " meta.symbol.clojure" ]
174
139
175
140
it " tokenizes trailing whitespace" , ->
176
141
{tokens } = grammar .tokenizeLine " \n "
177
- expect (tokens[0 ].value ).toEqual " \n "
178
- expect (tokens[0 ].scopes ).toEqual [" source.clojure" , " invalid.trailing-whitespace" ]
142
+ expect (tokens[0 ]).toEqual value : " \n " , scopes : [" source.clojure" , " invalid.trailing-whitespace" ]
179
143
180
144
# TODO: Test 'after' tokens?
181
145
testMetaSection = (metaScope , puncScope , startsWith , endsWith ) ->
@@ -184,11 +148,8 @@ describe "Clojure grammar", ->
184
148
185
149
[start , mid ... , end , after ] = tokens
186
150
187
- expect (start .value ).toEqual startsWith
188
- expect (start .scopes ).toEqual [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .begin.clojure" ]
189
-
190
- expect (end .value ).toEqual endsWith
191
- expect (end .scopes ).toEqual [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .end.clojure" ]
151
+ expect (start).toEqual value : startsWith, scopes : [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .begin.clojure" ]
152
+ expect (end).toEqual value : endsWith, scopes : [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .end.clojure" ]
192
153
193
154
for token in mid
194
155
expect (token .scopes .slice (0 , 2 )).toEqual [" source.clojure" , " meta.#{ metaScope} .clojure" ]
@@ -198,16 +159,14 @@ describe "Clojure grammar", ->
198
159
199
160
[start , mid ... , after ] = tokens[0 ]
200
161
201
- expect (start .value ).toEqual startsWith
202
- expect (start .scopes ).toEqual [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .begin.clojure" ]
162
+ expect (start).toEqual value : startsWith, scopes : [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .begin.clojure" ]
203
163
204
164
for token in mid
205
165
expect (token .scopes .slice (0 , 2 )).toEqual [" source.clojure" , " meta.#{ metaScope} .clojure" ]
206
166
207
167
[mid ... , end , after ] = tokens[1 ]
208
168
209
- expect (end .value ).toEqual endsWith
210
- expect (end .scopes ).toEqual [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .end.clojure" ]
169
+ expect (end).toEqual value : endsWith, scopes : [" source.clojure" , " meta.#{ metaScope} .clojure" , " punctuation.section.#{ puncScope} .end.clojure" ]
211
170
212
171
for token in mid
213
172
expect (token .scopes .slice (0 , 2 )).toEqual [" source.clojure" , " meta.#{ metaScope} .clojure" ]
0 commit comments