mirror of
https://codeberg.org/guix/guix.git
synced 2026-01-25 12:05:19 -06:00
gnu: python-pydocstyle: Update to 6.3.0.
* gnu/packages/python-xyz.scm (python-pydocstyle): Update to 6.3.0. [source]: Swap to git checkout containing tests. <patches>: Add patch published upstream to fix compatibility with PEP701. [build-system]: Swap to pyrpoject-build-system. [arguments]<test-flags>: Disable tests requiring pip install. <phases>: Add 'set-version. [native-inputs]: Add poetry-core, python-pytest, and python-tomli. * gnu/packages/patches/python-pydocstyle-add-support-for-pep701.patch: Add file. * gnu/local.mk: Register patch. Change-Id: Ia43906383ac454c3918d0c9335cb8f744443ad29
This commit is contained in:
parent
372b1491a5
commit
a33c8eadd0
3 changed files with 139 additions and 9 deletions
|
|
@ -1946,6 +1946,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/python-matplotlib-fix-legend-loc-best-test.patch \
|
||||
%D%/packages/patches/python-random2-getrandbits-test.patch \
|
||||
%D%/packages/patches/python-pillow-use-zlib-1.3.patch \
|
||||
%D%/packages/patches/python-pydocstyle-add-support-for-pep701.patch \
|
||||
%D%/packages/patches/python-pyreadstat-link-libiconv.patch \
|
||||
%D%/packages/patches/python-pyls-black-41.patch \
|
||||
%D%/packages/patches/python-sip-include-dirs.patch \
|
||||
|
|
|
|||
|
|
@ -0,0 +1,109 @@
|
|||
From 306c7c8f2d863bdc098a65d2dadbd4703b9b16d5 Mon Sep 17 00:00:00 2001
|
||||
From: Alfred Wingate <parona@protonmail.com>
|
||||
Date: Wed, 1 Nov 2023 11:12:08 +0200
|
||||
Subject: [PATCH] Add support for PEP701
|
||||
|
||||
* fstrings are broken into several distinct tokens in py3.12, reattach
|
||||
them together as a singular string to preserve previous behavior.
|
||||
|
||||
Closes: https://github.com/PyCQA/pydocstyle/issues/646
|
||||
Signed-off-by: Alfred Wingate <parona@protonmail.com>
|
||||
---
|
||||
docs/release_notes.rst | 8 ++++++++
|
||||
src/pydocstyle/parser.py | 23 +++++++++++++++++++++++
|
||||
src/tests/parser_test.py | 29 +++++++++++++++++++++++++++++
|
||||
3 files changed, 60 insertions(+)
|
||||
|
||||
diff --git a/docs/release_notes.rst b/docs/release_notes.rst
|
||||
index 46e36562..3db4c189 100644
|
||||
--- a/docs/release_notes.rst
|
||||
+++ b/docs/release_notes.rst
|
||||
@@ -4,6 +4,14 @@ Release Notes
|
||||
**pydocstyle** version numbers follow the
|
||||
`Semantic Versioning <http://semver.org/>`_ specification.
|
||||
|
||||
+
|
||||
+Current development version
|
||||
+---------------------------
|
||||
+
|
||||
+Bug Fixes
|
||||
+
|
||||
+* Add support for PEP-701 fixing fstring parsing in python3.12 (#656).
|
||||
+
|
||||
6.3.0 - January 17th, 2023
|
||||
--------------------------
|
||||
|
||||
diff --git a/src/pydocstyle/parser.py b/src/pydocstyle/parser.py
|
||||
index 95bd0a10..875f769d 100644
|
||||
--- a/src/pydocstyle/parser.py
|
||||
+++ b/src/pydocstyle/parser.py
|
||||
@@ -479,6 +479,29 @@ def parse_docstring(self):
|
||||
)
|
||||
self.stream.move()
|
||||
return docstring
|
||||
+ if (sys.version_info.major, sys.version_info.minor) >= (
|
||||
+ 3,
|
||||
+ 12,
|
||||
+ ) and self.current.kind == tk.FSTRING_START:
|
||||
+
|
||||
+ def fstring(string):
|
||||
+ """Recursively parse fstring tokens to output it as one string."""
|
||||
+ while self.current.kind != tk.FSTRING_END:
|
||||
+ self.stream.move()
|
||||
+ string += self.current.value
|
||||
+ if self.current.kind == tk.FSTRING_START:
|
||||
+ string = fstring(string)
|
||||
+ self.stream.move()
|
||||
+ string += self.current.value
|
||||
+ return string
|
||||
+
|
||||
+ # Reattach fstring tokens together into a string to deal with PEP 701 in python3.12
|
||||
+ start = self.current.start[0]
|
||||
+ string = fstring(self.current.value)
|
||||
+ end = self.current.end[0]
|
||||
+ docstring = Docstring(string, start, end)
|
||||
+ self.stream.move()
|
||||
+ return docstring
|
||||
return None
|
||||
|
||||
def parse_decorators(self):
|
||||
diff --git a/src/tests/parser_test.py b/src/tests/parser_test.py
|
||||
index 582c6cde..2c0bbaca 100644
|
||||
--- a/src/tests/parser_test.py
|
||||
+++ b/src/tests/parser_test.py
|
||||
@@ -114,6 +114,35 @@ def do_something(pos_param0, pos_param1, kw_param0="default"):
|
||||
assert str(function) == 'in public function `do_something`'
|
||||
|
||||
|
||||
+def test_nested_fstring():
|
||||
+ """Test parsing fstring with nested fstrings."""
|
||||
+ parser = Parser()
|
||||
+ code = CodeSnippet("""\
|
||||
+ def do_something(pos_param0, pos_param1, kw_param0="default"):
|
||||
+ f\"""Do something. {f"This is a nested fstring."}\"""
|
||||
+ return None
|
||||
+ """)
|
||||
+ module = parser.parse(code, 'file_path')
|
||||
+ assert module.is_public
|
||||
+ assert module.dunder_all is None
|
||||
+
|
||||
+ function, = module.children
|
||||
+ assert function.name == 'do_something'
|
||||
+ assert function.decorators == []
|
||||
+ assert function.children == []
|
||||
+ assert function.docstring == 'f"""Do something. {f"This is a nested fstring."}"""'
|
||||
+ assert function.docstring.start == 2
|
||||
+ assert function.docstring.end == 2
|
||||
+ assert function.kind == 'function'
|
||||
+ assert function.parent == module
|
||||
+ assert function.start == 1
|
||||
+ assert function.end == 3
|
||||
+ assert function.error_lineno == 2
|
||||
+ assert function.source == code.getvalue()
|
||||
+ assert function.is_public
|
||||
+ assert str(function) == 'in public function `do_something`'
|
||||
+
|
||||
+
|
||||
def test_decorated_function():
|
||||
"""Test parsing of a simple function with a decorator."""
|
||||
parser = Parser()
|
||||
|
|
@ -8495,22 +8495,42 @@ in Markdown format. Instead of executing your Python code like so many other
|
|||
documentation tools, it parses it using docspec instead.")
|
||||
(license license:expat)))
|
||||
|
||||
;; XXX: The project is deprecated upstream, still in use by some packages,
|
||||
;; consider to remove when nothing depends on it.
|
||||
(define-public python-pydocstyle
|
||||
(package
|
||||
(name "python-pydocstyle")
|
||||
(version "3.0.0")
|
||||
(version "6.3.0")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "pydocstyle" version))
|
||||
(method git-fetch) ;no tests in PyPI archive
|
||||
(uri (git-reference
|
||||
(url "https://github.com/PyCQA/pydocstyle")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
|
||||
(build-system python-build-system)
|
||||
(base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
|
||||
(patches (search-patches
|
||||
"python-pydocstyle-add-support-for-pep701.patch"))))
|
||||
(build-system pyproject-build-system)
|
||||
(arguments
|
||||
(list
|
||||
;; It tries to install with pip.
|
||||
#:test-flags #~(list "--ignore=src/tests/test_integration.py")
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'set-version
|
||||
(lambda _
|
||||
(substitute* "pyproject.toml"
|
||||
(("0.0.0-dev") #$version)))))))
|
||||
(native-inputs
|
||||
(list python-poetry-core
|
||||
python-pytest
|
||||
python-tomli))
|
||||
(propagated-inputs
|
||||
(list python-six python-snowballstemmer))
|
||||
(home-page
|
||||
"https://github.com/PyCQA/pydocstyle/")
|
||||
(list python-six
|
||||
python-snowballstemmer))
|
||||
(home-page "https://github.com/PyCQA/pydocstyle/")
|
||||
(synopsis "Python docstring style checker")
|
||||
(description
|
||||
"This package provides a style checker for the Python Language
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue