<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>