TypeScript-TmLanguage/TypeScriptReact.YAML-tmLang...

185 строки
5.7 KiB
Plaintext
Исходник Обычный вид История

2016-08-12 01:38:31 +03:00
# [PackageDev] target_format: plist, ext: tmLanguage
2015-11-06 00:14:57 +03:00
# Similar to TypeScript.YAML-tmLanguage except:
# - Remove type assertion (cast.expr.tsx)
2015-11-06 00:14:57 +03:00
# - Add JSX expression (HTML-like expression).
---
name: TypeScriptReact
scopeName: source.tsx
fileTypes: [tsx]
uuid: 805375ec-d614-41f5-8993-5843fe63ea82
repository:
2016-09-20 22:25:38 +03:00
# Additions:
# expression repository need to include jsx first followed by whaterver ts grammar says
expression:
patterns:
- include: '#jsx'
2016-03-17 20:49:23 +03:00
2016-09-20 22:25:38 +03:00
# Overrides:
2016-08-19 21:29:26 +03:00
2016-09-20 22:25:38 +03:00
# We need to override this to make sure cast is not matched from typescript
# We can safely include jsx because thats the first rule matched anyways so it wont impact at all
cast:
2015-11-06 00:14:57 +03:00
patterns:
2016-09-20 22:25:38 +03:00
- include: '#jsx'
2015-11-06 00:14:57 +03:00
# jsx syntax is taken from https://github.com/babel/babel-sublime
jsx-tag-attributes:
patterns:
- include: '#jsx-tag-attribute-name'
- include: '#jsx-tag-attribute-assignment'
- include: '#jsx-string-double-quoted'
- include: '#jsx-string-single-quoted'
- include: '#jsx-evaluated-code'
jsx-tag-attribute-name:
name: meta.tag.attribute-name.tsx
match: >-
(?x)
\s*
([_$a-zA-Z][-$\w]*)
(?=\s|=|/?>|/\*|//)
captures:
'1': {name: entity.other.attribute-name.tsx}
jsx-tag-attribute-assignment:
name: keyword.operator.assignment.tsx
match: =(?=\s*(?:'|"|{|/\*|//|\n))
jsx-string-double-quoted:
name: string.jsxAttributeValue.quoted.double.tsx
2015-11-06 00:14:57 +03:00
begin: '"'
end: '"'
beginCaptures:
'0': {name: punctuation.definition.string.jsxAttributeValue.begin.tsx}
2015-11-06 00:14:57 +03:00
endCaptures:
'0': {name: punctuation.definition.string.jsxAttributeValue.end.tsx}
2015-11-06 00:14:57 +03:00
patterns:
- include: '#jsx-attributeValue-entities'
2015-11-06 00:14:57 +03:00
jsx-string-single-quoted:
name: string.jsxAttributeValue.quoted.single.tsx
2015-11-06 00:14:57 +03:00
begin: "'"
end: "'"
beginCaptures:
'0': {name: punctuation.definition.string.jsxAttributeValue.begin.tsx}
2015-11-06 00:14:57 +03:00
endCaptures:
'0': {name: punctuation.definition.string.jsxAttributeValue.end.tsx}
2015-11-06 00:14:57 +03:00
patterns:
- include: '#jsx-attributeValue-entities'
2015-11-06 00:14:57 +03:00
jsx-entities:
patterns:
- name: constant.character.entity.tsx
match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
captures:
'1': {name: punctuation.definition.entity.tsx}
'3': {name: punctuation.definition.entity.tsx}
- name: invalid.illegal.bad-ampersand.tsx
match: '&'
jsx-attributeValue-entities:
patterns:
- name: constant.character.entity.jsxAttributeValue.tsx
match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)
captures:
'1': {name: punctuation.definition.entity.jsxAttributeValue.tsx}
'3': {name: punctuation.definition.entity.jsxAttributeValue.tsx}
- name: invalid.illegal.bad-ampersand.jsxAttributeValue.tsx
match: '&'
2015-11-06 00:14:57 +03:00
jsx-evaluated-code:
name: meta.embedded.expression.tsx
2015-11-06 00:14:57 +03:00
begin: '{'
end: '}'
beginCaptures:
'0': { name: punctuation.section.embedded.begin.tsx }
2015-11-06 00:14:57 +03:00
endCaptures:
'0': { name: punctuation.section.embedded.end.tsx }
2015-11-06 00:14:57 +03:00
patterns:
- include: '#expression'
jsx-tag-attributes-illegal:
name: invalid.illegal.attribute.tsx
match: \S+
jsx-tag-without-attributes:
name: meta.tag.without-attributes.tsx
2016-09-22 02:29:02 +03:00
begin: (<)\s*([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>)
end: (</)\s*([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>)
2015-11-06 00:14:57 +03:00
beginCaptures:
'1': {name: punctuation.definition.tag.begin.tsx}
'2': {name: entity.name.tag.tsx}
'3': {name: punctuation.definition.tag.end.tsx}
endCaptures:
'1': {name: punctuation.definition.tag.begin.tsx}
'2': {name: entity.name.tag.tsx}
'3': {name: punctuation.definition.tag.end.tsx}
contentName: meta.jsx.children.tsx
2015-11-06 00:14:57 +03:00
patterns:
- include: '#jsx-children'
jsx-tag:
# We need to differentiate between the relational '<' operator and the beginning of a tag using the surrounding context.
2015-11-06 00:14:57 +03:00
begin: >-
(?x)
(?<=[({\[,?=>]|&&|\|\||\?|\Wreturn|^return|\Wdefault|^)\s*
2016-09-22 02:29:02 +03:00
(?!(<)\s*([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>)) #look ahead is not start of tag without attributes
(?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow
(?=(<)\s*
2015-11-06 00:14:57 +03:00
([_$a-zA-Z][-$\w.]*(?<!\.|-))
(?=\s+(?!\?)|/?>))
2016-09-22 02:29:02 +03:00
end: (/>)|(?:(</)\s*([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>))
2015-11-06 00:14:57 +03:00
endCaptures:
'0': { name: meta.tag.tsx }
'1': { name: punctuation.definition.tag.end.tsx }
'2': { name: punctuation.definition.tag.begin.tsx }
'3': { name: entity.name.tag.tsx }
'4': { name: punctuation.definition.tag.end.tsx }
patterns:
- name: meta.tag.tsx
begin: >-
(?x)
2016-09-22 02:29:02 +03:00
(<)\s*
([_$a-zA-Z][-$\w.]*(?<!\.|-))
(?=\s+(?!\?)|/?>)
beginCaptures:
'1': { name: punctuation.definition.tag.begin.tsx }
'2': { name: entity.name.tag.tsx }
2016-09-22 02:29:02 +03:00
end: (?=(/>)|(?:(</)\s*([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>)))
patterns:
- begin: \G(?![/]?>)
end: (?=[/]?>)
patterns:
- include: '#comment'
- include: '#jsx-tag-attributes'
- include: '#jsx-tag-attributes-illegal'
- begin: (>)
beginCaptures:
'1': { name: punctuation.definition.tag.end.tsx }
end: (?=</)
contentName: meta.jsx.children.tsx
patterns:
- include: '#jsx-children'
2015-11-06 00:14:57 +03:00
jsx-tag-invalid:
name: invalid.illegal.tag.incomplete.tsx
match: <\s*>
jsx-children:
patterns:
- include: '#jsx-tag-without-attributes'
- include: '#jsx-tag'
2015-11-06 00:14:57 +03:00
- include: '#jsx-tag-invalid'
- include: '#jsx-evaluated-code'
- include: '#jsx-entities'
jsx:
name: meta.jsx.tsx
patterns:
- include: '#jsx-tag-without-attributes'
- include: '#jsx-tag'
2015-11-06 00:14:57 +03:00
- include: '#jsx-tag-invalid'
2016-02-02 04:10:11 +03:00
...