Commit c9e4fbf7 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Make lint print warnings for static members too.

Bit of refactoring.  Using the each_member method of JsDuck::Class
and also adding local each_member to loop over members of all classes,
plus a local warn method to more easily format warnings.
parent 8198413e
Loading
Loading
Loading
Loading
+19 −22
Original line number Diff line number Diff line
@@ -21,41 +21,28 @@ module JsDuck
    def warn_globals
      global = @relations["global"]
      return unless global
      global[:members].each_key do |type|
        global.members(type).each do |member|
          name = member[:name]
          file = member[:filename]
          line = member[:linenr]
          Logger.instance.warn("Global #{type}: #{name} in #{file} line #{line}")
        end
      global.each_member do |member|
        warn("Global #{member[:tagname]}: #{member[:name]}", member)
      end
    end

    # print warning for each member with no name
    def warn_unnamed
      @relations.each do |cls|
        cls[:members].each_pair do |type, members|
          members.each do |member|
      each_member do |member|
        if !member[:name] || member[:name] == ""
              file = member[:filename]
              line = member[:linenr]
              Logger.instance.warn("Unnamed #{type} in #{file} line #{line}")
            end
          end
          warn("Unnamed #{member[:tagname]}", member)
        end
      end
    end

    # print warning for each non-optional parameter that follows an optional parameter
    def warn_optional_params
      @relations.each do |cls|
        cls[:members][:method].each do |method|
      each_member do |member|
        if member[:tagname] == :method
          optional_found = false
          method[:params].each do |p|
          member[:params].each do |p|
            if optional_found && !p[:optional]
              file = method[:filename]
              line = method[:linenr]
              Logger.instance.warn("Optional param can't be followed by regular param #{p[:name]} in #{file} line #{line}")
              warn("Optional param can't be followed by regular param #{p[:name]}", member)
            end
            optional_found = optional_found || p[:optional]
          end
@@ -63,6 +50,16 @@ module JsDuck
      end
    end

    # Loops through all members of all classes
    def each_member(&block)
      @relations.each {|cls| cls.each_member(&block) }
    end

    # Prints warning + filename and linenumber from doc-context
    def warn(msg, context)
      Logger.instance.warn(msg + " in #{context[:filename]} line #{context[:linenr]}")
    end

  end

end