Skip to content

Commit

Permalink
rule truthy: add check-keys option
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyam8 committed Apr 4, 2020
1 parent 542ae75 commit e640389
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 2 deletions.
15 changes: 15 additions & 0 deletions tests/rules/test_truthy.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,18 @@ def test_explicit_types(self):
'boolean5: !!bool off\n'
'boolean6: !!bool NO\n',
conf)

def test_check_keys_disabled(self):
conf = ('truthy:\n'
' allowed-values: []\n'
' check-keys: false\n'
'key-duplicates: disable\n')
self.check('---\n'
'YES: 0\nYes: 0\nyes: 0\n'
'No: 0\nNo: 0\nno: 0\n'
'TRUE: 0\nTrue: 0\ntrue: 0\n'
'FALSE: 0\nFalse: 0\nfalse: 0\n'
'ON: 0\nOn: 0\non: 0\n'
'OFF: 0\nOff: 0\noff: 0\n'
'YES:\n Yes:\n yes:\n on: 0\n',
conf)
27 changes: 25 additions & 2 deletions yamllint/rules/truthy.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
``'No'``, ``'no'``, ``'ON'``, ``'On'``, ``'on'``, ``'OFF'``, ``'Off'``,
``'off'``.
* ``check-keys`` by default, truthy rule applies to both keys and values.
To disable key verification set this option to ``'false'``.
.. rubric:: Examples
#. With ``truthy: {}``
Expand Down Expand Up @@ -92,6 +95,22 @@
- false
- on
- off
#. With ``truthy: {check-keys: false}``
the following code snippet would **PASS**:
::
yes: 1
on: 2
true: 3
the following code snippet would **FAIL**:
::
yes: Yes
on: On
true: True
"""

import yaml
Expand All @@ -109,14 +128,18 @@

ID = 'truthy'
TYPE = 'token'
CONF = {'allowed-values': list(TRUTHY)}
DEFAULT = {'allowed-values': ['true', 'false']}
CONF = {'allowed-values': list(TRUTHY), 'check-keys': bool}
DEFAULT = {'allowed-values': ['true', 'false'], 'check-keys': True}


def check(conf, token, prev, next, nextnext, context):
if prev and isinstance(prev, yaml.tokens.TagToken):
return

if not conf['check-keys']:
if isinstance(prev, yaml.tokens.KeyToken) and isinstance(token, yaml.tokens.ScalarToken):
return

if isinstance(token, yaml.tokens.ScalarToken):
if (token.value in (set(TRUTHY) - set(conf['allowed-values'])) and
token.style is None):
Expand Down

0 comments on commit e640389

Please sign in to comment.