|
26 | 26 | ***** END LICENSE BLOCK *****/
|
27 | 27 | package org.truffleruby.parser;
|
28 | 28 |
|
| 29 | +/** Reflects semantic of different method/proc declared parameters types. |
| 30 | + * |
| 31 | + * Symbolic names match type names returned by the {Method, Proc}#parameters methods. */ |
29 | 32 | public enum ArgumentType {
|
30 | 33 |
|
| 34 | + /** optional keyword argument */ |
31 | 35 | key("key", false),
|
| 36 | + /** required keyword argument */ |
32 | 37 | keyreq("keyreq", false),
|
| 38 | + /** keyword rest parameter */ |
33 | 39 | keyrest("keyrest", false),
|
| 40 | + /** block parameter */ |
34 | 41 | block("block", false),
|
| 42 | + /** optional positional parameter */ |
35 | 43 | opt("opt", false),
|
| 44 | + /** rest parameter */ |
36 | 45 | rest("rest", false),
|
| 46 | + /** required positional parameter */ |
37 | 47 | req("req", false),
|
| 48 | + |
| 49 | + /* Parameters declared in a method/proc explicitly without name, e.g. anonymous *, ** , and &. Required parameter |
| 50 | + * can be anonymous only in case of parameters nesting (e.g. `def foo(a, (b, c)) end`) */ |
38 | 51 | anonreq("req", true),
|
39 | 52 | anonrest("rest", true),
|
40 | 53 | anonkeyrest("keyrest", true),
|
| 54 | + |
| 55 | + /* Parameters in a method that doesn't provide parameter names, e.g. implemented using #method_missing or a core |
| 56 | + * method implemented in Java. |
| 57 | + * |
| 58 | + * A tiny difference between unnamed and anonymous parameters is that anonymous are reported by the #parameters |
| 59 | + * method with names (*, ** or &). But unnamed are reported without names. */ |
41 | 60 | unnamedreq("req", true),
|
42 | 61 | unnamedopt("opt", true),
|
43 | 62 | unnamedrest("rest", true),
|
44 | 63 | unnamedkeyrest("keyrest", true),
|
45 | 64 |
|
| 65 | + /** no-keyword-arguments parameter (**nil) */ |
46 | 66 | nokey("nokey", true);
|
47 | 67 |
|
48 | 68 | ArgumentType(String symbolicName, boolean anonymous) {
|
|
0 commit comments