class JSObfu::ECMANoWhitespaceVisitor

Implements an ECMAVisitor with minimal whitespace and indentation.

Mostly a line-by-line copy of RKelly::Visitors::ECMAVisitor with the whitespace trimmed out.

Public Instance Methods

function_params_and_body(o) click to toggle source

Helper for all the various function nodes

# File lib/jsobfu/ecma_tight.rb, line 277
def function_params_and_body(o)
  "(#{o.arguments.map { |x| x.accept(self) }.join(',')})" +
    "#{o.function_body.accept(self)}"
end
visit_ArgumentsNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 77
def visit_ArgumentsNode(o)
  o.value.map { |x| x.accept(self) }.join(',')
end
visit_ArrayNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 141
def visit_ArrayNode(o)
  "[#{o.value.map { |x| x ? x.accept(self) : '' }.join(',')}]"
end
visit_AssignExprNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 29
def visit_AssignExprNode(o)
  "=#{o.value.accept(self)}"
end
visit_BitwiseNotNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 133
def visit_BitwiseNotNode(o)
  "~#{o.value.accept(self)}"
end
visit_BlockNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 61
def visit_BlockNode(o)
  "{#{o.value.accept(self)}}"
end
visit_BracketAccessorNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 308
def visit_BracketAccessorNode(o)
  "#{o.value.accept(self)}[#{o.accessor.accept(self)}]"
end
visit_BreakNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 101
def visit_BreakNode(o)
  "break" + (o.value ? " #{o.value}" : '') + ';'
end
visit_CaseBlockNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 229
def visit_CaseBlockNode(o)
  "{" + (o.value ? o.value.map { |x| x.accept(self) }.join('') : '') + "}"
end
visit_CaseClauseNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 233
def visit_CaseClauseNode(o)
  if o.left
    case_code = "case #{o.left.accept(self)}:"
  else
    case_code = "default:"
  end
  case_code += "#{o.value.accept(self)}"
  case_code
end
visit_CommaNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 282
def visit_CommaNode(o)
  "#{o.left.accept(self)},#{o.value.accept(self)}"
end
visit_ConditionalNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 291
def visit_ConditionalNode(o)
  "#{o.conditions.accept(self)}?#{o.value.accept(self)}:" +
    "#{o.else.accept(self)}"
end
visit_ConstStatementNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 21
def visit_ConstStatementNode(o)
  "const #{o.value.map { |x| x.accept(self) }.join(',')};"
end
visit_ContinueNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 105
def visit_ContinueNode(o)
  "continue" + (o.value ? " #{o.value}" : '') + ';'
end
visit_DeleteNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 137
def visit_DeleteNode(o)
  "delete #{o.value.accept(self)}"
end
visit_DoWhileNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 243
def visit_DoWhileNode(o)
  "do#{o.left.accept(self)}while(#{o.value.accept(self)});"
end
visit_DotAccessorNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 125
def visit_DotAccessorNode(o)
  "#{o.value.accept(self)}.#{o.accessor}"
end
visit_ElementNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 145
def visit_ElementNode(o)
  o.value.accept(self)
end
visit_EmptyStatementNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 117
def visit_EmptyStatementNode(o)
  ';'
end
visit_ExpressionStatementNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 65
def visit_ExpressionStatementNode(o)
  "#{o.value.accept(self)};"
end
visit_FalseNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 113
def visit_FalseNode(o)
  "false"
end
visit_ForInNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 296
def visit_ForInNode(o)
  var = o.left.is_a?(RKelly::Nodes::VarDeclNode) ? 'var ' : ''
  "for(#{var}#{o.left.accept(self)} in #{o.right.accept(self)})" +
    "#{o.value.accept(self)}"
end
visit_ForNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 37
def visit_ForNode(o)
  init    = o.init ? o.init.accept(self) : ';'
  init    << ';' unless init.end_with? ';' # make sure it has a ;
  test    = o.test ? o.test.accept(self) : ''
  counter = o.counter ? o.counter.accept(self) : ''
  "for(#{init}#{test};#{counter})#{o.value.accept(self)}"
end
visit_FunctionBodyNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 97
def visit_FunctionBodyNode(o)
  "{#{o.value.accept(self)}}"
end
visit_FunctionCallNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 73
def visit_FunctionCallNode(o)
  "#{o.value.accept(self)}(#{o.arguments.accept(self)})"
end
visit_FunctionDeclNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 89
def visit_FunctionDeclNode(o)
  "function #{o.value}" + function_params_and_body(o)
end
visit_FunctionExprNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 271
def visit_FunctionExprNode(o)
  name = (o.value == 'function') ? '' : ' '+o.value
  "function" + name + function_params_and_body(o)
end
visit_GetterPropertyNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 263
def visit_GetterPropertyNode(o)
  "get #{o.name}" + function_params_and_body(o.value)
end
visit_IfNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 286
def visit_IfNode(o)
  "if(#{o.conditions.accept(self)})#{o.value.accept(self)}" +
    (o.else ? "else #{o.else.accept(self)}" : '')
end
visit_LabelNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 251
def visit_LabelNode(o)
  "#{o.name}:#{o.value.accept(self)}"
end
visit_LessNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 45
def visit_LessNode(o)
  "#{o.left.accept(self)}<#{o.value.accept(self)}"
end
visit_LogicalNotNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 149
def visit_LogicalNotNode(o)
  "!#{o.value.accept(self)}"
end
visit_NewExprNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 312
def visit_NewExprNode(o)
  "new #{o.value.accept(self)}(#{o.arguments.accept(self)})"
end
visit_NullNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 85
def visit_NullNode(o)
  "null"
end
visit_NumberNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 33
def visit_NumberNode(o)
  o.value.to_s
end
visit_ObjectLiteralNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 255
def visit_ObjectLiteralNode(o)
  "{" + o.value.map { |x| x.accept(self) }.join(",\n") + '}'
end
visit_OpEqualNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 69
def visit_OpEqualNode(o)
  "#{o.left.accept(self)}=#{o.value.accept(self)}"
end
visit_ParameterNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 93
def visit_ParameterNode(o)
  o.value
end
visit_ParentheticalNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 9
def visit_ParentheticalNode(o)
  "(#{o.value.accept(self)})"
end
visit_PostfixNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 53
def visit_PostfixNode(o)
  "#{o.operand.accept(self)}#{o.value}"
end
visit_PrefixNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 57
def visit_PrefixNode(o)
  "#{o.value}#{o.operand.accept(self)}"
end
visit_PropertyNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 259
def visit_PropertyNode(o)
  "#{o.name}:#{o.value.accept(self)}"
end
visit_RegexpNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 121
def visit_RegexpNode(o)
  o.value
end
visit_ResolveNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 49
def visit_ResolveNode(o)
  o.value
end
visit_ReturnNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 161
def visit_ReturnNode(o)
  "return" + (o.value ? " #{o.value.accept(self)}" : '') + ';'
end
visit_SetterPropertyNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 267
def visit_SetterPropertyNode(o)
  "set #{o.name}" + function_params_and_body(o.value)
end
visit_SourceElementsNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 13
def visit_SourceElementsNode(o)
  o.value.map { |x| "#{x.accept(self)}" }.join
end
visit_StringNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 81
def visit_StringNode(o)
  o.value
end
visit_SwitchNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 225
def visit_SwitchNode(o)
  "switch(#{o.left.accept(self)})#{o.value.accept(self)}"
end
visit_ThisNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 129
def visit_ThisNode(o)
  "this"
end
visit_ThrowNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 165
def visit_ThrowNode(o)
  "throw #{o.value.accept(self)};"
end
visit_TrueNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 109
def visit_TrueNode(o)
  "true"
end
visit_TryNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 302
def visit_TryNode(o)
  "try#{o.value.accept(self)}" +
    (o.catch_block ? " catch(#{o.catch_var})#{o.catch_block.accept(self)}" : '') +
    (o.finally_block ? " finally#{o.finally_block.accept(self)}" : '')
end
visit_TypeOfNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 169
def visit_TypeOfNode(o)
  "typeof #{o.value.accept(self)}"
end
visit_UnaryMinusNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 153
def visit_UnaryMinusNode(o)
  "-#{o.value.accept(self)}"
end
visit_UnaryPlusNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 157
def visit_UnaryPlusNode(o)
  "+#{o.value.accept(self)}"
end
visit_VarDeclNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 25
def visit_VarDeclNode(o)
  "#{o.name}#{o.value ? o.value.accept(self) : nil}"
end
visit_VarStatementNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 17
def visit_VarStatementNode(o)
  "var #{o.value.map { |x| x.accept(self) }.join(',')};"
end
visit_VoidNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 173
def visit_VoidNode(o)
  "void(#{o.value.accept(self)})"
end
visit_WhileNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 221
def visit_WhileNode(o)
  "while(#{o.left.accept(self)})#{o.value.accept(self)}"
end
visit_WithNode(o) click to toggle source
# File lib/jsobfu/ecma_tight.rb, line 247
def visit_WithNode(o)
  "with(#{o.left.accept(self)})#{o.value.accept(self)}"
end