diff --git a/syntaxes/ansible/generated/jinja-braces.tmLanguage b/syntaxes/ansible/generated/jinja-braces.tmLanguage
index 513ee81050..43301c538a 100644
--- a/syntaxes/ansible/generated/jinja-braces.tmLanguage
+++ b/syntaxes/ansible/generated/jinja-braces.tmLanguage
@@ -14,25 +14,61 @@
include
#jinja-expression
+
+ include
+ #jinja-statement
+
+
+ include
+ #jinja-comment
+
repository
jinja-expression
- comment
- The 'name' is used to undo highlighting as string
- name
- keyword.operator.ansible
begin
- \{\{
+ \{\{-?
+ end
+ -?\}\}
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.begin.jinja
+
+
+ endCaptures
+
+ 0
+
+ name
+ punctuation.section.embedded.end.jinja
+
+
+ contentName
+ meta.embedded.inline.jinja
+ patterns
+
+
+ include
+ source.ansible-jinja#expression
+
+
+
+ jinja-statement
+
+ begin
+ \{%-?
end
- \}\}
+ -?%\}
beginCaptures
0
name
- constant.character.escape.ansible
+ punctuation.section.embedded.begin.jinja
endCaptures
@@ -40,7 +76,7 @@
0
name
- constant.character.escape.ansible
+ punctuation.section.embedded.end.jinja
contentName
@@ -53,6 +89,38 @@
+ jinja-comment
+
+ begin
+ \{#-?
+ end
+ -?#\}
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.begin.jinja
+
+
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.end.jinja
+
+
+ contentName
+ comment.block.jinja
+ patterns
+
+
+ include
+ source.ansible-jinja#comments
+
+
+
diff --git a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
index c7d03aab47..983ea7ff96 100644
--- a/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
+++ b/syntaxes/ansible/generated/jinja-conditionals.tmLanguage
@@ -35,6 +35,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
(?=\s) (?!\s*[|>'"]|\s*$|\s*\#.*$) # starting an unquoted flow
@@ -85,6 +86,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
(?=\s) (?!\s*[|>]|\s*$|\s*\#.*$) # not starting a block (scalar or other)
@@ -143,6 +145,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
\s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block
@@ -226,6 +229,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
(.*$) # comment or illegal
@@ -398,7 +402,7 @@
^(?!\1\s+) # if the indentation is too small
contentName
- keyword.operator.ansible meta.embedded.inline.jinja
+ meta.embedded.inline.jinja
patterns
@@ -445,7 +449,7 @@
contentName
- keyword.operator.ansible meta.embedded.inline.jinja
+ meta.embedded.inline.jinja
patterns
@@ -523,7 +527,7 @@
contentName
- keyword.operator.ansible meta.embedded.inline.jinja
+ meta.embedded.inline.jinja
patterns
@@ -579,7 +583,7 @@
end
(?!\G)
contentName
- keyword.operator.ansible meta.embedded.inline.jinja
+ meta.embedded.inline.jinja
patterns
@@ -607,7 +611,7 @@
(?x)
^(?!\1\s*) # if the indentation is too small
contentName
- keyword.operator.ansible meta.embedded.inline.jinja
+ meta.embedded.inline.jinja
patterns
diff --git a/syntaxes/ansible/generated/jinja-extras.tmLanguage b/syntaxes/ansible/generated/jinja-extras.tmLanguage
index b411f64b8e..ccb0efbc1a 100644
--- a/syntaxes/ansible/generated/jinja-extras.tmLanguage
+++ b/syntaxes/ansible/generated/jinja-extras.tmLanguage
@@ -8,56 +8,11 @@
L:meta.embedded.inline.jinja -string.quoted.double.jinja -string.quoted.single.jinja
name
Grammar for Jinja2 syntax highlighting that is not provided out-of-the-box
+ comment
+ Literal patterns (booleans, numbers, none) have been moved to the core jinja.tmLanguage.json grammar
patterns
-
-
- include
- #literals
-
-
+
repository
-
- literals
-
- match
- (?x)
- (none|None)
- | (true|True|false|False)
- | (
- [-+]? 0b [0-1_]+ # (base 2)
- | [-+]? 0x [0-9a-fA-F_]+ # (base 16)
- | [-+]? 0 [0-7_]+ # (base 8)
- | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)
- | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)
- )
- | (
- [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)
- | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60)
- )
- captures
-
- 1
-
- name
- constant.language.none.ansible
-
- 2
-
- name
- constant.language.boolean.ansible
-
- 3
-
- name
- constant.numeric.integer.ansible
-
- 4
-
- name
- constant.numeric.float.ansible
-
-
-
-
+
diff --git a/syntaxes/ansible/jinja-braces.tmLanguage.plist b/syntaxes/ansible/jinja-braces.tmLanguage.plist
index 0fb1f963dc..333b932394 100644
--- a/syntaxes/ansible/jinja-braces.tmLanguage.plist
+++ b/syntaxes/ansible/jinja-braces.tmLanguage.plist
@@ -3,22 +3,22 @@
injectionSelector = 'L:string -meta.embedded.inline.jinja';
name = 'Grammar for Jinja2 expressions surrounded by double curly braces';
patterns = (
- { include = '#jinja-expression'; }
+ { include = '#jinja-expression'; },
+ { include = '#jinja-statement'; },
+ { include = '#jinja-comment'; }
);
repository = {
jinja-expression = {
- comment = "The 'name' is used to undo highlighting as string";
- name = 'keyword.operator.ansible';
- begin = '\{\{';
- end = '\}\}';
+ begin = '\{\{-?';
+ end = '-?\}\}';
beginCaptures = {
0 = {
- name = 'constant.character.escape.ansible';
+ name = 'punctuation.section.embedded.begin.jinja';
};
};
endCaptures = {
0 = {
- name = 'constant.character.escape.ansible';
+ name = 'punctuation.section.embedded.end.jinja';
};
};
contentName = 'meta.embedded.inline.jinja';
@@ -26,5 +26,41 @@
{ include = 'source.ansible-jinja#expression'; }
);
};
+ jinja-statement = {
+ begin = '\{%-?';
+ end = '-?%\}';
+ beginCaptures = {
+ 0 = {
+ name = 'punctuation.section.embedded.begin.jinja';
+ };
+ };
+ endCaptures = {
+ 0 = {
+ name = 'punctuation.section.embedded.end.jinja';
+ };
+ };
+ contentName = 'meta.embedded.inline.jinja';
+ patterns = (
+ { include = 'source.ansible-jinja#expression'; }
+ );
+ };
+ jinja-comment = {
+ begin = '\{#-?';
+ end = '-?#\}';
+ beginCaptures = {
+ 0 = {
+ name = 'punctuation.definition.comment.begin.jinja';
+ };
+ };
+ endCaptures = {
+ 0 = {
+ name = 'punctuation.definition.comment.end.jinja';
+ };
+ };
+ contentName = 'comment.block.jinja';
+ patterns = (
+ { include = 'source.ansible-jinja#comments'; }
+ );
+ };
};
}
diff --git a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
index 3800d4bf28..d885205540 100644
--- a/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
+++ b/syntaxes/ansible/jinja-conditionals.tmLanguage.plist
@@ -20,6 +20,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
(?=\s) (?!\s*[|>''"]|\s*$|\s*\#.*$) # starting an unquoted flow
@@ -53,6 +54,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
(?=\s) (?!\s*[|>]|\s*$|\s*\#.*$) # not starting a block (scalar or other)
@@ -88,6 +90,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
\s+ (?: (\|) | (>) ) ([1-9])? ([-+])? # 6,7,8,9; starting a scalar block
@@ -144,6 +147,7 @@
| failed_when
| when
| check_mode
+ | until
)\b
\s* (:) # 5
(.*$) # comment or illegal
@@ -245,7 +249,7 @@
end = '(?x)
^(?!\1\s+) # if the indentation is too small
';
- contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
+ contentName = 'meta.embedded.inline.jinja';
patterns = (
{ include = '#yaml-unquoted-string'; },
);
@@ -274,7 +278,7 @@
name = 'invalid.illegal.expected-comment-or-newline.ansible';
};
};
- contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
+ contentName = 'meta.embedded.inline.jinja';
patterns = (
{
begin = "''";
@@ -321,7 +325,7 @@
name = 'invalid.illegal.expected-comment-or-newline.ansible';
};
};
- contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
+ contentName = 'meta.embedded.inline.jinja';
patterns = (
{
begin = '\\"';
@@ -353,7 +357,7 @@
name = 'string.unquoted.ansible';
begin = '(?=\S)';
end = '(?!\G)';
- contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
+ contentName = 'meta.embedded.inline.jinja';
patterns = (
{ include = 'source.ansible-jinja#expression'; },
);
@@ -371,7 +375,7 @@
(?=\S)';
end = '(?x)
^(?!\1\s*) # if the indentation is too small';
- contentName = 'keyword.operator.ansible meta.embedded.inline.jinja';
+ contentName = 'meta.embedded.inline.jinja';
patterns = (
{ include = 'source.ansible-jinja#expression'; },
);
diff --git a/syntaxes/ansible/jinja-extras.tmLanguage.plist b/syntaxes/ansible/jinja-extras.tmLanguage.plist
index ed6aaebca5..a78e117fc8 100644
--- a/syntaxes/ansible/jinja-extras.tmLanguage.plist
+++ b/syntaxes/ansible/jinja-extras.tmLanguage.plist
@@ -2,39 +2,7 @@
scopeName = 'injection.ansible.jinja-extras';
injectionSelector = 'L:meta.embedded.inline.jinja -string.quoted.double.jinja -string.quoted.single.jinja';
name = 'Grammar for Jinja2 syntax highlighting that is not provided out-of-the-box';
- patterns = (
- { include = '#literals'; }
- );
- repository = {
- literals = {
- match = '(?x)
- (none|None)
- | (true|True|false|False)
- | (
- [-+]? 0b [0-1_]+ # (base 2)
- | [-+]? 0x [0-9a-fA-F_]+ # (base 16)
- | [-+]? 0 [0-7_]+ # (base 8)
- | [-+]? (?: 0|[1-9][0-9_]*) # (base 10)
- | [-+]? [1-9] [0-9_]* (?: :[0-5]?[0-9])+ # (base 60)
- )
- | (
- [-+]? (?: [0-9] [0-9_]*)? \. [0-9.]* (?: [eE] [-+] [0-9]+)? # (base 10)
- | [-+]? [0-9] [0-9_]* (?: :[0-5]?[0-9])+ \. [0-9_]* # (base 60)
- )';
- captures = {
- 1 = {
- name = 'constant.language.none.ansible';
- };
- 2 = {
- name = 'constant.language.boolean.ansible';
- };
- 3 = {
- name = 'constant.numeric.integer.ansible';
- };
- 4 = {
- name = 'constant.numeric.float.ansible';
- };
- };
- };
- };
+ comment = 'Literal patterns (booleans, numbers, none) have been moved to the core jinja.tmLanguage.json grammar';
+ patterns = ();
+ repository = {};
}
diff --git a/syntaxes/external/jinja.tmLanguage.json b/syntaxes/external/jinja.tmLanguage.json
index 643b877c4b..6185935a20 100644
--- a/syntaxes/external/jinja.tmLanguage.json
+++ b/syntaxes/external/jinja.tmLanguage.json
@@ -112,7 +112,7 @@
"name": "keyword.control.jinja"
},
"2": {
- "name": "variable.other.jinja.filter"
+ "name": "entity.name.function.filter.jinja"
}
},
"match": "\\s*\\b(filter)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b"
@@ -123,10 +123,13 @@
"name": "keyword.control.jinja"
},
"2": {
- "name": "variable.other.jinja.test"
+ "name": "keyword.control.jinja"
+ },
+ "3": {
+ "name": "entity.name.function.test.jinja"
}
},
- "match": "\\s*\\b(is)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\b"
+ "match": "\\b(is)\\s+(not\\s+)?([a-zA-Z_][a-zA-Z0-9_]*)\\b"
},
{
"captures": {
@@ -137,23 +140,50 @@
"match": "(?<=\\{\\%-|\\{\\%)\\s*\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b(?!\\s*[,=])"
},
{
- "match": "\\b(and|else|if|in|import|not|or|recursive|with(out)?\\s+context)\\b",
+ "captures": {
+ "1": {
+ "name": "variable.parameter.jinja"
+ },
+ "2": {
+ "name": "keyword.operator.assignment.jinja"
+ }
+ },
+ "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*(=)(?!=)"
+ },
+ {
+ "captures": {
+ "1": {
+ "name": "entity.name.function.jinja"
+ }
+ },
+ "match": "\\b(?!and|or|not|in\\b)([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=\\()"
+ },
+ {
+ "match": "\\b(else|if|elif|endif|for|endfor|break|continue|set|endset|macro|endmacro|block|endblock|call|endcall|filter|endfilter|include|import|extends|from|do|raw|endraw|recursive|with(out)?\\s+context|with|endwith|as)\\b",
"name": "keyword.control.jinja"
},
{
- "match": "\\b(true|false|none)\\b",
+ "match": "\\b(and|or|not|in)\\b",
+ "name": "keyword.operator.logical.jinja"
+ },
+ {
+ "match": "\\b(true|false|none|True|False|None)\\b",
"name": "constant.language.jinja"
},
{
"match": "\\b(loop|super|self|varargs|kwargs)\\b",
"name": "variable.language.jinja"
},
+ {
+ "match": "\\b(?:0[xX][0-9a-fA-F]+|0[bB][01]+|0[oO][0-7]+|[0-9]+(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?)\\b",
+ "name": "constant.numeric.jinja"
+ },
{
"match": "[a-zA-Z_][a-zA-Z0-9_]*",
"name": "variable.other.jinja"
},
{
- "match": "(\\+|\\-|\\*\\*|\\*|\/\/|\/|%)",
+ "match": "(\\+|\\-|\\*\\*|\\*|//|/|%|~)",
"name": "keyword.operator.arithmetic.jinja"
},
{
@@ -162,10 +192,10 @@
"name": "punctuation.other.jinja"
},
"2": {
- "name": "variable.other.jinja.filter"
+ "name": "entity.name.function.filter.jinja"
}
},
- "match": "(\\|)([a-zA-Z_][a-zA-Z0-9_]*)"
+ "match": "(\\|)\\s*([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)"
},
{
"captures": {
@@ -173,10 +203,10 @@
"name": "punctuation.other.jinja"
},
"2": {
- "name": "variable.other.jinja.attribute"
+ "name": "variable.other.property.jinja"
}
},
- "match": "(\\.)([a-zA-Z_][a-zA-Z0-9_]*)"
+ "match": "(\\.)\\s*([a-zA-Z_][a-zA-Z0-9_]*|[0-9]+)"
},
{
"begin": "\\[",
@@ -225,7 +255,7 @@
"name": "punctuation.other.jinja"
},
{
- "match": "(==|<=|=>|<|>|!=)",
+ "match": "(==|<=|>=|<|>|!=)",
"name": "keyword.operator.comparison.jinja"
},
{
@@ -273,13 +303,13 @@
]
},
{
- "begin": "@\/",
+ "begin": "@/",
"beginCaptures": [
{
"name": "punctuation.definition.regexp.begin.jinja"
}
],
- "end": "\/",
+ "end": "/",
"endCaptures": [
{
"name": "punctuation.definition.regexp.end.jinja"