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

Commit ae01eb2

Browse files
WliuWliu
authored andcommitted
Merge pull request #39 from bitbutt/fix-function-match
Fix tokenization of sexp and map nested at beginning of another sexp
2 parents a0193ad + e758345 commit ae01eb2

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

grammars/clojure.cson

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,12 @@
273273
{
274274
'include': '#vector'
275275
}
276+
{
277+
'include': '#map'
278+
}
279+
{
280+
'include': '#sexp'
281+
}
276282
{
277283
'match': '(?<=\\()(.+?)(?=\\s|\\))'
278284
'captures':

spec/grammar-spec.coffee

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,27 @@ describe "Clojure grammar", ->
1111
it "parses the grammar", ->
1212
expect(grammar).toBeDefined()
1313
expect(grammar.scopeName).toBe "source.clojure"
14+
15+
it "tokenizes functions in nested sexp", ->
16+
{tokens} = grammar.tokenizeLine "((foo bar) baz)"
17+
expect(tokens[0]).toEqual value: "(", scopes: ["source.clojure", "meta.expression.clojure", "punctuation.section.expression.begin.clojure"]
18+
expect(tokens[1]).toEqual value: "(", scopes: ["source.clojure", "meta.expression.clojure", "meta.expression.clojure", "punctuation.section.expression.begin.clojure"]
19+
expect(tokens[2]).toEqual value: "foo", scopes: ["source.clojure", "meta.expression.clojure", "meta.expression.clojure", "entity.name.function.clojure"]
20+
expect(tokens[3]).toEqual value: " ", scopes: ["source.clojure", "meta.expression.clojure", "meta.expression.clojure"]
21+
expect(tokens[4]).toEqual value: "bar", scopes: ["source.clojure", "meta.expression.clojure", "meta.expression.clojure", "meta.symbol.clojure"]
22+
expect(tokens[5]).toEqual value: ")", scopes: ["source.clojure", "meta.expression.clojure", "meta.expression.clojure", "punctuation.section.expression.end.clojure"]
23+
expect(tokens[6]).toEqual value: " ", scopes: ["source.clojure", "meta.expression.clojure"]
24+
expect(tokens[7]).toEqual value: "baz", scopes: ["source.clojure", "meta.expression.clojure", "meta.symbol.clojure"]
25+
expect(tokens[8]).toEqual value: ")", scopes: ["source.clojure", "meta.expression.clojure", "punctuation.section.expression.end.clojure"]
26+
27+
it "tokenizes maps used as functions", ->
28+
{tokens} = grammar.tokenizeLine "({:foo bar} :foo)"
29+
expect(tokens[0]).toEqual value: "(", scopes: ["source.clojure", "meta.expression.clojure", "punctuation.section.expression.begin.clojure"]
30+
expect(tokens[1]).toEqual value: "{", scopes: ["source.clojure", "meta.expression.clojure", "meta.map.clojure", "punctuation.section.map.begin.clojure"]
31+
expect(tokens[2]).toEqual value: ":foo", scopes: ["source.clojure", "meta.expression.clojure", "meta.map.clojure", "constant.keyword.clojure"]
32+
expect(tokens[3]).toEqual value: " ", scopes: ["source.clojure", "meta.expression.clojure", "meta.map.clojure"]
33+
expect(tokens[4]).toEqual value: "bar", scopes: ["source.clojure", "meta.expression.clojure", "meta.map.clojure", "meta.symbol.clojure"]
34+
expect(tokens[5]).toEqual value: "}", scopes: ["source.clojure", "meta.expression.clojure", "meta.map.clojure", "punctuation.section.map.end.clojure"]
35+
expect(tokens[6]).toEqual value: " ", scopes: ["source.clojure", "meta.expression.clojure"]
36+
expect(tokens[7]).toEqual value: ":foo", scopes: ["source.clojure", "meta.expression.clojure", "constant.keyword.clojure"]
37+
expect(tokens[8]).toEqual value: ")", scopes: ["source.clojure", "meta.expression.clojure", "punctuation.section.expression.end.clojure"]

0 commit comments

Comments
 (0)