Skip to content

Commit ae927db

Browse files
authored
Merge pull request #156 from JuliaEditorSupport/aa/primitive-type
Add `primitive type` to keywords
2 parents 25663fc + b7b4df7 commit ae927db

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

grammars/julia.cson

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ repository:
182182
keyword:
183183
patterns: [
184184
{
185-
match: "\\b(?<![:_\\.])(?:function|@generated|type|immutable|mutable|struct|macro|quote|abstract|bitstype|typealias|module|baremodule|new|where)\\b"
185+
match: "\\b(?<![:_\\.])(?:function|@generated|type|immutable|mutable\\s+struct|struct|macro|quote|abstract\\s+type|primitive\\s+type|bitstype|typealias|module|baremodule|new|where)\\b"
186186
name: "keyword.other.julia"
187187
}
188188
{

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

spec/julia-spec.coffee

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,47 @@ describe "Julia grammar", ->
2727
expect(tokens[4]).toEqual value: "Int64", scopes: ["source.julia", "support.type.julia"]
2828
expect(tokens[5]).toEqual value: ")", scopes: ["source.julia", "meta.bracket.julia"]
2929

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+
3071
it "tokenizes types ignoring whitespace", ->
3172
{tokens} = grammar.tokenizeLine("f(x :: Int, y :: Float64, z::Float32, a :: X.Y.Z.A, b :: X.Y.Z)")
3273
expect(tokens[0]).toEqual value: "f", scopes: ["source.julia", "support.function.julia"]

0 commit comments

Comments
 (0)