AllCops:
  Include:
    - 'lib/**/*'
  Exclude:
    - 'daru.gemspec'
    - 'Rakefile'
    - 'Gemfile'
    - 'Guardfile'
    - '**/*.erb'
    - 'spec/*'
    - 'spec/**/*'
    - 'vendor/**/*'
    - 'benchmarks/*'
    - 'profile/*'
    - 'tmp/*'
  DisplayCopNames: true
  TargetRubyVersion: 2.0

# Preferred codebase style ---------------------------------------------
Layout/ExtraSpacing:
  AllowForAlignment: true

Style/FormatString:
  EnforcedStyle: percent

Style/AndOr:
  EnforcedStyle: conditionals

Layout/SpaceAroundEqualsInParameterDefault:
  EnforcedStyle: no_space

Layout/SpaceInsideBlockBraces:
  EnforcedStyle: space

Layout/SpaceInsideHashLiteralBraces:
  EnforcedStyle: no_space

Layout/AlignParameters:
  EnforcedStyle: with_fixed_indentation

Style/EmptyElse:
  EnforcedStyle: empty

Metrics/LineLength:
  Max: 120

Metrics/ModuleLength:
  Max: 200

Metrics/ClassLength:
  Max: 200

Style/ParallelAssignment:
  Enabled: false

Style/DoubleNegation:
  Enabled: false

Style/SingleLineBlockParams:
  Enabled: false

Style/PerlBackrefs:
  Enabled: false

Layout/SpaceAfterComma:
  Enabled: false

Layout/SpaceAroundOperators:
  Enabled: false

Style/EmptyCaseCondition:
  Enabled: false

Style/MultilineBlockChain:
  Enabled: false

# See https://github.com/bbatsov/rubocop/issues/4429
Style/YodaCondition:
  Enabled: false

Style/PercentLiteralDelimiters:
  PreferredDelimiters:
    '%i': '[]'
    '%w': '[]'

# Neither of prefered styles are good enough :(
Style/BlockDelimiters:
  Enabled: false

# Current preferred metrics --------------------------------------------
# Better values are encouraged, but not required.
Metrics/AbcSize:
  Max: 20

Metrics/MethodLength:
  Max: 15

Metrics/CyclomaticComplexity:
  Max: 7

# TODO -----------------------------------------------------------------

Style/Documentation:
  Enabled: false

# To discuss and decide ------------------------------------------------

# FIXME: in fact, rescue modifier is rarely a good choice.
#  But currently I can't fully grasp the three places they are used.
#  So, leaving them intact. - zverok, 2016-05-07
Style/RescueModifier:
  Exclude:
    - 'lib/daru/accessors/gsl_wrapper.rb'
    - 'lib/daru/dataframe.rb'
    - 'lib/daru/io/sql_data_source.rb'

# FIXME: once we should enable and fix it - zverok, 2016-05-07
Style/Alias:
  Enabled: false

# FIXME: should decide about this.
# Personally I prefer (as most of Ruby community) to use parens, but
# we also can enforce style to NOT using them. Yet it definitely should
# be only one style. Current codebase uses ~400 method defs without and
# ~ 100 method defs with them. - zverok, 2016-05-07
Style/MethodDefParentheses:
  Enabled: false

# Should be fixed, but require change of public API --------------------

# Bans methods like `has_missing_data?`, `is_number?` and so on - started
# with unnecessary has_ or is_.
Style/PredicateName:
  Exclude:
    - 'lib/daru/dataframe.rb'
    - 'lib/daru/monkeys.rb'
    - 'lib/daru/vector.rb'

Security/MarshalLoad:
  Enabled: false