silicon/assets/syntaxes/varlink.sublime-syntax

95 lines
2.3 KiB
YAML

%YAML 1.2
---
name: varlink
file_extensions:
- varlink
scope: source.varlink
variables:
interface_name: '([a-z](\-*[a-z0-9])*(\.[a-z0-9](\-*[a-z0-9])*)+)'
identifier: '([A-Z][a-zA-Z0-9_]*)'
field_name: '[A-Za-z]([_]?[A-Za-z0-9])*'
contexts:
main:
- include: statements
statements:
- include: comments
- match: '(interface)\s+(\b{{interface_name}}\b)'
scope: meta.type.declaration.varlink
captures:
1: storage.type.interface.varlink
2: entity.name.interface.varlink
- match: '(method)\s+(\b{{identifier}}\b)\s*(?=[(])'
scope: meta.method.declaration.varlink
captures:
1: storage.type.method.varlink
2: entity.name.method.varlink
push: [ method-return, block ]
- match: '(type)\s+(\b{{identifier}}\b)\s*(?=[(])'
scope: meta.type.declaration.varlink
captures:
1: storage.type.type.varlink
2: entity.name.type.varlink
push: block
- match: '(error)\s+(\b{{identifier}}\b)\s*(?=[(])'
scope: meta.error.declaration.varlink
captures:
1: storage.type.error.varlink
2: entity.name.error.varlink
push: block
method-return:
- match: '(->)\s*(?=[(])'
scope: keyword.operator.varlink
set: block
block:
- include: comments
- match: '\)'
scope: punctuation.section.group.end.varlink
pop: true
- match: '\('
scope: punctuation.section.group.begin.varlink
push: block-inner
block-inner:
- include: comments
- match: '(?=\))'
pop: true
- match: '\b{{field_name}}\b'
scope: variable.parameter.varlink
- match: ','
scope: punctuation.separator.varlink
- match: ":"
scope: punctuation.separator.varlink
push: type
type:
- include: comments
- match: '(?=\()'
push: block
- match: '(?=\))'
pop: true
- match: '(?=,)'
pop: true
- match: '\b(string|bool|int|float|object)\b'
scope: storage.type.varlink
- match: '(\[\]|\[string\]|\?)'
scope: storage.modifier.varlink
- match: '\b{{identifier}}\b'
scope: entity.name.type.varlink
comments:
- match: "#"
scope: punctuation.definition.comment.varlink
push:
- meta_scope: comment.line.documentation.varlink
- match: $\n?
pop: true