Skip to content

Commit baf29ae

Browse files
committed
Add qldoc comment and isOptional predicate to KeywordParameter
1 parent c0dd891 commit baf29ae

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

ql/src/codeql_ruby/ast/Parameter.qll

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,15 @@ class HashSplatParameter extends @hash_splat_parameter, NamedParameter {
108108
}
109109

110110
/**
111-
* TODO
111+
* A keyword parameter, including a default value if the parameter is optional.
112+
* For example, in the following example, `foo` is a keyword parameter with a
113+
* default value of `0`, and `bar` is a mandatory keyword parameter with no
114+
* default value mandatory parameter).
115+
* ```rb
116+
* def f(foo: 0, bar:)
117+
* foo * 10 + bar
118+
* end
119+
* ```
112120
*/
113121
class KeywordParameter extends @keyword_parameter, NamedParameter {
114122
override Generated::KeywordParameter generated;
@@ -127,6 +135,12 @@ class KeywordParameter extends @keyword_parameter, NamedParameter {
127135
*/
128136
AstNode getDefaultValue() { result = generated.getValue() }
129137

138+
/**
139+
* Holds if the parameter is optional. That is, there is a default value that
140+
* is used when the caller omits this parameter.
141+
*/
142+
predicate isOptional() { exists(this.getDefaultValue()) }
143+
130144
override string toString() { result = this.getName() }
131145
}
132146

ql/test/library-tests/ast/params/params.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ query predicate hashSplatParams(HashSplatParameter hsp, string name) { name = hs
1616

1717
query predicate keywordParams(KeywordParameter kp, string name, string defaultValueStr) {
1818
name = kp.getName() and
19-
if exists(kp.getDefaultValue())
19+
if kp.isOptional()
2020
then defaultValueStr = kp.getDefaultValue().toString()
2121
else defaultValueStr = "(none)"
2222
}

0 commit comments

Comments
 (0)