mirror of
https://github.com/adrienverge/yamllint.git
synced 2025-02-25 18:55:20 -06:00
Rules: indentation: Add support for cleared sequence entries
The following construction is valid YAML, and its indentation should be correctly handled: - this is - a - sequence: with cleared entries
This commit is contained in:
parent
7cb7b4f669
commit
cae100071a
@ -489,6 +489,51 @@ class IndentationTestCase(RuleTestCase):
|
|||||||
' value\n'
|
' value\n'
|
||||||
'...\n', conf, problem1=(4, 10), problem2=(6, 8))
|
'...\n', conf, problem1=(4, 10), problem2=(6, 8))
|
||||||
|
|
||||||
|
def test_clear_sequence_item(self):
|
||||||
|
conf = 'indentation: {spaces: 2}'
|
||||||
|
self.check('---\n'
|
||||||
|
'-\n'
|
||||||
|
' string\n'
|
||||||
|
'-\n'
|
||||||
|
' map: ping\n'
|
||||||
|
'-\n'
|
||||||
|
' - sequence\n'
|
||||||
|
' -\n'
|
||||||
|
' nested\n'
|
||||||
|
' -\n'
|
||||||
|
' >\n'
|
||||||
|
' multi\n'
|
||||||
|
' line\n'
|
||||||
|
'...\n', conf)
|
||||||
|
self.check('---\n'
|
||||||
|
'-\n'
|
||||||
|
' string\n'
|
||||||
|
'-\n'
|
||||||
|
' string\n', conf, problem1=(3, 2), problem2=(5, 4))
|
||||||
|
self.check('---\n'
|
||||||
|
'-\n'
|
||||||
|
' map: ping\n'
|
||||||
|
'-\n'
|
||||||
|
' map: ping\n', conf, problem1=(3, 2), problem2=(5, 4))
|
||||||
|
self.check('---\n'
|
||||||
|
'-\n'
|
||||||
|
' - sequence\n'
|
||||||
|
'-\n'
|
||||||
|
' - sequence\n', conf, problem1=(3, 2), problem2=(5, 4))
|
||||||
|
self.check('---\n'
|
||||||
|
'-\n'
|
||||||
|
' -\n'
|
||||||
|
' nested\n'
|
||||||
|
' -\n'
|
||||||
|
' nested\n', conf, problem1=(4, 4), problem2=(6, 6))
|
||||||
|
self.check('---\n'
|
||||||
|
'-\n'
|
||||||
|
' -\n'
|
||||||
|
' >\n'
|
||||||
|
' multi\n'
|
||||||
|
' line\n'
|
||||||
|
'...\n', conf, problem=(4, 6))
|
||||||
|
|
||||||
|
|
||||||
class ScalarIndentationTestCase(RuleTestCase):
|
class ScalarIndentationTestCase(RuleTestCase):
|
||||||
rule_id = 'indentation'
|
rule_id = 'indentation'
|
||||||
|
@ -154,7 +154,7 @@ CONF = {'spaces': int,
|
|||||||
'indent-sequences': (True, False, 'whatever'),
|
'indent-sequences': (True, False, 'whatever'),
|
||||||
'check-multi-line-strings': bool}
|
'check-multi-line-strings': bool}
|
||||||
|
|
||||||
ROOT, MAP, B_SEQ, F_SEQ, KEY, VAL = range(6)
|
ROOT, MAP, B_SEQ, F_SEQ, B_ENT, KEY, VAL = range(7)
|
||||||
|
|
||||||
|
|
||||||
class Parent(object):
|
class Parent(object):
|
||||||
@ -273,6 +273,9 @@ def check(conf, token, prev, next, context):
|
|||||||
|
|
||||||
# Step 2.b: Update state
|
# Step 2.b: Update state
|
||||||
|
|
||||||
|
if context['stack'][-1].type == B_ENT:
|
||||||
|
context['stack'].pop()
|
||||||
|
|
||||||
if isinstance(token, yaml.BlockMappingStartToken):
|
if isinstance(token, yaml.BlockMappingStartToken):
|
||||||
assert isinstance(next, yaml.KeyToken)
|
assert isinstance(next, yaml.KeyToken)
|
||||||
if next.start_mark.line == token.start_mark.line:
|
if next.start_mark.line == token.start_mark.line:
|
||||||
@ -312,6 +315,23 @@ def check(conf, token, prev, next, context):
|
|||||||
|
|
||||||
context['stack'].append(Parent(B_SEQ, indent))
|
context['stack'].append(Parent(B_SEQ, indent))
|
||||||
|
|
||||||
|
elif (isinstance(token, yaml.BlockEntryToken) and
|
||||||
|
# in case of an empty entry
|
||||||
|
not isinstance(next, (yaml.BlockEntryToken, yaml.BlockEndToken))):
|
||||||
|
if next.start_mark.line == token.end_mark.line:
|
||||||
|
# - item 1
|
||||||
|
# - item 2
|
||||||
|
indent = next.start_mark.column
|
||||||
|
else:
|
||||||
|
# -
|
||||||
|
# item 1
|
||||||
|
# -
|
||||||
|
# key:
|
||||||
|
# value
|
||||||
|
indent = token.start_mark.column + conf['spaces']
|
||||||
|
|
||||||
|
context['stack'].append(Parent(B_ENT, indent))
|
||||||
|
|
||||||
elif isinstance(token, yaml.FlowSequenceStartToken):
|
elif isinstance(token, yaml.FlowSequenceStartToken):
|
||||||
if next.start_mark.line == token.start_mark.line:
|
if next.start_mark.line == token.start_mark.line:
|
||||||
# - [a, b]
|
# - [a, b]
|
||||||
|
Loading…
Reference in New Issue
Block a user