diff options
author | Jakub Kuczys <me@jacken.men> | 2022-10-15 14:57:53 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-15 14:57:53 (GMT) |
commit | 120b4ab2b68aebf96ce0de243eab89a25fc2d282 (patch) | |
tree | 1fc1b9e2dabb77c995fddebd19f0b0f2c1beea8e | |
parent | 07b5c4699e64eb30c3bdcb1275c167e675d37423 (diff) | |
download | cpython-120b4ab2b68aebf96ce0de243eab89a25fc2d282.zip cpython-120b4ab2b68aebf96ce0de243eab89a25fc2d282.tar.gz cpython-120b4ab2b68aebf96ce0de243eab89a25fc2d282.tar.bz2 |
gh-95731: Fix module docstring extraction in pygettext (#95732)
-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 7f18eda..c083a04 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 |