Module: Opal

Extended by:
Deprecations, UseGem
Defined in:
opal/lib/opal.rb,
opal/lib/opal/cli.rb,
opal/lib/opal/erb.rb,
opal/lib/opal/hike.rb,
opal/lib/opal/util.rb,
opal/lib/tilt/opal.rb,
opal/lib/opal/paths.rb,
opal/lib/opal/config.rb,
opal/lib/opal/errors.rb,
opal/lib/opal/builder.rb,
opal/lib/opal/version.rb,
opal/lib/opal/ast/node.rb,
opal/lib/opal/compiler.rb,
opal/lib/opal/fragment.rb,
opal/lib/opal/nodes/if.rb,
opal/lib/opal/rewriter.rb,
opal/lib/opal/nodes/def.rb,
opal/lib/opal/nodes/top.rb,
opal/lib/opal/nodes/args.rb,
opal/lib/opal/nodes/base.rb,
opal/lib/opal/nodes/call.rb,
opal/lib/opal/nodes/case.rb,
opal/lib/opal/nodes/defs.rb,
opal/lib/opal/nodes/hash.rb,
opal/lib/opal/nodes/iter.rb,
opal/lib/opal/source_map.rb,
opal/lib/opal/ast/builder.rb,
opal/lib/opal/cli_options.rb,
opal/lib/opal/cli_runners.rb,
opal/lib/opal/eof_content.rb,
opal/lib/opal/nodes/array.rb,
opal/lib/opal/nodes/class.rb,
opal/lib/opal/nodes/csend.rb,
opal/lib/opal/nodes/logic.rb,
opal/lib/opal/nodes/masgn.rb,
opal/lib/opal/nodes/scope.rb,
opal/lib/opal/nodes/super.rb,
opal/lib/opal/nodes/while.rb,
opal/lib/opal/nodes/yield.rb,
opal/lib/opal/path_reader.rb,
opal/lib/opal/deprecations.rb,
opal/lib/opal/nodes/lambda.rb,
opal/lib/opal/nodes/module.rb,
opal/lib/opal/nodes/rescue.rb,
opal/lib/opal/nodes/arglist.rb,
opal/lib/opal/nodes/defined.rb,
opal/lib/opal/nodes/helpers.rb,
opal/lib/opal/nodes/literal.rb,
opal/lib/opal/nodes/args/arg.rb,
opal/lib/opal/nodes/x_string.rb,
opal/lib/opal/regexp_anchors.rb,
opal/lib/opal/rewriters/base.rb,
opal/lib/opal/nodes/constants.rb,
opal/lib/opal/nodes/variables.rb,
opal/lib/opal/nodes/definitions.rb,
opal/lib/opal/builder_processors.rb,
opal/lib/opal/cli_runners/chrome.rb,
opal/lib/opal/cli_runners/nodejs.rb,
opal/lib/opal/cli_runners/server.rb,
opal/lib/opal/nodes/call_special.rb,
opal/lib/opal/cli_runners/nashorn.rb,
opal/lib/opal/nodes/args/fake_arg.rb,
opal/lib/opal/rewriters/arguments.rb,
opal/lib/opal/rewriters/dump_args.rb,
opal/lib/opal/rewriters/mlhs_args.rb,
opal/lib/opal/nodes/node_with_args.rb,
opal/lib/opal/parser/source_buffer.rb,
opal/lib/opal/nodes/args/parameters.rb,
opal/lib/opal/nodes/runtime_helpers.rb,
opal/lib/opal/nodes/singleton_class.rb,
opal/lib/opal/parser/default_config.rb,
opal/lib/opal/rewriters/inline_args.rb,
opal/lib/opal/nodes/args/arity_check.rb,
opal/lib/opal/rewriters/break_finder.rb,
opal/lib/opal/rewriters/for_rewriter.rb,
opal/lib/opal/cli_runners/applescript.rb,
opal/lib/opal/rewriters/block_to_iter.rb,
opal/lib/opal/rewriters/dot_js_syntax.rb,
opal/lib/opal/nodes/args/extract_kwarg.rb,
opal/lib/opal/nodes/args/extract_kwargs.rb,
opal/lib/opal/nodes/args/extract_optarg.rb,
opal/lib/opal/nodes/args/extract_restarg.rb,
opal/lib/opal/nodes/args/extract_kwoptarg.rb,
opal/lib/opal/nodes/args/extract_post_arg.rb,
opal/lib/opal/rewriters/js_reserved_words.rb,
opal/lib/opal/rewriters/opal_engine_check.rb,
opal/lib/opal/nodes/args/extract_block_arg.rb,
opal/lib/opal/nodes/args/extract_kwrestarg.rb,
opal/lib/opal/nodes/args/prepare_post_args.rb,
opal/lib/opal/nodes/args/initialize_iterarg.rb,
opal/lib/opal/nodes/args/extract_post_optarg.rb,
opal/lib/opal/nodes/args/initialize_shadowarg.rb,
opal/lib/opal/rewriters/explicit_writer_return.rb,
opal/lib/opal/nodes/args/ensure_kwargs_are_kwargs.rb,
opal/lib/opal/rewriters/rubyspec/filters_rewriter.rb,
opal/lib/opal/rewriters/binary_operator_assignment.rb,
opal/lib/opal/rewriters/logical_operator_assignment.rb,
opal/lib/opal/rewriters/hashes/key_duplicates_rewriter.rb

Overview

Opal is a ruby to javascript compiler, with a runtime for running in any JavaScript environment.

Defined Under Namespace

Modules: AST, BuilderProcessors, CliRunners, Config, Deprecations, ERB, Hike, Nodes, Parser, Rewriters, Rubyspec, SourceMap, UseGem, Util Classes: Builder, CLI, CLIOptions, CompilationError, Compiler, EofContent, Error, Fragment, GemNotFound, OpalBacktraceLocation, ParsingError, PathReader, Rewriter, RewritingError, SimpleServer, SyntaxError, TiltTemplate

Constant Summary

Server =
Opal::Sprockets::Server
VERSION =

WHEN RELEASING: Remember to update RUBY_ENGINE_VERSION in opal/corelib/constants.rb too!

'1.0.0'
REGEXP_START =
RUBY_ENGINE == 'opal' ? '^' : '\A'
REGEXP_END =
RUBY_ENGINE == 'opal' ? '$' : '\z'
FORBIDDEN_STARTING_IDENTIFIER_CHARS =

Unicode characters in ranges \u0001 - \u002F (blank unicode characters + space + !"#$%&'()*+,-./ chars) \u003A - \u0040 (:;<=>?@ chars) \u005B - \u005E ([]^ chars) \u0060 (` char) \u007B - \u007F ({|}~ chars}) are not allowed to be used in identifier in the beggining or middle of its name

'\u0001-\u002F\u003A-\u0040\u005B-\u005E\u0060\u007B-\u007F'
FORBIDDEN_ENDING_IDENTIFIER_CHARS =

Unicode characters in ranges \u0001 - \u0020 (blank unicode characters + space) \u0022 - \u002F ("#$%&'()*+,-./ chars) \u003A - \u003E (:;<=> chars) \u0040 (@ char) \u005B - \u005E ([]^ chars) \u0060 (` char) \u007B - \u007F ({|}~ chars}) are not allowed to be used in identifier in the end of its name In fact, FORBIDDEN_STARTING_IDENTIFIER_CHARS = FORBIDDEN_ENDING_IDENTIFIER_CHARS + \u0021 ('?') + \u003F ('!')

'\u0001-\u0020\u0022-\u002F\u003A-\u003E\u0040\u005B-\u005E\u0060\u007B-\u007F'
INLINE_IDENTIFIER_REGEXP =
Regexp.new("[^#{FORBIDDEN_STARTING_IDENTIFIER_CHARS}]*[^#{FORBIDDEN_ENDING_IDENTIFIER_CHARS}]")
FORBIDDEN_CONST_NAME_CHARS =

For constants rules are pretty much the same, but ':' is allowed and '?!' are not. Plus it may start with a '::' which indicates that the constant comes from toplevel.

'\u0001-\u0020\u0021-\u002F\u003B-\u003F\u0040\u005B-\u005E\u0060\u007B-\u007F'
CONST_NAME_REGEXP =
Regexp.new("#{REGEXP_START}(::)?[A-Z][^#{FORBIDDEN_CONST_NAME_CHARS}]*#{REGEXP_END}")

Instance Attribute Summary

Attributes included from Deprecations

#raise_on_deprecation

Class Method Summary collapse

Methods included from Deprecations

deprecation

Methods included from UseGem

use_gem

Class Method Details

.add_opal_location_to_error(opal_location, error) ⇒ Object



41
42
43
44
45
46
# File 'opal/lib/opal/errors.rb', line 41

def self.add_opal_location_to_error(opal_location, error)
  backtrace = error.backtrace.to_a
  backtrace.unshift opal_location.to_s
  error.set_backtrace backtrace
  error
end

.append_path(path) ⇒ Object

Add a file path to opals load path. Any gem containing ruby code that Opal has access to should add a load path through this method. Load paths added here should only be paths which contain code targeted at being compiled by Opal.



20
21
22
# File 'opal/lib/opal/paths.rb', line 20

def self.append_path(path)
  append_paths(path)
end

.append_paths(*paths) ⇒ Object

Same as #append_path but can take multiple paths.



25
26
27
28
# File 'opal/lib/opal/paths.rb', line 25

def self.append_paths(*paths)
  @paths.concat(paths)
  nil
end

.compile(source, options = {}) ⇒ String

Compile a string of ruby code into javascript.

Examples:


Opal.compile "ruby_code"
# => "string of javascript code"

Parameters:

  • source (String)

    ruby source

  • options (Hash) (defaults to: {})

    compiler options

Returns:

  • (String)

    javascript code

See Also:

  • for compiler options


24
25
26
# File 'opal/lib/opal/compiler.rb', line 24

def self.compile(source, options = {})
  Compiler.new(source, options).compile
end

.core_dirObject



8
9
10
# File 'opal/lib/opal/paths.rb', line 8

def self.core_dir
  File.expand_path('../../../opal', __FILE__.dup.untaint)
end

.gem_dirObject



4
5
6
# File 'opal/lib/opal/paths.rb', line 4

def self.gem_dir
  File.expand_path('../..', __FILE__.dup.untaint)
end

.opal_location_from_error(error) ⇒ Object



34
35
36
37
38
39
# File 'opal/lib/opal/errors.rb', line 34

def self.opal_location_from_error(error)
  opal_location = OpalBacktraceLocation.new
  opal_location.location = error.location if error.respond_to?(:location)
  opal_location.diagnostic = error.diagnostic if error.respond_to?(:diagnostic)
  opal_location
end

.pathsObject



69
70
71
# File 'opal/lib/opal/paths.rb', line 69

def self.paths
  @paths.dup.freeze
end

.reset_paths!Object

Resets Opal.paths to the default value (includes corelib, stdlib, opal/lib, ast gem and parser gem)



75
76
77
78
79
80
81
82
# File 'opal/lib/opal/paths.rb', line 75

def self.reset_paths!
  @paths = [core_dir.untaint, std_dir.untaint, gem_dir.untaint]
  if RUBY_ENGINE != 'opal'
    use_gem 'ast'
    use_gem 'parser'
  end
  nil
end

.std_dirObject



12
13
14
# File 'opal/lib/opal/paths.rb', line 12

def self.std_dir
  File.expand_path('../../../stdlib', __FILE__.dup.untaint)
end