[Python-ideas] Transportable indent level markers. /// ; ; ; \\\

Matt Joiner anacrolix at gmail.com
Mon Dec 12 23:45:56 CET 2011


ಠ_ಠ

On Tue, Dec 13, 2011 at 9:40 AM, Massimo Di Pierro
<massimo.dipierro at gmail.com> wrote:
> I do not like it and I am not convinced this belongs to Python
>
> Yet you may like this other solution:
>
> exec(reindent("def f(a):; x=0; for i in range(a):; x+=i; pass; return x; print f(5)"))
>
> here reindent is a modification of the web2py reindent function (used in templates).
>
> - ; is converted to \n
> - loops are closed with pass
> - ifs are also closed with pass
> - def can be closed with pass or return
> - class must also end with pass
>
> In web2py-ese templates we would not use it like this. we would write instead:
>
> {{def f(a):}}{{x=0}}{{for i in range(a):}}{{x+=i}}{{pass}}{{return x}}{{=f(5)}}
>
> or break it into
>
> {{
> def f(a):
>   x=0
>   for i in range(a):
>      x+=i
>      pass
>   return x
> = f(5)
> }} (indentation is irrelevant even within the {{code}})
>
>
>
>
>
>
>
> On Dec 12, 2011, at 4:07 PM, Ron Adam wrote:
>
>>
>> While typing this reply to the "Alternate Suite Delineation Syntax For
>> Python?" thread.  I realized that having things  all on a single line
>> isn't important or needed!!!  Yes, it's not needed for templates, or
>> code generation.  So this is an alternate to the alternate.
>>
>> What is needed is a uniform way to represent indenting that is easy to
>> transport to (ie paste into) code with different indent levels.
>>
>>
>> INDENT LEVEL MARKERS:
>> ----------------------
>> Offer a new way to spell <indent+1>, <indent+0>, and <indent-1>.
>>
>> To make that work, we need to use unique character sequences that aren't
>> already used.  After some thought, I came up with these indent-markers.
>>
>>    ///   # indent level +1
>>    ;;;   # indent level +0
>>    \\\   # indent level -1
>>
>> These are unique enough to be easy to see, and the tripled versions of
>> them aren't really that bad as we already have triple quotes, and they
>> would be less than the white space they are replacing in most cases.
>>
>> So this isn't brackets, or braces. It would be just an alternate
>> spelling in already valid python. It should not effect the parser,
>> grammar, or interpreter in any way if it is done in pythons
>> tokenizer.  :-)
>>
>>
>> Reusing some previous examples.
>>
>> #-----------------------
>>
>>>   def acc(n) {: s=n; return {: def (i) {: nonlocal s; s += i; return
>>> s}}}
>>
>> #Standard python...
>>
>> def acc(n):
>>    s=n
>>    def add(i):
>>        nonlocal s
>>        s += i
>>        return s
>>    return add
>>
>>
>> #Single line version...
>>
>>  def acc(n): /// s=n ;;; def add(i): /// nonlocal s \
>>  ;;; s+=i ;;; return s \\\ return add
>>
>> (The '\' character should still work.)
>>
>>
>> #Transportable indent level version...
>>
>> This could also be valid... and could be transportable to any other
>> indent level without having to edit it.
>>
>> (So would the above single line version by adding a ';;;' to the
>> beginning.)
>>
>> ;;; def acc(n):     # indent +0
>> /// s = n           # indent +1
>> ;;; def add(i):     # indent +0
>> /// nonlocal s      # indent +1
>> ;;; s += i          # indent +0
>> ;;; return s        # indent +0
>> \\\ return add      # indent -1
>>
>> It has the nice properties of being uniform, and being able to be
>> inserted easily into any existing code block without having to adjust
>> the indent levels.
>>
>> I believe that these properties are more important than being able to
>> put things on a single line and could be a very useful in code
>> generating programs. ;-)
>>
>>
>> It may be easy to implement.
>>
>> This could probably all be done in the tokinze.c get_tok() function,
>> where it detects and converts white space to indention levels.  Nothing
>> else in python would need to be changed.  The tokenizer already detects
>> line continuations and different line endings, so this wouldn't be that
>> out of place.
>>
>> Cheers,
>>   Ron
>>
>>
>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas at python.org
>> http://mail.python.org/mailman/listinfo/python-ideas
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
>



-- 
ಠ_ಠ



More information about the Python-ideas mailing list