<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;font-size:small"><div class="gmail_default" style="font-family:Arial,Helvetica,sans-serif"><span style="font-family:tahoma,sans-serif">I had looked at the pylint source code, and did some python troubleshooting, I discovered the</span><span style="font-family:tahoma,sans-serif"> matching was only checking against the beginning of the line. Someone in the community also offered the same suggestion (which prompted me to reply to my own post in hopes this may help someone else). </span><span style="font-family:tahoma,sans-serif">In the end, I used the following: </span></div><div class="gmail_default" style="font-family:Arial,Helvetica,sans-serif"><span style="font-family:tahoma,sans-serif"><br></span></div><div class="gmail_default"><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:10px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">(?i)(?P<start>^(tests?)?_)|(?P<end>.*tests$)</span></p></div><div class="gmail_default"><br></div><div class="gmail_default">I know <font face="courier new, monospace">(?P<text>)</font><font face="tahoma, sans-serif"> is not needed as it can't be used, but I find it useful for reading the regular expression and helping determine what a group is expected to match.</font></div><div class="gmail_default"><br></div><div class="gmail_default">Bassam</div><div style="font-family:Arial,Helvetica,sans-serif"><div dir="ltr" class="gmail_signature"><br></div></div></div></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 29, 2019 at 11:22 AM Bassam Khouri <<a href="mailto:bassam.khouri@gmail.com">bassam.khouri@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="font-size:small"><span style="font-family:tahoma,sans-serif">Hi,<br><br>I'm trying to configure the </span><font face="courier new, monospace">no-docstring-rgx</font><span style="font-family:tahoma,sans-serif"> option to ignore function and class names that:<br>- Starts with </span><font face="courier new, monospace">_</font><br><font face="tahoma, sans-serif">- Starts with </font><font face="courier new, monospace">test_</font><br><font face="tahoma, sans-serif">- Ends with </font><font face="courier new, monospace">tests</font><br><font face="tahoma, sans-serif">- Ends with </font><font face="courier new, monospace">Tests</font><br><br><font face="tahoma, sans-serif">I came up with the following regular expression:</font></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style="font-size:small"><font face="courier new, monospace">(^(test)?_)|((T|t)ests$)</font></div></blockquote><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small"><font face="tahoma, sans-serif">When I test the regular expression on </font><a href="https://regex101.com/r/3BXmsa/6" target="_blank">https://regex101.com/r/3BXmsa/6</a><span style="font-family:tahoma,sans-serif">, it matches the text I expect it to match.</span></div><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small"><font face="tahoma, sans-serif">However, when I run pylint against my code, it still reports a docstring is missing for a class name that ends with </font><font face="courier new, monospace">Tests</font><font face="tahoma, sans-serif">. </font></div><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small"><font face="tahoma, sans-serif">For example, if I have the following python 3 code.</font></div><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style="font-size:small"><font face="courier new, monospace">import unittest</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace">class _Utils(unittest.TestCase):</font></div><div style="font-size:small"><font face="courier new, monospace"> pass</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace">class Test_Foo(unittest.TestCase):</font></div><div style="font-size:small"><font face="courier new, monospace"> pass</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace">class test_Foo(unittest.TestCase):</font></div><div style="font-size:small"><font face="courier new, monospace"> pass</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace">class UtilsTests(unittest.TestCase):</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"> def test_function_name(self):</font></div><div style="font-size:small"><font face="courier new, monospace"> pass</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"> def _foo(self):</font></div><div style="font-size:small"><font face="courier new, monospace"> pass</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"> def my_tests(self):</font></div><div style="font-size:small"><font face="courier new, monospace"> pass</font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace"><br></font></div><div style="font-size:small"><font face="courier new, monospace">if __name__ == "__main__":</font></div><div style="font-size:small"><font face="courier new, monospace"> unittest.main()</font></div></blockquote><div style="font-size:small"><br></div><div style="font-size:small">Running <font face="courier new, monospace">pylint --disable=all --enable=missing-docstring --no-docstring-rgx='(^(test)?_)|((T|t)ests$)' ./test.py</font> yields</div><div style="font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style="font-size:small">
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(252,94,26)">$</span><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures"> pylint --disable=all --enable=missing-docstring --no-docstring-rgx='(^(test)?_)|((T|t)ests$)' ./test.py<span class="gmail-m_2336802670539221781gmail-Apple-converted-space"> </span></span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">************* Module test</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">test.py:1:0: C0111: Missing module docstring (missing-docstring)</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">test.py:8:0: C0111: Missing class docstring (missing-docstring)</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">test.py:16:0: C0111: Missing class docstring (missing-docstring)</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">test.py:24:4: C0111: Missing method docstring (missing-docstring)</span></p>
<p class="gmail-m_2336802670539221781gmail-p2" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85);min-height:17px"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures"></span><br></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">------------------------------------------------------------------</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">Your code has been rated at 7.50/10 (previous run: 7.50/10, +0.00)</span></p></div></blockquote><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small"><font face="tahoma, sans-serif">I was only expecting to see the Missing module docstring violation, and the missing class docstring on line 8.</font></div><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small"><font face="tahoma, sans-serif">Here is my environment:</font></div><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small">
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,93,255)">$</span><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures"> pylint --version</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">pylint 2.3.1</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">astroid 2.2.5</span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">Python 3.7.3 (default, Mar 27 2019, 09:23:15)<span class="gmail-m_2336802670539221781gmail-Apple-converted-space"> </span></span></p>
<p class="gmail-m_2336802670539221781gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:Monaco;color:rgb(242,242,242);background-color:rgba(0,0,0,0.85)"><span class="gmail-m_2336802670539221781gmail-s2" style="font-variant-ligatures:no-common-ligatures">[Clang 10.0.1 (clang-1001.0.46.3)]</span></p></div><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small"><font face="tahoma, sans-serif">Any ideas what is going on and how to fix it?</font></div><div style="font-size:small"><font face="tahoma, sans-serif"><br></font></div><div style="font-size:small">Cheers,</div><div style="font-size:small"><br></div><div style="font-size:small">Bassam</div><div><div dir="ltr" class="gmail-m_2336802670539221781gmail_signature"><div dir="ltr"><font face="tahoma, sans-serif">---<br>"What we can or cannot do, what we consider possible or impossible, is rarely a function of our true capability. It is more likely a function of our beliefs about who we are." - Tony Robbins</font></div></div></div></div>
</blockquote></div></div>