ManageIQ/manageiq

View on GitHub

Showing 1,313 of 1,313 total issues

Duplicate branch body detected.
Open

                                                       elsif dialog_field_attributes["load_values_on_init"].nil?
                                                         # unspecified, default to true
                                                         true
                                                       else
                                                         !!dialog_field_attributes["load_values_on_init"]
Severity: Minor
Found in app/models/dialog_field_importer.rb by rubocop

Checks that there are no repeated bodies within if/unless, case-when, case-in and rescue constructs.

With IgnoreLiteralBranches: true, branches are not registered as offenses if they return a basic literal value (string, symbol, integer, float, rational, complex, true, false, or nil), or return an array, hash, regexp or range that only contains one of the above basic literal values.

With IgnoreConstantBranches: true, branches are not registered as offenses if they return a constant value.

Example:

# bad
if foo
  do_foo
  do_something_else
elsif bar
  do_foo
  do_something_else
end

# good
if foo || bar
  do_foo
  do_something_else
end

# bad
case x
when foo
  do_foo
when bar
  do_foo
else
  do_something_else
end

# good
case x
when foo, bar
  do_foo
else
  do_something_else
end

# bad
begin
  do_something
rescue FooError
  handle_error
rescue BarError
  handle_error
end

# good
begin
  do_something
rescue FooError, BarError
  handle_error
end

Example: IgnoreLiteralBranches: true

# good
case size
when "small" then 100
when "medium" then 250
when "large" then 1000
else 250
end

Example: IgnoreConstantBranches: true

# good
case size
when "small" then SMALL_SIZE
when "medium" then MEDIUM_SIZE
when "large" then LARGE_SIZE
else MEDIUM_SIZE
end

Use filter_map instead.
Open

      h[:security_group_ids] = (h.delete(:security_groups) || []).map { |x| x.try(:[], :id) }.compact.uniq

Use String#include? instead of a regex match with literal-only pattern.
Open

      match_data = v.kind_of?(String) && /password::/.match(v)

Use filter_map instead.
Open

        [Array(target).map(&:last_perf_capture_on).compact.min, 4.hours.ago.utc].compact.max

Avoid more than 3 levels of block nesting.
Open

          self.mac_address = mac if mac.present?
Severity: Minor
Found in app/models/host.rb by rubocop

Checks for excessive nesting of conditional and looping constructs.

You can configure if blocks are considered using the CountBlocks option. When set to false (the default) blocks are not counted towards the nesting level. Set to true to count blocks as well.

The maximum level of nesting allowed is configurable.

Use collect { |x| x.manager_uuids.to_a } instead of collect method chain.
Open

          manager_uuids = inventory_collection.parent_inventory_collections.collect(&:manager_uuids).map(&:to_a).flatten

private (on line 107) does not make singleton methods private. Use private_class_method or private inside a class << self block instead.
Open

  def self.seed
Severity: Minor
Found in app/models/chargeable_field.rb by rubocop

Checks for private or protected access modifiers which are applied to a singleton method. These access modifiers do not make singleton methods private/protected. private_class_method can be used for that.

Example:

# bad

class C
  private

  def self.method
    puts 'hi'
  end
end

Example:

# good

class C
  def self.method
    puts 'hi'
  end

  private_class_method :method
end

Example:

# good

class C
  class << self
    private

    def method
      puts 'hi'
    end
  end
end

Use filter_map instead.
Open

      @grouped_values[metric] ||= grouped_rollups.map do |_, rollups|
        rollups.map { |x| rollup_field(x, metric) }.compact.max
      end.compact.sum

Call super to initialize state of the parent class.
Open

  def initialize(dialog_tab_serializer = DialogTabSerializer.new)
    @dialog_tab_serializer = dialog_tab_serializer
  end
Severity: Minor
Found in app/models/dialog_serializer.rb by rubocop

Checks for the presence of constructors and lifecycle callbacks without calls to super.

This cop does not consider method_missing (and respond_to_missing?) because in some cases it makes sense to overtake what is considered a missing method. In other cases, the theoretical ideal handling could be challenging or verbose for no actual gain.

Autocorrection is not supported because the position of super cannot be determined automatically.

Object and BasicObject are allowed by this cop because of their stateless nature. However, sometimes you might want to allow other parent classes from this cop, for example in the case of an abstract class that is not meant to be called with super. In those cases, you can use the AllowedParentClasses option to specify which classes should be allowed in addition to Object and BasicObject.

Example:

# bad
class Employee < Person
  def initialize(name, salary)
    @salary = salary
  end
end

# good
class Employee < Person
  def initialize(name, salary)
    super(name)
    @salary = salary
  end
end

# bad
Employee = Class.new(Person) do
  def initialize(name, salary)
    @salary = salary
  end
end

# good
Employee = Class.new(Person) do
  def initialize(name, salary)
    super(name)
    @salary = salary
  end
end

# bad
class Parent
  def self.inherited(base)
    do_something
  end
end

# good
class Parent
  def self.inherited(base)
    super
    do_something
  end
end

# good
class ClassWithNoParent
  def initialize
    do_something
  end
end

Example: AllowedParentClasses: [MyAbstractClass]

# good
class MyConcreteClass < MyAbstractClass
  def initialize
    do_something
  end
end

Avoid rescuing the Exception class. Perhaps you meant to rescue StandardError?
Open

    rescue Exception => err
      _log.error("SSH connection failed for [#{hostname}] with [#{err.class}: #{err}]")
      raise err
Severity: Minor
Found in app/models/host.rb by rubocop

Checks for rescue blocks targeting the Exception class.

Example:

# bad

begin
  do_something
rescue Exception
  handle_exception
end

Example:

# good

begin
  do_something
rescue ArgumentError
  handle_exception
end

Use s[:enabled] = false; s[:message] = "Provide credentials for IPMI" instead of s.merge!(:enabled => false, :message => "Provide credentials for IPMI").
Open

      s.merge!(:enabled => false, :message => "Provide credentials for IPMI")
Severity: Minor
Found in app/models/host.rb by rubocop

This cop identifies places where Hash#merge! can be replaced by Hash#[]=.

Example:

hash.merge!(a: 1)
hash.merge!({'key' => 'value'})
hash.merge!(a: 1, b: 2)

The use of eval is a serious security risk.
Open

    eval("result = \"#{str}\"")
Severity: Minor
Found in app/models/bottleneck_event.rb by rubocop

Checks for the use of Kernel#eval and Binding#eval.

Example:

# bad

eval(something)
binding.eval(something)

Use filter_map instead.
Open

    new_ids  = hashes.collect { |s| s[:id] }.compact unless hashes.nil?

Use block explicitly instead of block-passing a method object.
Open

        ems.authentications = authentications.map(&method(:assign_nested_authentication))
Severity: Minor
Found in app/models/ext_management_system.rb by rubocop

Wrap expressions with varying precedence with parentheses to avoid ambiguity.
Open

    unless percentage.nil? || percentage.kind_of?(Integer) && percentage >= 0 && percentage <= 100
Severity: Minor
Found in app/models/metric/ci_mixin.rb by rubocop

Looks for expressions containing multiple binary operators where precedence is ambiguous due to lack of parentheses. For example, in 1 + 2 * 3, the multiplication will happen before the addition, but lexically it appears that the addition will happen first.

The cop does not consider unary operators (ie. !a or -b) or comparison operators (ie. a =~ b) because those are not ambiguous.

NOTE: Ranges are handled by Lint/AmbiguousRange.

Example:

# bad
a + b * c
a || b && c
a ** b + c

# good (different precedence)
a + (b * c)
a || (b && c)
(a ** b) + c

# good (same precedence)
a + b + c
a * b / c % d

Use filter_map instead.
Open

  STORAGE_COLS = Metric.columns_hash.collect { |c, _h| c.to_sym if c.starts_with?("derived_storage_") }.compact.freeze
Severity: Minor
Found in app/models/metric/rollup.rb by rubocop

Avoid immutable Array literals in loops. It is better to extract it into a local variable or a constant.
Open

      next if %w[name value].include?(cname)
Severity: Minor
Found in app/models/miq_ae_value.rb by rubocop

Interpolation in single quoted string detected. Use double quoted strings if you need interpolation.
Open

      {:name => "ems_alarm", :description => N_("VMware Alarm"), :db => ["Vm", "Host", "EmsCluster"], :responds_to_events => 'AlarmStatusChangedEvent_#{hash_expression[:options][:ems_id]}_#{hash_expression[:options][:ems_alarm_mor]}',
Severity: Minor
Found in app/models/miq_alert.rb by rubocop

Checks for interpolation in a single quoted string.

Safety:

This cop's autocorrection is unsafe because although it always replaces single quotes as if it were miswritten double quotes, it is not always the case. For example, '#{foo} bar' would be replaced by "#{foo} bar", so the replaced code would evaluate the expression foo.

Example:

# bad

foo = 'something with #{interpolation} inside'

Example:

# good

foo = "something with #{interpolation} inside"

Use filter_map instead.
Open

    policies.collect do |p|
      next unless p.kind_of?(self) # skip built-in policies

      {
        :miq_policy      => p,
Severity: Minor
Found in app/models/miq_policy.rb by rubocop

Remove redundant sort.
Open

        Dir.glob(DIALOG_DIR.join("*.{yml,yaml}")).sort + seed_plugin_files
Severity: Minor
Found in app/models/miq_dialog/seeding.rb by rubocop

Sort globbed results by default in Ruby 3.0. This cop checks for redundant sort method to Dir.glob and Dir[].

Safety:

This cop is unsafe, in case of having a file and a directory with identical names, since directory will be loaded before the file, which will break exe/files.rb that rely on exe.rb file.

Example:

# bad
Dir.glob('./lib/**/*.rb').sort.each do |file|
end

Dir['./lib/**/*.rb'].sort.each do |file|
end

# good
Dir.glob('./lib/**/*.rb').each do |file|
end

Dir['./lib/**/*.rb'].each do |file|
end
Severity
Category
Status
Source
Language