@@ -27,6 +27,47 @@ describe "Julia grammar", ->
27
27
expect (tokens[4 ]).toEqual value : " Int64" , scopes : [" source.julia" , " support.type.julia" ]
28
28
expect (tokens[5 ]).toEqual value : " )" , scopes : [" source.julia" , " meta.bracket.julia" ]
29
29
30
+ it " tokenizes struct definitions" , ->
31
+ {tokens } = grammar .tokenizeLine (" struct Foo end" )
32
+ expect (tokens[0 ]).toEqual value : " struct" , scopes : [" source.julia" , " keyword.other.julia" ]
33
+ expect (tokens[1 ]).toEqual value : " Foo " , scopes : [" source.julia" ]
34
+ expect (tokens[2 ]).toEqual value : " end" , scopes : [" source.julia" , " keyword.control.end.julia" ]
35
+
36
+ it " tokenizes mutable struct definitions" , ->
37
+ {tokens } = grammar .tokenizeLine (" mutable struct Foo end" )
38
+ expect (tokens[0 ]).toEqual value : " mutable struct" , scopes : [" source.julia" , " keyword.other.julia" ]
39
+ expect (tokens[1 ]).toEqual value : " Foo " , scopes : [" source.julia" ]
40
+ expect (tokens[2 ]).toEqual value : " end" , scopes : [" source.julia" , " keyword.control.end.julia" ]
41
+
42
+ it " tokenizes abstract type definitions" , ->
43
+ {tokens } = grammar .tokenizeLine (" abstract type Foo end" )
44
+ expect (tokens[0 ]).toEqual value : " abstract type" , scopes : [" source.julia" , " keyword.other.julia" ]
45
+ expect (tokens[1 ]).toEqual value : " Foo " , scopes : [" source.julia" ]
46
+ expect (tokens[2 ]).toEqual value : " end" , scopes : [" source.julia" , " keyword.control.end.julia" ]
47
+
48
+ it " tokenizes primitive type definitions" , ->
49
+ {tokens } = grammar .tokenizeLine (" primitive type Foo 64 end" )
50
+ expect (tokens[0 ]).toEqual value : " primitive type" , scopes : [" source.julia" , " keyword.other.julia" ]
51
+ expect (tokens[1 ]).toEqual value : " Foo " , scopes : [" source.julia" ]
52
+ expect (tokens[2 ]).toEqual value : " 64" , scopes : [" source.julia" , " constant.numeric.julia" ]
53
+ expect (tokens[3 ]).toEqual value : " " , scopes : [" source.julia" ]
54
+ expect (tokens[4 ]).toEqual value : " end" , scopes : [" source.julia" , " keyword.control.end.julia" ]
55
+
56
+ it " doesn't tokenize 'mutable', 'abstract' or 'primitive' on their own" , ->
57
+ {tokens } = grammar .tokenizeLine (" mutable = 3; abstract = 5; primitive = 11" )
58
+ expect (tokens[0 ]).toEqual value : " mutable " , scopes : [" source.julia" ]
59
+ expect (tokens[1 ]).toEqual value : " =" , scopes : [" source.julia" , " keyword.operator.update.julia" ]
60
+ expect (tokens[2 ]).toEqual value : " " , scopes : [" source.julia" ]
61
+ expect (tokens[3 ]).toEqual value : " 3" , scopes : [" source.julia" , " constant.numeric.julia" ]
62
+ expect (tokens[4 ]).toEqual value : " ; abstract " , scopes : [" source.julia" ]
63
+ expect (tokens[5 ]).toEqual value : " =" , scopes : [" source.julia" , " keyword.operator.update.julia" ]
64
+ expect (tokens[6 ]).toEqual value : " " , scopes : [" source.julia" ]
65
+ expect (tokens[7 ]).toEqual value : " 5" , scopes : [" source.julia" , " constant.numeric.julia" ]
66
+ expect (tokens[8 ]).toEqual value : " ; primitive " , scopes : [" source.julia" ]
67
+ expect (tokens[9 ]).toEqual value : " =" , scopes : [" source.julia" , " keyword.operator.update.julia" ]
68
+ expect (tokens[10 ]).toEqual value : " " , scopes : [" source.julia" ]
69
+ expect (tokens[11 ]).toEqual value : " 11" , scopes : [" source.julia" , " constant.numeric.julia" ]
70
+
30
71
it " tokenizes types ignoring whitespace" , ->
31
72
{tokens } = grammar .tokenizeLine (" f(x :: Int, y :: Float64, z::Float32, a :: X.Y.Z.A, b :: X.Y.Z)" )
32
73
expect (tokens[0 ]).toEqual value : " f" , scopes : [" source.julia" , " support.function.julia" ]
0 commit comments