Commit 85d03eff authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Merge branch 'since' into esprima-parser

parents 60716fba 1e21e1d2
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -233,6 +233,11 @@ task :sdk => :sass do
    "--output", OUT_DIR,
    "--config", "#{SDK_DIR}/extjs/docs/config.json",
    "--examples-base-url", "extjs-build/examples/",
    "--import", "Ext JS 2:compare/ext23",
    "--import", "Ext JS 3:compare/ext34",
    "--import", "Ext JS 4.0.7:compare/ext407",
    "--import", "Ext JS 4.1.0:compare/ext410",
    "--import", "Ext JS 4.1.1",
    "--seo",
    "--tests"
  )
+2 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ require 'jsduck/logger'
require 'jsduck/assets'
require 'jsduck/json_duck'
require 'jsduck/io'
require 'jsduck/importer'
require 'jsduck/lint'
require 'jsduck/template_dir'
require 'jsduck/class_writer'
@@ -46,6 +47,7 @@ module JsDuck
      result = aggregate(parsed_files)
      @relations = filter_classes(result)
      InheritDoc.new(@relations).resolve_all
      Importer.import(@opts.imports, @relations)
      Lint.new(@relations).run

      # Initialize guides, videos, examples, ...

lib/jsduck/importer.rb

0 → 100644
+97 −0
Original line number Diff line number Diff line
require 'jsduck/json_duck'
require 'jsduck/null_object'

module JsDuck

  # Reads in JSDuck exports of different versions of docs.
  module Importer
    module_function

    # Loads in exported docs and generates @since and @new tags based on that data.
    def import(imports, relations)
      if imports.length > 0
        generate_since_tags(read_all(imports), relations)
      end
    end

    # Reads in data for all versions, returning array of
    # version/class-data pairs.  We don't use a hash to preserve the
    # order of versions (from oldest to newest).
    def read_all(imports)
      imports.map do |ver|
        {
          :version => ver[:version],
          :classes => ver[:path] ? read(ver[:path]) : current_version,
        }
      end
    end

    def current_version
      NullObject.new(:[] => NullObject.new(:[] => true))
    end

    # Reads in data from all .json files in directory
    def read(path)
      classes = {}
      Dir[path + "/*.json"].each do |filename|
        json = JsonDuck.read(filename)
        classes[json["name"]] = members_id_index(json)
      end
      classes
    end

    # creates index of all class members
    def members_id_index(json)
      index = {}
      ["members", "statics"].each do |group_name|
        json[group_name].each_pair do |tagname, members|
          members.each do |m|
            index[m["id"]] = true
          end
        end
      end
      index
    end

    # Using the imported versions data, adds @since tags to all
    # classes/members.
    def generate_since_tags(versions, relations)
      last_version = versions.last[:version]

      relations.each do |cls|
        v = cls[:meta][:since] || class_since(versions, cls)
        cls[:meta][:since] = v
        cls[:meta][:new] = true if v == last_version

        cls.all_local_members.each do |m|
          v = m[:meta][:since] || member_since(versions, cls, m)
          m[:meta][:since] = v
          m[:meta][:new] = true if v == last_version
        end
      end
    end

    def member_since(versions, cls, m)
      versions.each do |ver|
        c = ver[:classes][cls[:name]]
        return ver[:version] if c && c[m[:id]]
        cls[:alternateClassNames].each do |name|
          c = ver[:classes][name]
          return ver[:version] if c && c[m[:id]]
        end
      end
    end

    # Returns name of the version since which the class is available
    def class_since(versions, cls)
      versions.each do |ver|
        return ver[:version] if ver[:classes][cls[:name]]
        cls[:alternateClassNames].each do |name|
          return ver[:version] if ver[:classes][name]
        end
      end
    end

  end

end
+13 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ module JsDuck
    attr_accessor :local_storage_db
    attr_accessor :touch_examples_ui
    attr_accessor :ext_namespaces
    attr_accessor :imports

    def initialize
      @input_files = []
@@ -112,6 +113,7 @@ module JsDuck
      @local_storage_db = "docs"
      @touch_examples_ui = false
      @ext_namespaces = ["Ext"]
      @imports = []

      # enable all warnings except :link_auto
      Logger.instance.set_warning(:all, true)
@@ -360,6 +362,17 @@ module JsDuck
          @ext_namespaces = ns
        end

        opts.on('--import=VERSION:PATH',
          "Imports docs of a particular version generating @since tags.",
          "Several versions can be imported using the option multiple times.",
          "To specify the current version, leave the :PATH portion off.", " ") do |v|
          if v =~ /\A(.*?):(.*)\Z/
            @imports << {:version => $1, :path => canonical($2)}
          else
            @imports << {:version => v}
          end
        end

        opts.on('--config=PATH',
          "Loads config options from JSON file.", " ") do |path|
          path = canonical(path)

lib/jsduck/tag/new.rb

0 → 100644
+20 −0
Original line number Diff line number Diff line
require "jsduck/meta_tag"
require "jsduck/logger"

module JsDuck::Tag
  # Implementation of @new tag.
  class New < JsDuck::MetaTag
    def initialize
      @name = "new"
      @key = :new
      @signature = {:long => "&#9733;", :short => "&#9733;"} # unicode black star char
      @boolean = true
    end

    def to_value(contents)
      true
    end

  end
end
Loading