Class: Unparser::Emitter
- Inherits:
-
Object
- Object
- Unparser::Emitter
- Extended by:
- DSL
- Includes:
- AbstractType, Adamantium::Flat, Constants, NodeHelpers
- Defined in:
- lib/unparser/emitter.rb,
lib/unparser/emitter/if.rb,
lib/unparser/emitter/def.rb,
lib/unparser/emitter/for.rb,
lib/unparser/emitter/case.rb,
lib/unparser/emitter/redo.rb,
lib/unparser/emitter/root.rb,
lib/unparser/emitter/send.rb,
lib/unparser/emitter/alias.rb,
lib/unparser/emitter/begin.rb,
lib/unparser/emitter/block.rb,
lib/unparser/emitter/cbase.rb,
lib/unparser/emitter/class.rb,
lib/unparser/emitter/empty.rb,
lib/unparser/emitter/match.rb,
lib/unparser/emitter/retry.rb,
lib/unparser/emitter/splat.rb,
lib/unparser/emitter/super.rb,
lib/unparser/emitter/undef.rb,
lib/unparser/emitter/yield.rb,
lib/unparser/emitter/binary.rb,
lib/unparser/emitter/ensure.rb,
lib/unparser/emitter/module.rb,
lib/unparser/emitter/rescue.rb,
lib/unparser/emitter/defined.rb,
lib/unparser/emitter/hookexe.rb,
lib/unparser/emitter/literal.rb,
lib/unparser/emitter/resbody.rb,
lib/unparser/emitter/argument.rb,
lib/unparser/emitter/flipflop.rb,
lib/unparser/emitter/variable.rb,
lib/unparser/emitter/op_assign.rb,
lib/unparser/emitter/assignment.rb,
lib/unparser/emitter/repetition.rb,
lib/unparser/emitter/send/index.rb,
lib/unparser/emitter/send/unary.rb,
lib/unparser/emitter/send/binary.rb,
lib/unparser/emitter/literal/hash.rb,
lib/unparser/emitter/send/regular.rb,
lib/unparser/emitter/flow_modifier.rb,
lib/unparser/emitter/literal/array.rb,
lib/unparser/emitter/literal/range.rb,
lib/unparser/emitter/literal/regexp.rb,
lib/unparser/emitter/send/arguments.rb,
lib/unparser/emitter/literal/dynamic.rb,
lib/unparser/emitter/literal/primitive.rb,
lib/unparser/emitter/literal/singleton.rb,
lib/unparser/emitter/literal/dynamic_body.rb,
lib/unparser/emitter/literal/execute_string.rb,
lib/unparser/emitter/send/attribute_assignment.rb
Overview
Emitter base class
Direct Known Subclasses
Alias, ArgExpr, Argument, Arguments, Assignment, Assignment::MLHS, Begin, Binary, BinaryAssign, Block, BlockPass, Blockarg, CBase, Case, Class, Const, Def, Defined, Empty, Ensure, FlipFlop, FlowModifier, For, Hookexe, If, KeywordOptional, KeywordRest, KwSplat, Kwarg, Literal, Match, Module, NthRef, OpAssign, Optarg, Post, Redo, Repetition, Resbody, Rescue, Restarg, Retry, Root, SClass, Send, Send::Arguments, Splat, Super, Undef, Variable, When, Yield, ZSuper
Defined Under Namespace
Modules: LocalVariableRoot Classes: Alias, ArgExpr, Argument, Arguments, Assignment, Begin, Binary, BinaryAssign, Block, BlockPass, Blockarg, CBase, Case, Class, Const, Def, Defined, Empty, Ensure, FlipFlop, FlowModifier, For, Hookexe, If, KeywordOptional, KeywordRest, KwSplat, Kwarg, Literal, Match, Module, NthRef, OpAssign, Optarg, Post, Redo, Repetition, Resbody, Rescue, Restarg, Retry, Root, SClass, Send, Splat, Super, Undef, Variable, When, Yield, ZSuper
Constant Summary collapse
- REGISTRY =
Registry for node emitters
{}
- NOINDENT =
[:rescue, :ensure].to_set.freeze
- DEFAULT_DELIMITER =
', '.freeze
- CURLY_BRACKETS =
IceNine.deep_freeze(%w({ }))
Constants included from Constants
Constants::BINARY_OPERATORS, Constants::COMMENT, Constants::DBL_QUOTE, Constants::KEYWORDS, Constants::K_ALIAS, Constants::K_AND, Constants::K_BEGIN, Constants::K_BREAK, Constants::K_CASE, Constants::K_CLASS, Constants::K_DEF, Constants::K_DEFINE, Constants::K_DEFINED, Constants::K_DO, Constants::K_EEND, Constants::K_ELSE, Constants::K_ELSIF, Constants::K_ENCODING, Constants::K_END, Constants::K_ENSURE, Constants::K_FALSE, Constants::K_FILE, Constants::K_FOR, Constants::K_IF, Constants::K_IN, Constants::K_MODULE, Constants::K_NEXT, Constants::K_NIL, Constants::K_NOT, Constants::K_OR, Constants::K_POSTEXE, Constants::K_PREEXE, Constants::K_REDO, Constants::K_RESCUE, Constants::K_RETRY, Constants::K_RETURN, Constants::K_SELF, Constants::K_SUPER, Constants::K_THEN, Constants::K_TRUE, Constants::K_UNDEF, Constants::K_UNLESS, Constants::K_UNTIL, Constants::K_WHEN, Constants::K_WHILE, Constants::K_YIELD, Constants::M_PC, Constants::M_PO, Constants::NL, Constants::SNGL_QUOTE, Constants::TERMINATED, Constants::T_AMP, Constants::T_AND, Constants::T_ASN, Constants::T_ASR, Constants::T_COLON, Constants::T_DCL, Constants::T_DLT, Constants::T_DOT, Constants::T_DSPLAT, Constants::T_LT, Constants::T_NEG, Constants::T_OR, Constants::T_PIPE, Constants::T_SPLAT, Constants::UNARY_OPERATORS, Constants::WS
Class Method Summary collapse
-
.emit(*arguments) ⇒ self
private
Emit node.
-
.emitter(node, parent) ⇒ Emitter
private
Return emitter.
Instance Method Summary collapse
-
#dispatch ⇒ undefined
private
Dispatch node.
-
#local_variable_scope ⇒ Parser::AST::Node
private
Return local variable root.
-
#local_variables ⇒ Array<Symbol>
private
Return assigned lvars.
-
#node_type ⇒ Symbol
private
Return node type.
-
#terminated? ⇒ Boolean
private
Test if node is emitted as terminated expression.
-
#write_to_buffer ⇒ self
private
Trigger write to buffer.
Methods included from NodeHelpers
Class Method Details
.emit(*arguments) ⇒ self
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Emit node
104 105 106 |
# File 'lib/unparser/emitter.rb', line 104 def self.emit(*arguments) new(*arguments).write_to_buffer end |
.emitter(node, parent) ⇒ Emitter
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return emitter
114 115 116 117 118 119 120 |
# File 'lib/unparser/emitter.rb', line 114 def self.emitter(node, parent) type = node.type klass = REGISTRY.fetch(type) do raise ArgumentError, "No emitter for node: #{type.inspect}" end klass.new(node, parent) end |
Instance Method Details
#dispatch ⇒ undefined
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Dispatch node
128 |
# File 'lib/unparser/emitter.rb', line 128 abstract_method :dispatch |
#local_variable_scope ⇒ Parser::AST::Node
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return local variable root
46 47 48 |
# File 'lib/unparser/emitter.rb', line 46 def local_variable_scope parent.local_variable_scope end |
#local_variables ⇒ Array<Symbol>
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return assigned lvars
56 |
# File 'lib/unparser/emitter.rb', line 56 abstract_method :local_variables |
#node_type ⇒ Symbol
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return node type
64 65 66 |
# File 'lib/unparser/emitter.rb', line 64 def node_type node.type end |
#terminated? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Test if node is emitted as terminated expression
136 137 138 |
# File 'lib/unparser/emitter.rb', line 136 def terminated? TERMINATED.include?(node.type) end |
#write_to_buffer ⇒ self
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Trigger write to buffer
89 90 91 92 93 94 95 |
# File 'lib/unparser/emitter.rb', line 89 def write_to_buffer emit_comments_before if buffer.fresh_line? dispatch comments.consume(node) emit_eof_comments if parent.is_a?(Root) self end |