diff --git a/language/syntaxes/expressions.tmGrammar.json b/language/syntaxes/expressions.tmGrammar.json index 6e4fe280..b97c1350 100644 --- a/language/syntaxes/expressions.tmGrammar.json +++ b/language/syntaxes/expressions.tmGrammar.json @@ -3,43 +3,76 @@ "injectionSelector": "L:source.github-actions-workflow", "patterns": [ { - "include": "#expression" + "include": "#block-inline-expression" + }, + { + "include": "#block-if-expression" }, { "include": "#if-expression" } ], "repository": { - "expression": { - "match": "[|-]?\\$\\{\\{(.*?)\\}\\}", + "block-inline-expression": { "name": "meta.embedded.block.github-actions-expression", - "captures": { + "begin": "[|-]?\\$\\{\\{", + "end": "\\}\\}", + "patterns": [ + { + "include": "#expression" + } + ] + }, + "block-if-expression": { + "contentName": "meta.embedded.block.github-actions-expression", + "begin": "^\\s*\\b(if:) (?:(\\|)|(>))([1-9])?([-+])?(.*\\n?)", + "beginCaptures": { "1": { "patterns": [ { - "include": "#function-call" - }, - { - "include": "#context" - }, - { - "include": "#string" - }, + "include": "source.github-actions-workflow" + } + ] + }, + "2": { + "name": "keyword.control.flow.block-scalar.literal.yaml" + }, + "3": { + "name": "keyword.control.flow.block-scalar.folded.yaml" + }, + "4": { + "name": "constant.numeric.indentation-indicator.yaml" + }, + "5": { + "name": "storage.modifier.chomping-indicator.yaml" + }, + "6": { + "patterns": [ { - "include": "#number" + "include": "#comment" }, { - "include": "#boolean" - }, + "match": ".+", + "name": "invalid.illegal.expected-comment-or-newline.yaml" + } + ] + } + }, + "end": "^(?=\\S)|(?!\\G)", + "patterns": [ + { + "begin": "^([ ]+)(?! )", + "end": "^(?!\\1|\\s*$)", + "patterns": [ { - "include": "#null" + "include": "#expression" } ] } - } + ] }, "if-expression": { - "match": "\\b(if:) (.*?)$", + "match": "^\\s*\\b(if:) (.*?)$", "contentName": "meta.embedded.block.github-actions-expression", "captures": { "1": { @@ -52,27 +85,40 @@ "2": { "patterns": [ { - "include": "#function-call" - }, - { - "include": "#context" - }, - { - "include": "#string" - }, - { - "include": "#number" - }, - { - "include": "#boolean" - }, - { - "include": "#null" + "include": "#expression" } ] } } }, + "expression": { + "patterns": [ + { + "include": "#function-call" + }, + { + "include": "#context" + }, + { + "include": "#string" + }, + { + "include": "#op-comparison" + }, + { + "include": "#op-logical" + }, + { + "include": "#number" + }, + { + "include": "#boolean" + }, + { + "include": "#null" + } + ] + }, "function-call": { "patterns": [ { @@ -98,6 +144,14 @@ "begin": "'", "end": "'" }, + "op-comparison": { + "name": "keyword.operator.comparison.github-actions-expression", + "match": "(==|!=)" + }, + "op-logical": { + "name": "keyword.operator.logical.github-actions-expression", + "match": "(&&|\\|\\|)" + }, "number": { "name": "constant.numeric.github-actions-expression", "match": "\\b[0-9]+(?:.[0-9]+)?\\b"