fix(python): highlight all types of docstrings (#7788)

This commit is contained in:
Jakob Zahn 2025-04-03 09:35:41 +02:00 committed by GitHub
parent 30654ee72a
commit 997288c552
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 124 additions and 21 deletions

View file

@ -80,27 +80,9 @@
] @string.escape
; doc-strings
(module
.
(comment)*
.
(expression_statement
(string
(string_content) @spell) @string.documentation))
(class_definition
body: (block
.
(expression_statement
(string
(string_content) @spell) @string.documentation)))
(function_definition
body: (block
.
(expression_statement
(string
(string_content) @spell) @string.documentation)))
(expression_statement
(string
(string_content) @spell) @string.documentation)
; Tokens
[

View file

@ -0,0 +1,121 @@
# Docstrings according to PEP 257 (https://peps.python.org/pep-0257/)
# <- @comment
"""Module docstring assigned to `__doc__`..."""
# <- @string.documentation
"""
... with an addtional docstring, not part of `__doc__`.
"""
# <- @string.documentation
"""
Some random docstring in the middle if nowhere...
"""
# <- @string.documentation
"""
... also with not one ...
"""
# <- @string.documentation
"""
... but two addtional docstrings.
"""
# <- @string.documentation
oneline_string_assignment = "not detected as docstring"
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ @string
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ !@string.documentation
"""Module attribute docstring."""
# <- @string.documentation
multiline_string_assignment = """
also not detected as docstring
"""
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @string
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ !@string.documentation
looks_like_implicit_string_concatenation = "abc"
# ^^^^^ @string
"def"
# <- @string.documentation
single_line_implicit_string_concatenation = "abc" "def"
# ^^^^^ @string
# ^^^^^ @string
# ^^^^^ !@string.documentation
multiline_implicit_string_concatenation = (
"not "
# <- @string
# <- !@string.documentation
"detected "
# <- @string
# <- !@string.documentation
"as docstring, "
# <- @string
# <- !@string.documentation
"either."
# <- @string
# <- !@string.documentation
)
class A:
"""
Class docstring, assigned to `__doc__`.
"""
# <- @string.documentation
"""
Some random docstring again, ...
"""
# <- @string.documentation
"""
... with an "additional" docstring. Again.
"""
# <- @string.documentation
foo = "class attribute"
# ^^^^^^^^^^^^^^^^^ @string
# ^^^^^^^^^^^^^^^^^ !@string.documentation
"""
Class attribute docstring, but an attribute
does not have a `__doc__` attribute itself.
"""
# <- @string.documentation
bar: int
"""Class attribute docstring, type annotation only."""
# <- @string.documentation
baz: str = "type annotated class attribute"
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @string
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ !@string.documentation
"""Class attribute docstring, type annotation and assignment."""
# <- @string.documentation
def __init__(self):
"""Method docstring."""
# <- @string.documentation
self.quux = "instance attribute"
# ^^^^^^^^^^^^^^^^^^^^ @string
# ^^^^^^^^^^^^^^^^^^^^ !@string.documentation
"""Instance attribute docstring."""
# <- @string.documentation
def f(x):
"""Function docstring."""
# <- @string.documentation
"""Addtional function docstring."""
# <- @string.documentation
return x**2
f.a = 1
"""Function attribute docstring."""
# <- @string.documentation
"Random docstring with single quotes - legal, but far off standard and confusing."
# <- @string.documentation