diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2022-10-15 15:33:19 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-15 15:33:19 (GMT) |
commit | 84a26e114ed5ca080ffe2f84aa0b7c59848afed6 (patch) | |
tree | 53a1b78c7bccee7d8c8856d1ae5c22b02a3c9c83 | |
parent | c9da063e32725a66495e4047b8a5ed13e72d9e8e (diff) | |
download | cpython-84a26e114ed5ca080ffe2f84aa0b7c59848afed6.zip cpython-84a26e114ed5ca080ffe2f84aa0b7c59848afed6.tar.gz cpython-84a26e114ed5ca080ffe2f84aa0b7c59848afed6.tar.bz2 |
gh-95731: Fix module docstring extraction in pygettext (GH-95732)
(cherry picked from commit 120b4ab2b68aebf96ce0de243eab89a25fc2d282)
Co-authored-by: Jakub Kuczys <me@jacken.men>
-rw-r--r-- | Lib/test/test_tools/test_i18n.py | 20 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Tools-Demos/2022-08-05-23-25-59.gh-issue-95731.N2KohU.rst | 1 | ||||
-rwxr-xr-x | Tools/i18n/pygettext.py | 7 |
3 files changed, 25 insertions, 3 deletions
diff --git a/Lib/test/test_tools/test_i18n.py b/Lib/test/test_tools/test_i18n.py index 12f778d..985e226 100644 --- a/Lib/test/test_tools/test_i18n.py +++ b/Lib/test/test_tools/test_i18n.py @@ -155,6 +155,26 @@ class Test_pygettext(unittest.TestCase): ''')) self.assertFalse([msgid for msgid in msgids if 'doc' in msgid]) + def test_moduledocstring(self): + for doc in ('"""doc"""', "r'''doc'''", "R'doc'", 'u"doc"'): + with self.subTest(doc): + msgids = self.extract_docstrings_from_str(dedent('''\ + %s + ''' % doc)) + self.assertIn('doc', msgids) + + def test_moduledocstring_bytes(self): + msgids = self.extract_docstrings_from_str(dedent('''\ + b"""doc""" + ''')) + self.assertFalse([msgid for msgid in msgids if 'doc' in msgid]) + + def test_moduledocstring_fstring(self): + msgids = self.extract_docstrings_from_str(dedent('''\ + f"""doc""" + ''')) + self.assertFalse([msgid for msgid in msgids if 'doc' in msgid]) + def test_msgid(self): msgids = self.extract_docstrings_from_str( '''_("""doc""" r'str' u"ing")''') diff --git a/Misc/NEWS.d/next/Tools-Demos/2022-08-05-23-25-59.gh-issue-95731.N2KohU.rst b/Misc/NEWS.d/next/Tools-Demos/2022-08-05-23-25-59.gh-issue-95731.N2KohU.rst new file mode 100644 index 0000000..6b21461 --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2022-08-05-23-25-59.gh-issue-95731.N2KohU.rst @@ -0,0 +1 @@ +Fix handling of module docstrings in :file:`Tools/i18n/pygettext.py`. diff --git a/Tools/i18n/pygettext.py b/Tools/i18n/pygettext.py index 6f889adf..7ada791 100755 --- a/Tools/i18n/pygettext.py +++ b/Tools/i18n/pygettext.py @@ -335,9 +335,10 @@ class TokenEater: if ttype == tokenize.STRING and is_literal_string(tstring): self.__addentry(safe_eval(tstring), lineno, isdocstring=1) self.__freshmodule = 0 - elif ttype not in (tokenize.COMMENT, tokenize.NL): - self.__freshmodule = 0 - return + return + if ttype in (tokenize.COMMENT, tokenize.NL, tokenize.ENCODING): + return + self.__freshmodule = 0 # class or func/method docstring? if ttype == tokenize.NAME and tstring in ('class', 'def'): self.__state = self.__suiteseen |