Swift 2.2 review request: SE-0022 #selector implementation


(Douglas Gregor) #1

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

   - Doug


(Jordan Rose) #2

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.

Jordan

···

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58


(Douglas Gregor) #3

The code completion we have is just filling in the “selector(@objc method)” after “#” in expression contexts, which is very weak. There are two things we want:

  * Better code completion in general for compound names, e.g., after “UIView.”, we probably want to see (or have some easy way to get to) the compound name “insertSubview(_:aboveSubview:)”. That’s really SE-0021 not having good code completion.
  * Within #selector(…), we want to see compound names as the primary completions after a type name, and limit to @objc methods.

  - Doug

···

On Jan 28, 2016, at 3:48 PM, Jordan Rose <jordan_rose@apple.com> wrote:

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.


(Thomas Krajacic) #4

Hi,

I am seeing a problem with the new #selector syntax (latest development snapshot 2016-05-02):

It is not possible to put selectors in an array anymore it seems (example for checking an action against a list of selectors):

[#selector(MainWindowController.save(_:)), #selector(MainWindowController.discardChanges(_:))].contains(anItem.action())

and Xcode reports:

...MainWindowController.swift:132:53: Expected '#]' at end of object literal expression
...MainWindowController.swift:132:53: Expected 'let' or 'var' in conditional; use '&&' to join boolean conditions
...MainWindowController.swift:132:133: Braced block of statements is an unused closure
...MainWindowController.swift:132:133: Expression resolves to an unused function

The old syntax works fine:

[Selector("save:"), Selector("discardChanges:")].contains(anItem.action())

Was this change expected?

Thanks for looking into it,
Thomas

···

On 29 Jan 2016, at 01:17, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

On Jan 28, 2016, at 3:48 PM, Jordan Rose <jordan_rose@apple.com <mailto:jordan_rose@apple.com>> wrote:

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.

The code completion we have is just filling in the “selector(@objc method)” after “#” in expression contexts, which is very weak. There are two things we want:

  * Better code completion in general for compound names, e.g., after “UIView.”, we probably want to see (or have some easy way to get to) the compound name “insertSubview(_:aboveSubview:)”. That’s really SE-0021 not having good code completion.
  * Within #selector(…), we want to see compound names as the primary completions after a type name, and limit to @objc methods.

  - Doug

_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev


(Douglas Gregor) #5

Hi,

I am seeing a problem with the new #selector syntax (latest development snapshot 2016-05-02):

It is not possible to put selectors in an array anymore it seems (example for checking an action against a list of selectors):

[#selector(MainWindowController.save(_:)), #selector(MainWindowController.discardChanges(_:))].contains(anItem.action())

and Xcode reports:

...MainWindowController.swift:132:53: Expected '#]' at end of object literal expression
...MainWindowController.swift:132:53: Expected 'let' or 'var' in conditional; use '&&' to join boolean conditions
...MainWindowController.swift:132:133: Braced block of statements is an unused closure
...MainWindowController.swift:132:133: Expression resolves to an unused function

The old syntax works fine:

[Selector("save:"), Selector("discardChanges:")].contains(anItem.action())

Was this change expected?

It's a grammatical ambiguity we had overlooked. Add a space between the [ and # for now, and we'll see what we can do.

  - Doug

···

Sent from my iPhone

On Feb 5, 2016, at 12:22 AM, Thomas Krajacic <thomas.krajacic@gmail.com> wrote:

Thanks for looking into it,
Thomas

On 29 Jan 2016, at 01:17, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

On Jan 28, 2016, at 3:48 PM, Jordan Rose <jordan_rose@apple.com> wrote:

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.

The code completion we have is just filling in the “selector(@objc method)” after “#” in expression contexts, which is very weak. There are two things we want:

  * Better code completion in general for compound names, e.g., after “UIView.”, we probably want to see (or have some easy way to get to) the compound name “insertSubview(_:aboveSubview:)”. That’s really SE-0021 not having good code completion.
  * Within #selector(…), we want to see compound names as the primary completions after a type name, and limit to @objc methods.

  - Doug

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev


(Douglas Gregor) #6

Sent from my iPhone

Hi,

I am seeing a problem with the new #selector syntax (latest development snapshot 2016-05-02):

It is not possible to put selectors in an array anymore it seems (example for checking an action against a list of selectors):

[#selector(MainWindowController.save(_:)), #selector(MainWindowController.discardChanges(_:))].contains(anItem.action())

and Xcode reports:

...MainWindowController.swift:132:53: Expected '#]' at end of object literal expression
...MainWindowController.swift:132:53: Expected 'let' or 'var' in conditional; use '&&' to join boolean conditions
...MainWindowController.swift:132:133: Braced block of statements is an unused closure
...MainWindowController.swift:132:133: Expression resolves to an unused function

The old syntax works fine:

[Selector("save:"), Selector("discardChanges:")].contains(anItem.action())

Was this change expected?

It's a grammatical ambiguity we had overlooked. Add a space between the [ and # for now, and we'll see what we can do.

Fixed in https://github.com/apple/swift/commit/ab31f088486ff9aa221508c0cad2044904a19fb1

Thank you!

  - Doug

···

On Feb 5, 2016, at 6:59 AM, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:
On Feb 5, 2016, at 12:22 AM, Thomas Krajacic <thomas.krajacic@gmail.com <mailto:thomas.krajacic@gmail.com>> wrote:

  - Doug

Thanks for looking into it,
Thomas

On 29 Jan 2016, at 01:17, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

On Jan 28, 2016, at 3:48 PM, Jordan Rose <jordan_rose@apple.com <mailto:jordan_rose@apple.com>> wrote:

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.

The code completion we have is just filling in the “selector(@objc method)” after “#” in expression contexts, which is very weak. There are two things we want:

  * Better code completion in general for compound names, e.g., after “UIView.”, we probably want to see (or have some easy way to get to) the compound name “insertSubview(_:aboveSubview:)”. That’s really SE-0021 not having good code completion.
  * Within #selector(…), we want to see compound names as the primary completions after a type name, and limit to @objc methods.

  - Doug

_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev


(Ted Kremenek) #7

Sent from my iPhone

Hi,

I am seeing a problem with the new #selector syntax (latest development snapshot 2016-05-02):

It is not possible to put selectors in an array anymore it seems (example for checking an action against a list of selectors):

[#selector(MainWindowController.save(_:)), #selector(MainWindowController.discardChanges(_:))].contains(anItem.action())

and Xcode reports:

...MainWindowController.swift:132:53: Expected '#]' at end of object literal expression
...MainWindowController.swift:132:53: Expected 'let' or 'var' in conditional; use '&&' to join boolean conditions
...MainWindowController.swift:132:133: Braced block of statements is an unused closure
...MainWindowController.swift:132:133: Expression resolves to an unused function

The old syntax works fine:

[Selector("save:"), Selector("discardChanges:")].contains(anItem.action())

Was this change expected?

It's a grammatical ambiguity we had overlooked. Add a space between the [ and # for now, and we'll see what we can do.

Fixed in https://github.com/apple/swift/commit/ab31f088486ff9aa221508c0cad2044904a19fb1

Thank you!

  - Doug

Cherry-picked to swift-2.2-branch.

···

On Feb 5, 2016, at 5:15 PM, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

On Feb 5, 2016, at 6:59 AM, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

On Feb 5, 2016, at 12:22 AM, Thomas Krajacic <thomas.krajacic@gmail.com> wrote:

  - Doug

Thanks for looking into it,
Thomas

On 29 Jan 2016, at 01:17, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

On Jan 28, 2016, at 3:48 PM, Jordan Rose <jordan_rose@apple.com> wrote:

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.

The code completion we have is just filling in the “selector(@objc method)” after “#” in expression contexts, which is very weak. There are two things we want:

  * Better code completion in general for compound names, e.g., after “UIView.”, we probably want to see (or have some easy way to get to) the compound name “insertSubview(_:aboveSubview:)”. That’s really SE-0021 not having good code completion.
  * Within #selector(…), we want to see compound names as the primary completions after a type name, and limit to @objc methods.

  - Doug

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev


(Ted Kremenek) #8

Sent from my iPhone

Hi,

I am seeing a problem with the new #selector syntax (latest development snapshot 2016-05-02):

It is not possible to put selectors in an array anymore it seems (example for checking an action against a list of selectors):

[#selector(MainWindowController.save(_:)), #selector(MainWindowController.discardChanges(_:))].contains(anItem.action())

and Xcode reports:

...MainWindowController.swift:132:53: Expected '#]' at end of object literal expression
...MainWindowController.swift:132:53: Expected 'let' or 'var' in conditional; use '&&' to join boolean conditions
...MainWindowController.swift:132:133: Braced block of statements is an unused closure
...MainWindowController.swift:132:133: Expression resolves to an unused function

The old syntax works fine:

[Selector("save:"), Selector("discardChanges:")].contains(anItem.action())

Was this change expected?

It's a grammatical ambiguity we had overlooked. Add a space between the [ and # for now, and we'll see what we can do.

Fixed in https://github.com/apple/swift/commit/ab31f088486ff9aa221508c0cad2044904a19fb1

Thank you!

  - Doug

Cherry-picked to swift-2.2-branch.

This caused CI to fail because I pulled this in before pulling in the changes for #column, #line, etc. Reverted, and now tracked with a pull request:

https://github.com/apple/swift/pull/1219

···

On Feb 5, 2016, at 5:46 PM, Ted kremenek via swift-dev <swift-dev@swift.org> wrote:
On Feb 5, 2016, at 5:15 PM, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

On Feb 5, 2016, at 6:59 AM, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
On Feb 5, 2016, at 12:22 AM, Thomas Krajacic <thomas.krajacic@gmail.com <mailto:thomas.krajacic@gmail.com>> wrote:

  - Doug

Thanks for looking into it,
Thomas

On 29 Jan 2016, at 01:17, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

On Jan 28, 2016, at 3:48 PM, Jordan Rose <jordan_rose@apple.com <mailto:jordan_rose@apple.com>> wrote:

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.

The code completion we have is just filling in the “selector(@objc method)” after “#” in expression contexts, which is very weak. There are two things we want:

  * Better code completion in general for compound names, e.g., after “UIView.”, we probably want to see (or have some easy way to get to) the compound name “insertSubview(_:aboveSubview:)”. That’s really SE-0021 not having good code completion.
  * Within #selector(…), we want to see compound names as the primary completions after a type name, and limit to @objc methods.

  - Doug

_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev


(Douglas Gregor) #9

Thanks for pulling this in

···

Sent from my iPhone

On Feb 5, 2016, at 6:11 PM, Ted Kremenek <kremenek@apple.com> wrote:

On Feb 5, 2016, at 5:46 PM, Ted kremenek via swift-dev <swift-dev@swift.org> wrote:

On Feb 5, 2016, at 5:15 PM, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

On Feb 5, 2016, at 6:59 AM, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

Sent from my iPhone

On Feb 5, 2016, at 12:22 AM, Thomas Krajacic <thomas.krajacic@gmail.com> wrote:

Hi,

I am seeing a problem with the new #selector syntax (latest development snapshot 2016-05-02):

It is not possible to put selectors in an array anymore it seems (example for checking an action against a list of selectors):

[#selector(MainWindowController.save(_:)), #selector(MainWindowController.discardChanges(_:))].contains(anItem.action())

and Xcode reports:

...MainWindowController.swift:132:53: Expected '#]' at end of object literal expression
...MainWindowController.swift:132:53: Expected 'let' or 'var' in conditional; use '&&' to join boolean conditions
...MainWindowController.swift:132:133: Braced block of statements is an unused closure
...MainWindowController.swift:132:133: Expression resolves to an unused function

The old syntax works fine:

[Selector("save:"), Selector("discardChanges:")].contains(anItem.action())

Was this change expected?

It's a grammatical ambiguity we had overlooked. Add a space between the [ and # for now, and we'll see what we can do.

Fixed in https://github.com/apple/swift/commit/ab31f088486ff9aa221508c0cad2044904a19fb1

Thank you!

  - Doug

Cherry-picked to swift-2.2-branch.

This caused CI to fail because I pulled this in before pulling in the changes for #column, #line, etc. Reverted, and now tracked with a pull request:

https://github.com/apple/swift/pull/1219

  - Doug

Thanks for looking into it,
Thomas

On 29 Jan 2016, at 01:17, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

On Jan 28, 2016, at 3:48 PM, Jordan Rose <jordan_rose@apple.com> wrote:

On Jan 28, 2016, at 12:12, Douglas Gregor via swift-dev <swift-dev@swift.org> wrote:

Hi all,

I’ve finished the implementation of SE-0022, the #selector expression. Part of that proposal is the deprecation of the use of string literals to form Selectors, which is something we would like to do in Swift 2.2 (so that we can remove it outright in Swift 3).

However, it’s a non-trivial set of changes, and I’d like review of the corresponding commits before pulling it into the branch. The commits are:

  https://github.com/apple/swift/commit/dccf3155f1fe5400df0c9b51f21a3b8f7fa09b9c (Jordan reviewed this)
  https://github.com/apple/swift/commit/7c0e087cd514c926d9eaa3082679edff626effc8
  https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae
  https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88
  https://github.com/apple/swift/commit/00313a1e7ec4934a1df12541b9a8f2683f28ed67
  https://github.com/apple/swift/commit/1a830fa541705594bd4b3936de24a20b5b943059 (Jordan reviewed this)
  https://github.com/apple/swift/commit/2a42664129d7e95d182a91858fb268e50373b68b
  https://github.com/apple/swift/commit/37441e1b46cd97d42161455dd712d17ce2ccfe87
  https://github.com/apple/swift/commit/0a359424d7d5bd31c9e7a2f98c15cd9a1fa40328
  https://github.com/apple/swift/commit/9a0241bb3bcdde3531d0ba683e8d6668c50c9f58

I reviewed all of these except

https://github.com/apple/swift/commit/89834f8d5fcce652401ecaeec4addace48cb2fae (IRGen)
https://github.com/apple/swift/commit/f7407f6a4d2c9b20ef1d2aab6dbaff5f9419aa88 (SILGen)

I will say I'm not happy that we don't have any real code completion or IDE support. That seems important for putting it into a release.

The code completion we have is just filling in the “selector(@objc method)” after “#” in expression contexts, which is very weak. There are two things we want:

  * Better code completion in general for compound names, e.g., after “UIView.”, we probably want to see (or have some easy way to get to) the compound name “insertSubview(_:aboveSubview:)”. That’s really SE-0021 not having good code completion.
  * Within #selector(…), we want to see compound names as the primary completions after a type name, and limit to @objc methods.

  - Doug

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev