Rules: indentation: Add the 'indent-sequences' option
Using either 'yes', 'no' or 'whatever', the user will be able to choose whether to force block sequence items to be indented, to force them not to be indented, or don't care, respectively.
This commit is contained in:
@@ -42,7 +42,7 @@ class ColonTestCase(RuleTestCase):
|
||||
' - p: kdjf\n'
|
||||
' - q: val0\n'
|
||||
' - q2:\n'
|
||||
' - val1\n'
|
||||
' - val1\n'
|
||||
'...\n', conf)
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
@@ -67,7 +67,7 @@ class ColonTestCase(RuleTestCase):
|
||||
' - o: {k1: v1}\n'
|
||||
' - o: {k1: v1}\n'
|
||||
' - q2:\n'
|
||||
' - val1\n'
|
||||
' - val1\n'
|
||||
'...\n', conf)
|
||||
self.check('---\n'
|
||||
'a: {b: {c: d, e : f}}\n', conf)
|
||||
@@ -94,7 +94,7 @@ class ColonTestCase(RuleTestCase):
|
||||
'...\n', conf, problem=(2, 4))
|
||||
self.check('---\n'
|
||||
'- lib :\n'
|
||||
' - var\n'
|
||||
' - var\n'
|
||||
'...\n', conf, problem=(2, 6))
|
||||
self.check('---\n'
|
||||
'a: {b: {c : d, e : f}}\n', conf,
|
||||
|
||||
@@ -115,7 +115,7 @@ class CommentsIndentationTestCase(RuleTestCase):
|
||||
' # comments\n'
|
||||
' b: 2\n', conf)
|
||||
self.check('---\n'
|
||||
'mylist:\n'
|
||||
'my list for today:\n'
|
||||
' - todo 1\n'
|
||||
' - todo 2\n'
|
||||
' # commented for now\n'
|
||||
|
||||
@@ -36,12 +36,12 @@ class HyphenTestCase(RuleTestCase):
|
||||
'- elem2\n', conf)
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
'- elem1\n'
|
||||
'- elem2\n', conf)
|
||||
' - elem1\n'
|
||||
' - elem2\n', conf)
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
'- elem1\n'
|
||||
'- elem2\n', conf)
|
||||
' - elem1\n'
|
||||
' - elem2\n', conf)
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' subobject:\n'
|
||||
@@ -69,12 +69,12 @@ class HyphenTestCase(RuleTestCase):
|
||||
'- elem2\n', conf, problem=(2, 3))
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
'- elem1\n'
|
||||
'- elem2\n', conf, problem=(4, 3))
|
||||
' - elem1\n'
|
||||
' - elem2\n', conf, problem=(4, 5))
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
'- elem1\n'
|
||||
'- elem2\n', conf, problem1=(3, 3), problem2=(4, 3))
|
||||
' - elem1\n'
|
||||
' - elem2\n', conf, problem1=(3, 5), problem2=(4, 5))
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' subobject:\n'
|
||||
|
||||
@@ -48,7 +48,20 @@ class IndentationTestCase(RuleTestCase):
|
||||
'...\n', conf)
|
||||
|
||||
def test_one_space(self):
|
||||
conf = 'indentation: {spaces: 1}'
|
||||
conf = 'indentation: {spaces: 1, indent-sequences: no}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' k1:\n'
|
||||
' - a\n'
|
||||
' - b\n'
|
||||
' k2: v2\n'
|
||||
' k3:\n'
|
||||
' - name: Unix\n'
|
||||
' date: 1969\n'
|
||||
' - name: Linux\n'
|
||||
' date: 1991\n'
|
||||
'...\n', conf)
|
||||
conf = 'indentation: {spaces: 1, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' k1:\n'
|
||||
@@ -63,7 +76,20 @@ class IndentationTestCase(RuleTestCase):
|
||||
'...\n', conf)
|
||||
|
||||
def test_two_spaces(self):
|
||||
conf = 'indentation: {spaces: 2}'
|
||||
conf = 'indentation: {spaces: 2, indent-sequences: no}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' k1:\n'
|
||||
' - a\n'
|
||||
' - b\n'
|
||||
' k2: v2\n'
|
||||
' k3:\n'
|
||||
' - name: Unix\n'
|
||||
' date: 1969\n'
|
||||
' - name: Linux\n'
|
||||
' date: 1991\n'
|
||||
'...\n', conf)
|
||||
conf = 'indentation: {spaces: 2, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' k1:\n'
|
||||
@@ -78,7 +104,20 @@ class IndentationTestCase(RuleTestCase):
|
||||
'...\n', conf)
|
||||
|
||||
def test_three_spaces(self):
|
||||
conf = 'indentation: {spaces: 3}'
|
||||
conf = 'indentation: {spaces: 3, indent-sequences: no}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' k1:\n'
|
||||
' - a\n'
|
||||
' - b\n'
|
||||
' k2: v2\n'
|
||||
' k3:\n'
|
||||
' - name: Unix\n'
|
||||
' date: 1969\n'
|
||||
' - name: Linux\n'
|
||||
' date: 1991\n'
|
||||
'...\n', conf)
|
||||
conf = 'indentation: {spaces: 3, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' k1:\n'
|
||||
@@ -92,8 +131,122 @@ class IndentationTestCase(RuleTestCase):
|
||||
' date: 1991\n'
|
||||
'...\n', conf)
|
||||
|
||||
def test_under_indented(self):
|
||||
def test_indent_sequences_whatever(self):
|
||||
conf = 'indentation: {spaces: 4, indent-sequences: whatever}'
|
||||
self.check('---\n'
|
||||
'list one:\n'
|
||||
'- 1\n'
|
||||
'- 2\n'
|
||||
'- 3\n'
|
||||
'list two:\n'
|
||||
' - a\n'
|
||||
' - b\n'
|
||||
' - c\n', conf)
|
||||
self.check('---\n'
|
||||
'list one:\n'
|
||||
' - 1\n'
|
||||
' - 2\n'
|
||||
' - 3\n'
|
||||
'list two:\n'
|
||||
' - a\n'
|
||||
' - b\n'
|
||||
' - c\n', conf, problem=(3, 3))
|
||||
self.check('---\n'
|
||||
'list one:\n'
|
||||
'- 1\n'
|
||||
'- 2\n'
|
||||
'- 3\n'
|
||||
'list two:\n'
|
||||
' - a\n'
|
||||
' - b\n'
|
||||
' - c\n', conf, problem=(7, 3))
|
||||
self.check('---\n'
|
||||
'list:\n'
|
||||
' - 1\n'
|
||||
' - 2\n'
|
||||
' - 3\n'
|
||||
'- a\n'
|
||||
'- b\n'
|
||||
'- c\n', conf, problem=(6, 1, 'syntax'))
|
||||
|
||||
def test_flow_mappings(self):
|
||||
conf = 'indentation: {spaces: 2}'
|
||||
self.check('---\n'
|
||||
'a: {x: 1,\n'
|
||||
' y,\n'
|
||||
' z: 1}\n', conf)
|
||||
self.check('---\n'
|
||||
'a: {x: 1,\n'
|
||||
' y,\n'
|
||||
' z: 1}\n', conf, problem=(3, 4))
|
||||
self.check('---\n'
|
||||
'a: {x: 1,\n'
|
||||
' y,\n'
|
||||
' z: 1}\n', conf, problem=(3, 6))
|
||||
self.check('---\n'
|
||||
'a: {x: 1,\n'
|
||||
' y, z: 1\n'
|
||||
'}\n', conf, problem=(3, 3))
|
||||
self.check('---\n'
|
||||
'a: {\n'
|
||||
' x: 1,\n'
|
||||
' y, z: 1\n'
|
||||
'}\n', conf)
|
||||
self.check('---\n'
|
||||
'a: {\n'
|
||||
' x: 1,\n'
|
||||
' y, z: 1}\n', conf)
|
||||
self.check('---\n'
|
||||
'a: {\n'
|
||||
' x: 1,\n'
|
||||
' y, z: 1\n'
|
||||
'}\n', conf, problem=(3, 4))
|
||||
self.check('---\n'
|
||||
'a: {\n'
|
||||
' x: 1,\n'
|
||||
' y, z: 1\n'
|
||||
' }\n', conf, problem=(5, 3))
|
||||
|
||||
def test_flow_sequences(self):
|
||||
conf = 'indentation: {spaces: 2}'
|
||||
self.check('---\n'
|
||||
'a: [x,\n'
|
||||
' y,\n'
|
||||
' z]\n', conf)
|
||||
self.check('---\n'
|
||||
'a: [x,\n'
|
||||
' y,\n'
|
||||
' z]\n', conf, problem=(3, 4))
|
||||
self.check('---\n'
|
||||
'a: [x,\n'
|
||||
' y,\n'
|
||||
' z]\n', conf, problem=(3, 6))
|
||||
self.check('---\n'
|
||||
'a: [x,\n'
|
||||
' y, z\n'
|
||||
']\n', conf, problem=(3, 3))
|
||||
self.check('---\n'
|
||||
'a: [\n'
|
||||
' x,\n'
|
||||
' y, z\n'
|
||||
']\n', conf)
|
||||
self.check('---\n'
|
||||
'a: [\n'
|
||||
' x,\n'
|
||||
' y, z]\n', conf)
|
||||
self.check('---\n'
|
||||
'a: [\n'
|
||||
' x,\n'
|
||||
' y, z\n'
|
||||
']\n', conf, problem=(3, 4))
|
||||
self.check('---\n'
|
||||
'a: [\n'
|
||||
' x,\n'
|
||||
' y, z\n'
|
||||
' ]\n', conf, problem=(5, 3))
|
||||
|
||||
def test_under_indented(self):
|
||||
conf = 'indentation: {spaces: 2, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' val: 1\n'
|
||||
@@ -109,7 +262,7 @@ class IndentationTestCase(RuleTestCase):
|
||||
' - name: Unix\n'
|
||||
' date: 1969\n'
|
||||
'...\n', conf, problem=(5, 6, 'syntax'))
|
||||
conf = 'indentation: {spaces: 4}'
|
||||
conf = 'indentation: {spaces: 4, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' val: 1\n'
|
||||
@@ -127,7 +280,7 @@ class IndentationTestCase(RuleTestCase):
|
||||
'...\n', conf, problem=(5, 10, 'syntax'))
|
||||
|
||||
def test_over_indented(self):
|
||||
conf = 'indentation: {spaces: 2}'
|
||||
conf = 'indentation: {spaces: 2, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' val: 1\n'
|
||||
@@ -143,7 +296,7 @@ class IndentationTestCase(RuleTestCase):
|
||||
' - name: Unix\n'
|
||||
' date: 1969\n'
|
||||
'...\n', conf, problem=(5, 12, 'syntax'))
|
||||
conf = 'indentation: {spaces: 4}'
|
||||
conf = 'indentation: {spaces: 4, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'object:\n'
|
||||
' val: 1\n'
|
||||
@@ -165,7 +318,7 @@ class IndentationTestCase(RuleTestCase):
|
||||
self.check('---\n'
|
||||
' - el1\n'
|
||||
' - el2:\n'
|
||||
' - subel\n'
|
||||
' - subel\n'
|
||||
'...\n', conf,
|
||||
problem=(2, 3))
|
||||
self.check('---\n'
|
||||
@@ -174,24 +327,32 @@ class IndentationTestCase(RuleTestCase):
|
||||
' - name: Linux\n'
|
||||
' date: 1991\n'
|
||||
'...\n', conf, problem=(5, 16, 'syntax'))
|
||||
conf = 'indentation: {spaces: 4, indent-sequences: whatever}'
|
||||
self.check('---\n'
|
||||
' - el1\n'
|
||||
' - el2:\n'
|
||||
' - subel\n'
|
||||
'...\n', conf,
|
||||
problem=(2, 3))
|
||||
|
||||
def test_multi_lines(self):
|
||||
conf = 'indentation: {spaces: 2, indent-sequences: yes}'
|
||||
self.check('---\n'
|
||||
'long_string: >\n'
|
||||
' bla bla blah\n'
|
||||
' blah bla bla\n'
|
||||
'...\n', None)
|
||||
'...\n', conf)
|
||||
self.check('---\n'
|
||||
'- long_string: >\n'
|
||||
' bla bla blah\n'
|
||||
' blah bla bla\n'
|
||||
'...\n', None)
|
||||
'...\n', conf)
|
||||
self.check('---\n'
|
||||
'obj:\n'
|
||||
' - long_string: >\n'
|
||||
' bla bla blah\n'
|
||||
' blah bla bla\n'
|
||||
'...\n', None)
|
||||
'...\n', conf)
|
||||
|
||||
def test_empty_value(self):
|
||||
conf = 'indentation: {spaces: 2}'
|
||||
@@ -233,8 +394,23 @@ class IndentationTestCase(RuleTestCase):
|
||||
'- o:\n'
|
||||
' k1: v1\n'
|
||||
'...\n', conf, problem=(3, 8))
|
||||
self.check('---\n'
|
||||
'- - - - item\n'
|
||||
' - elem 1\n'
|
||||
' - elem 2\n'
|
||||
' - - - - - very nested: a\n'
|
||||
' key: value\n'
|
||||
'...\n', conf)
|
||||
self.check('---\n'
|
||||
' - - - - item\n'
|
||||
' - elem 1\n'
|
||||
' - elem 2\n'
|
||||
' - - - - - very nested: a\n'
|
||||
' key: value\n'
|
||||
'...\n', conf, problem=(2, 2))
|
||||
|
||||
def test_return(self):
|
||||
conf = 'indentation: {spaces: 2}'
|
||||
self.check('---\n'
|
||||
'a:\n'
|
||||
' b:\n'
|
||||
@@ -243,19 +419,19 @@ class IndentationTestCase(RuleTestCase):
|
||||
' e:\n'
|
||||
' f:\n'
|
||||
'g:\n'
|
||||
'...\n', None)
|
||||
'...\n', conf)
|
||||
self.check('---\n'
|
||||
'a:\n'
|
||||
' b:\n'
|
||||
' c:\n'
|
||||
' d:\n'
|
||||
'...\n', None, problem=(5, 4, 'syntax'))
|
||||
'...\n', conf, problem=(5, 4, 'syntax'))
|
||||
self.check('---\n'
|
||||
'a:\n'
|
||||
' b:\n'
|
||||
' c:\n'
|
||||
' d:\n'
|
||||
'...\n', None, problem=(5, 2, 'syntax'))
|
||||
'...\n', conf, problem=(5, 2, 'syntax'))
|
||||
|
||||
def test_first_line(self):
|
||||
conf = ('indentation: {spaces: 2}\n'
|
||||
|
||||
@@ -31,7 +31,7 @@ rules:
|
||||
max-spaces-after: 1
|
||||
indentation:
|
||||
spaces: 2
|
||||
# indent-sequences: no
|
||||
indent-sequences: yes
|
||||
line-length:
|
||||
max: 80
|
||||
new-line-at-end-of-file: {level: error}
|
||||
|
||||
@@ -22,7 +22,8 @@ from yamllint.rules.common import is_explicit_key
|
||||
|
||||
ID = 'indentation'
|
||||
TYPE = 'token'
|
||||
CONF = {'spaces': int}
|
||||
CONF = {'spaces': int,
|
||||
'indent-sequences': (True, False, 'whatever')}
|
||||
|
||||
ROOT, MAP, B_SEQ, F_SEQ, KEY, VAL = range(6)
|
||||
|
||||
@@ -164,16 +165,21 @@ def check(conf, token, prev, next, context):
|
||||
# yaml.scan()ning this:
|
||||
# '- lib:\n'
|
||||
# ' - var\n'
|
||||
if next.start_mark.column == context['stack'][-1].indent:
|
||||
# key:
|
||||
# - e1
|
||||
# - e2
|
||||
if conf['indent-sequences'] is False:
|
||||
indent = context['stack'][-1].indent
|
||||
else:
|
||||
# key:
|
||||
# - e1
|
||||
# - e2
|
||||
elif conf['indent-sequences'] is True:
|
||||
indent = context['stack'][-1].indent + conf['spaces']
|
||||
else: # 'whatever'
|
||||
if next.start_mark.column == context['stack'][-1].indent:
|
||||
# key:
|
||||
# - e1
|
||||
# - e2
|
||||
indent = context['stack'][-1].indent
|
||||
else:
|
||||
# key:
|
||||
# - e1
|
||||
# - e2
|
||||
indent = context['stack'][-1].indent + conf['spaces']
|
||||
else:
|
||||
# k:
|
||||
# value
|
||||
|
||||
Reference in New Issue
Block a user