From cebe4f22a05e71a24cf98c8559cb140bf3df4505 Mon Sep 17 00:00:00 2001 From: damngamerz Date: Sun, 13 Aug 2017 03:43:32 +0530 Subject: [PATCH] DocumentationAPI: Ignore triple quote strings Ignore whole triple quoted string literal DocComment. Fixes https://github.com/coala/coala/issues/4631 --- .../documentation/DocumentationExtraction.py | 12 ++++++++- .../documentation/DocBaseClassTest.py | 26 +++++++++++++++++++ .../default.py | 5 ++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/coalib/bearlib/languages/documentation/DocumentationExtraction.py b/coalib/bearlib/languages/documentation/DocumentationExtraction.py index 88b8584fec..e0d35e1bb9 100644 --- a/coalib/bearlib/languages/documentation/DocumentationExtraction.py +++ b/coalib/bearlib/languages/documentation/DocumentationExtraction.py @@ -246,4 +246,14 @@ def extract_documentation_with_markers(content, docstyle_definition): marker_dict, docstyle_definition) if doc: - yield doc + # Ignore string literals + ignore_regex = re.compile( + '^\s*r?(?P' + + ('|'.join(re.escape(s) for s in doc.marker[0])) + + ')') + # Starting line of doc_string where marker is present + start_line = doc.range.start.line - 1 + ignore_string_match = ignore_regex.search(content[start_line]) + + if ignore_string_match: + yield doc diff --git a/tests/bearlib/languages/documentation/DocBaseClassTest.py b/tests/bearlib/languages/documentation/DocBaseClassTest.py index db935845f1..77ae21ba39 100644 --- a/tests/bearlib/languages/documentation/DocBaseClassTest.py +++ b/tests/bearlib/languages/documentation/DocBaseClassTest.py @@ -246,6 +246,32 @@ def test_DocBaseClass_extraction_PYTHON3_3(self): docstyle_PYTHON3_doxygen.markers[1], TextPosition(1, 1))]) + def test_DocBaseClass_extraction_PYTHON3_4(self): + data = ['\n', 'triple_quote_string_test = """\n', + 'This is not a docstring\n', '"""\n'] + + docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3', + 'default') + + # Nothing is yielded as triple quote string literals are being + # ignored. + self.assertEqual( + list(DocBaseClass.extract(data, 'PYTHON3', 'default')), + []) + + def test_DocBaseClass_extraction_PYTHON3_5(self): + data = ['r"""\n', 'This is a raw docstring\n', '"""\n'] + + docstyle_PYTHON3_default = DocstyleDefinition.load('PYTHON3', + 'default') + + self.assertEqual( + list(DocBaseClass.extract(data, 'PYTHON3', 'default')), + [DocumentationComment('\nThis is a raw docstring\n', + docstyle_PYTHON3_default, 'r', + docstyle_PYTHON3_default.markers[0], + TextPosition(1, 2))]) + def test_generate_diff(self): data_old = ['\n', '""" documentation in single line """\n'] for doc_comment in DocBaseClass.extract( diff --git a/tests/bearlib/languages/documentation/documentation_extraction_testdata/default.py b/tests/bearlib/languages/documentation/documentation_extraction_testdata/default.py index ce91f69835..6d8abd74ea 100644 --- a/tests/bearlib/languages/documentation/documentation_extraction_testdata/default.py +++ b/tests/bearlib/languages/documentation/documentation_extraction_testdata/default.py @@ -75,3 +75,8 @@ def foobar_triangle(side_A, side_B, side_C): return side_A + side_B + side_C + + # This example of triple quote string literal is ignored. + triple_quote_string_literal_test = """ +This is a triple quoted string and is not a valid docstring. +"""