commit:     2bd56688ccc7b929cb7b466dc8c558acf320ac95
Author:     Andrew Ammerlaan <andrewammerlaan <AT> riseup <DOT> net>
AuthorDate: Sun Apr 18 08:46:11 2021 +0000
Commit:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
CommitDate: Wed May 19 18:41:59 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2bd56688

dev-python/python-lsp-server: add spyder fork of python-language-server

Bug: https://bugs.gentoo.org/783618
Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Andrew Ammerlaan <andrewammerlaan <AT> gentoo.org>

 dev-python/python-lsp-server/Manifest              |   1 +
 .../files/pyls-fix-test-with-pylint28.patch        | 237 +++++++++++++++++++++
 .../files/pyls-fix-test_folding.patch              |  14 ++
 dev-python/python-lsp-server/metadata.xml          |  20 ++
 .../python-lsp-server-1.0.1.ebuild                 |  71 ++++++
 5 files changed, 343 insertions(+)

diff --git a/dev-python/python-lsp-server/Manifest 
b/dev-python/python-lsp-server/Manifest
new file mode 100644
index 00000000000..64972775d70
--- /dev/null
+++ b/dev-python/python-lsp-server/Manifest
@@ -0,0 +1 @@
+DIST python-lsp-server-1.0.1.tar.gz 56835 BLAKE2B 
430e215b7d65bff2008136783539c262ee201d651bf83750333d41353483882fe7a603208c2725c89530a34cef22e73fe1ef26ec80fe7fb42d2df79eae511528
 SHA512 
bf116d92bdebea41e4f6647673d390887d84be70d612b92b8c3973aa55db4b151c1188b06fb8e3b6dccb814fd22f938572e998f0b1329bf0b69d0e4750b8f5f6

diff --git 
a/dev-python/python-lsp-server/files/pyls-fix-test-with-pylint28.patch 
b/dev-python/python-lsp-server/files/pyls-fix-test-with-pylint28.patch
new file mode 100644
index 00000000000..99790b6baed
--- /dev/null
+++ b/dev-python/python-lsp-server/files/pyls-fix-test-with-pylint28.patch
@@ -0,0 +1,237 @@
+From f6d9041b81d142657985b696d8da82cebdbe00bb Mon Sep 17 00:00:00 2001
+From: krassowski <[email protected]>
+Date: Sun, 25 Apr 2021 21:06:28 +0100
+Subject: [PATCH 1/2] Address pylint's "consider-using-with" warnings
+
+---
+ pylsp/plugins/flake8_lint.py     | 25 +++++++++++++++----------
+ pylsp/plugins/pylint_lint.py     | 28 ++++++++++++++++------------
+ test/plugins/test_flake8_lint.py |  7 +++----
+ test/plugins/test_pylint_lint.py |  7 +++----
+ 4 files changed, 37 insertions(+), 30 deletions(-)
+
+diff --git a/pylsp/plugins/flake8_lint.py b/pylsp/plugins/flake8_lint.py
+index d632395..dfee5b4 100644
+--- a/pylsp/plugins/flake8_lint.py
++++ b/pylsp/plugins/flake8_lint.py
+@@ -5,6 +5,7 @@
+ import logging
+ import os.path
+ import re
++from contextlib import ExitStack
+ from subprocess import Popen, PIPE
+ from pylsp import hookimpl, lsp
+ 
+@@ -65,16 +66,20 @@ def run_flake8(flake8_executable, args, document):
+         )
+ 
+     log.debug("Calling %s with args: '%s'", flake8_executable, args)
+-    try:
+-        cmd = [flake8_executable]
+-        cmd.extend(args)
+-        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+-    except IOError:
+-        log.debug("Can't execute %s. Trying with 'python -m flake8'", 
flake8_executable)
+-        cmd = ['python', '-m', 'flake8']
+-        cmd.extend(args)
+-        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+-    (stdout, stderr) = p.communicate(document.source.encode())
++    with ExitStack() as stack:
++        try:
++            cmd = [flake8_executable]
++            cmd.extend(args)
++            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++            stack.enter_context(p)
++        except IOError:
++            log.debug("Can't execute %s. Trying with 'python -m flake8'", 
flake8_executable)
++            cmd = ['python', '-m', 'flake8']
++            cmd.extend(args)
++            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++            stack.enter_context(p)
++        # exit stack ensures that even if an exception happens, the process 
`p` will be properly terminated
++        (stdout, stderr) = p.communicate(document.source.encode())
+     if stderr:
+         log.error("Error while running flake8 '%s'", stderr.decode())
+     return stdout.decode()
+diff --git a/pylsp/plugins/pylint_lint.py b/pylsp/plugins/pylint_lint.py
+index 5491787..6449cda 100644
+--- a/pylsp/plugins/pylint_lint.py
++++ b/pylsp/plugins/pylint_lint.py
+@@ -7,6 +7,7 @@
+ import logging
+ import sys
+ import re
++from contextlib import ExitStack
+ from subprocess import Popen, PIPE
+ 
+ from pylint.epylint import py_run
+@@ -232,18 +233,21 @@ def _run_pylint_stdio(pylint_executable, document, 
flags):
+     :rtype: string
+     """
+     log.debug("Calling %s with args: '%s'", pylint_executable, flags)
+-    try:
+-        cmd = [pylint_executable]
+-        cmd.extend(flags)
+-        cmd.extend(['--from-stdin', document.path])
+-        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+-    except IOError:
+-        log.debug("Can't execute %s. Trying with 'python -m pylint'", 
pylint_executable)
+-        cmd = ['python', '-m', 'pylint']
+-        cmd.extend(flags)
+-        cmd.extend(['--from-stdin', document.path])
+-        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+-    (stdout, stderr) = p.communicate(document.source.encode())
++    with ExitStack() as stack:
++        try:
++            cmd = [pylint_executable]
++            cmd.extend(flags)
++            cmd.extend(['--from-stdin', document.path])
++            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++            stack.enter_context(p)
++        except IOError:
++            log.debug("Can't execute %s. Trying with 'python -m pylint'", 
pylint_executable)
++            cmd = ['python', '-m', 'pylint']
++            cmd.extend(flags)
++            cmd.extend(['--from-stdin', document.path])
++            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++            stack.enter_context(p)
++        (stdout, stderr) = p.communicate(document.source.encode())
+     if stderr:
+         log.error("Error while running pylint '%s'", stderr.decode())
+     return stdout.decode()
+diff --git a/test/plugins/test_flake8_lint.py 
b/test/plugins/test_flake8_lint.py
+index eaabd40..4faf0dd 100644
+--- a/test/plugins/test_flake8_lint.py
++++ b/test/plugins/test_flake8_lint.py
+@@ -21,10 +21,9 @@ def using_const():
+ 
+ 
+ def temp_document(doc_text, workspace):
+-    temp_file = tempfile.NamedTemporaryFile(mode='w', delete=False)
+-    name = temp_file.name
+-    temp_file.write(doc_text)
+-    temp_file.close()
++    with tempfile.NamedTemporaryFile(mode='w', delete=False) as temp_file:
++        name = temp_file.name
++        temp_file.write(doc_text)
+     doc = Document(uris.from_fs_path(name), workspace)
+ 
+     return name, doc
+diff --git a/test/plugins/test_pylint_lint.py 
b/test/plugins/test_pylint_lint.py
+index f83e754..cf7a7e4 100644
+--- a/test/plugins/test_pylint_lint.py
++++ b/test/plugins/test_pylint_lint.py
+@@ -28,10 +28,9 @@ def hello():
+ @contextlib.contextmanager
+ def temp_document(doc_text, workspace):
+     try:
+-        temp_file = tempfile.NamedTemporaryFile(mode='w', delete=False)
+-        name = temp_file.name
+-        temp_file.write(doc_text)
+-        temp_file.close()
++        with tempfile.NamedTemporaryFile(mode='w', delete=False) as temp_file:
++            name = temp_file.name
++            temp_file.write(doc_text)
+         yield Document(uris.from_fs_path(name), workspace)
+     finally:
+         os.remove(name)
+
+From 2d980b6d99b06de827d6589a48a75c6b196b32f4 Mon Sep 17 00:00:00 2001
+From: krassowski <[email protected]>
+Date: Sun, 25 Apr 2021 22:14:53 +0100
+Subject: [PATCH 2/2] Revert the use of ExitStack, as requested
+
+---
+ pylsp/plugins/flake8_lint.py | 25 ++++++++++---------------
+ pylsp/plugins/pylint_lint.py | 28 ++++++++++++----------------
+ 2 files changed, 22 insertions(+), 31 deletions(-)
+
+diff --git a/pylsp/plugins/flake8_lint.py b/pylsp/plugins/flake8_lint.py
+index dfee5b4..03504ef 100644
+--- a/pylsp/plugins/flake8_lint.py
++++ b/pylsp/plugins/flake8_lint.py
+@@ -5,7 +5,6 @@
+ import logging
+ import os.path
+ import re
+-from contextlib import ExitStack
+ from subprocess import Popen, PIPE
+ from pylsp import hookimpl, lsp
+ 
+@@ -66,20 +65,16 @@ def run_flake8(flake8_executable, args, document):
+         )
+ 
+     log.debug("Calling %s with args: '%s'", flake8_executable, args)
+-    with ExitStack() as stack:
+-        try:
+-            cmd = [flake8_executable]
+-            cmd.extend(args)
+-            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
+-            stack.enter_context(p)
+-        except IOError:
+-            log.debug("Can't execute %s. Trying with 'python -m flake8'", 
flake8_executable)
+-            cmd = ['python', '-m', 'flake8']
+-            cmd.extend(args)
+-            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
+-            stack.enter_context(p)
+-        # exit stack ensures that even if an exception happens, the process 
`p` will be properly terminated
+-        (stdout, stderr) = p.communicate(document.source.encode())
++    try:
++        cmd = [flake8_executable]
++        cmd.extend(args)
++        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++    except IOError:
++        log.debug("Can't execute %s. Trying with 'python -m flake8'", 
flake8_executable)
++        cmd = ['python', '-m', 'flake8']
++        cmd.extend(args)
++        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++    (stdout, stderr) = p.communicate(document.source.encode())
+     if stderr:
+         log.error("Error while running flake8 '%s'", stderr.decode())
+     return stdout.decode()
+diff --git a/pylsp/plugins/pylint_lint.py b/pylsp/plugins/pylint_lint.py
+index 6449cda..d5ff3db 100644
+--- a/pylsp/plugins/pylint_lint.py
++++ b/pylsp/plugins/pylint_lint.py
+@@ -7,7 +7,6 @@
+ import logging
+ import sys
+ import re
+-from contextlib import ExitStack
+ from subprocess import Popen, PIPE
+ 
+ from pylint.epylint import py_run
+@@ -233,21 +232,18 @@ def _run_pylint_stdio(pylint_executable, document, 
flags):
+     :rtype: string
+     """
+     log.debug("Calling %s with args: '%s'", pylint_executable, flags)
+-    with ExitStack() as stack:
+-        try:
+-            cmd = [pylint_executable]
+-            cmd.extend(flags)
+-            cmd.extend(['--from-stdin', document.path])
+-            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
+-            stack.enter_context(p)
+-        except IOError:
+-            log.debug("Can't execute %s. Trying with 'python -m pylint'", 
pylint_executable)
+-            cmd = ['python', '-m', 'pylint']
+-            cmd.extend(flags)
+-            cmd.extend(['--from-stdin', document.path])
+-            p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
+-            stack.enter_context(p)
+-        (stdout, stderr) = p.communicate(document.source.encode())
++    try:
++        cmd = [pylint_executable]
++        cmd.extend(flags)
++        cmd.extend(['--from-stdin', document.path])
++        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++    except IOError:
++        log.debug("Can't execute %s. Trying with 'python -m pylint'", 
pylint_executable)
++        cmd = ['python', '-m', 'pylint']
++        cmd.extend(flags)
++        cmd.extend(['--from-stdin', document.path])
++        p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)  # pylint: 
disable=consider-using-with
++    (stdout, stderr) = p.communicate(document.source.encode())
+     if stderr:
+         log.error("Error while running pylint '%s'", stderr.decode())
+     return stdout.decode()

diff --git a/dev-python/python-lsp-server/files/pyls-fix-test_folding.patch 
b/dev-python/python-lsp-server/files/pyls-fix-test_folding.patch
new file mode 100644
index 00000000000..d70f2b23d4b
--- /dev/null
+++ b/dev-python/python-lsp-server/files/pyls-fix-test_folding.patch
@@ -0,0 +1,14 @@
+diff --git a/test/plugins/test_folding.py b/test/plugins/test_folding.py
+index 57d6e2e..cef4583 100644
+--- a/test/plugins/test_folding.py
++++ b/test/plugins/test_folding.py
+@@ -147,9 +147,6 @@ def test_folding(workspace):
+                 {'startLine': 62, 'endLine': 63},
+                 {'startLine': 64, 'endLine': 65},
+                 {'startLine': 67, 'endLine': 68}]
+-    if sys.version_info[:2] >= (3, 9):
+-        # the argument list of the decorator is also folded in Python >= 3.9
+-        expected.insert(4, {'startLine': 9, 'endLine': 10})
+ 
+     assert ranges == expected
+ 

diff --git a/dev-python/python-lsp-server/metadata.xml 
b/dev-python/python-lsp-server/metadata.xml
new file mode 100644
index 00000000000..92cf56e5f76
--- /dev/null
+++ b/dev-python/python-lsp-server/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="person" proxied="yes">
+               <email>[email protected]</email>
+               <name>Andrew Ammerlaan</name>
+       </maintainer>
+       <maintainer type="project" proxied="proxy">
+               <email>[email protected]</email>
+               <name>Proxy Maintainers</name>
+       </maintainer>
+       <maintainer type="project">
+               <email>[email protected]</email>
+               <name>Python</name>
+       </maintainer>
+       <stabilize-allarches/>
+       <upstream>
+               <remote-id type="pypi">python-lsp-server</remote-id>
+       </upstream>
+</pkgmetadata>

diff --git a/dev-python/python-lsp-server/python-lsp-server-1.0.1.ebuild 
b/dev-python/python-lsp-server/python-lsp-server-1.0.1.ebuild
new file mode 100644
index 00000000000..bacdb5db84f
--- /dev/null
+++ b/dev-python/python-lsp-server/python-lsp-server-1.0.1.ebuild
@@ -0,0 +1,71 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{7..9} )
+
+DISTUTILS_USE_SETUPTOOLS=rdepend
+inherit distutils-r1 optfeature
+
+DESCRIPTION="Python Language Server for the Language Server Protocol"
+HOMEPAGE="https://github.com/python-lsp/python-lsp-server";
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+BDEPEND="
+       test? (
+               dev-python/autopep8[${PYTHON_USEDEP}]
+               dev-python/flaky[${PYTHON_USEDEP}]
+               >=dev-python/flake8-3.8.0[${PYTHON_USEDEP}]
+               dev-python/matplotlib[${PYTHON_USEDEP}]
+               >=dev-python/mccabe-0.6.0[${PYTHON_USEDEP}]
+               <dev-python/mccabe-0.7.0[${PYTHON_USEDEP}]
+               dev-python/numpy[${PYTHON_USEDEP}]
+               dev-python/pandas[${PYTHON_USEDEP}]
+               >=dev-python/pycodestyle-2.7.0[${PYTHON_USEDEP}]
+               >=dev-python/pydocstyle-2.0.0[${PYTHON_USEDEP}]
+               >=dev-python/pyflakes-2.3.0[${PYTHON_USEDEP}]
+               <dev-python/pyflakes-2.4.0[${PYTHON_USEDEP}]
+               >=dev-python/pylint-2.5.0[${PYTHON_USEDEP}]
+               dev-python/QtPy[gui,testlib,${PYTHON_USEDEP}]
+               >=dev-python/rope-0.10.5[${PYTHON_USEDEP}]
+               dev-python/yapf[${PYTHON_USEDEP}]
+       )"
+
+RDEPEND="
+       >=dev-python/jedi-0.17.2[${PYTHON_USEDEP}]
+       <dev-python/jedi-0.19.0[${PYTHON_USEDEP}]
+       >=dev-python/python-lsp-jsonrpc-1.0.0[${PYTHON_USEDEP}]
+       dev-python/pluggy[${PYTHON_USEDEP}]
+       >=dev-python/ujson-3[${PYTHON_USEDEP}]
+"
+
+PATCHES=(
+       "${FILESDIR}/pyls-fix-test_folding.patch"
+       "${FILESDIR}/pyls-fix-test-with-pylint28.patch"
+)
+
+distutils_enable_tests pytest
+
+python_prepare_all() {
+       # remove pytest-cov dep
+       sed -i -e '0,/addopts/I!d' setup.cfg || die
+
+       distutils-r1_python_prepare_all
+}
+
+pkg_postinst() {
+       optfeature "Automatically formats Python code to conform to the PEP 8 
style guide" dev-python/autopep8
+       optfeature "A wrapper around PyFlakes, pep8 & mccabe" dev-python/flake8
+       optfeature "flake8 plugin: McCabe complexity checker" dev-python/mccabe
+       optfeature "Python style guide checker (fka pep8)" 
dev-python/pycodestyle
+       optfeature "Python docstring style checker" dev-python/pydocstyle
+       optfeature "Passive checker for Python programs" dev-python/pyflakes
+       optfeature "Python code static checker" dev-python/pylint
+       optfeature "Python refactoring library" dev-python/rope
+       optfeature "A formatter for Python files" dev-python/yapf
+}

Reply via email to