Sha256: 9f58fa490ad836b261b39831c1a08132a0f64b3cee2433468da14bf48ac3190d

Contents?: true

Size: 1.13 KB

Versions: 24

Compression:

Stored size: 1.13 KB

Contents

require 'jsduck/js/rkelly_adapter'
require 'jsduck/js/associator'
require 'rkelly'

module JsDuck
  module Js

    # A JavaScript parser implementation that uses RKelly and adapts
    # its output to be the same as the old Esprima parser used to
    # produce.
    class Parser
      ADAPTER = Js::RKellyAdapter.new

      def initialize(input, options={})
        @input = input
      end

      # Parses JavaScript source code with RKelly, turns RKelly AST
      # into Esprima AST, and associate comments with syntax nodes.
      def parse
        parser = RKelly::Parser.new
        ast = parser.parse(@input)
        unless ast
          raise syntax_error(parser)
        end

        ast = ADAPTER.adapt(ast)
        # Adjust Program node range
        ast["range"] = [0, @input.length-1]
        return Js::Associator.new(@input).associate(ast)
      end

      def syntax_error(parser)
        token = parser.stopped_at
        if token
          "Invalid JavaScript syntax: Unexpected '#{token.value}' on line #{token.range.from.line}"
        else
          "Invalid JavaScript syntax: Unexpected end of file"
        end
      end
    end

  end
end

Version data entries

24 entries across 24 versions & 3 rubygems

Version Path
solvas-jsduck-6.0.0.30539 lib/jsduck/js/parser.rb
solvas-jsduck-6.0.0.9571 lib/jsduck/js/parser.rb
solvas-jsduck-6.0.0.6154 lib/jsduck/js/parser.rb
solvas-jsduck-6.0.0.4021 lib/jsduck/js/parser.rb
solvas-jsduck-6.0.0.2554 lib/jsduck/js/parser.rb
solvas-jsduck-6.0.0.1891 lib/jsduck/js/parser.rb
solvas-jsduck-6.0.0.beta.1888 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.10 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.9 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.8 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.7 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.5 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.4 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.3 lib/jsduck/js/parser.rb
jsduck-troopjs-0.0.1 lib/jsduck/js/parser.rb
jsduck-6.0.0beta lib/jsduck/js/parser.rb
jsduck-5.3.4 lib/jsduck/js/parser.rb
jsduck-5.3.3 lib/jsduck/js/parser.rb
jsduck-5.3.2 lib/jsduck/js/parser.rb
jsduck-5.3.1 lib/jsduck/js/parser.rb