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, CBase, Case, Class, Const, Def, Defined, Empty, Ensure, FlipFlop, FlowModifier, For, Hookexe, If, KeywordOptional, KwSplat, Kwarg, Literal, Match, Module, Morearg, 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, Terminated, Unterminated Classes: Alias, ArgExpr, Argument, Arguments, Assignment, Begin, Binary, BinaryAssign, Block, BlockPass, CBase, Case, Class, Const, Def, Defined, Empty, Ensure, FlipFlop, FlowModifier, For, Hookexe, If, KeywordOptional, KwSplat, Kwarg, Literal, Match, Module, Morearg, 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::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
116 117 118 |
# File 'lib/unparser/emitter.rb', line 116 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
126 127 128 129 130 131 132 |
# File 'lib/unparser/emitter.rb', line 126 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
140 |
# File 'lib/unparser/emitter.rb', line 140 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
58 59 60 |
# File 'lib/unparser/emitter.rb', line 58 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
68 |
# File 'lib/unparser/emitter.rb', line 68 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
76 77 78 |
# File 'lib/unparser/emitter.rb', line 76 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
148 |
# File 'lib/unparser/emitter.rb', line 148 abstract_method :terminated? |
#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
101 102 103 104 105 106 107 |
# File 'lib/unparser/emitter.rb', line 101 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 |