Skip to content

Instantly share code, notes, and snippets.

@selfsame
Last active December 1, 2015 02:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save selfsame/4e56db234a88590bd640 to your computer and use it in GitHub Desktop.
Save selfsame/4e56db234a88590bd640 to your computer and use it in GitHub Desktop.
# [PackageDev] target_format: plist, ext: tmLanguage
---
name: Clojure
scopeName: source.clojure
fileTypes: [xyz, cljs, clj, cljc]
uuid: -5584466320959560-558446636-69771
patterns:
- include: '#all'
repository:
anything:
name: anything
patterns:
- name: nonbracket
match: ([^\(\)\[\]]*)
- include: '#comment_list'
- include: '#comment_vector'
comment_list:
name: comment_list
begin: (\()
end: (\))
patterns:
- include: '#anything'
comment_vector:
name: comment_vector
begin: (\[)
end: (\])
patterns:
- include: '#anything'
comment:
name: comment.line.clojure
patterns:
- name: comment.line.clojure
match: ;.*$\n?
- name: comment.macro.clojure
begin: \(comment
end: \)
contentName: comment.form.clojure
patterns:
- include: '#anything'
all:
patterns:
- include: '#comment'
- include: '#expr'
expr:
patterns:
- include: '#string_escape'
- include: '#string'
- include: '#repl_prompt'
- include: '#regex'
- include: '#sexpr'
- include: '#special_form'
- include: '#argument_literal'
- include: '#number'
- include: '#qualified_symbol'
- include: '#keyword'
- include: '#symbol'
sexpr:
name: meta.sexpr.clojure
patterns:
- include: '#list'
- include: '#vec'
list:
name: meta.sexpr.list.clojure
begin: (\()(?!\))
end: (?<!\()(\))
beginCaptures:
'0': {name: entity.sequence.start}
endCaptures:
'0': {name: entity.sequence.end}
patterns:
- include: '#all'
vec:
name: meta.vec.clojure
begin: (\[)(?!\])
end: (?<!\[)(\])
beginCaptures:
'0': {name: entity.sequence.start}
endCaptures:
'1': {name: entity.sequence.end}
patterns:
- include: '#all'
number:
patterns:
- include: '#float'
- include: '#ratio'
- include: '#integer'
float:
name: float
match: (\-?[0-9]+\.[0-9]+)
ratio:
name: ratio
match: (0|\-?[1-9][0-9]*)\/(0|\-?[1-9][0-9]*)
integer:
name: integer
match: (0|\-?[1-9][0-9]*)
special_form:
name: meta.special_form.clojure
patterns:
- name: meta.specialized.clojure
match: ([`~'@](?<c>[^\(\)\[\]{};#%\^~`'":@\s\/\\])(\g<c>|[0-9#%'])*)
- name: meta.specialized.clojure
begin: (\()
end: (\))
patterns:
- include: '#all'
special:
name: meta.special.clojure
match: ([\`\~\'\@])
deref:
name: meta.deref.clojure
match: ([\@])
keyword:
name: meta.keyword.clojure
patterns:
- include: '#qualified_keyword'
- include: '#unqualified_keyword'
qualified_keyword:
name: meta.keyword.qualified.clojure
begin: (\:\:)
end: (?=\W)
patterns:
- include: '#symbol'
unqualified_keyword:
name: meta.keyword.unqualified.clojure
begin: (:[^:])
end: ()\b
patterns:
- include: '#qualified_symbol'
- include: '#symbol'
qualified_symbol:
name: symbol.qualified
match: (?<c>[^\(\)\[\]{};#%\^~`'":@\s\/\\])(?<sym>\g<c>|[0-9#%'\.])*\/\g<sym>+
symbol:
name: symbol
match: (?<c>[^\(\)\[\]{};#%\^~`'":@\s\/\\])(\g<c>|[0-9#%'])*
argument_literal:
name: meta.lambda.argument
match: (%(&|([1-9][0-9]*)))
repl_prompt:
name: meta.symbol.repl_prompt
match: ([\n]|^)((?<c>[^\(\)\[\]{};#%\^~`'":@\s\/\\])+►)
regex:
patterns:
- name: string.quoted.regex.clojure
begin: '#"'
end: '"'
patterns:
- include: '#string_escape'
string:
patterns:
- name: string.quoted.double.clojure
begin: '"'
end: '"'
patterns:
- include: '#string_escape'
string_escape:
name: constant.character.escape.clojure
match: \\(.)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment