Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Unified Diff: third_party/WebKit/Tools/Scripts/webkitpy/formatter/fix_docstrings.py

Issue 2256793002: Make docstrings more consistent using format-webkitpy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make indentation of final quote based on parse tree (indentation prior to docstring node) rather th… Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Tools/Scripts/webkitpy/formatter/fix_docstrings.py
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/formatter/fix_docstrings.py b/third_party/WebKit/Tools/Scripts/webkitpy/formatter/fix_docstrings.py
index 246e5315ec0f47b247e09d01ffd6e247e0fa1aa3..a95590209fbb20aad86d5fe03c1c4a134d205f60 100644
--- a/third_party/WebKit/Tools/Scripts/webkitpy/formatter/fix_docstrings.py
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/formatter/fix_docstrings.py
@@ -12,6 +12,7 @@ import re
from lib2to3.fixer_base import BaseFix
from lib2to3.pgen2 import token
+from lib2to3.pygram import python_symbols
class FixDocstrings(BaseFix):
@@ -20,7 +21,21 @@ class FixDocstrings(BaseFix):
_accept_type = token.STRING
def match(self, node):
- return node.value.startswith('"""') and node.prev_sibling is None
+ """Returns True if the given node appears to be a docstring.
+
+ Docstrings should always have no previous siblings, and should be
+ direct children of simple_stmt.
+
+ Note: This may also match for some edge cases where there are
+ simple_stmt strings that aren't the first thing in a module, class
+ or function, and thus aren't considered docstrings; but changing these
+ strings should not change behavior.
+ """
+ # Pylint incorrectly warns that there's no member simple_stmt on python_symbols
+ # because the attribute is set dynamically. pylint: disable=no-member
+ return (node.value.startswith('"""') and
+ node.prev_sibling is None and
+ node.parent.type == python_symbols.simple_stmt)
def transform(self, node, results):
# First, strip whitespace at the beginning and end.
@@ -29,7 +44,15 @@ class FixDocstrings(BaseFix):
# For multi-line docstrings, the closing quotes should go on their own line.
if '\n' in node.value:
- indent = re.search(r'\n( *)\S', node.value).group(1)
+ indent = self._find_indent(node)
node.value = re.sub(r'"""$', '\n' + indent + '"""', node.value)
node.changed()
+
+ def _find_indent(self, node):
+ """Returns the indentation level of the docstring."""
+ # The parent is assumed to be a simple_stmt (the docstring statement)
+ # either preceded by an indentation, or nothing.
+ if not node.parent.prev_sibling or node.parent.prev_sibling.type != token.INDENT:
+ return ''
+ return node.parent.prev_sibling.value

Powered by Google App Engine
This is Rietveld 408576698