Class: SyntaxTree::Lambda
- Inherits:
-
Node
- Object
- Node
- SyntaxTree::Lambda
show all
- Defined in:
- lib/syntax_tree/node.rb
Overview
Lambda represents using a lambda literal (not the lambda method call).
->(value) { value * 2 }
Instance Attribute Summary collapse
-
#comments ⇒ Object
readonly
- Array[ Comment | EmbDoc ]
-
the comments attached to this node.
-
#params ⇒ Object
readonly
- LambdaVar | Paren
-
the parameter declaration for this lambda.
-
#statements ⇒ Object
readonly
- BodyStmt | Statements
-
the expressions to be executed in this lambda.
Attributes inherited from Node
#location
Instance Method Summary
collapse
Methods inherited from Node
#construct_keys, #pretty_print, #to_json
Constructor Details
#initialize(params:, statements:, location:) ⇒ Lambda
7034
7035
7036
7037
7038
7039
|
# File 'lib/syntax_tree/node.rb', line 7034
def initialize(params:, statements:, location:)
@params = params
@statements = statements
@location = location
= []
end
|
Instance Attribute Details
- Array[ Comment | EmbDoc ]
-
the comments attached to this node
7032
7033
7034
|
# File 'lib/syntax_tree/node.rb', line 7032
def
end
|
#params ⇒ Object
- LambdaVar | Paren
-
the parameter declaration for this lambda
7026
7027
7028
|
# File 'lib/syntax_tree/node.rb', line 7026
def params
@params
end
|
#statements ⇒ Object
- BodyStmt | Statements
-
the expressions to be executed in this lambda
7029
7030
7031
|
# File 'lib/syntax_tree/node.rb', line 7029
def statements
@statements
end
|
Instance Method Details
#===(other) ⇒ Object
7135
7136
7137
7138
|
# File 'lib/syntax_tree/node.rb', line 7135
def ===(other)
other.is_a?(Lambda) && params === other.params &&
statements === other.statements
end
|
#accept(visitor) ⇒ Object
7041
7042
7043
|
# File 'lib/syntax_tree/node.rb', line 7041
def accept(visitor)
visitor.visit_lambda(self)
end
|
#child_nodes ⇒ Object
Also known as:
deconstruct
7045
7046
7047
|
# File 'lib/syntax_tree/node.rb', line 7045
def child_nodes
[params, statements]
end
|
#copy(params: nil, statements: nil, location: nil) ⇒ Object
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
|
# File 'lib/syntax_tree/node.rb', line 7049
def copy(params: nil, statements: nil, location: nil)
node =
Lambda.new(
params: params || self.params,
statements: statements || self.statements,
location: location || self.location
)
node..concat(.map(&:copy))
node
end
|
#deconstruct_keys(_keys) ⇒ Object
7063
7064
7065
7066
7067
7068
7069
7070
|
# File 'lib/syntax_tree/node.rb', line 7063
def deconstruct_keys(_keys)
{
params: params,
statements: statements,
location: location,
comments:
}
end
|
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
|
# File 'lib/syntax_tree/node.rb', line 7072
def format(q)
q.text("->")
q.group do
if params.is_a?(Paren)
q.format(params) unless params.contents.empty?
elsif params.empty? && params..any?
q.format(params)
elsif !params.empty?
q.group do
q.text("(")
q.format(params)
q.text(")")
end
end
q.text(" ")
q
.if_break do
force_parens =
q.parents.any? do |node|
node.is_a?(Command) || node.is_a?(CommandCall)
end
if force_parens
q.text("{")
unless statements.empty?
q.indent do
q.breakable_space
q.format(statements)
end
q.breakable_space
end
q.text("}")
else
q.text("do")
unless statements.empty?
q.indent do
q.breakable_space
q.format(statements)
end
end
q.breakable_space
q.text("end")
end
end
.if_flat do
q.text("{")
unless statements.empty?
q.text(" ")
q.format(statements)
q.text(" ")
end
q.text("}")
end
end
end
|