Commit 8155027d authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Refactor enum type autodetection to separate file.

parent 07336f8f
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
require 'jsduck/class'
require 'jsduck/accessors'
require 'jsduck/logger'
require 'jsduck/enum'

module JsDuck

@@ -228,18 +229,11 @@ module JsDuck
      end
    end

    # Loops through all enums and auto-detects their types if needed.
    def infer_enum_types
      @classes.each_value do |cls|
        if cls[:enum] && !cls[:type]
          if cls[:members][:property].length > 0
            types = cls[:members][:property].map {|p| p[:type] }
            cls[:type] = types.sort.uniq.join("/")
          else
            cls[:type] = "Object"
            file = cls[:files][0][:filename]
            line = cls[:files][0][:linenr]
            Logger.instance.warn(:enum, "Enum #{cls[:name]} defined without values in it", file, line)
          end
          Enum.infer_type(cls)
        end
      end
    end

lib/jsduck/enum.rb

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

module JsDuck

  class Enum
    # Given an enum class, returns the type infered from its values.
    def self.infer_type(cls)
      if cls[:members][:property].length > 0
        types = cls[:members][:property].map {|p| p[:type] }
        cls[:type] = types.sort.uniq.join("/")
      else
        cls[:type] = "Object"
        file = cls[:files][0][:filename]
        line = cls[:files][0][:linenr]
        Logger.instance.warn(:enum, "Enum #{cls[:name]} defined without values in it", file, line)
      end
    end
  end

end