Skip to content

Commit

Permalink
[YAML] Fix double and single quoted keys' meta scopes
Browse files Browse the repository at this point in the history
Scope quoted keys `meta.mapping.key`.
  • Loading branch information
deathaxe authored and FichteFoll committed Feb 12, 2022
1 parent 856de11 commit 71002d5
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 53 deletions.
94 changes: 41 additions & 53 deletions YAML/YAML.sublime-syntax
Original file line number Diff line number Diff line change
Expand Up @@ -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|$)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
16 changes: 16 additions & 0 deletions YAML/tests/syntax_test_flow.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 71002d5

Please sign in to comment.