sapristi-tool/sapristi

View on GitHub
lib/sapristi/arguments_parser.rb

Summary

Maintainability
A
45 mins
Test Coverage

Method parse_integer has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
Open

    def self.parse_integer(value, min = nil, max = nil)
      raise OptionParser::InvalidOption, "'#{value}' is not an integer" unless value.match(/^[0-9]+$/)

      integer = value.to_i
      raise OptionParser::InvalidOption, "requires a wait time > 0, provided=#{value}" unless min.nil? || integer >= min
Severity: Minor
Found in lib/sapristi/arguments_parser.rb - About 45 mins to fix

Cognitive Complexity

Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

A method's cognitive complexity is based on a few simple rules:

  • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
  • Code is considered more complex for each "break in the linear flow of the code"
  • Code is considered more complex when "flow breaking structures are nested"

Further reading

Sapristi::ArgumentsParser#self.parse_integer performs a nil-check
Open

      raise OptionParser::InvalidOption, "requires a wait time > 0, provided=#{value}" unless min.nil? || integer >= min
      unless max.nil? || integer <= max
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by reek

A NilCheck is a type check. Failures of NilCheck violate the "tell, don't ask" principle.

Additionally, type checks often mask bigger problems in your source code like not using OOP and / or polymorphism when you should.

Example

Given

class Klass
  def nil_checker(argument)
    if argument.nil?
      puts "argument isn't nil!"
    end
  end
end

Reek would emit the following warning:

test.rb -- 1 warning:
  [3]:Klass#nil_checker performs a nil-check. (NilCheck)

Use match? instead of match when MatchData is not used.
Open

      raise OptionParser::InvalidOption, "'#{value}' is not an integer" unless value.match(/^[0-9]+$/)
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

In Ruby 2.4, String#match?, Regexp#match? and Symbol#match? have been added. The methods are faster than match. Because the methods avoid creating a MatchData object or saving backref. So, when MatchData is not used, use match? instead of match.

Example:

# bad
def foo
  if x =~ /re/
    do_something
  end
end

# bad
def foo
  if x.match(/re/)
    do_something
  end
end

# bad
def foo
  if /re/ === x
    do_something
  end
end

# good
def foo
  if x.match?(/re/)
    do_something
  end
end

# good
def foo
  if x =~ /re/
    do_something(Regexp.last_match)
  end
end

# good
def foo
  if x.match(/re/)
    do_something($~)
  end
end

# good
def foo
  if /re/ === x
    do_something($~)
  end
end

Use =~ in places where the MatchData returned by #match will not be used.
Open

      raise OptionParser::InvalidOption, "'#{value}' is not an integer" unless value.match(/^[0-9]+$/)
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

This cop identifies the use of Regexp#match or String#match, which returns #<MatchData>/nil. The return value of =~ is an integral index/nil and is more performant.

Example:

# bad
do_something if str.match(/regex/)
while regex.match('str')
  do_something
end

# good
method(str =~ /regex/)
return value unless regex =~ 'str'

Line is too long. [120/80]
Open

      raise OptionParser::InvalidOption, "requires a wait time > 0, provided=#{value}" unless min.nil? || integer >= min
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

Line is too long. [81/80]
Open

      opts.on('-v', '--verbose', 'Verbose mode') { |value| args.verbose = value }
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

Line is too long. [102/80]
Open

      raise OptionParser::InvalidOption, "'#{value}' is not an integer" unless value.match(/^[0-9]+$/)
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

Line is too long. [99/80]
Open

        raise OptionParser::InvalidOption, "requires a wait time <= 120 seconds, provided=#{value}"
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

Line is too long. [87/80]
Open

      opts.on('-m', '--monitors', 'Show monitor\'s info') { args.show_monitors = true }
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

Line is too long. [119/80]
Open

      opts.on('-w', '--wait-time NUMBER_OF_SECONDS (1-120), default=30', 'Wait time for detecting a window') do |value|
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

Line is too long. [98/80]
Open

      opts.on('-g', '--group GROUP', 'Use named group definitions') { |value| args.group = value }
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

Line is too long. [94/80]
Open

      opts.on('-f', '--file FILE', 'Read configuration from FILE') { |file| args.file = file }
Severity: Minor
Found in lib/sapristi/arguments_parser.rb by rubocop

There are no issues that match your filters.

Category
Status