# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=6

PYTHON_COMPAT=( python2_7 python3_{5,6,7} pypy )
PYTHON_REQ_USE="threads(+)"

inherit distutils-r1 eutils

DESCRIPTION="Python code static checker"
HOMEPAGE="https://www.logilab.org/project/pylint
	https://pypi.org/project/pylint/
	https://github.com/pycqa/pylint"
SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="doc examples test"

RDEPEND="
	>=dev-python/astroid-1.6.0[${PYTHON_USEDEP}]
	dev-python/six[${PYTHON_USEDEP}]
	>=dev-python/isort-4.2.5[${PYTHON_USEDEP}]
	dev-python/mccabe[${PYTHON_USEDEP}]
	virtual/python-singledispatch[${PYTHON_USEDEP}]
	$(python_gen_cond_dep '
		dev-python/backports-functools-lru-cache[${PYTHON_USEDEP}]
		dev-python/configparser[${PYTHON_USEDEP}]' -2)"
DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]
	doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )
	test? ( ${RDEPEND}
		<dev-python/pytest-4[${PYTHON_USEDEP}] )"

python_prepare_all() {
	# remove unused dep
	sed -i -e '/pytest-runner/d' setup.py || die

	# Disable failing tests
	# TODO: investigate if it's our fault and how can we fix it
	sed -i -e 's/io.StringIO()/\0 if sys.version_info.major > 2 else open(os.devnull, "w")/' \
		-e 's/test_libmodule/_&/' \
		pylint/test/acceptance/test_stdlib.py || die
	sed -i -e 's/^# pylint:.*/\0, import-error/' \
		pylint/test/functional/deprecated_module_py36.py || die
	sed -i -e 's/^# pylint:.*/\0, wrong-import-order/' \
		pylint/test/functional/generated_members.py || die
	sed -i -e 's/test_good_comprehension_checks/_&/' \
		pylint/test/functional/using_constant_test.py || die

	distutils-r1_python_prepare_all
}

python_compile_all() {
	# selection of straight html triggers a trivial annoying bug, we skirt it
	use doc && PYTHONPATH="${S}" emake -e -C doc singlehtml
}

python_test() {
	py.test -v || die "Tests fail with ${EPYTHON}"
}

python_install_all() {
	doman man/{pylint,pyreverse}.1
	if use examples ; then
		docinto examples
		dodoc -r examples/.
	fi
	use doc && local HTML_DOCS=( doc/_build/singlehtml/. )
	distutils-r1_python_install_all
}

pkg_postinst() {
	# Optional dependency on "tk" USE flag would break support for Jython.
	optfeature "pylint-gui script requires dev-lang/python with \"tk\" USE flag enabled." 'dev-lang/python[tk]'
}
