Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit 582db18

Browse files
author
Miles Richardson
committed
Collapse value and scope checks to single line and remove need to escape quotes
1 parent f4bc135 commit 582db18

File tree

1 file changed

+43
-84
lines changed

1 file changed

+43
-84
lines changed

spec/grammar-spec.coffee

Lines changed: 43 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -14,44 +14,31 @@ describe "Clojure grammar", ->
1414

1515
it "tokenizes semi-colon comments", ->
1616
{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"]
2119

2220
it "tokenizes shebang comments", ->
2321
{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"]
2824

2925
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"]
3730

3831
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"]
4636

4737
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"]
5542

5643
it "tokenizes numerics", ->
5744
numbers =
@@ -67,8 +54,7 @@ describe "Clojure grammar", ->
6754
for scope, nums of numbers
6855
for num in nums
6956
{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]
7258

7359
it "tokenizes booleans", ->
7460
booleans =
@@ -77,13 +63,11 @@ describe "Clojure grammar", ->
7763
for scope, bools of booleans
7864
for bool in bools
7965
{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]
8267

8368
it "tokenizes nil", ->
8469
{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"]
8771

8872
it "tokenizes keywords", ->
8973
tests =
@@ -95,87 +79,67 @@ describe "Clojure grammar", ->
9579
for metaScope, lines of tests
9680
for line in lines
9781
{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"]
10083

10184
it "tokenizes keyfns (keyword control)", ->
10285
keyfns = ["declare", "declare-", "ns", "in-ns", "import", "use", "require", "load", "compile", "def", "defn", "defn-", "defmacro"]
10386

10487
for keyfn in keyfns
10588
{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"]
10890

10991
it "tokenizes keyfns (storage control)", ->
11092
keyfns = ["if", "when", "for", "cond", "do", "let", "binding", "loop", "recur", "fn", "throw", "try", "catch", "finally", "case"]
11193

11294
for keyfn in keyfns
11395
{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"]
11697

11798
it "tokenizes global definitions", ->
11899
{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"]
123102

124103
it "tokenizes dynamic variables", ->
125104
mutables = ["*ns*", "*foo-bar*"]
126105

127106
for mutable in mutables
128107
{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"]
131109

132110
it "tokenizes metadata", ->
133111
{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"]
138114

139115
{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"]
150121

151122
it "tokenizes functions", ->
152123
expressions = ["(foo)", "(foo 1 10)"]
153124

154125
for expr in expressions
155126
{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"]
158128

159129
it "tokenizes vars", ->
160130
{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"]
165133

166134
it "tokenizes symbols", ->
167135
{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"]
174139

175140
it "tokenizes trailing whitespace", ->
176141
{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"]
179143

180144
# TODO: Test 'after' tokens?
181145
testMetaSection = (metaScope, puncScope, startsWith, endsWith) ->
@@ -184,11 +148,8 @@ describe "Clojure grammar", ->
184148

185149
[start, mid..., end, after] = tokens
186150

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"]
192153

193154
for token in mid
194155
expect(token.scopes.slice(0, 2)).toEqual ["source.clojure", "meta.#{metaScope}.clojure"]
@@ -198,16 +159,14 @@ describe "Clojure grammar", ->
198159

199160
[start, mid..., after] = tokens[0]
200161

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"]
203163

204164
for token in mid
205165
expect(token.scopes.slice(0, 2)).toEqual ["source.clojure", "meta.#{metaScope}.clojure"]
206166

207167
[mid..., end, after] = tokens[1]
208168

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"]
211170

212171
for token in mid
213172
expect(token.scopes.slice(0, 2)).toEqual ["source.clojure", "meta.#{metaScope}.clojure"]

0 commit comments

Comments
 (0)