Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix meta.mapping.key for quoted keys #10

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 70 additions & 80 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,13 +221,26 @@ contexts:
# ns-flow-yaml-node(n,c)
- include: flow-alias
- include: flow-collection
- include: flow-scalar
- include: flow-scalar-11

flow-scalar:
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-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
- 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
Expand Down Expand Up @@ -433,6 +450,28 @@ contexts:
7: punctuation.separator.time.yaml
8: punctuation.separator.time.yaml

flow-scalar-plain-in-11:
# http://yaml.org/spec/1.2/spec.html#style/flow/plain
# ns-plain(n,c) (c=flow-in, c=flow-key)
- include: flow-scalar-plain-in-implicit-type-11
- include: flow-scalar-plain-in-common

flow-scalar-plain-in-12:
# http://yaml.org/spec/1.2/spec.html#style/flow/plain
# ns-plain(n,c) (c=flow-in, c=flow-key)
- include: flow-scalar-plain-in-implicit-type-12
- include: flow-scalar-plain-in-common

flow-scalar-plain-in-common:
- match: (?={{ns_plain_first_plain_in}})
push: flow-scalar-plain-in-content

flow-scalar-plain-in-content:
- meta_scope: string.unquoted.plain.in.yaml
- meta_include_prototype: false
- match: '{{_flow_scalar_end_plain_in}}'
pop: true

flow-scalar-plain-out-implicit-type-11:
- match: '{{_type_bool_11}}{{_flow_scalar_end_plain_out}}'
scope: constant.language.boolean.yaml
Expand Down Expand Up @@ -518,33 +557,13 @@ contexts:
# ns-plain(n,c) (c=flow-out, c=block-key)
- include: flow-scalar-plain-out-implicit-type-11
- match: (?={{ns_plain_first_plain_out}})
push:
- meta_scope: string.unquoted.plain.out.yaml
- meta_include_prototype: false
- match: '{{_flow_scalar_end_plain_out}}'
pop: true

flow-scalar-plain-in:
# http://yaml.org/spec/1.2/spec.html#style/flow/plain
# ns-plain(n,c) (c=flow-in, c=flow-key)
- include: flow-scalar-plain-in-implicit-type-11
- match: (?={{ns_plain_first_plain_in}})
push:
- meta_scope: string.unquoted.plain.in.yaml
- meta_include_prototype: false
- match: '{{_flow_scalar_end_plain_in}}'
pop: true
push: flow-scalar-plain-out-content

flow-scalar-plain-in-12:
# http://yaml.org/spec/1.2/spec.html#style/flow/plain
# ns-plain(n,c) (c=flow-in, c=flow-key)
- include: flow-scalar-plain-in-implicit-type-12
- match: (?={{ns_plain_first_plain_in}})
push:
- meta_scope: string.unquoted.plain.in.yaml
- meta_include_prototype: false
- match: '{{_flow_scalar_end_plain_in}}'
pop: true
flow-scalar-plain-out-content:
- meta_scope: string.unquoted.plain.out.yaml
- meta_include_prototype: false
- match: '{{_flow_scalar_end_plain_out}}'
pop: true

flow-sequence:
# http://yaml.org/spec/1.2/spec.html#style/flow/sequence
Expand Down Expand Up @@ -578,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