Compare commits

..

12 Commits

Author SHA1 Message Date
Adrien Vergé
0fceca2354 yamllint version 1.24.1 2020-07-15 14:49:51 +02:00
Adrien Vergé
9403f1f3ec Revert "Add global "locale" config option"
This reverts commit 9e90c77, because it caused a bug that affected
different people just after being released:
https://github.com/adrienverge/yamllint/issues/285
https://github.com/adrienverge/yamllint/issues/286
2020-07-15 14:48:48 +02:00
Adrien Vergé
0016390e78 yamllint version 1.24.0 2020-07-15 11:50:36 +02:00
Wolfgang Walther
9e90c777cb Add global "locale" config option and make key-ordering rule locale-aware
Support sorting by locale with strcoll(). Properly handle case and accents.
2020-07-15 11:46:05 +02:00
Jonathan Sokolowski
a2218988ee config: Do no match directories that look like YAML files
Fixes #279
2020-07-10 09:27:34 +02:00
Adrien Vergé
954fdd5e8f style: Fix 'noqa' for flake8 3.8.0
There was a change in behavior of E402, see:
https://gitlab.com/pycqa/flake8/-/issues/638#note_345108633
2020-07-08 16:27:08 +02:00
Sorin Sbarnea
bbcad943b6 style: Ignore flake8 warnings W503 and W504
Avoid W503/W504 with current code as the current code not compliant
and they are contradictory.
2020-05-03 16:55:57 +02:00
Adrien Vergé
30c90dbf70 Add contribution instructions in CONTRIBUTING.rst
Closes https://github.com/adrienverge/yamllint/issues/263.
2020-05-03 16:51:22 +02:00
Brad Solomon
512fe17047 Fix bug with CRLF in new-lines and require-starting-space
Pound-signs followed by a lone CRLF should not
raise if require-starting-space is specified.

If require-starting-space is true, *and* either:
- new-lines: disbale, or
- newlines: type: dos
is specified, a line with `#\r` or `#\r\n` should
not raise a false positive.

This commit also uses a Set for O(1) membership testing
and uses the correct escape sequence for the nul byte.

If we find a CRLF when looking for Unix newlines, yamllint
should always raise, regardless of logic with
require-starting-space.

Closes: Issue #171.
2020-04-30 16:38:19 +02:00
Will Badart
278a79f093 Mention YAMLLINT_CONFIG_FILE in the documentation 2020-04-29 09:43:16 +02:00
Brad Solomon
e98aacf62c Add Python 3.8 to PyPI/trove classifier data
3.8 is now formally supported in .travis.yml
as of this commit.
2020-04-29 09:39:50 +02:00
Will Badart
94c0416f6b Specify config with environment variable YAMLLINT_CONFIG_FILE
Add option to specify config file with environment variable.
Add test case.
2020-04-28 11:13:32 +02:00
35 changed files with 133 additions and 505 deletions

View File

@@ -1,6 +1,19 @@
Changelog Changelog
========= =========
1.24.1 (2020-07-15)
-------------------
- Revert ``locale`` config option from version 1.24.0 because of a bug
1.24.0 (2020-07-15)
-------------------
- Specify config with environment variable ``YAMLLINT_CONFIG_FILE``
- Fix bug with CRLF in ``new-lines`` and ``require-starting-space``
- Do not run linter on directories whose names look like YAML files
- Add ``locale`` config option and make ``key-ordering`` locale-aware
1.23.0 (2020-04-17) 1.23.0 (2020-04-17)
------------------- -------------------

44
CONTRIBUTING.rst Normal file
View File

@@ -0,0 +1,44 @@
Contributing
============
Pull requests are the best way to propose changes to the codebase.
Contributions are welcome, but they have to meet some criteria.
Pull Request Process
--------------------
1. Fork this Git repository and create your branch from ``master``.
2. Make sure the tests pass:
.. code:: bash
python setup.py test
3. If you add code that should be tested, add tests.
4. Make sure the linters pass:
.. code:: bash
flake8 .
If you added/modified documentation:
.. code:: bash
doc8 $(git ls-files '*.rst')
If you touched YAML files:
.. code:: bash
yamllint --strict $(git ls-files '*.yaml' '*.yml')
5. If relevant, update documentation (either in ``docs`` directly or in rules
files themselves).
6. Write a `good commit message
<http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html>`_.
7. Then, open a pull request.

View File

@@ -6,9 +6,9 @@ import sys
import os import os
from unittest.mock import MagicMock from unittest.mock import MagicMock
sys.path.insert(0, os.path.abspath('..')) # noqa sys.path.insert(0, os.path.abspath('..'))
from yamllint import __copyright__, APP_NAME, APP_VERSION from yamllint import __copyright__, APP_NAME, APP_VERSION # noqa
# -- General configuration ------------------------------------------------ # -- General configuration ------------------------------------------------

View File

@@ -16,6 +16,7 @@ following locations (by order of preference):
- ``.yamllint``, ``.yamllint.yaml`` or ``.yamllint.yml`` in the current working - ``.yamllint``, ``.yamllint.yaml`` or ``.yamllint.yml`` in the current working
directory directory
- the file referenced by ``$YAMLLINT_CONFIG_FILE``, if set
- ``$XDG_CONFIG_HOME/yamllint/config`` - ``$XDG_CONFIG_HOME/yamllint/config``
- ``~/.config/yamllint/config`` - ``~/.config/yamllint/config``

View File

@@ -1,59 +0,0 @@
Release new version for Debian
==============================
VERSION=1.5.0
WD=/tmp/pkg
TARGET=vm-debian8
# Build source archive
python3 setup.py sdist
# Copy files on a Debian system
ssh $TARGET mkdir $WD
rsync -av dist/yamllint-$VERSION.tar.gz $TARGET:$WD/yamllint_$VERSION.orig.tar.gz
ssh $TARGET tar -C $WD -xf $WD/yamllint_$VERSION.orig.tar.gz
if false; then
rsync -av packaging/debian/debian $TARGET:$WD/yamllint-$VERSION
else
ssh $TARGET "cd $WD && sudo apt-get update"
ssh $TARGET "cd $WD && apt-get source yamllint"
ssh $TARGET mv $WD'/yamllint-*/debian' $WD/yamllint-$VERSION # old version
fi
ssh $TARGET
cd $WD/yamllint-$VERSION/debian
# Add a new changelog entry:
dch -v $VERSION-1
# Build packages and sign dsc
debuild -S -sa
# Test if it builds
sudo pbuilder --create
sudo pbuilder --build ../../yamllint_$VERSION-1.dsc
# Run lintian to detect problems
lintian -i -I --show-overrides ../../yamllint_$VERSION-1_source.changes
# Retrieve modified files
rsync -av $TARGET:$WD/yamllint-$VERSION/debian packaging/debian
# Upload to mentors FTP (needed even for updates)
cat >>~/.dput.cf << EOF
[mentors]
fqdn = mentors.debian.net
incoming = /upload
method = http
allow_unsigned_uploads = 0
progress_indicator = 2
# Allow uploads for UNRELEASED packages
allowed_distributions = .*
EOF
dput mentors ../../yamllint_$VERSION-1_source.changes
# Do no upload to Debian FTP: the sponsor will do it
# File a new RFS bug by sending an email
See https://mentors.debian.net/sponsors/rfs-howto/yamllint

View File

@@ -1,163 +0,0 @@
yamllint (1.23.0-1) unstable; urgency=medium
* New upstream version 1.23.0
-- Philipp Huebner <debalance@debian.org> Sun, 19 Apr 2020 10:19:31 +0200
yamllint (1.21.0-1) unstable; urgency=medium
* New upstream version 1.21.0
-- Philipp Huebner <debalance@debian.org> Sat, 11 Apr 2020 17:15:13 +0200
yamllint (1.20.0-2) unstable; urgency=medium
* Removed 'Installing yamllint' section in the manpage (Closes: #947440)
* Moved maintainership into the Python Applications Packaging Team
(Closes: 947416)
-- Philipp Huebner <debalance@debian.org> Fri, 28 Feb 2020 14:02:37 +0100
yamllint (1.20.0-1) unstable; urgency=medium
* New upstream version 1.20.0
* Updated Standards-Version: 4.5.0 (no changes needed)
* Rules-Requires-Root: no
-- Philipp Huebner <debalance@debian.org> Sun, 16 Feb 2020 00:39:28 +0100
yamllint (1.18.0-1) unstable; urgency=medium
* New upstream version 1.18.0
* Added dh-python to build-depends
* Updated Standards-Version: 4.4.1 (no changes needed)
-- Philipp Huebner <debalance@debian.org> Sun, 20 Oct 2019 19:40:24 +0200
yamllint (1.16.0-1) unstable; urgency=medium
* New upstream version 1.16.0
* Updated debhelper compat version: 12
* Updated Standards-Version: 4.4.0 (no changes needed)
-- Philipp Huebner <debalance@debian.org> Wed, 24 Jul 2019 17:35:30 +0200
yamllint (1.15.0-1) unstable; urgency=medium
* New upstream version 1.15.0
-- Philipp Huebner <debalance@debian.org> Sat, 16 Feb 2019 10:59:13 +0100
yamllint (1.14.0-1) unstable; urgency=medium
* New upstream version 1.14.0
* Updated Standards-Version: 4.3.0 (no changes needed)
* Updated debian/copyright
-- Philipp Huebner <debalance@debian.org> Sat, 19 Jan 2019 16:07:26 +0100
yamllint (1.13.0-1) unstable; urgency=medium
* New upstream version 1.13.0
* Updated Standards-Version: 4.2.1 (no changes needed)
-- Philipp Huebner <debalance@debian.org> Sun, 18 Nov 2018 19:16:27 +0100
yamllint (1.11.1-1) unstable; urgency=medium
* New upstream version 1.11.1
* Updated Standards-Version: 4.1.4 (no changes needed)
-- Philipp Huebner <debalance@debian.org> Wed, 09 May 2018 14:24:10 +0200
yamllint (1.11.0-1) unstable; urgency=medium
* New upstream version 1.11.0
* Update Standards-Version: 4.1.3 (no changes needed)
* Switch to debhelper compat level 11
-- Philipp Huebner <debalance@debian.org> Tue, 06 Mar 2018 17:35:44 +0100
yamllint (1.10.0-1) unstable; urgency=medium
* New upstream version 1.10.0
* Drop patches (fixed upstream)
-- Philipp Huebner <debalance@debian.org> Thu, 16 Nov 2017 19:18:18 +0100
yamllint (1.9.0-1) unstable; urgency=medium
* New upstream version 1.9.0
-- Philipp Huebner <debalance@debian.org> Sun, 22 Oct 2017 09:35:39 +0200
yamllint (1.8.1-1) unstable; urgency=medium
* New upstream version 1.8.1
* Add myself as Uploader
* Depend on python3-pkg-resources (Closes: #860075)
* Build-Depend on python3-pathspec
* Add patch to use python3 in tests
* debian/control: set testsuite to autopkgtest-pkg-python
* Update Standards-Version: 4.1.1 (no changes needed)
-- Philipp Huebner <debalance@debian.org> Wed, 04 Oct 2017 18:50:29 +0200
yamllint (1.5.0-1) unstable; urgency=medium
* Output color only on TTY
* Generalize line-length for mappings
* Fix line-length bug by scanning tokens securely
* New rule: truthy
* Fix distribution (don't distribute tests in site-packages)
* Exclude PTY-related test (doesn't work with pbuilder)
-- Adrien Vergé <adrienverge@gmail.com> Mon, 07 Nov 2016 18:51:37 +0100
yamllint (1.3.2-1) unstable; urgency=medium
* Allow disabling yamllint checks using comments
* Detect user config using `os.path.expanduser()`
* Fix non-ASCII comments bug and add tests
* Update standards version to 3.9.8
-- Adrien Vergé <adrienverge@gmail.com> Mon, 27 Jun 2016 22:17:05 +0200
yamllint (1.2.2-1) unstable; urgency=medium
* Update to new upstream version
-- Adrien Vergé <adrienverge@gmail.com> Fri, 24 Jun 2016 08:54:59 +0200
yamllint (1.2.1-1) unstable; urgency=medium
* Update to new upstream version
-- Adrien Vergé <adrienverge@gmail.com> Sun, 03 Apr 2016 11:30:02 +0200
yamllint (1.2.0-1) unstable; urgency=medium
* Update to new upstream version
* Build and include man page in package
* Fix Vcs-* fields in debian/control
* Fix description-synopsis-starts-with-article lintian warning
-- Adrien Vergé <adrienverge@gmail.com> Tue, 08 Mar 2016 08:20:23 +0100
yamllint (1.1.0-1) unstable; urgency=medium
* Update to new upstream version
-- Adrien Vergé <adrienverge@gmail.com> Fri, 04 Mar 2016 18:54:19 +0100
yamllint (1.0.4-1) unstable; urgency=medium
* Update to new upstream version
-- Adrien Vergé <adrienverge@gmail.com> Fri, 04 Mar 2016 12:54:19 +0100
yamllint (1.0.3-1) unstable; urgency=medium
* Initial release (Closes: #816609)
-- Adrien Vergé <adrienverge@gmail.com> Thu, 03 Mar 2016 09:10:38 +0100

View File

@@ -1,30 +0,0 @@
Source: yamllint
Maintainer: Python Applications Packaging Team <python-apps-team@lists.alioth.debian.org>
Uploaders: Adrien Vergé <adrienverge@gmail.com>, Philipp Huebner <debalance@debian.org>
Section: devel
Priority: optional
Build-Depends: debhelper,
debhelper-compat (= 12),
dh-python,
python3-all,
python3-nose,
python3-pathspec,
python3-setuptools,
python3-sphinx,
python3-yaml
Standards-Version: 4.5.0
Rules-Requires-Root: no
Vcs-Browser: https://salsa.debian.org/python-team/applications/yamllint
Vcs-Git: https://salsa.debian.org/python-team/applications/yamllint.git
Homepage: https://github.com/adrienverge/yamllint
Package: yamllint
Architecture: all
Depends: ${misc:Depends},
${python3:Depends},
${shlibs:Depends},
python3-pkg-resources
Description: Linter for YAML files
yamllint does not only check for syntax validity, but for weirdnesses like key
repetition and cosmetic problems such as lines length, trailing spaces,
indentation, etc.

View File

@@ -1,29 +0,0 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: yamllint
Source: https://github.com/adrienverge/yamllint
Files: *
Copyright: 2016-2019 Adrien Vergé <adrienverge@gmail.com>
License: GPL-3+
Files: debian/*
Copyright: 2016-2019 Adrien Vergé <adrienverge@gmail.com>
2017-2019 Philipp Huebner <debalance@debian.org>
License: GPL-3+
License: GPL-3+
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/>.
.
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".

View File

@@ -1,62 +0,0 @@
Description: clean docs
Remove content unsuitable for Debian
Author: Philipp Huebner <debalance@debian.org>
Index: yamllint/docs/quickstart.rst
===================================================================
--- yamllint.orig/docs/quickstart.rst
+++ yamllint/docs/quickstart.rst
@@ -1,53 +1,6 @@
Quickstart
==========
-Installing yamllint
--------------------
-
-On Fedora / CentOS (note: `EPEL <https://fedoraproject.org/wiki/EPEL>`_ is
-required on CentOS):
-
-.. code:: bash
-
- sudo dnf install yamllint
-
-On Debian 8+ / Ubuntu 16.04+:
-
-.. code:: bash
-
- sudo apt-get install yamllint
-
-On Mac OS 10.11+:
-
-.. code:: bash
-
- brew install yamllint
-
-On FreeBSD:
-
-.. code:: sh
-
- pkg install py36-yamllint
-
-On OpenBSD:
-
-.. code:: sh
-
- doas pkg_add py3-yamllint
-
-Alternatively using pip, the Python package manager:
-
-.. code:: bash
-
- pip install --user yamllint
-
-If you prefer installing from source, you can run, from the source directory:
-
-.. code:: bash
-
- python setup.py sdist
- pip install --user dist/yamllint-*.tar.gz
-
Running yamllint
----------------

View File

@@ -1 +0,0 @@
docs.diff

View File

@@ -1,13 +0,0 @@
#!/usr/bin/make -f
export DH_VERBOSE=1
%:
NOSE_EXCLUDE=test_run_colored_output \
dh $@ --with python3 --buildsystem=pybuild
override_dh_auto_build:
dh_auto_build
PYTHONPATH=. http_proxy='127.0.0.1:9' sphinx-build -N -bman docs build/man
override_dh_installman:
dh_installman build/man/yamllint.1

View File

@@ -1 +0,0 @@
3.0 (quilt)

View File

@@ -1,2 +0,0 @@
yamllint source: debian-watch-does-not-check-gpg-signature
yamllint source: no-dh-sequencer

View File

@@ -1,4 +0,0 @@
Bug-Database: https://github.com/adrienverge/yamllint/issues
FAQ: https://yamllint.readthedocs.org/
Name: yamllint
Repository: https://github.com/adrienverge/yamllint

View File

@@ -1,3 +0,0 @@
# watch control file for uscan
version=3
https://github.com/adrienverge/yamllint/tags .*/archive/v(\d\S*)\.tar\.gz

View File

@@ -1,17 +0,0 @@
Packaging in Fedora
-------------------
https://bugzilla.redhat.com/show_bug.cgi?id=1309907
Packaging in Debian
-------------------
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=816609
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=816611
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=817245
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=819866
Packaging in Ubuntu
-------------------
https://bugs.launchpad.net/ubuntu/+bug/1554406

View File

@@ -1,30 +0,0 @@
Upload new version to PPA
=========================
WORKDIR=/tmp/yamllint-ubuntu
VERSION=1.2.0
git clone -b packaging https://github.com/adrienverge/yamllint.git $WORKDIR
cd $WORKDIR
# Build source archive
python3 setup.py sdist
cd dist
mv yamllint-$VERSION.tar.gz yamllint_$VERSION.orig.tar.gz
tar -xvf yamllint_$VERSION.orig.tar.gz
cp -r ../packaging/ubuntu/debian yamllint-$VERSION/
cd yamllint-$VERSION/debian
# Add a new changelog entry:
dch -v $VERSION-0ubuntu1
# Build packages and sign dsc
debuild -S -sa
# Test if it builds
sudo pbuilder --create
sudo pbuilder --build ../yamllint_$VERSION-0ubuntu1.dsc
# Upload to PPA
dput ppa:adrienverge/ppa ../yamllint_$VERSION-0ubuntu1_source.changes

View File

@@ -1,17 +0,0 @@
yamllint (1.2.0-0ubuntu1) trusty; urgency=medium
* Update to new upstream version
-- Adrien Vergé <adrienverge@gmail.com> Mon, 07 Mar 2016 07:54:19 +0100
yamllint (1.0.3-0ubuntu2) trusty; urgency=medium
* Add python3-nose to build dependencies
-- Adrien Vergé <adrienverge@gmail.com> Wed, 02 Mar 2016 14:12:07 +0100
yamllint (1.0.3-0ubuntu1) trusty; urgency=low
* Initial release
-- Adrien Vergé <adrienverge@gmail.com> Wed, 02 Mar 2016 13:26:29 +0100

View File

@@ -1 +0,0 @@
9

View File

@@ -1,27 +0,0 @@
Source: yamllint
Section: devel
Priority: optional
Maintainer: Adrien Vergé <adrienverge@gmail.com>
Build-Depends:
debhelper (>=9),
python3-all,
python3-nose,
python3-setuptools,
python3-sphinx,
python3-yaml,
Standards-Version: 3.9.7
Homepage: https://github.com/adrienverge/yamllint
Vcs-Git: git://anonscm.debian.org/collab-maint/yamllint.git
Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/yamllint.git
Package: yamllint
Architecture: any
Depends:
python3-yaml,
${misc:Depends},
${python3:Depends},
${shlibs:Depends},
Description: A linter for YAML files
yamllint does not only check for syntax validity, but for weirdnesses like key
repetition and cosmetic problems such as lines length, trailing spaces,
indentation, etc.

View File

@@ -1,19 +0,0 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: yamllint
Source: https://github.com/adrienverge/yamllint
Files: *
Copyright: 2016 Adrien Vergé <adrienverge@gmail.com>
License: GPL-3+
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/>.

View File

@@ -1 +0,0 @@
README.rst

View File

@@ -1,11 +0,0 @@
#!/usr/bin/make -f
%:
dh $@ --with python3 --buildsystem=pybuild
override_dh_auto_build:
dh_auto_build
PYTHONPATH=. http_proxy='127.0.0.1:9' sphinx-build -N -bman docs build/man
override_dh_installman:
dh_installman build/man/yamllint.1

View File

@@ -1 +0,0 @@
3.0 (quilt)

View File

@@ -1,4 +0,0 @@
Bug-Database: https://github.com/adrienverge/yamllint/issues
FAQ: https://yamllint.readthedocs.org/
Name: yamllint
Repository: https://github.com/adrienverge/yamllint

View File

@@ -1,3 +0,0 @@
# watch control file for uscan
version=3
https://github.com/adrienverge/yamllint/tags .*/archive/v(\d\S*)\.tar\.gz

View File

@@ -4,6 +4,7 @@ universal = 1
[flake8] [flake8]
import-order-style = pep8 import-order-style = pep8
application-import-names = yamllint application-import-names = yamllint
ignore = W503,W504
[build_sphinx] [build_sphinx]
all-files = 1 all-files = 1

View File

@@ -42,6 +42,7 @@ setup(
'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Topic :: Software Development', 'Topic :: Software Development',
'Topic :: Software Development :: Debuggers', 'Topic :: Software Development :: Debuggers',
'Topic :: Software Development :: Quality Assurance', 'Topic :: Software Development :: Quality Assurance',

View File

@@ -186,6 +186,27 @@ class CommentsTestCase(RuleTestCase):
'inline: comment #\n' 'inline: comment #\n'
'foo: bar\n', conf) 'foo: bar\n', conf)
def test_empty_comment_crlf_dos_newlines(self):
conf = ('comments:\n'
' require-starting-space: true\n'
' min-spaces-from-content: 2\n'
'new-lines:\n'
' type: dos\n')
self.check('---\r\n'
'# This is paragraph 1.\r\n'
'#\r\n'
'# This is paragraph 2.\r\n', conf)
def test_empty_comment_crlf_disabled_newlines(self):
conf = ('comments:\n'
' require-starting-space: true\n'
' min-spaces-from-content: 2\n'
'new-lines: disable\n')
self.check('---\r\n'
'# This is paragraph 1.\r\n'
'#\r\n'
'# This is paragraph 2.\r\n', conf)
def test_first_line(self): def test_first_line(self):
conf = ('comments:\n' conf = ('comments:\n'
' require-starting-space: true\n' ' require-starting-space: true\n'

View File

@@ -40,6 +40,16 @@ class NewLinesTestCase(RuleTestCase):
self.check('---\ntext\n', conf) self.check('---\ntext\n', conf)
self.check('---\r\ntext\r\n', conf, problem=(1, 4)) self.check('---\r\ntext\r\n', conf, problem=(1, 4))
def test_unix_type_required_st_sp(self):
# If we find a CRLF when looking for Unix newlines, yamllint
# should always raise, regardless of logic with
# require-starting-space.
conf = ('new-line-at-end-of-file: disable\n'
'new-lines: {type: unix}\n'
'comments:\n'
' require-starting-space: true\n')
self.check('---\r\n#\r\n', conf, problem=(1, 4))
def test_dos_type(self): def test_dos_type(self):
conf = ('new-line-at-end-of-file: disable\n' conf = ('new-line-at-end-of-file: disable\n'
'new-lines: {type: dos}\n') 'new-lines: {type: dos}\n')

View File

@@ -24,6 +24,7 @@ import os
import pty import pty
import shutil import shutil
import sys import sys
import tempfile
import unittest import unittest
from tests.common import build_temp_workspace from tests.common import build_temp_workspace
@@ -72,6 +73,9 @@ class CommandLineTestCase(unittest.TestCase):
# file in dir # file in dir
'sub/ok.yaml': '---\n' 'sub/ok.yaml': '---\n'
'key: value\n', 'key: value\n',
# directory that looks like a yaml file
'sub/directory.yaml/not-yaml.txt': '',
'sub/directory.yaml/empty.yml': '',
# file in very nested dir # file in very nested dir
's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml': '---\n' 's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml': '---\n'
'key: value\n' 'key: value\n'
@@ -107,6 +111,7 @@ class CommandLineTestCase(unittest.TestCase):
os.path.join(self.wd, 'dos.yml'), os.path.join(self.wd, 'dos.yml'),
os.path.join(self.wd, 'empty.yml'), os.path.join(self.wd, 'empty.yml'),
os.path.join(self.wd, 's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml'), os.path.join(self.wd, 's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml'),
os.path.join(self.wd, 'sub/directory.yaml/empty.yml'),
os.path.join(self.wd, 'sub/ok.yaml'), os.path.join(self.wd, 'sub/ok.yaml'),
os.path.join(self.wd, 'warn.yaml')], os.path.join(self.wd, 'warn.yaml')],
) )
@@ -131,6 +136,7 @@ class CommandLineTestCase(unittest.TestCase):
self.assertEqual( self.assertEqual(
sorted(cli.find_files_recursively(items, conf)), sorted(cli.find_files_recursively(items, conf)),
[os.path.join(self.wd, '/etc/another/file'), [os.path.join(self.wd, '/etc/another/file'),
os.path.join(self.wd, 'sub/directory.yaml/empty.yml'),
os.path.join(self.wd, 'sub/ok.yaml')], os.path.join(self.wd, 'sub/ok.yaml')],
) )
@@ -151,7 +157,8 @@ class CommandLineTestCase(unittest.TestCase):
self.assertEqual( self.assertEqual(
sorted(cli.find_files_recursively([self.wd], conf)), sorted(cli.find_files_recursively([self.wd], conf)),
[os.path.join(self.wd, 'dos.yml'), [os.path.join(self.wd, 'dos.yml'),
os.path.join(self.wd, 'empty.yml')] os.path.join(self.wd, 'empty.yml'),
os.path.join(self.wd, 'sub/directory.yaml/empty.yml')]
) )
conf = config.YamlLintConfig('extends: default\n' conf = config.YamlLintConfig('extends: default\n'
@@ -173,6 +180,8 @@ class CommandLineTestCase(unittest.TestCase):
os.path.join(self.wd, 'no-yaml.json'), os.path.join(self.wd, 'no-yaml.json'),
os.path.join(self.wd, 'non-ascii/éçäγλνπ¥/utf-8'), os.path.join(self.wd, 'non-ascii/éçäγλνπ¥/utf-8'),
os.path.join(self.wd, 's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml'), os.path.join(self.wd, 's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml'),
os.path.join(self.wd, 'sub/directory.yaml/empty.yml'),
os.path.join(self.wd, 'sub/directory.yaml/not-yaml.txt'),
os.path.join(self.wd, 'sub/ok.yaml'), os.path.join(self.wd, 'sub/ok.yaml'),
os.path.join(self.wd, 'warn.yaml')] os.path.join(self.wd, 'warn.yaml')]
) )
@@ -190,6 +199,8 @@ class CommandLineTestCase(unittest.TestCase):
os.path.join(self.wd, 'no-yaml.json'), os.path.join(self.wd, 'no-yaml.json'),
os.path.join(self.wd, 'non-ascii/éçäγλνπ¥/utf-8'), os.path.join(self.wd, 'non-ascii/éçäγλνπ¥/utf-8'),
os.path.join(self.wd, 's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml'), os.path.join(self.wd, 's/s/s/s/s/s/s/s/s/s/s/s/s/s/s/file.yaml'),
os.path.join(self.wd, 'sub/directory.yaml/empty.yml'),
os.path.join(self.wd, 'sub/directory.yaml/not-yaml.txt'),
os.path.join(self.wd, 'sub/ok.yaml'), os.path.join(self.wd, 'sub/ok.yaml'),
os.path.join(self.wd, 'warn.yaml')] os.path.join(self.wd, 'warn.yaml')]
) )
@@ -285,6 +296,25 @@ class CommandLineTestCase(unittest.TestCase):
cli.run((os.path.join(self.wd, 'a.yaml'), )) cli.run((os.path.join(self.wd, 'a.yaml'), ))
self.assertEqual(ctx.returncode, 1) self.assertEqual(ctx.returncode, 1)
def test_run_with_user_yamllint_config_file_in_env(self):
self.addCleanup(os.environ.__delitem__, 'YAMLLINT_CONFIG_FILE')
with tempfile.NamedTemporaryFile('w') as f:
os.environ['YAMLLINT_CONFIG_FILE'] = f.name
f.write('rules: {trailing-spaces: disable}')
f.flush()
with RunContext(self) as ctx:
cli.run((os.path.join(self.wd, 'a.yaml'), ))
self.assertEqual(ctx.returncode, 0)
with tempfile.NamedTemporaryFile('w') as f:
os.environ['YAMLLINT_CONFIG_FILE'] = f.name
f.write('rules: {trailing-spaces: enable}')
f.flush()
with RunContext(self) as ctx:
cli.run((os.path.join(self.wd, 'a.yaml'), ))
self.assertEqual(ctx.returncode, 1)
def test_run_version(self): def test_run_version(self):
with RunContext(self) as ctx: with RunContext(self) as ctx:
cli.run(('--version', )) cli.run(('--version', ))

View File

@@ -22,7 +22,7 @@ indentation, etc."""
APP_NAME = 'yamllint' APP_NAME = 'yamllint'
APP_VERSION = '1.23.0' APP_VERSION = '1.24.1'
APP_DESCRIPTION = __doc__ APP_DESCRIPTION = __doc__
__author__ = u'Adrien Vergé' __author__ = u'Adrien Vergé'

View File

@@ -144,8 +144,11 @@ def run(argv=None):
args = parser.parse_args(argv) args = parser.parse_args(argv)
if 'YAMLLINT_CONFIG_FILE' in os.environ:
user_global_config = os.path.expanduser(
os.environ['YAMLLINT_CONFIG_FILE'])
# User-global config is supposed to be in ~/.config/yamllint/config # User-global config is supposed to be in ~/.config/yamllint/config
if 'XDG_CONFIG_HOME' in os.environ: elif 'XDG_CONFIG_HOME' in os.environ:
user_global_config = os.path.join( user_global_config = os.path.join(
os.environ['XDG_CONFIG_HOME'], 'yamllint', 'config') os.environ['XDG_CONFIG_HOME'], 'yamllint', 'config')
else: else:

View File

@@ -46,7 +46,7 @@ class YamlLintConfig(object):
return self.ignore and self.ignore.match_file(filepath) return self.ignore and self.ignore.match_file(filepath)
def is_yaml_file(self, filepath): def is_yaml_file(self, filepath):
return self.yaml_files.match_file(filepath) return self.yaml_files.match_file(os.path.basename(filepath))
def enabled_rules(self, filepath): def enabled_rules(self, filepath):
return [yamllint.rules.get(id) for id, val in self.rules.items() return [yamllint.rules.get(id) for id, val in self.rules.items()

View File

@@ -97,7 +97,9 @@ def check(conf, comment):
comment.column_no == 1 and comment.column_no == 1 and
re.match(r'^!\S', comment.buffer[text_start:])): re.match(r'^!\S', comment.buffer[text_start:])):
return return
elif comment.buffer[text_start] not in (' ', '\n', '\0'): # We can test for both \r and \r\n just by checking first char
# \r itself is a valid newline on some older OS.
elif comment.buffer[text_start] not in {' ', '\n', '\r', '\x00'}:
column = comment.column_no + text_start - comment.pointer column = comment.column_no + text_start - comment.pointer
yield LintProblem(comment.line_no, yield LintProblem(comment.line_no,
column, column,