<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Long story short, it's because there can be good reasons to
ignore PEP8 naming conventions. Linting tools can be taught to
skip over an intentional PEP8 violation. A grammar rule can't</p>
<p><br>
</p>
<p>Alex<br>
</p>
<br>
<div class="moz-cite-prefix">On 2017-03-01 09:04 AM, Mathieu BEAL
wrote:<br>
</div>
<blockquote
cite="mid:CALvddxaeEZs6F0GFOJ=CKEntYggY8Dpetn7Bf1MyDAWxgVuKcg@mail.gmail.com"
type="cite">
<div dir="ltr">
<p class="MsoNormal"><span lang="EN-US">I was
wondering why the PEP coding style (<a
moz-do-not-send="true"
href="https://www.python.org/dev/peps/pep-0008/">https://www.python.org/dev/peps/pep-0008/</a>)
is not natively included in python grammar ? </span></p>
<p class="MsoNormal"><span lang="EN-US">For
instance, both, <i>function definition</i> and <i>class
definition</i>, are using the same “NAME”
token. ((see, <a moz-do-not-send="true"
href="https://docs.python.org/3/reference/grammar.html">https://docs.python.org/3/reference/grammar.html</a>).</span></p>
<p class="MsoNormal"
style="margin-bottom:0.0001pt;line-height:normal"><span
style="font-size:10pt;font-family:"courier new""
lang="EN-US">classdef: 'class'
NAME ['(' [arglist] ')'] ':' suite</span></p>
<pre><span class="gmail-n"><span lang="EN-US">funcdef</span></span><span class="gmail-p"><span lang="EN-US">:</span></span><span lang="EN-US"> <span class="gmail-s1">'def'</span> <span class="gmail-n">NAME</span> <span class="gmail-n">parameters</span> <span class="gmail-p">[</span><span class="gmail-s1">'->'</span> <span class="gmail-n">test</span><span class="gmail-p">]</span> <span class="gmail-s1">':'</span> <span class="gmail-n">suite</span></span></pre>
<p class="MsoNormal"><span lang="EN-US"><br>
Then, we are using libraries like pyflake, flake8, pylint,
to check the
coding style.</span></p>
<p class="MsoNormal"><span lang="EN-US"></span></p>
<p class="MsoNormal"><span lang="EN-US"><br>
</span></p>
<p class="MsoNormal"><span lang="EN-US">It seems useful
to natively make distinction between NAME of classdef and
NAME of funcdef, with
something like:</span></p>
<p class="MsoNormal"
style="margin-bottom:0.0001pt;line-height:normal"><span
style="font-size:10pt;font-family:"courier new""
lang="EN-US">classdef: 'class'
NAME_CLASS ['(' [arglist] ')'] ':' suite</span></p>
<pre><span class="gmail-n"><span lang="EN-US">funcdef</span></span><span class="gmail-p"><span lang="EN-US">:</span></span><span lang="EN-US"> <span class="gmail-s1">'def'</span> <span class="gmail-n">NAME_FUNC</span> <span class="gmail-n">parameters</span> <span class="gmail-p">[</span><span class="gmail-s1">'->'</span> <span class="gmail-n">test</span><span class="gmail-p">]</span> <span class="gmail-s1">':'</span> <span class="gmail-n">suite</span></span></pre>
<p class="MsoNormal"><br>
<span lang="EN-US"></span></p>
<p class="MsoNormal"><span lang="EN-US">
NAME_CLASS:</span></p>
<p class="gmail-MsoListParagraph" style=""><span
style="font-family:symbol" lang="EN-US"><span>·<span
style="font:7pt "times new roman"">
</span></span></span><span lang="EN-US">Class
name should normally use the CapWord convention;</span></p>
<p class="MsoNormal"><span lang="EN-US">NAME_FUNC:</span></p>
<p class="gmail-MsoListParagraphCxSpFirst" style=""><span
style="font-family:symbol" lang="EN-US"><span>·<span
style="font:7pt "times new roman"">
</span></span></span><span lang="EN-US">Function
name should be lowercase, with words separated by underscore
as necessary to
improve readability,</span></p>
<p class="gmail-MsoListParagraphCxSpMiddle" style=""><span
style="font-family:symbol" lang="EN-US"><span>·<span
style="font:7pt "times new roman"">
</span></span></span><span lang="EN-US">mixedCase
is allowed;</span></p>
<p class="MsoNormal"><span lang="EN-US">STYLE_CAP_WORDS
= r’([A-Z]{1}[a-z]+(_[A-Z]{1}[a-z]+)*)’</span></p>
<p class="MsoNormal"><span lang="EN-US">STYLE_UNDERSCORE_LOW_WORDS
= r’([a-z]+(_[a-z]+)*)’</span></p>
<p class="MsoNormal"><span lang="EN-US">STYLE_MIXED_CASE
= r’([a-z]{1,}([A-Z]{1}[a-z]+)*’)</span></p>
<p class="MsoNormal"><span lang="EN-US">NAME_FUNC =
STYLE_LOW_WORDS </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>| STYLE_UNDERSCORE_LOW_WORDS
</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>| STYLE_MIXED_CASE</span></p>
<p class="MsoNormal"><span lang="EN-US">NAME_CLASS
= STYLE_CAP_WORDS</span></p>
<p class="MsoNormal" style="text-indent:35.4pt"><span
lang="EN-US"><span>
</span>| NAME_FUNC<span> </span># naming convention
for functions may be used in cases where the interface is
documented and used
primarily as a callable (pep8 source).</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">I didn't find any
information about this point in a previous post or
elsewhere. Is there any reason for such a choice ? or is it
a dark old discussion we never talk about ?<br>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><br>
</span></p>
<p class="MsoNormal"><span lang="EN-US">Mathieu<br>
</span></p>
<p class="MsoNormal"><span lang="EN-US"><br>
</span></p>
<p class="MsoNormal"><span lang="EN-US">------------- <br>
</span></p>
<p class="MsoNormal"><span lang="EN-US"> import re</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"># Testing
the first part of the class def, only.</span></p>
<p class="MsoNormal"><span lang="EN-US">style_cap_words
= r'^class ([A-Z]{1}[a-z]+(_?[A-Z]{1}[a-z]+)*)$'</span></p>
<p class="MsoNormal"><span lang="EN-US">compiled_style_cap_words
= re.compile(style_cap_words)</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">status_samples
= {True:['class Hello',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class Hel_Lo', # ok if
Hel and Lo are 2 words</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class HelLo', # same.</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>],</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span>False:['class
HellO',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class _He',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class HEllo',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class HE',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span><span> </span>'class
H',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class h',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class Hell_oo',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class Hell_',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class _hell',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class H_E_L_L_O',</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>
</span>'class _H']}</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">def
is_matched(sample, pattern=compiled_style_cap_words):</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span>matched
= pattern.match(sample)</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span>return
matched is not None</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US">for status,
samples in status_samples.items():</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span>for
sample in samples:</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span>is_correct
= status ==
is_matched(sample)</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span>assert
is_correct, '%s is not correct,
required %s' % (sample, status)</span></p>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Python-ideas mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Python-ideas@python.org">Python-ideas@python.org</a>
<a class="moz-txt-link-freetext" href="https://mail.python.org/mailman/listinfo/python-ideas">https://mail.python.org/mailman/listinfo/python-ideas</a>
Code of Conduct: <a class="moz-txt-link-freetext" href="http://python.org/psf/codeofconduct/">http://python.org/psf/codeofconduct/</a></pre>
</blockquote>
<br>
</body>
</html>