class Opal::Rewriters::JsReservedWords

Constants

BASIC_IDENTIFIER_RULES

Doesn’t take in account utf8

ES3_RESERVED_WORD_EXCLUSIVE

ES3 reserved words that aren’t ES5.1 reserved words

ES51_RESERVED_WORD

Reserved javascript keywords - we cannot create variables with the same name (ref: stackoverflow.com/a/9337272/601782)

IMMUTABLE_PROPS

Immutable properties of the global object

PROTO_SPECIAL_METHODS

Prototype special methods.

PROTO_SPECIAL_PROPS

Prototype special properties.

RESERVED_FUNCTION_NAMES

Defining a local function like Array may break everything

Public Class Methods

valid_ivar_name?(name) click to toggle source
# File lib/opal/rewriters/js_reserved_words.rb, line 39
def self.valid_ivar_name?(name)
  !(PROTO_SPECIAL_PROPS =~ name || PROTO_SPECIAL_METHODS =~ name)
end
valid_name?(name) click to toggle source
# File lib/opal/rewriters/js_reserved_words.rb, line 31
def self.valid_name?(name)
  BASIC_IDENTIFIER_RULES =~ name && !(
    ES51_RESERVED_WORD =~ name ||
    ES3_RESERVED_WORD_EXCLUSIVE =~ name ||
    IMMUTABLE_PROPS =~ name
  )
end

Public Instance Methods

fix_ivar_name(name) click to toggle source
# File lib/opal/rewriters/js_reserved_words.rb, line 47
def fix_ivar_name(name)
  self.class.valid_ivar_name?(name.to_s[1..-1]) ? name : "#{name}$".to_sym
end
fix_var_name(name) click to toggle source
# File lib/opal/rewriters/js_reserved_words.rb, line 43
def fix_var_name(name)
  self.class.valid_name?(name) ? name : "#{name}$".to_sym
end
on_argument(node) click to toggle source
Calls superclass method
# File lib/opal/rewriters/js_reserved_words.rb, line 104
def on_argument(node)
  node = super(node)
  name, value = *node
  fixed_name = fix_var_name(name)
  new_children = value ? [fixed_name, value] : [fixed_name]

  node.updated(nil, new_children, meta: { arg_name: name })
end
on_ivar(node) click to toggle source
Calls superclass method
# File lib/opal/rewriters/js_reserved_words.rb, line 70
def on_ivar(node)
  name, _ = *node
  node = node.updated(nil, [fix_ivar_name(name)])
  super(node)
end
on_ivasgn(node) click to toggle source
Calls superclass method
# File lib/opal/rewriters/js_reserved_words.rb, line 76
def on_ivasgn(node)
  name, value = *node

  node =
    if value
      node.updated(nil, [fix_ivar_name(name), value])
    else
      node.updated(nil, [fix_ivar_name(name)])
    end

  super(node)
end
on_kwrestarg(node)
Alias for: on_restarg
on_lvar(node) click to toggle source
Calls superclass method
# File lib/opal/rewriters/js_reserved_words.rb, line 51
def on_lvar(node)
  name, _ = *node
  node = node.updated(nil, [fix_var_name(name)])
  super(node)
end
on_lvasgn(node) click to toggle source
Calls superclass method
# File lib/opal/rewriters/js_reserved_words.rb, line 57
def on_lvasgn(node)
  name, value = *node

  node =
    if value
      node.updated(nil, [fix_var_name(name), value])
    else
      node.updated(nil, [fix_var_name(name)])
    end

  super(node)
end
on_restarg(node) click to toggle source

Restarg and kwrestarg are special cases because they may have no name def m(*, **); end

# File lib/opal/rewriters/js_reserved_words.rb, line 92
def on_restarg(node)
  name, _ = *node

  if name
    node = node.updated(nil, [fix_var_name(name)], meta: { arg_name: name })
  end

  node
end
Also aliased as: on_kwrestarg