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_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