]> git.lizzy.rs Git - micro.git/blob - runtime/syntax/ats.yaml
Merge pull request #1135 from whilei/gofmt-2018-Jun-17-00-39
[micro.git] / runtime / syntax / ats.yaml
1 filetype: ATS
2
3 detect:
4     filename: "\\.(d|h|s)ats$"
5
6 rules:
7     - default: \b[[:alnum:]]+[^0-9A-Za-z]
8
9     # Some C macros and other ATS macros
10     - preproc: ^[[:space:]]*#[[:space:]]*(define|pragma|include|(un|ifn?)def|endif|el(if|se)|if|warning|error|assert)\b
11     - preproc: ^[[:space:]]*#[[:space:]]*(codegen2|codegen3|elifdef|elifndef|prerr|print|require|then|staload|dynload)\b
12
13     # Operators
14     - symbol.operator: "[.:;+`|~<>?='\\&]|/|%|-|,|!|\\*|@|\\#"
15     - symbol.operator: \^
16
17     # Types, abstract types and some predefined sorts
18     - type: \b(addr|age?z|bool|char|cls|schar|uchar|double|eff|exn|float|int(ptr)?|lincloptr|uint)\b
19     - type: \b(lint|ulint|llint|ullint|nat|prop|ptr|prf|real|ref|size_t|ssize_t|sint|usint|string|tkind|viewt|view|v?t0p|vt|void)\b
20     - type: \b(fun[01]|cloptr(0|1)?|cloref(0|1)?|clo(0|1)?)\b
21     - type: \b(prop[+-]|t[@0]ype[+-]?|type[+-]?|viewt[@0]ype[+-]?|viewtype[+-]?|vt[@0]ype[+-]?|vtype[+-]?|view[+-]?)
22
23     # Statements
24     - statement: \b(abstype|abst|absprop|absviewt|absvt(ype)?|absview|and|andalso|as|(re)?assume|begin|(pr)?csase|s?case)\b
25     - statement: \b(classdec|dataprop|data(v|view)?type|dataview|datasort|else|end|exception|extype|extvar|s?if)\b
26     - statement: \b(ifcase|for|in|infix(l|r)?|let|local|macrodef|macdef|not|of|op|or|orelse|overload|(pre|post|non)fix)\b
27     - statement: \b(propdef|rec|sortdef|stacst|stadef|stavar|sta|symelim|symintr|tkindef|then|try|viewdef|v?typedef)\b
28     - statement: \b(viewtypedef|(pr)?va(l|r)|when|where|while|with|withtype|withprop|withv(iew)?type|withview)\b
29     - statement: \b(abst[@0]ype|absviewt[@0]ype|absviewtype|absvt[@0]ype)\b
30     - statement: \b(import|staload|dynload)\b
31     - statement: \b(case[+-]|(pr)?va(l|r)[+-]|for\*|while\*)
32     # Added in ATS2 0.3.11
33     - statement: \b(abstbox|abstflat|absvtbox|absvtflat)\b
34     - statement: \b(absimpl|absreimpl)\b
35
36     # Numbers
37     - constant.number: (\b[0-9]+\b|\b0(x|b)[0-9A-Fa-f]+\b)
38     - constant.number: \b[0-9]+(u|U|l|L|ul|UL|f|F|b|B)?\b
39
40     # Function-related keywords, special functions and namespaces. Not really identifiers
41     - identifier: \b(fix|(pr)?fu?n|fnx|castfn|praxi|extern|lam|llam|(pr)?implement|(pr)?implmnt)\b
42     - identifier: \b(fix@|fold@|free@|lam@|llam@|addr@|view@|ref@)
43     - identifier: \b(fn\*)
44     - identifier: \$\w*\b
45
46     # Other keywords, function effects...
47     - special: (\$(arrpsz|arrptrsize|break|continue|d2ctype|delay|effmask_(ntm|exn|ref|wrt|all)))\b
48     - special: (\$(effmask|extern|extype_struct|extype|extkind|extval|extfcall|extmcall|ldelay|literal))\b
49     - special: (\$(li?st_vt|li?st_t|li?st|myfilename|myfunction|mylocation|raise|rec(ord)?_vt))\b
50     - special: (\$(rec(ord)?_t|rec(ord)?|(r|l)par|sep|showtype|solver_assert|solver_verify|tempenver))\b
51     - special: (\$(tup(le)?_vt|tup(le)?_t|tup(le)?|tyrep|vararg|vcopyenv_vt|vcopyenv_v))\b
52     - special: \!(wrt|exnref|exnwrt|exn|refwrt|ref|all|ntm|laz)\b
53     - special: \b(f?print(ln)?!|prerrln!)
54
55     # Boolean values
56     - constant.bool: \b(true|false|null)\b
57
58
59     # The "%{ ... %}" block inserts foreign code into ATS at compile-time
60     # Code inside it is generally C or JavaScript
61     - default:
62         start: "%{[#^$]?"
63         end: "%}"
64         skip: "\\."
65         limit-group: symbol.operator
66         rules:
67             - include: "c"
68             - include: "javascript"
69
70
71     # Strings and chars
72     - constant.string:
73         start: \"
74         end: \"
75         skip: \\.
76         rules:
77             - constant.specialChar: \\.
78
79     - constant.char: ('\\?.')
80
81
82     # Comments
83
84     # "////" comments everything until EOF
85     - comment.block:
86         start: ////
87         end: $a
88         rules:
89             - todo: (TODO|XXX|FIXME)
90
91     - comment.line:
92         start: //
93         end: $
94         rules:
95             - todo: (TODO|XXX|FIXME)
96
97     # ML-like block comment
98     - comment.block:
99         start: \(\*
100         end: \*\)
101         rules:
102             - todo: (TODO|XXX|FIXME)
103
104     # C-like block comment
105     - comment.block:
106         start: /\*
107         end: \*\/
108         rules:
109             - todo: (TODO|XXX|FIXME)