ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:110628] [Ruby master Feature#19107] Allow trailing comma in method signature
@ 2022-11-07  1:19 byroot (Jean Boussier)
  2022-12-01  7:46 ` [ruby-core:111113] " matz (Yukihiro Matsumoto)
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: byroot (Jean Boussier) @ 2022-11-07  1:19 UTC (permalink / raw)
  To: ruby-core

Issue #19107 has been reported by byroot (Jean Boussier).

----------------------------------------
Feature #19107: Allow trailing comma in method signature
https://bugs.ruby-lang.org/issues/19107

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
A popular style for multiline arrays, hashes or method calls, is to use trailing commas:

```ruby
array = [
  1,
  2,
  3,
]

hash = {
  foo: 1,
  bar: 2,
  baz: 3,
} 

Some.method(
  1,
  2,
  foo: 3,
)
```

The main reason to do this is to avoid unnecessary noise when adding one extra element:

```diff
diff --git a/foo.rb b/foo.rb
index b2689a7e4f..ddb7dc3552 100644
--- a/foo.rb
+++ b/foo.rb
@@ -1,4 +1,5 @@
 Foo.bar(
   foo: 1,
-  bar: 2
+  bar: 2,
+  baz: 3
 )
```

However, this pattern doesn't work with method declarations:

```ruby
def foo(bar:,) # syntax error, unexpected ')'
``` 

### Proposal

For consistency and convenience I propose to allow trailing commas in method declarations.



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [ruby-core:111113] [Ruby master Feature#19107] Allow trailing comma in method signature
  2022-11-07  1:19 [ruby-core:110628] [Ruby master Feature#19107] Allow trailing comma in method signature byroot (Jean Boussier)
@ 2022-12-01  7:46 ` matz (Yukihiro Matsumoto)
  2022-12-01  8:51 ` [ruby-core:111122] " byroot (Jean Boussier)
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: matz (Yukihiro Matsumoto) @ 2022-12-01  7:46 UTC (permalink / raw)
  To: ruby-core

Issue #19107 has been updated by matz (Yukihiro Matsumoto).


I don't care for consistency here (since formal arguments and actual arguments are different).
I am not sure for convenience. Compare to actual arguments, there's less chance to rewrite/update formal arguments.
Is there an actual case where this proposal is convenient?

Matz.


----------------------------------------
Feature #19107: Allow trailing comma in method signature
https://bugs.ruby-lang.org/issues/19107#change-100385

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
A popular style for multiline arrays, hashes or method calls, is to use trailing commas:

```ruby
array = [
  1,
  2,
  3,
]

hash = {
  foo: 1,
  bar: 2,
  baz: 3,
} 

Some.method(
  1,
  2,
  foo: 3,
)
```

The main reason to do this is to avoid unnecessary noise when adding one extra element:

```diff
diff --git a/foo.rb b/foo.rb
index b2689a7e4f..ddb7dc3552 100644
--- a/foo.rb
+++ b/foo.rb
@@ -1,4 +1,5 @@
 Foo.bar(
   foo: 1,
-  bar: 2
+  bar: 2,
+  baz: 3
 )
```

However, this pattern doesn't work with method declarations:

```ruby
def foo(bar:,) # syntax error, unexpected ')'
``` 

### Proposal

For consistency and convenience I propose to allow trailing commas in method declarations.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [ruby-core:111122] [Ruby master Feature#19107] Allow trailing comma in method signature
  2022-11-07  1:19 [ruby-core:110628] [Ruby master Feature#19107] Allow trailing comma in method signature byroot (Jean Boussier)
  2022-12-01  7:46 ` [ruby-core:111113] " matz (Yukihiro Matsumoto)
@ 2022-12-01  8:51 ` byroot (Jean Boussier)
  2023-02-13  6:20 ` [ruby-core:112393] " rubyFeedback (robert heiler) via ruby-core
  2023-02-13  6:43 ` [ruby-core:112394] " k0kubun (Takashi Kokubun) via ruby-core
  3 siblings, 0 replies; 5+ messages in thread
From: byroot (Jean Boussier) @ 2022-12-01  8:51 UTC (permalink / raw)
  To: ruby-core

Issue #19107 has been updated by byroot (Jean Boussier).


> Is there an actual case where this proposal is convenient?

Yes, when replacing old APIs that took an "option hash" by explicit keyword arguments, it tend to create very large signature.

The last example I have in mind is `redis-client`: https://github.com/redis-rb/redis-client/blob/dcfe43abb83597bee129537464e20805658bf7a9/lib/redis_client/config.rb#L21-L41

```ruby
      def initialize(
        username: nil,
        password: nil,
        db: nil,
        id: nil,
        timeout: DEFAULT_TIMEOUT,
        read_timeout: timeout,
        write_timeout: timeout,
        connect_timeout: timeout,
        ssl: nil,
        custom: {},
        ssl_params: nil,
        driver: nil,
        protocol: 3,
        client_implementation: RedisClient,
        command_builder: CommandBuilder,
        inherit_socket: false,
        reconnect_attempts: false,
        middlewares: false,
        circuit_breaker: nil
      )
```

When adding a new argument, it cause these annoying diffs:
```diff
diff --git a/lib/redis_client/config.rb b/lib/redis_client/config.rb
index fc74367..6412171 100644
--- a/lib/redis_client/config.rb
+++ b/lib/redis_client/config.rb
@@ -36,7 +36,8 @@ class RedisClient
         command_builder: CommandBuilder,
         inherit_socket: false,
         reconnect_attempts: false,
-        middlewares: false
+        middlewares: false,
+        circuit_breaker: nil
       )
         @username = username
         @password = password
```


Also this inconsistency is the reason why some popular styleguides reverted back to not using trailing comma for multi-line enumerations:

  - https://github.com/testdouble/standard/pull/453#issuecomment-1234208705
  - https://github.com/fables-tales/rubyfmt/issues/154


----------------------------------------
Feature #19107: Allow trailing comma in method signature
https://bugs.ruby-lang.org/issues/19107#change-100396

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
A popular style for multiline arrays, hashes or method calls, is to use trailing commas:

```ruby
array = [
  1,
  2,
  3,
]

hash = {
  foo: 1,
  bar: 2,
  baz: 3,
} 

Some.method(
  1,
  2,
  foo: 3,
)
```

The main reason to do this is to avoid unnecessary noise when adding one extra element:

```diff
diff --git a/foo.rb b/foo.rb
index b2689a7e4f..ddb7dc3552 100644
--- a/foo.rb
+++ b/foo.rb
@@ -1,4 +1,5 @@
 Foo.bar(
   foo: 1,
-  bar: 2
+  bar: 2,
+  baz: 3
 )
```

However, this pattern doesn't work with method declarations:

```ruby
def foo(bar:,) # syntax error, unexpected ')'
``` 

### Proposal

For consistency and convenience I propose to allow trailing commas in method declarations.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [ruby-core:112393] [Ruby master Feature#19107] Allow trailing comma in method signature
  2022-11-07  1:19 [ruby-core:110628] [Ruby master Feature#19107] Allow trailing comma in method signature byroot (Jean Boussier)
  2022-12-01  7:46 ` [ruby-core:111113] " matz (Yukihiro Matsumoto)
  2022-12-01  8:51 ` [ruby-core:111122] " byroot (Jean Boussier)
@ 2023-02-13  6:20 ` rubyFeedback (robert heiler) via ruby-core
  2023-02-13  6:43 ` [ruby-core:112394] " k0kubun (Takashi Kokubun) via ruby-core
  3 siblings, 0 replies; 5+ messages in thread
From: rubyFeedback (robert heiler) via ruby-core @ 2023-02-13  6:20 UTC (permalink / raw)
  To: ruby-core; +Cc: rubyFeedback (robert heiler)

Issue #19107 has been updated by rubyFeedback (robert heiler).


To me the ',' there looks rather awkward. Then again the
first time I saw def(foo:) I was also confused.

----------------------------------------
Feature #19107: Allow trailing comma in method signature
https://bugs.ruby-lang.org/issues/19107#change-101835

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
A popular style for multiline arrays, hashes or method calls, is to use trailing commas:

```ruby
array = [
  1,
  2,
  3,
]

hash = {
  foo: 1,
  bar: 2,
  baz: 3,
} 

Some.method(
  1,
  2,
  foo: 3,
)
```

The main reason to do this is to avoid unnecessary noise when adding one extra element:

```diff
diff --git a/foo.rb b/foo.rb
index b2689a7e4f..ddb7dc3552 100644
--- a/foo.rb
+++ b/foo.rb
@@ -1,4 +1,5 @@
 Foo.bar(
   foo: 1,
-  bar: 2
+  bar: 2,
+  baz: 3
 )
```

However, this pattern doesn't work with method declarations:

```ruby
def foo(bar:,) # syntax error, unexpected ')'
``` 

### Proposal

For consistency and convenience I propose to allow trailing commas in method declarations.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [ruby-core:112394] [Ruby master Feature#19107] Allow trailing comma in method signature
  2022-11-07  1:19 [ruby-core:110628] [Ruby master Feature#19107] Allow trailing comma in method signature byroot (Jean Boussier)
                   ` (2 preceding siblings ...)
  2023-02-13  6:20 ` [ruby-core:112393] " rubyFeedback (robert heiler) via ruby-core
@ 2023-02-13  6:43 ` k0kubun (Takashi Kokubun) via ruby-core
  3 siblings, 0 replies; 5+ messages in thread
From: k0kubun (Takashi Kokubun) via ruby-core @ 2023-02-13  6:43 UTC (permalink / raw)
  To: ruby-core; +Cc: k0kubun (Takashi Kokubun)

Issue #19107 has been updated by k0kubun (Takashi Kokubun).


I second this proposal.

`def foo(bar:,)` doesn't seem like a real use-case, but when a method has so many arguments and I declare arguments in multiple lines, I would love to put a trailing comma to minimize future git diff and make reviewing the Ruby code easier.

For example, this is today's `ERB#initialize`:

```rb
def initialize(str, safe_level=NOT_GIVEN, legacy_trim_mode=NOT_GIVEN, legacy_eoutvar=NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout')
  # ...
end
```

This line is still short enough to fit on my screen, however, if we were to add another option, e.g. `filename`, I would write:

```rb
def initialize(
  str,
  safe_level=NOT_GIVEN,
  legacy_trim_mode=NOT_GIVEN,
  legacy_eoutvar=NOT_GIVEN,
  trim_mode: nil,
  eoutvar: '_erbout',
  filename: nil,
)
  # ...
end
```

which doesn't seem awkward to me. But this is a SyntaxError today. If you don't put a `,` there, you'll see a diff on `filename` when you add another option after that even if the patch is not related to `filename`, which would make me frustrated when reviewing that code.

----------------------------------------
Feature #19107: Allow trailing comma in method signature
https://bugs.ruby-lang.org/issues/19107#change-101836

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
A popular style for multiline arrays, hashes or method calls, is to use trailing commas:

```ruby
array = [
  1,
  2,
  3,
]

hash = {
  foo: 1,
  bar: 2,
  baz: 3,
} 

Some.method(
  1,
  2,
  foo: 3,
)
```

The main reason to do this is to avoid unnecessary noise when adding one extra element:

```diff
diff --git a/foo.rb b/foo.rb
index b2689a7e4f..ddb7dc3552 100644
--- a/foo.rb
+++ b/foo.rb
@@ -1,4 +1,5 @@
 Foo.bar(
   foo: 1,
-  bar: 2
+  bar: 2,
+  baz: 3
 )
```

However, this pattern doesn't work with method declarations:

```ruby
def foo(bar:,) # syntax error, unexpected ')'
``` 

### Proposal

For consistency and convenience I propose to allow trailing commas in method declarations.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-02-13  6:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-07  1:19 [ruby-core:110628] [Ruby master Feature#19107] Allow trailing comma in method signature byroot (Jean Boussier)
2022-12-01  7:46 ` [ruby-core:111113] " matz (Yukihiro Matsumoto)
2022-12-01  8:51 ` [ruby-core:111122] " byroot (Jean Boussier)
2023-02-13  6:20 ` [ruby-core:112393] " rubyFeedback (robert heiler) via ruby-core
2023-02-13  6:43 ` [ruby-core:112394] " k0kubun (Takashi Kokubun) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).