Open

Description
When a Python lambda does not have an parameter list, the current TSG fails.
Example
The rules currently fail for the following CST.
(lambda [207, 32] - [207, 69]
body: (call [207, 40] - [207, 69]
function: (attribute [207, 40] - [207, 53]
object: (identifier [207, 40] - [207, 48])
attribute: (identifier [207, 49] - [207, 53]))
arguments: (argument_list [207, 53] - [207, 69]
(list_splat [207, 54] - [207, 68]
(attribute [207, 55] - [207, 68]
object: (identifier [207, 55] - [207, 63])
attribute: (identifier [207, 64] - [207, 68]))))))))))))))
Suggested change
[
(function_definition
-- parameters: (_) @params
++ parameters: (_)? @params
body: (_) @body
) @func
(lambda
-- parameters: (_) @params
++ parameters: (_)? @params
body: (_) @body
)@func
] {
node @func.call
node return_value
node drop_scope
edge @func.call -> return_value
++ if some @params {
edge @body.before_scope -> @params.after_scope
++ }
edge @body.before_scope -> drop_scope
edge drop_scope -> @func.bottom
attr (drop_scope) type = "drop_scopes"
attr (@func.call) pop_scoped_symbol = "()"
++ if some @params {
edge @params.before_scope -> JUMP_TO_SCOPE_NODE
++ }
attr (return_value) is_exported
let @func.function_returns = return_value
}
Metadata
Metadata
Assignees
Labels
No labels