Hello community, here is the log from the commit of package python-yamllint for openSUSE:Factory checked in at 2018-12-31 09:47:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-yamllint (Old) and /work/SRC/openSUSE:Factory/.python-yamllint.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-yamllint" Mon Dec 31 09:47:12 2018 rev:3 rq:662050 version:1.13.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-yamllint/python-yamllint.changes 2018-12-13 19:45:51.144902644 +0100 +++ /work/SRC/openSUSE:Factory/.python-yamllint.new.28833/python-yamllint.changes 2018-12-31 09:47:51.310144399 +0100 @@ -1,0 +2,11 @@ +Sun Dec 30 04:03:53 UTC 2018 - John Vandenberg <jay...@gmail.com> + +- Update to 1.13.0 + * Add a new -f colored option +- Update to 1.12.1 + * Fix the `quoted-strings` rule +- Update to 1.12.0 + * Add a new `quoted-strings` rule +- Changes file fix + +------------------------------------------------------------------- Old: ---- yamllint-1.11.1.tar.gz New: ---- yamllint-1.13.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-yamllint.spec ++++++ --- /var/tmp/diff_new_pack.iNk3De/_old 2018-12-31 09:47:51.998143834 +0100 +++ /var/tmp/diff_new_pack.iNk3De/_new 2018-12-31 09:47:51.998143834 +0100 @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-yamllint -Version: 1.11.1 +Version: 1.13.0 Release: 0 Summary: A linter for YAML files License: GPL-3.0-only ++++++ yamllint-1.11.1.tar.gz -> yamllint-1.13.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/PKG-INFO new/yamllint-1.13.0/PKG-INFO --- old/yamllint-1.11.1/PKG-INFO 2018-04-06 11:14:37.000000000 +0200 +++ new/yamllint-1.13.0/PKG-INFO 2018-11-14 19:10:45.000000000 +0100 @@ -1,12 +1,11 @@ Metadata-Version: 1.1 Name: yamllint -Version: 1.11.1 +Version: 1.13.0 Summary: A linter for YAML files. Home-page: https://github.com/adrienverge/yamllint Author: Adrien Vergé Author-email: UNKNOWN License: GPLv3 -Description-Content-Type: UNKNOWN Description: A linter for YAML files. yamllint does not only check for syntax validity, but for weirdnesses like key diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/README.rst new/yamllint-1.13.0/README.rst --- old/yamllint-1.11.1/README.rst 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/README.rst 2018-11-14 19:10:16.000000000 +0100 @@ -38,7 +38,8 @@ Installation ^^^^^^^^^^^^ -On Fedora / CentOS: +On Fedora / CentOS (note: `EPEL <https://fedoraproject.org/wiki/EPEL>`_ is +required on CentOS): .. code:: bash @@ -50,11 +51,17 @@ sudo apt-get install yamllint +On Mac OS 10.11+: + +.. code:: bash + + brew install yamllint + Alternatively using pip, the Python package manager: .. code:: bash - sudo pip install yamllint + pip install --user yamllint Usage ^^^^^ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/docs/configuration.rst new/yamllint-1.13.0/docs/configuration.rst --- old/yamllint-1.11.1/docs/configuration.rst 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/docs/configuration.rst 2018-11-14 19:10:16.000000000 +0100 @@ -102,8 +102,8 @@ ------------------- Problems detected by yamllint can be raised either as errors or as warnings. -The CLI will output them (with different colors when using the ``standard`` -output format). +The CLI will output them (with different colors when using the ``colored`` +output format, or ``auto`` when run from a terminal). By default the script will exit with a return code ``1`` *only when* there is one or more error(s). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/docs/quickstart.rst new/yamllint-1.13.0/docs/quickstart.rst --- old/yamllint-1.11.1/docs/quickstart.rst 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/docs/quickstart.rst 2018-11-14 19:10:16.000000000 +0100 @@ -16,25 +16,24 @@ sudo apt-get install yamllint -On older Debian / Ubuntu versions: +On Mac OS 10.11+: .. code:: bash - sudo add-apt-repository -y ppa:adrienverge/ppa && sudo apt-get update - sudo apt-get install yamllint + brew install yamllint Alternatively using pip, the Python package manager: .. code:: bash - sudo pip install yamllint + pip install --user yamllint If you prefer installing from source, you can run, from the source directory: .. code:: bash python setup.py sdist - sudo pip install dist/yamllint-*.tar.gz + pip install --user dist/yamllint-*.tar.gz Running yamllint ---------------- @@ -69,6 +68,10 @@ 10:1 error too many blank lines (4 > 2) (empty-lines) 11:4 error too many spaces inside braces (braces) +By default, the output of yamllint is colored when run from a terminal, and pure +text in other cases. Add the ``-f standard`` arguments to force non-colored output. +Use the ``-f colored`` arguments to force colored output. + Add the ``-f parsable`` arguments if you need an output format parsable by a machine (for instance for :doc:`syntax highlighting in text editors <text_editors>`). The output will then look like: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/docs/rules.rst new/yamllint-1.13.0/docs/rules.rst --- old/yamllint-1.11.1/docs/rules.rst 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/docs/rules.rst 2018-11-14 19:10:16.000000000 +0100 @@ -104,6 +104,11 @@ .. automodule:: yamllint.rules.octal_values +quoted-strings +-------------- + +.. automodule:: yamllint.rules.quoted_strings + trailing-spaces --------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/tests/rules/test_quoted_strings.py new/yamllint-1.13.0/tests/rules/test_quoted_strings.py --- old/yamllint-1.11.1/tests/rules/test_quoted_strings.py 1970-01-01 01:00:00.000000000 +0100 +++ new/yamllint-1.13.0/tests/rules/test_quoted_strings.py 2018-11-14 19:10:16.000000000 +0100 @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2018 ClearScore +# +# 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 QuotedTestCase(RuleTestCase): + rule_id = 'quoted-strings' + + def test_disabled(self): + conf = 'quoted-strings: disable' + self.check('---\n' + 'foo: bar\n', conf) + self.check('---\n' + 'foo: "bar"\n', conf) + self.check('---\n' + 'foo: \'bar\'\n', conf) + self.check('---\n' + 'bar: 123\n', conf) + + def test_quote_type_any(self): + conf = 'quoted-strings: {quote-type: any}\n' + self.check('---\n' + 'boolean1: true\n' + 'number1: 123\n' + 'string1: foo\n' # fails + 'string2: "foo"\n' + 'string3: \'bar\'\n' + 'string4: !!str genericstring\n' + 'string5: !!str 456\n' + 'string6: !!str "quotedgenericstring"\n' + 'binary: !!binary binstring\n' + 'integer: !!int intstring\n' + 'boolean2: !!bool boolstring\n' + 'boolean3: !!bool "quotedboolstring"\n', + conf, problem=(4, 10)) + self.check('---\n' + 'multiline string 1: |\n' + ' line 1\n' + ' line 2\n' + 'multiline string 2: >\n' + ' word 1\n' + ' word 2\n' + 'multiline string 3:\n' + ' word 1\n' + ' word 2\n' + 'multiline string 4:\n' + ' "word 1\\\n' + ' word 2"\n', + conf, problem1=(9, 3)) + + def test_quote_type_single(self): + conf = 'quoted-strings: {quote-type: single}\n' + self.check('---\n' + 'boolean1: true\n' + 'number1: 123\n' + 'string1: foo\n' # fails + 'string2: "foo"\n' # fails + 'string3: \'bar\'\n' + 'string4: !!str genericstring\n' + 'string5: !!str 456\n' + 'string6: !!str "quotedgenericstring"\n' + 'binary: !!binary binstring\n' + 'integer: !!int intstring\n' + 'boolean2: !!bool boolstring\n' + 'boolean3: !!bool "quotedboolstring"\n', + conf, problem1=(4, 10), problem2=(5, 10)) + self.check('---\n' + 'multiline string 1: |\n' + ' line 1\n' + ' line 2\n' + 'multiline string 2: >\n' + ' word 1\n' + ' word 2\n' + 'multiline string 3:\n' + ' word 1\n' + ' word 2\n' + 'multiline string 4:\n' + ' "word 1\\\n' + ' word 2"\n', + conf, problem1=(9, 3), problem2=(12, 3)) + + def test_quote_type_double(self): + conf = 'quoted-strings: {quote-type: double}\n' + self.check('---\n' + 'boolean1: true\n' + 'number1: 123\n' + 'string1: foo\n' # fails + 'string2: "foo"\n' + 'string3: \'bar\'\n' # fails + 'string4: !!str genericstring\n' + 'string5: !!str 456\n' + 'string6: !!str "quotedgenericstring"\n' + 'binary: !!binary binstring\n' + 'integer: !!int intstring\n' + 'boolean2: !!bool boolstring\n' + 'boolean3: !!bool "quotedboolstring"\n', + conf, problem1=(4, 10), problem2=(6, 10)) + self.check('---\n' + 'multiline string 1: |\n' + ' line 1\n' + ' line 2\n' + 'multiline string 2: >\n' + ' word 1\n' + ' word 2\n' + 'multiline string 3:\n' + ' word 1\n' + ' word 2\n' + 'multiline string 4:\n' + ' "word 1\\\n' + ' word 2"\n', + conf, problem1=(9, 3)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/tests/test_cli.py new/yamllint-1.13.0/tests/test_cli.py --- old/yamllint-1.11.1/tests/test_cli.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/tests/test_cli.py 2018-11-14 19:10:16.000000000 +0100 @@ -351,7 +351,7 @@ '\n' % file)) self.assertEqual(err, '') - def test_run_colored_output(self): + def test_run_default_format_output_in_tty(self): file = os.path.join(self.wd, 'a.yaml') # Create a pseudo-TTY and redirect stdout to it @@ -383,3 +383,59 @@ 'no new line character at the end of file ' '\033[2m(new-line-at-end-of-file)\033[0m\n' '\n' % file)) + + def test_run_default_format_output_without_tty(self): + file = os.path.join(self.wd, 'a.yaml') + + sys.stdout, sys.stderr = StringIO(), StringIO() + with self.assertRaises(SystemExit) as ctx: + cli.run((file, )) + + self.assertEqual(ctx.exception.code, 1) + + out, err = sys.stdout.getvalue(), sys.stderr.getvalue() + self.assertEqual(out, ( + '%s\n' + ' 2:4 error trailing spaces (trailing-spaces)\n' + ' 3:4 error no new line character at the end of file ' + '(new-line-at-end-of-file)\n' + '\n' % file)) + self.assertEqual(err, '') + + def test_run_auto_output_without_tty_output(self): + file = os.path.join(self.wd, 'a.yaml') + + sys.stdout, sys.stderr = StringIO(), StringIO() + with self.assertRaises(SystemExit) as ctx: + cli.run((file, '--format', 'auto')) + + self.assertEqual(ctx.exception.code, 1) + + out, err = sys.stdout.getvalue(), sys.stderr.getvalue() + self.assertEqual(out, ( + '%s\n' + ' 2:4 error trailing spaces (trailing-spaces)\n' + ' 3:4 error no new line character at the end of file ' + '(new-line-at-end-of-file)\n' + '\n' % file)) + self.assertEqual(err, '') + + def test_run_format_colored(self): + file = os.path.join(self.wd, 'a.yaml') + + sys.stdout, sys.stderr = StringIO(), StringIO() + with self.assertRaises(SystemExit) as ctx: + cli.run((file, '--format', 'colored')) + + self.assertEqual(ctx.exception.code, 1) + + out, err = sys.stdout.getvalue(), sys.stderr.getvalue() + self.assertEqual(out, ( + '\033[4m%s\033[0m\n' + ' \033[2m2:4\033[0m \033[31merror\033[0m ' + 'trailing spaces \033[2m(trailing-spaces)\033[0m\n' + ' \033[2m3:4\033[0m \033[31merror\033[0m ' + 'no new line character at the end of file ' + '\033[2m(new-line-at-end-of-file)\033[0m\n' + '\n' % file)) + self.assertEqual(err, '') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/__init__.py new/yamllint-1.13.0/yamllint/__init__.py --- old/yamllint-1.11.1/yamllint/__init__.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/__init__.py 2018-11-14 19:10:16.000000000 +0100 @@ -22,7 +22,7 @@ APP_NAME = 'yamllint' -APP_VERSION = '1.11.1' +APP_VERSION = '1.13.0' APP_DESCRIPTION = __doc__ __author__ = u'Adrien Vergé' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/cli.py new/yamllint-1.13.0/yamllint/cli.py --- old/yamllint-1.11.1/yamllint/cli.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/cli.py 2018-11-14 19:10:16.000000000 +0100 @@ -96,8 +96,8 @@ action='store', help='custom configuration (as YAML source)') parser.add_argument('-f', '--format', - choices=('parsable', 'standard'), default='standard', - help='format for parsing output') + choices=('parsable', 'standard', 'colored', 'auto'), + default='auto', help='format for parsing output') parser.add_argument('-s', '--strict', action='store_true', help='return non-zero exit code on warnings ' @@ -143,7 +143,8 @@ for problem in linter.run(f, conf, filepath): if args.format == 'parsable': print(Format.parsable(problem, file)) - elif supports_color(): + elif args.format == 'colored' or \ + (args.format == 'auto' and supports_color()): if first: print('\033[4m%s\033[0m' % file) first = False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/conf/default.yaml new/yamllint-1.13.0/yamllint/conf/default.yaml --- old/yamllint-1.11.1/yamllint/conf/default.yaml 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/conf/default.yaml 2018-11-14 19:10:16.000000000 +0100 @@ -32,6 +32,7 @@ max: 2 max-start: 0 max-end: 0 + quoted-strings: disable empty-values: forbid-in-block-mappings: false forbid-in-flow-mappings: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/config.py new/yamllint-1.13.0/yamllint/config.py --- old/yamllint-1.11.1/yamllint/config.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/config.py 2018-11-14 19:10:16.000000000 +0100 @@ -52,7 +52,7 @@ assert isinstance(base_config, YamlLintConfig) for rule in self.rules: - if (type(self.rules[rule]) == dict and + if (isinstance(self.rules[rule], dict) and rule in base_config.rules and base_config.rules[rule] is not False): base_config.rules[rule].update(self.rules[rule]) @@ -70,7 +70,7 @@ except Exception as e: raise YamlLintConfigError('invalid config: %s' % e) - if type(conf) != dict: + if not isinstance(conf, dict): raise YamlLintConfigError('invalid config: not a dict') self.rules = conf.get('rules', {}) @@ -85,7 +85,7 @@ raise YamlLintConfigError('invalid config: %s' % e) if 'ignore' in conf: - if type(conf['ignore']) != str: + if not isinstance(conf['ignore'], str): raise YamlLintConfigError( 'invalid config: ignore should contain file patterns') self.ignore = pathspec.PathSpec.from_lines( @@ -107,10 +107,10 @@ elif conf == 'enable': conf = {} - if type(conf) == dict: + if isinstance(conf, dict): if ('ignore' in conf and - type(conf['ignore']) != pathspec.pathspec.PathSpec): - if type(conf['ignore']) != str: + not isinstance(conf['ignore'], pathspec.pathspec.PathSpec)): + if not isinstance(conf['ignore'], str): raise YamlLintConfigError( 'invalid config: ignore should contain file patterns') conf['ignore'] = pathspec.PathSpec.from_lines( @@ -130,14 +130,14 @@ raise YamlLintConfigError( 'invalid config: unknown option "%s" for rule "%s"' % (optkey, rule.ID)) - if type(options[optkey]) == tuple: + if isinstance(options[optkey], tuple): if (conf[optkey] not in options[optkey] and type(conf[optkey]) not in options[optkey]): raise YamlLintConfigError( 'invalid config: option "%s" of "%s" should be in %s' % (optkey, rule.ID, options[optkey])) else: - if type(conf[optkey]) != options[optkey]: + if not isinstance(conf[optkey], options[optkey]): raise YamlLintConfigError( 'invalid config: option "%s" of "%s" should be %s' % (optkey, rule.ID, options[optkey].__name__)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/linter.py new/yamllint-1.13.0/yamllint/linter.py --- old/yamllint-1.11.1/yamllint/linter.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/linter.py 2018-11-14 19:10:16.000000000 +0100 @@ -226,7 +226,7 @@ if conf.is_file_ignored(filepath): return () - if type(input) in (type(b''), type(u'')): # compat with Python 2 & 3 + if isinstance(input, (type(b''), type(u''))): # compat with Python 2 & 3 return _run(input, conf, filepath) elif hasattr(input, 'read'): # Python 2's file or Python 3's io.IOBase # We need to have everything in memory to parse correctly diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/rules/__init__.py new/yamllint-1.13.0/yamllint/rules/__init__.py --- old/yamllint-1.11.1/yamllint/rules/__init__.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/rules/__init__.py 2018-11-14 19:10:16.000000000 +0100 @@ -33,6 +33,7 @@ new_line_at_end_of_file, new_lines, octal_values, + quoted_strings, trailing_spaces, truthy, ) @@ -56,6 +57,7 @@ new_line_at_end_of_file.ID: new_line_at_end_of_file, new_lines.ID: new_lines, octal_values.ID: octal_values, + quoted_strings.ID: quoted_strings, trailing_spaces.ID: trailing_spaces, truthy.ID: truthy, } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/rules/document_end.py new/yamllint-1.13.0/yamllint/rules/document_end.py --- old/yamllint-1.11.1/yamllint/rules/document_end.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/rules/document_end.py 2018-11-14 19:10:16.000000000 +0100 @@ -86,14 +86,16 @@ def check(conf, token, prev, next, nextnext, context): if conf['present']: - if (isinstance(token, yaml.StreamEndToken) and - not (isinstance(prev, yaml.DocumentEndToken) or - isinstance(prev, yaml.StreamStartToken))): + is_stream_end = isinstance(token, yaml.StreamEndToken) + is_start = isinstance(token, yaml.DocumentStartToken) + prev_is_end_or_stream_start = isinstance( + prev, (yaml.DocumentEndToken, yaml.StreamStartToken) + ) + + if is_stream_end and not prev_is_end_or_stream_start: yield LintProblem(token.start_mark.line, 1, 'missing document end "..."') - elif (isinstance(token, yaml.DocumentStartToken) and - not (isinstance(prev, yaml.DocumentEndToken) or - isinstance(prev, yaml.StreamStartToken))): + elif is_start and not prev_is_end_or_stream_start: yield LintProblem(token.start_mark.line + 1, 1, 'missing document end "..."') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/rules/indentation.py new/yamllint-1.13.0/yamllint/rules/indentation.py --- old/yamllint-1.11.1/yamllint/rules/indentation.py 2018-04-06 11:12:20.000000000 +0200 +++ new/yamllint-1.13.0/yamllint/rules/indentation.py 2018-11-14 19:10:16.000000000 +0100 @@ -224,7 +224,7 @@ def compute_expected_indent(found_indent): def detect_indent(base_indent): - if type(context['spaces']) is not int: + if not isinstance(context['spaces'], int): context['spaces'] = found_indent - base_indent return base_indent + context['spaces'] @@ -312,7 +312,7 @@ token.start_mark.line + 1 > context['cur_line']) def detect_indent(base_indent, next): - if type(context['spaces']) is not int: + if not isinstance(context['spaces'], int): context['spaces'] = next.start_mark.column - base_indent return base_indent + context['spaces'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint/rules/quoted_strings.py new/yamllint-1.13.0/yamllint/rules/quoted_strings.py --- old/yamllint-1.11.1/yamllint/rules/quoted_strings.py 1970-01-01 01:00:00.000000000 +0100 +++ new/yamllint-1.13.0/yamllint/rules/quoted_strings.py 2018-11-14 19:10:16.000000000 +0100 @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2018 ClearScore +# +# 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 any string values that are not quoted. +You can also enforce the type of the quote used using the ``quote-type`` option +(``single``, ``double`` or ``any``). + +**Note**: Multi-line strings (with ``|`` or ``>``) will not be checked. + +.. rubric:: Examples + +#. With ``quoted-strings: {quote-type: any}`` + + the following code snippet would **PASS**: + :: + + foo: "bar" + bar: 'foo' + number: 123 + boolean: true + + the following code snippet would **FAIL**: + :: + + foo: bar +""" + +import yaml + +from yamllint.linter import LintProblem + +ID = 'quoted-strings' +TYPE = 'token' +CONF = {'quote-type': ('any', 'single', 'double')} + + +def check(conf, token, prev, next, nextnext, context): + quote_type = conf['quote-type'] + + if (isinstance(token, yaml.tokens.ScalarToken) and + isinstance(prev, (yaml.ValueToken, yaml.TagToken))): + # Ignore explicit types, e.g. !!str testtest or !!int 42 + if (prev and isinstance(prev, yaml.tokens.TagToken) and + prev.value[0] == '!!'): + return + + # Ignore numbers, booleans, etc. + resolver = yaml.resolver.Resolver() + if resolver.resolve(yaml.nodes.ScalarNode, token.value, + (True, False)) != 'tag:yaml.org,2002:str': + return + + # Ignore multi-line strings + if (not token.plain) and (token.style == "|" or token.style == ">"): + return + + if ((quote_type == 'single' and token.style != "'") or + (quote_type == 'double' and token.style != '"') or + (quote_type == 'any' and token.style is None)): + yield LintProblem( + token.start_mark.line + 1, + token.start_mark.column + 1, + "string value is not quoted with %s quotes" % (quote_type)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint.egg-info/PKG-INFO new/yamllint-1.13.0/yamllint.egg-info/PKG-INFO --- old/yamllint-1.11.1/yamllint.egg-info/PKG-INFO 2018-04-06 11:14:37.000000000 +0200 +++ new/yamllint-1.13.0/yamllint.egg-info/PKG-INFO 2018-11-14 19:10:45.000000000 +0100 @@ -1,12 +1,11 @@ Metadata-Version: 1.1 Name: yamllint -Version: 1.11.1 +Version: 1.13.0 Summary: A linter for YAML files. Home-page: https://github.com/adrienverge/yamllint Author: Adrien Vergé Author-email: UNKNOWN License: GPLv3 -Description-Content-Type: UNKNOWN Description: A linter for YAML files. yamllint does not only check for syntax validity, but for weirdnesses like key diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yamllint-1.11.1/yamllint.egg-info/SOURCES.txt new/yamllint-1.13.0/yamllint.egg-info/SOURCES.txt --- old/yamllint-1.11.1/yamllint.egg-info/SOURCES.txt 2018-04-06 11:14:37.000000000 +0200 +++ new/yamllint-1.13.0/yamllint.egg-info/SOURCES.txt 2018-11-14 19:10:45.000000000 +0100 @@ -44,6 +44,7 @@ tests/rules/test_new_line_at_end_of_file.py tests/rules/test_new_lines.py tests/rules/test_octal_values.py +tests/rules/test_quoted_strings.py tests/rules/test_trailing_spaces.py tests/rules/test_truthy.py tests/yaml-1.2-spec-examples/example-10.1 @@ -212,5 +213,6 @@ yamllint/rules/new_line_at_end_of_file.py yamllint/rules/new_lines.py yamllint/rules/octal_values.py +yamllint/rules/quoted_strings.py yamllint/rules/trailing_spaces.py yamllint/rules/truthy.py \ No newline at end of file