Add rule: truthy, to forbid truthy values that are not quoted
This commit is contained in:
committed by
Adrien Vergé
parent
c163135ee5
commit
1f472bc144
@@ -102,13 +102,13 @@ class CommentsIndentationTestCase(RuleTestCase):
|
|||||||
' a: 1\n'
|
' a: 1\n'
|
||||||
' # b: 2\n'
|
' # b: 2\n'
|
||||||
'# this object is useless\n'
|
'# this object is useless\n'
|
||||||
'obj2: no\n', conf)
|
'obj2: "no"\n', conf)
|
||||||
self.check('---\n'
|
self.check('---\n'
|
||||||
'obj1:\n'
|
'obj1:\n'
|
||||||
' a: 1\n'
|
' a: 1\n'
|
||||||
'# this object is useless\n'
|
'# this object is useless\n'
|
||||||
' # b: 2\n'
|
' # b: 2\n'
|
||||||
'obj2: no\n', conf, problem=(5, 3))
|
'obj2: "no"\n', conf, problem=(5, 3))
|
||||||
self.check('---\n'
|
self.check('---\n'
|
||||||
'obj1:\n'
|
'obj1:\n'
|
||||||
' a: 1\n'
|
' a: 1\n'
|
||||||
|
|||||||
40
tests/rules/test_truthy.py
Normal file
40
tests/rules/test_truthy.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (C) 2016 Peter Ericson
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from tests.common import RuleTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TruthyTestCase(RuleTestCase):
|
||||||
|
rule_id = 'truthy'
|
||||||
|
|
||||||
|
def test_disabled(self):
|
||||||
|
conf = 'truthy: disable'
|
||||||
|
self.check('---\n'
|
||||||
|
'1: True\n', conf)
|
||||||
|
self.check('---\n'
|
||||||
|
'True: 1\n', conf)
|
||||||
|
|
||||||
|
def test_enabled(self):
|
||||||
|
conf = 'truthy: enable\n'
|
||||||
|
self.check('---\n'
|
||||||
|
'1: True\n', conf, problem=(2, 4))
|
||||||
|
self.check('---\n'
|
||||||
|
'True: 1\n', conf, problem=(2, 1))
|
||||||
|
self.check('---\n'
|
||||||
|
'1: "True"\n', conf)
|
||||||
|
self.check('---\n'
|
||||||
|
'"True": 1\n', conf)
|
||||||
|
|
||||||
@@ -119,6 +119,8 @@ conf_overrides = {
|
|||||||
'example-8.22': ('indentation: disable\n'),
|
'example-8.22': ('indentation: disable\n'),
|
||||||
'example-10.1': ('colons: {max-spaces-before: 2}\n'),
|
'example-10.1': ('colons: {max-spaces-before: 2}\n'),
|
||||||
'example-10.2': ('indentation: {indent-sequences: no}\n'),
|
'example-10.2': ('indentation: {indent-sequences: no}\n'),
|
||||||
|
'example-10.8': ('truthy: disable\n'),
|
||||||
|
'example-10.9': ('truthy: disable\n'),
|
||||||
}
|
}
|
||||||
|
|
||||||
files = os.listdir(os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
files = os.listdir(os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
||||||
|
|||||||
@@ -43,3 +43,5 @@ rules:
|
|||||||
new-lines:
|
new-lines:
|
||||||
type: unix
|
type: unix
|
||||||
trailing-spaces: enable
|
trailing-spaces: enable
|
||||||
|
truthy:
|
||||||
|
level: warning
|
||||||
|
|||||||
@@ -26,3 +26,4 @@ rules:
|
|||||||
line-length:
|
line-length:
|
||||||
level: warning
|
level: warning
|
||||||
allow-non-breakable-inline-mappings: yes
|
allow-non-breakable-inline-mappings: yes
|
||||||
|
truthy: disable
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ from yamllint.rules import (
|
|||||||
new_line_at_end_of_file,
|
new_line_at_end_of_file,
|
||||||
new_lines,
|
new_lines,
|
||||||
trailing_spaces,
|
trailing_spaces,
|
||||||
|
truthy,
|
||||||
)
|
)
|
||||||
|
|
||||||
_RULES = {
|
_RULES = {
|
||||||
@@ -50,6 +51,7 @@ _RULES = {
|
|||||||
new_line_at_end_of_file.ID: new_line_at_end_of_file,
|
new_line_at_end_of_file.ID: new_line_at_end_of_file,
|
||||||
new_lines.ID: new_lines,
|
new_lines.ID: new_lines,
|
||||||
trailing_spaces.ID: trailing_spaces,
|
trailing_spaces.ID: trailing_spaces,
|
||||||
|
truthy.ID: truthy,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
56
yamllint/rules/truthy.py
Normal file
56
yamllint/rules/truthy.py
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (C) 2016 Peter Ericson
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Use this rule to forbid truthy values that are not quoted.
|
||||||
|
|
||||||
|
.. rubric:: Examples
|
||||||
|
|
||||||
|
#. With ``truthy: {}``
|
||||||
|
|
||||||
|
the following code snippet would **PASS**:
|
||||||
|
::
|
||||||
|
|
||||||
|
object: {"True": 1, 1: "True"}
|
||||||
|
|
||||||
|
the following code snippet would **FAIL**:
|
||||||
|
::
|
||||||
|
|
||||||
|
object: {True: 1, 1: True}
|
||||||
|
"""
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
from yamllint.linter import LintProblem
|
||||||
|
|
||||||
|
ID = 'truthy'
|
||||||
|
TYPE = 'token'
|
||||||
|
CONF = {}
|
||||||
|
|
||||||
|
TRUTHY = ['YES', 'Yes', 'yes',
|
||||||
|
'NO', 'No', 'no',
|
||||||
|
'TRUE', 'True', # true is a boolean
|
||||||
|
'FALSE', 'False', # false is a boolean
|
||||||
|
'ON', 'On', 'on',
|
||||||
|
'OFF', 'Off', 'off']
|
||||||
|
|
||||||
|
|
||||||
|
def check(conf, token, prev, next, nextnext, context):
|
||||||
|
if isinstance(token, yaml.tokens.ScalarToken):
|
||||||
|
if token.value in TRUTHY and token.style is None:
|
||||||
|
yield LintProblem(token.start_mark.line + 1,
|
||||||
|
token.start_mark.column + 1,
|
||||||
|
"truthy value is not quoted")
|
||||||
Reference in New Issue
Block a user