Where this makes a difference is:

String s = “””
               I am 
                   a block of text
           “””;

Under Version 1, we would get:

I am
    a block of text

Under version 2, we would get

    I am 
        a block of text

Under version 1, if we wanted the latter answer, we would have to do .indent(4) 
or something like that.  


> On Apr 17, 2019, at 2:33 PM, Brian Goetz <brian.go...@oracle.com> wrote:
> 
>> 
>> I'm sorry I'm not completely caught up on this discussion yet and may have 
>> missed something. But I'm confused what the alternative to using the closing 
>> delimiter position is. You certainly don't want to magically use the column 
>> position of the *opening* delimiter in this example!  That is *definitely* 
>> incidental, as it depends on what the `query` variable got renamed to later 
>> by some refactoring tool. Variable renames shouldn't change program behavior.
>> 
> 
> Version 1 of the algorithm is:
>  - Strip leading and trailing blanks (perhaps limited to one each only)
>  - Compute the maximal common whitespace prefix of the remaining lines, and 
> trim that off each line
>  - If a blank last line was trimmed, add back a newline
> 
> Version 2 of the algorithm — the “significant closing delimiter” version — is:
>  - Strip leading and trailing blanks (perhaps limited to one each only)
>  - Compute the maximal common whitespace prefix of the remaining lines, 
> _including the stripped trailing blank line from above, if any_, and trim 
> that off
>  - If a blank last line was trimmed, add back a newline
> 
> In other words, the difference is wether we strip off the trailing blank 
> before or after we compute the leading whitespace prefix.  In neither case do 
> we use scanner position.

Reply via email to