From a5b5d6ff72011fc2bcf0222b290b2c9bd1aa050c Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Wed, 1 Jan 2014 18:41:08 +0100 Subject: [PATCH] Add RuboCop --- .rubocop.yml | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Gemfile | 2 ++ Rakefile | 13 +++++++- 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 .rubocop.yml diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 00000000..df4248b2 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,94 @@ +AllCops: + Includes: + - 'Gemfile' + - 'Rakefile' + - 'http.gemspec' + +# Avoid long parameter lists +ParameterLists: + Max: 3 + CountKeywordArgs: true + +MethodLength: + CountComments: false + Max: 31 # TODO: lower to 15 + +ClassLength: + CountComments: false + Max: 132 # TODO: lower to 100 + +CyclomaticComplexity: + Max: 13 # TODO: lower to 6 + +# Avoid more than `Max` levels of nesting. +BlockNesting: + Max: 3 + +# Align with the style guide. +CollectionMethods: + PreferredMethods: + collect: 'map' + inject: 'reduce' + find: 'detect' + find_all: 'select' + +# Do not force public/protected/private keyword to be indented at the same +# level as the def keyword. My personal preference is to outdent these keywords +# because I think when scanning code it makes it easier to identify the +# sections of code and visually separate them. When the keyword is at the same +# level I think it sort of blends in with the def keywords and makes it harder +# to scan the code and see where the sections are. +AccessModifierIndentation: + Enabled: false + +# Limit line length +LineLength: + Enabled: false + +# Disable documentation checking until a class needs to be documented once +Documentation: + Enabled: false + +# Not all trivial readers/writers can be defined with attr_* methods +TrivialAccessors: + Enabled: false + +# Enforce Ruby 1.8-compatible hash syntax +HashSyntax: + EnforcedStyle: hash_rockets + +# No spaces inside hash literals +SpaceInsideHashLiteralBraces: + EnforcedStyle: no_space + +# Allow dots at the end of lines +DotPosition: + Enabled: false + +# Don't require magic comment at the top of every file +Encoding: + Enabled: false + +# Enforce outdenting of access modifiers (i.e. public, private, protected) +AccessModifierIndentation: + EnforcedStyle: outdent + +EmptyLinesAroundAccessModifier: + Enabled: true + +# Align ends correctly +EndAlignment: + AlignWith: variable + +# Indentation of when/else +CaseIndentation: + IndentWhenRelativeTo: end + IndentOneStep: false + +# Use the old lambda literal syntax +Lambda: + Enabled: false + +Semicolon: + Exclude: + - 'spec/support/' diff --git a/Gemfile b/Gemfile index b0dc84ea..d382abf3 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,7 @@ end group :test do gem 'coveralls', :require => false gem 'rspec', '>= 2.14' + gem 'rubocop', '>= 0.16', :platforms => [:ruby_19, :ruby_20, :ruby_21] platforms :jruby, :ruby_18 do gem 'json', '>= 1.8.1' gem 'mime-types', '~> 1.25' @@ -26,6 +27,7 @@ group :test do end platforms :rbx do + gem 'racc' gem 'rubinius-coverage', '~> 2.0' gem 'rubysl', '~> 2.0' gem 'rubysl-json', '~> 2.0' diff --git a/Rakefile b/Rakefile index 6e42307f..e19a842d 100644 --- a/Rakefile +++ b/Rakefile @@ -4,4 +4,15 @@ require 'bundler/gem_tasks' require 'rspec/core/rake_task' RSpec::Core::RakeTask.new -task :default => :spec +task :test => :spec + +begin + require 'rubocop/rake_task' + Rubocop::RakeTask.new +rescue LoadError + task :rubocop do + $stderr.puts 'Rubocop is disabled' + end +end + +task :default => [:spec, :rubocop]