From 71002d5e92aec3175965bfb36e9564d2e07eaf80 Mon Sep 17 00:00:00 2001 From: DeathAxe Date: Fri, 11 Feb 2022 19:09:14 +0100 Subject: [PATCH] [YAML] Fix double and single quoted keys' meta scopes Scope quoted keys `meta.mapping.key`. --- YAML/YAML.sublime-syntax | 94 ++++++++++++++------------------ YAML/tests/syntax_test_flow.yaml | 16 ++++++ 2 files changed, 57 insertions(+), 53 deletions(-) diff --git a/YAML/YAML.sublime-syntax b/YAML/YAML.sublime-syntax index f98ca39964..00a2ccf651 100644 --- a/YAML/YAML.sublime-syntax +++ b/YAML/YAML.sublime-syntax @@ -114,11 +114,15 @@ variables: _flow_key_in_lookahead: |- (?x: (?= - {{ns_plain_first_plain_in}} - ( [^\s:{{c_flow_indicator}}] - | : [^\s{{c_flow_indicator}}] - | \s+ (?![#\s]) - )* + ( + {{ns_plain_first_plain_in}} + ( [^\s:{{c_flow_indicator}}] + | : [^\s{{c_flow_indicator}}] + | \s+ (?![#\s]) + )* + | \".*\" + | \'.*\' + ) \s* : (\s|$) @@ -217,14 +221,27 @@ contexts: # ns-flow-yaml-node(n,c) - include: flow-alias - include: flow-collection - - include: flow-scalar + - include: flow-scalar-11 + + flow-node-12: + # http://yaml.org/spec/1.2/spec.html#style/flow/ + # ns-flow-yaml-node(n,c) + - include: flow-alias + - include: flow-collection + - include: flow-scalar-12 - flow-scalar: + flow-scalar-11: # http://yaml.org/spec/1.2/spec.html#style/flow/scalar - include: flow-scalar-double-quoted - include: flow-scalar-single-quoted - include: flow-scalar-plain-in-11 + flow-scalar-12: + # http://yaml.org/spec/1.2/spec.html#style/flow/scalar + - include: flow-scalar-double-quoted + - include: flow-scalar-single-quoted + - include: flow-scalar-plain-in-12 + flow-collection: # http://yaml.org/spec/1.2/spec.html#style/flow/collection - include: flow-sequence @@ -580,79 +597,50 @@ contexts: - match: \? scope: meta.mapping.key.yaml punctuation.definition.key.begin.yaml push: - - flow-pair-value-set + - flow-pair-clear-1 - flow-pair-key # Attempt to match plain-in scalars followed by a colon - match: '{{_flow_key_in_lookahead}}' push: - - flow-pair-value-set - - flow-pair-key-12 + - flow-pair-clear-1 + - flow-pair-key - match: :(?=\s|$|{{c_flow_indicator}}) # Empty mapping keys allowed scope: meta.mapping.yaml punctuation.separator.key-value.mapping.yaml - push: flow-pair-value + push: + - flow-pair-clear-1 + - flow-pair-value # Variant without clearing the parent scope for pairs in a sequence flow-pair-no-clear: - match: \? scope: meta.mapping.key.yaml punctuation.definition.key.begin.yaml - push: - - flow-pair-value-set-no-clear - - flow-pair-key-no-clear + push: flow-pair-key - match: '{{_flow_key_in_lookahead}}' - push: - - flow-pair-value-set-no-clear - - flow-pair-key-no-clear + push: flow-pair-key - match: :(?=\s|$|{{c_flow_indicator}}) scope: meta.mapping.yaml punctuation.separator.key-value.mapping.yaml - push: flow-pair-value-no-clear + push: flow-pair-value flow-pair-key: - - clear_scopes: 1 - - meta_content_scope: meta.mapping.key.yaml - - match: (?=[},\]]) # Empty mapping keys & values are allowed - pop: true - - match: :(?=\s|$|{{c_flow_indicator}}) - scope: meta.mapping.yaml punctuation.separator.key-value.mapping.yaml - pop: true - - include: flow-node - - flow-pair-key-12: - - clear_scopes: 1 - - meta_content_scope: meta.mapping.key.yaml - - match: (?=[},\]]) # Empty mapping keys & values are allowed - pop: true - - match: :(?=\s|$|{{c_flow_indicator}}) - scope: meta.mapping.yaml punctuation.separator.key-value.mapping.yaml - pop: true - - include: flow-scalar-plain-in-12 - - flow-pair-key-no-clear: - meta_content_scope: meta.mapping.key.yaml - - match: (?=[},\]]) - pop: true - match: :(?=\s|$|{{c_flow_indicator}}) scope: meta.mapping.yaml punctuation.separator.key-value.mapping.yaml - pop: true - - include: flow-node - - flow-pair-value-set: - - match: '' set: flow-pair-value + - include: flow-pair-end # Empty mapping keys & values are allowed + - include: flow-node-12 flow-pair-value: - - clear_scopes: 1 - meta_content_scope: meta.mapping.value.yaml + - include: flow-pair-end - include: flow-node - - match: (?=[},\]]) - pop: true - flow-pair-value-set-no-clear: + flow-pair-clear-1: + - meta_include_prototype: false + - clear_scopes: 1 - match: '' - set: flow-pair-value-no-clear + pop: true - flow-pair-value-no-clear: - - meta_content_scope: meta.mapping.value.yaml - - include: flow-node + flow-pair-end: - match: (?=[},\]]) pop: true diff --git a/YAML/tests/syntax_test_flow.yaml b/YAML/tests/syntax_test_flow.yaml index 30b72d33ca..ed5428e747 100644 --- a/YAML/tests/syntax_test_flow.yaml +++ b/YAML/tests/syntax_test_flow.yaml @@ -139,6 +139,22 @@ continuation" # ^^^ meta.mapping.value.yaml # ^ constant.numeric +{ "key": "value", 'key': 0 } +#^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.yaml +# <- source.yaml meta.mapping.yaml punctuation.definition.mapping.begin.yaml +#^ meta.mapping.yaml +# ^^^^^ meta.mapping.key string.quoted.double.yaml +# ^ meta.mapping.yaml punctuation.separator.key-value.mapping.yaml +# ^^^^^^^^ meta.mapping.value.yaml +# ^^^^^^^ string.quoted.double.yaml +# ^^ meta.mapping.yaml +# ^ punctuation.separator.mapping.yaml +# ^^^^^ meta.mapping.key.yaml string.quoted.single.yaml +# ^ punctuation.separator.key-value.mapping.yaml +# ^^^ meta.mapping.value.yaml +# ^ meta.number.integer.decimal.yaml constant.numeric.value.yaml +# ^ meta.mapping.yaml punctuation.definition.mapping.end.yaml + {? !!str 'key' : !!str value, # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.mapping - meta.mapping meta.mapping # ^^^^^^^^^^^^ meta.mapping.value