[swift-evolution] [Pitch] Limiting member expression with right-bound period

Benjamin Spratling bspratling at mac.com
Tue Nov 1 23:31:34 CDT 2016


I see what you’re saying now.  Thanks.
-Ben

> On Nov 1, 2016, at 11:28 PM, rintaro ishizaki <fs.output at gmail.com> wrote:
> 
> 
> 2016-11-02 13:14 GMT+09:00 Benjamin Spratling via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>>:
> 
> CGRect(origin:.zero, size:..
> 
> is pretty nice.  Why do you want to get rid of it?
> 
> No, I'm proposing to reject CGRect(origin:.  zero, size:..)
> 
>  '.' whitespace identifier
> 
> Reject whitespace in this.
> 
>  '.' identifier
> 
> is OK.
> 
>  
> 
> 
> return values
> 	.flatMap {
> 
> is OK. but 
> 
>   return valus
>         .
>         flatMap {
> 
> should be rejected.
>  
>  
> 		//code
> 	} 
> 	.filter {
> 		//code
> 	}
> 	.sorted { /* code */ 	 }
> 	.first
> 
> is also pretty clean, considering.
> 
> 
>> On Nov 1, 2016, at 11:06 PM, rintaro ishizaki via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>> Hi all,
>> 
>> The compiler currently accepts these expressions:
>> 
>> x = expr . member
>> x = expr .
>>          member
>> x = expr
>>     .
>>     member
>> x = .
>>     implicitMember
>> 
>> I propose to reject them because this could cause some unnecessary confusion.
>> (especially after SE-0071 <https://github.com/apple/swift-evolution/blob/master/proposals/0071-member-keywords.md>)
>> For instance:
>> 
>> _ = foo(.
>> func bar(x: Int) { ... }
>> 
>> The current compiler parses this as:
>> 
>> // call foo(_:_:)
>> _ = foo(.func // implicit-member-expression
>>         // missing ','
>>         // call bar(x:_:) with argument 'Int' and trailing closure
>>         bar(x: Int) { ... }
>> // missing closing ')'
>> 
>> Here's the summary of current behavior:
>> 
>> // accept
>> expr.member
>> 
>> // accept
>> expr .member
>> 
>> // accept
>> expr
>>   .member
>> 
>> // reject with fix-it to remove white spaces
>> expr.  member
>> 
>> // two distinct statements
>> expr. // reject as missing member name
>>   member
>> 
>> // accept
>> expr  .  member
>> 
>> // accept
>> expr .
>>   member
>> 
>> I propose to change the last 2 examples:
>> 
>> // reject with fix-it to remove white spaces
>> some  .  member
>> 
>> // two distinct statements 
>> some . // reject as missing member name
>>   member
>> 
>> I think, this is consistent behavior with '.' at postfix position.
>> 
>> Specifically:
>> If '.' is at prefix-operator or unspaced-binary-operator position, accept.
>> If the next token after '.' is at the same line, propose to fix-it.
>> Otherwise, reject it as missing member name.
>> This affect following expressions and types in the grammer:
>> 
>> expressions:
>>   self-method-expression
>>   self-initializer-expression 
>>   superclass-method-expression
>>   superclass-initializer-expression
>>   implicit-member-expression
>>   initializer-expression
>>   explicit-member-expression
>>   postfix-self-expression
>>   explicit-member-expression
>>   postfix-self-expression
>> types:
>>   type-identifier
>>   metatype-type
>> 
>> Of course this is a source breaking change, though.
>> Any thought?
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161101/8b302996/attachment.html>


More information about the swift-evolution mailing list