rstyle 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+
5
+ branches:
6
+ only:
7
+ - master
8
+
@@ -0,0 +1,29 @@
1
+ h1. RStyle
2
+
3
+ !https://secure.travis-ci.org/pmenglund/rstyle.png?branch=master!:http://travis-ci.org/pmenglund/rstyle
4
+
5
+ Implements checks for some of the "Ruby":https://github.com/chneukirchen/styleguide/blob/master/RUBY-STYLE style guide items.
6
+
7
+ This tool is meant to be use as a pre-commit hook for <code>git</code>, to ensure the code is properly formatted. Run the following
8
+ <pre>cd .git/hooks
9
+ ln -s /path/to/bin/rstyle</pre>
10
+
11
+ and you'll have to be compliant with the <code>rstyle</code> checks to be able to commit code to the repository.
12
+
13
+ It can also be used to check one or more ruby files in standalone mode:
14
+ <pre>rstyle /path/to/rubyfile.rb</pre>
15
+
16
+ h1. Style checks
17
+
18
+ The style checker looks for the following:
19
+ * line longer than 80 characters
20
+ * empty line contains whitespace
21
+ * line contains tab(s)
22
+ * line ends with whitespace
23
+ * no space after ,
24
+ * space after ( and [ or before ) and ]
25
+ * methods should be in snake_case
26
+ * use two spaces before statement modifiers
27
+
28
+ It will also issue warnings for the following:
29
+ * don't use <code>for/code> unless you know what you are doing
data/Rakefile CHANGED
@@ -1,14 +1,9 @@
1
1
  require 'bundler'
2
2
  require 'rspec/core/rake_task'
3
- require 'metric_fu'
4
3
 
5
4
  Bundler::GemHelper.install_tasks
6
5
 
7
- RSpec::Core::RakeTask.new(:rspec) do |t|
6
+ task :default => [:spec]
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
8
  t.rspec_opts = "--color"
9
9
  end
10
-
11
- desc "run autotest"
12
- task :autotest do
13
- system "autotest"
14
- end
data/bin/rstyle CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
3
  # Copyright 2010 Code Nursery AB
4
- #
4
+ #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
7
7
  # You may obtain a copy of the License at
8
- #
8
+ #
9
9
  # http://www.apache.org/licenses/LICENSE-2.0
10
- #
10
+ #
11
11
  # Unless required by applicable law or agreed to in writing, software
12
12
  # distributed under the License is distributed on an "AS IS" BASIS,
13
13
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,10 +17,8 @@
17
17
  if File.symlink?($0) && $0 =~ /pre-commit/
18
18
  prog = %x{pwd}.chomp + "/.git/hooks/" + File.readlink($0)
19
19
  base = File.dirname File.expand_path(prog)
20
- elsif
21
- base = File.expand_path(File.dirname($0))
22
20
  else
23
- exit 2
21
+ base = File.expand_path(File.dirname($0))
24
22
  end
25
23
 
26
24
  gemfile = File.expand_path("/../Gemfile", base)
@@ -44,7 +42,7 @@ if File.exist?(RSTYLE_FILE)
44
42
  end
45
43
  end
46
44
 
47
- s = Rstyle.new([lines, ARGV].flatten)
45
+ s = RStyle.new([lines, ARGV].flatten)
48
46
 
49
47
  if ARGV.length == 0
50
48
  files = []
@@ -1,4 +1,4 @@
1
- # Copyright 2010 Code Nursery AB
1
+ # Copyright 2010, 2011 Martin Englund
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -14,13 +14,14 @@
14
14
 
15
15
  require "trollop"
16
16
 
17
- class Rstyle
17
+ class RStyle
18
18
  attr_reader :line_count, :errors, :warnings
19
19
 
20
20
  def initialize(options)
21
21
  @options = parse_options(options)
22
22
  @errors = 0
23
23
  @warnings = 0
24
+ @skip = nil
24
25
  end
25
26
 
26
27
  def parse_options(options)
@@ -68,36 +69,51 @@ class Rstyle
68
69
  @line_count += 1
69
70
 
70
71
  # strip out text from strings
72
+ # TODO include other forms of strings
71
73
  @line = @line.gsub(/"([^"]+)"/, "\"\"")
72
74
 
73
75
  # strip out text from regexps
76
+ # TODO include other regexps
74
77
  @line = @line.gsub(/\/([^\/]+)\//, "//")
75
78
 
76
- if @oline.length > @options[:line_length]
77
- error "line longer than #{@options[:line_length]} characters"
78
- end
79
+ max_len = @options[:line_length]
80
+ begin
81
+ if @oline.length > max_len
82
+ error "line longer than #{max_len} characters (#{@oline.length})"
83
+ end
79
84
 
80
- check :empty_line, "empty line contains whitespace", /^\s+$/
85
+ check :empty_line, "empty line contains whitespace", /^\s+$/
81
86
 
82
- check :tabs, "line contains tab(s)", /\t/
87
+ check :tabs, "line contains tab(s)", /\t/
83
88
 
84
- check :ends_with_whitespace, "line ends with whitespace", /\S+\s+$/
89
+ check :ends_with_whitespace, "line ends with whitespace", /\S+\s+$/
85
90
 
86
- check :no_space_after_comma, "no space after ,", /,\S+/
91
+ # skip all check below if in a comment
92
+ next if @line =~ /^\s*#/
87
93
 
88
- check :space_after, "space after ( and [ or before ) and ]",
89
- /[\(\[]\s+|\s+[\)\]]/
94
+ check :no_space_after_comma, "no space after ,", /,\S+/
90
95
 
91
- check :two_spaces, "use two spaces before statement modifiers",
92
- /\S+( | {3,})(if|unless|until|rescue|while)/
96
+ check :space_after, "space after ( and [ or before ) and ]",
97
+ /[\(\[]\s+|\s+[\)\]]/
93
98
 
94
- check(:snake_case, /\s*def (\S+)/) do |method|
95
- error "methods should be in snake_case" if method =~ /[A-Z]/
96
- end
99
+ check :two_spaces, "use two spaces before statement modifiers",
100
+ /\S+( | {3,})(if|unless|until|rescue|while)/
101
+
102
+ check(:snake_case, /\s*def (\S+)/) do |method|
103
+ error "methods should be in snake_case" if method =~ /[A-Z]/
104
+ end
97
105
 
98
- check(:no_for, /^\s*for/) do
99
- warning "don't use for unless you know what you are doing"
106
+ check(:no_for, /^\s*for/) do
107
+ warning "don't use for unless you know what you are doing"
108
+ end
109
+ ensure
110
+ if @line =~ /^\s*#\s*RSTYLE:\s*(.+)$/
111
+ @skip = $1.to_sym
112
+ else
113
+ @skip = nil
114
+ end
100
115
  end
116
+
101
117
  end
102
118
  end
103
119
 
@@ -106,9 +122,9 @@ class Rstyle
106
122
  def check(name, *args)
107
123
  if @options[name] || @options[:all]
108
124
  if @line =~ args[args.length - 1]
109
- if block_given?
125
+ if block_given? && name != @skip
110
126
  yield($1)
111
- else
127
+ elsif name != @skip
112
128
  error(args[0])
113
129
  end
114
130
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2010 Code Nursery AB
1
+ # Copyright 2010, 2011 Martin Englund
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Rstyle
16
- VERSION = "0.0.2"
16
+ VERSION = "0.0.3"
17
17
  end
@@ -23,4 +23,5 @@ Gem::Specification.new do |s|
23
23
  s.add_runtime_dependency "trollop"
24
24
 
25
25
  s.add_development_dependency "rspec"
26
+ s.add_development_dependency "rake"
26
27
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2010 Code Nursery AB
1
+ # Copyright 2011 Martin Englund
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -15,10 +15,10 @@
15
15
  require 'spec_helper'
16
16
  require 'rstyle'
17
17
 
18
- describe Rstyle do
18
+ describe RStyle do
19
19
 
20
20
  before(:each) do
21
- @s = Rstyle.new(["--all"])
21
+ @s = RStyle.new(["--all"])
22
22
  @s.stub(:e)
23
23
  end
24
24
 
@@ -65,6 +65,21 @@ describe Rstyle do
65
65
  @s.errors.should == 1
66
66
  end
67
67
 
68
+ it "should ignore , with space in comments" do
69
+ @s.parse [" # x , y"]
70
+ @s.errors.should == 0
71
+ end
72
+
73
+ it "should ignore errors when overriden" do
74
+ @s.parse ["# RSTYLE: snake_case", "def FooBar"]
75
+ @s.errors.should == 0
76
+ end
77
+
78
+ it "should ignore errors when overriden" do
79
+ @s.parse ["# RSTYLE: tabs", "a\tb"]
80
+ @s.errors.should == 0
81
+ end
82
+
68
83
  it "should warn about the use of for" do
69
84
  @s.parse [" for x in @foo"]
70
85
  @s.warnings.should == 1
@@ -1,4 +1,4 @@
1
- # Copyright 2010 Code Nursery AB
1
+ # Copyright 2010, 2011 Martin Englund
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
metadata CHANGED
@@ -1,68 +1,75 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rstyle
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
4
5
  prerelease:
5
- version: 0.0.2
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Martin Englund
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-05-20 00:00:00 -07:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2011-12-21 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: highline
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70344078853600 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: trollop
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70344078853600
25
+ - !ruby/object:Gem::Dependency
26
+ name: trollop
27
+ requirement: &70344078852460 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
36
33
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
34
+ prerelease: false
35
+ version_requirements: *70344078852460
36
+ - !ruby/object:Gem::Dependency
39
37
  name: rspec
38
+ requirement: &70344078850300 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
40
45
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
46
+ version_requirements: *70344078850300
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &70344078849840 !ruby/object:Gem::Requirement
42
50
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  type: :development
48
- version_requirements: *id003
56
+ prerelease: false
57
+ version_requirements: *70344078849840
49
58
  description: Style checking for Ruby code
50
- email:
59
+ email:
51
60
  - martin@englund.nu
52
- executables:
61
+ executables:
53
62
  - rstyle
54
63
  extensions: []
55
-
56
64
  extra_rdoc_files: []
57
-
58
- files:
59
- - .autotest
65
+ files:
60
66
  - .gitignore
61
67
  - .rspec
62
68
  - .rstyle
69
+ - .travis.yml
63
70
  - Gemfile
64
71
  - LICENSE
65
- - README.md
72
+ - README.textile
66
73
  - Rakefile
67
74
  - bin/rstyle
68
75
  - lib/rstyle.rb
@@ -71,35 +78,32 @@ files:
71
78
  - spec/assets/test.rb
72
79
  - spec/rstyle_spec.rb
73
80
  - spec/spec_helper.rb
74
- has_rdoc: true
75
81
  homepage: https://github.com/pmenglund/rstyle
76
82
  licenses: []
77
-
78
83
  post_install_message:
79
84
  rdoc_options: []
80
-
81
- require_paths:
85
+ require_paths:
82
86
  - lib
83
- required_ruby_version: !ruby/object:Gem::Requirement
87
+ required_ruby_version: !ruby/object:Gem::Requirement
84
88
  none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: "0"
89
- required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
94
  none: false
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- version: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
95
99
  requirements: []
96
-
97
100
  rubyforge_project: rstyle
98
- rubygems_version: 1.6.2
101
+ rubygems_version: 1.8.10
99
102
  signing_key:
100
103
  specification_version: 3
101
104
  summary: Style checking for Ruby code
102
- test_files:
105
+ test_files:
103
106
  - spec/assets/test.rb
104
107
  - spec/rstyle_spec.rb
105
108
  - spec/spec_helper.rb
109
+ has_rdoc:
data/.autotest DELETED
@@ -1,2 +0,0 @@
1
- require 'autotest/bundler'
2
-
data/README.md DELETED
@@ -1,34 +0,0 @@
1
- README
2
- ======
3
-
4
- Implements checks for some of the
5
- [Ruby](https://github.com/chneukirchen/styleguide/blob/master/RUBY-STYLE)
6
- style guide items.
7
-
8
- This tool is meant to be use as a pre-commit hook for git, to ensure the code
9
- is properly formatted. Run the following
10
- cd .git/hooks
11
- ln -s /path/to/bin/rstyle
12
- and you'll have to be compliant with the rstyle checks to be able to commit
13
- code to the repository.
14
-
15
- It can also be used to check one or more ruby files in standalone mode:
16
- rstyle /path/to/rubyfile.rb
17
-
18
- Style checks
19
- ============
20
-
21
- The style checker looks for the following:
22
-
23
- * line longer than 80 characters
24
- * empty line contains whitespace
25
- * line contains tab(s)
26
- * line ends with whitespace
27
- * no space after ,
28
- * space after ( and [ or before ) and ]
29
- * methods should be in snake_case
30
- * use two spaces before statement modifiers
31
-
32
- It will also issue warnings for the following:
33
-
34
- * don't use `for` unless you know what you are doing