tailor 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +24 -0
- data/History.txt +5 -0
- data/Manifest.txt +3 -0
- data/README.rdoc +3 -0
- data/Rakefile +1 -1
- data/features/spacing.feature +67 -5
- data/features/step_definitions/case_checking_steps.rb +1 -1
- data/features/step_definitions/spacing_steps.rb +117 -19
- data/features/support/1_file_with_bad_comma_spacing/bad_comma_spacing.rb +5 -0
- data/features/support/1_file_with_bad_parenthesis/bad_parenthesis.rb +6 -0
- data/lib/tailor.rb +34 -33
- data/lib/tailor/file_line.rb +170 -64
- data/lib/tailor/indentation_checker.rb +3 -3
- data/spec/file_line_spec.rb +158 -49
- metadata +11 -5
data/.autotest
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'autotest/restart'
|
4
|
+
require 'autotest/growl'
|
5
|
+
|
6
|
+
# Autotest.add_hook :initialize do |at|
|
7
|
+
# at.extra_files << "../some/external/dependency.rb"
|
8
|
+
#
|
9
|
+
# at.libs << ":../some/external"
|
10
|
+
#
|
11
|
+
# at.add_exception 'vendor'
|
12
|
+
#
|
13
|
+
# at.add_mapping(/dependency.rb/) do |f, _|
|
14
|
+
# at.files_matching(/test_.*rb$/)
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# %w(TestA TestB).each do |klass|
|
18
|
+
# at.extra_class_map[klass] = "test/test_misc.rb"
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
|
22
|
+
# Autotest.add_hook :run_command do |at|
|
23
|
+
# system "rake build"
|
24
|
+
# end
|
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
.autotest
|
1
2
|
History.txt
|
2
3
|
Manifest.txt
|
3
4
|
PostInstall.txt
|
@@ -10,6 +11,8 @@ features/spacing.feature
|
|
10
11
|
features/step_definitions/case_checking_steps.rb
|
11
12
|
features/step_definitions/common_steps.rb
|
12
13
|
features/step_definitions/spacing_steps.rb
|
14
|
+
features/support/1_file_with_bad_comma_spacing/bad_comma_spacing.rb
|
15
|
+
features/support/1_file_with_bad_parenthesis/bad_parenthesis.rb
|
13
16
|
features/support/1_file_with_camel_case_class/camel_case_class.rb
|
14
17
|
features/support/1_file_with_camel_case_method/camel_case_method.rb
|
15
18
|
features/support/1_file_with_hard_tabs/hard_tab.rb
|
data/README.rdoc
CHANGED
@@ -21,6 +21,9 @@ here http://wiki.github.com/turboladen/tailor.
|
|
21
21
|
* Extra whitespace
|
22
22
|
* At the end of lines
|
23
23
|
* On empty lines
|
24
|
+
* Before & after commas
|
25
|
+
* Before & after open/closed parentheses
|
26
|
+
* Before & after open/closed square brackets
|
24
27
|
* Line length
|
25
28
|
* Should be <= 80 characters
|
26
29
|
|
data/Rakefile
CHANGED
data/features/spacing.feature
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
Feature:
|
2
|
-
In order to determine if my Ruby file is
|
3
|
-
|
1
|
+
Feature: Spacing
|
2
|
+
In order to determine if my Ruby file is spaced according to
|
3
|
+
standards
|
4
4
|
As a Ruby developer
|
5
|
-
I want to find out which files have
|
5
|
+
I want to find out which files have spacing problems,
|
6
6
|
which lines those problems occur on,
|
7
|
-
and
|
7
|
+
and what type of spacing they're missing
|
8
8
|
|
9
9
|
Scenario: A single class-less file in a project; 1 method, indented properly
|
10
10
|
Given I have a project directory "1_good_simple_file"
|
@@ -38,3 +38,65 @@ Feature: Indentation
|
|
38
38
|
When I run the checker on the project
|
39
39
|
Then the checker should tell me each line is too long
|
40
40
|
|
41
|
+
Scenario: A single file that has a comment, method name, and statement without spaces after the commas
|
42
|
+
Given I have a project directory "1_file_with_bad_comma_spacing"
|
43
|
+
And I have "1" file in my project
|
44
|
+
And that file contains a "comment" line without spaces after commas
|
45
|
+
And that file contains a "method" line without spaces after commas
|
46
|
+
And that file contains a "statement" line without spaces after commas
|
47
|
+
When I run the checker on the project
|
48
|
+
Then the checker should tell me each line has commas without spaces after them
|
49
|
+
|
50
|
+
Scenario: A single file that has a comment, method name, and statement with > 1 spaces after the commas
|
51
|
+
Given I have a project directory "1_file_with_bad_comma_spacing"
|
52
|
+
And I have "1" file in my project
|
53
|
+
And that file contains a "comment" line with > 1 spaces after commas
|
54
|
+
And that file contains a "method" line with > 1 spaces after commas
|
55
|
+
And that file contains a "statement" line with > 1 spaces after commas
|
56
|
+
When I run the checker on the project
|
57
|
+
Then the checker should tell me each line has commas with > 1 spaces after them
|
58
|
+
|
59
|
+
Scenario: A single file that has a comment, method name, and statement with spaces before the commas
|
60
|
+
Given I have a project directory "1_file_with_bad_comma_spacing"
|
61
|
+
And I have "1" file in my project
|
62
|
+
And that file contains a "comment" line with spaces before commas
|
63
|
+
And that file contains a "method" line with spaces before commas
|
64
|
+
And that file contains a "statement" line with spaces before commas
|
65
|
+
When I run the checker on the project
|
66
|
+
Then the checker should tell me each line has commas with spaces before them
|
67
|
+
|
68
|
+
Scenario: A single file that has a comment, method, and statement with spaces after open parentheses
|
69
|
+
Given I have a project directory "1_file_with_bad_parenthesis"
|
70
|
+
And I have "1" file in my project
|
71
|
+
And that file contains a "comment" line with spaces after an open parenthesis
|
72
|
+
And that file contains a "method" line with spaces after an open parenthesis
|
73
|
+
And that file contains a "statement" line with spaces after an open parenthesis
|
74
|
+
When I run the checker on the project
|
75
|
+
Then the checker should tell me each line has open parentheses with spaces before them
|
76
|
+
|
77
|
+
Scenario: A single file that has a comment, method, and statement with spaces after open brackets
|
78
|
+
Given I have a project directory "1_file_with_bad_parenthesis"
|
79
|
+
And I have "1" file in my project
|
80
|
+
And that file contains a "comment" line with spaces after an open bracket
|
81
|
+
And that file contains a "method" line with spaces after an open bracket
|
82
|
+
And that file contains a "statement" line with spaces after an open bracket
|
83
|
+
When I run the checker on the project
|
84
|
+
Then the checker should tell me each line has open brackets with spaces before them
|
85
|
+
|
86
|
+
Scenario: A single file that has a comment, method, and statement with spaces before closed parentheses
|
87
|
+
Given I have a project directory "1_file_with_bad_parenthesis"
|
88
|
+
And I have "1" file in my project
|
89
|
+
And that file contains a "comment" line with spaces after an open parenthesis
|
90
|
+
And that file contains a "method" line with spaces after an open parenthesis
|
91
|
+
And that file contains a "statement" line with spaces after an open parenthesis
|
92
|
+
When I run the checker on the project
|
93
|
+
Then the checker should tell me each line has closed parentheses with spaces before them
|
94
|
+
|
95
|
+
Scenario: A single file that has a comment, method, and statement with spaces before closed brackets
|
96
|
+
Given I have a project directory "1_file_with_bad_parenthesis"
|
97
|
+
And I have "1" file in my project
|
98
|
+
And that file contains a "comment" line with spaces after an open bracket
|
99
|
+
And that file contains a "method" line with spaces after an open bracket
|
100
|
+
And that file contains a "statement" line with spaces after an open bracket
|
101
|
+
When I run the checker on the project
|
102
|
+
Then the checker should tell me each line has closed brackets with spaces before them
|
@@ -8,7 +8,7 @@ def contains_camel_case? keyword
|
|
8
8
|
line = FileLine.new source_line
|
9
9
|
|
10
10
|
if keyword.eql? "method"
|
11
|
-
line.
|
11
|
+
line.snake_case_method? ? (return false) : (return false)
|
12
12
|
elsif keyword.eql? "class"
|
13
13
|
line.camel_case_class? ? (return true) : (return false)
|
14
14
|
end
|
@@ -5,52 +5,91 @@ require 'tailor/file_line'
|
|
5
5
|
include Tailor
|
6
6
|
include Tailor::IndentationChecker
|
7
7
|
|
8
|
+
def check_file
|
9
|
+
ruby_source = File.open(@file_list[0], 'r')
|
10
|
+
|
11
|
+
ruby_source.each_line do |line|
|
12
|
+
yield(line)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def check_spacing method_name, line_type
|
17
|
+
is_line_type = false
|
18
|
+
bad_spacing = false
|
19
|
+
line_number = 1
|
20
|
+
|
21
|
+
file_path = Pathname.new(File.expand_path(@file_list[0]))
|
22
|
+
|
23
|
+
check_file do |line|
|
24
|
+
source_line = Tailor::FileLine.new(line, file_path, line_number)
|
25
|
+
|
26
|
+
is_line_type = source_line.send("#{line_type}_line?")
|
27
|
+
bad_spacing = source_line.send(method_name)
|
28
|
+
|
29
|
+
break line if is_line_type == true and bad_spacing == true
|
30
|
+
|
31
|
+
line_number += 1
|
32
|
+
end
|
33
|
+
|
34
|
+
is_line_type.should be_true
|
35
|
+
bad_spacing.should be_true
|
36
|
+
end
|
37
|
+
|
8
38
|
#-----------------------------------------------------------------------------
|
9
39
|
# "Given" statements
|
10
40
|
#-----------------------------------------------------------------------------
|
11
41
|
Given /^that file contains lines with hard tabs$/ do
|
12
|
-
@ruby_source = File.open(@file_list[0], 'r')
|
13
42
|
contains_hard_tabs = false
|
14
|
-
|
15
|
-
|
43
|
+
line_number = 1
|
44
|
+
|
45
|
+
file_path = Pathname.new(File.expand_path(@file_list[0]))
|
46
|
+
|
47
|
+
check_file do |line|
|
48
|
+
source_line = Tailor::FileLine.new(line, file_path, line_number)
|
16
49
|
if source_line.hard_tabbed?
|
17
50
|
contains_hard_tabs = true
|
18
51
|
break
|
19
52
|
end
|
53
|
+
line_number += 1
|
20
54
|
end
|
55
|
+
|
21
56
|
contains_hard_tabs.should be_true
|
22
57
|
end
|
23
58
|
|
24
59
|
Given /^that file does not contain any "([^\"]*)" statements$/ do |keyword|
|
25
|
-
|
60
|
+
ruby_source = File.open(@file_list[0], 'r')
|
26
61
|
|
27
|
-
count = count_keywords(
|
62
|
+
count = count_keywords(ruby_source, keyword)
|
28
63
|
count.should == 0
|
29
64
|
end
|
30
65
|
|
31
66
|
Given /^that file is indented properly$/ do
|
32
|
-
|
33
|
-
Tailor::IndentationChecker.validate_indentation file
|
34
|
-
end
|
67
|
+
pending
|
35
68
|
end
|
36
69
|
|
37
70
|
Given /^that file contains lines with trailing whitespace$/ do
|
38
|
-
|
71
|
+
line_number = 1
|
39
72
|
|
40
|
-
|
41
|
-
|
73
|
+
file_path = Pathname.new(File.expand_path(@file_list[0]))
|
74
|
+
|
75
|
+
check_file do |line|
|
76
|
+
source_line = Tailor::FileLine.new(line, file_path, line_number)
|
42
77
|
|
43
78
|
@whitespace_count = source_line.trailing_whitespace_count
|
44
79
|
|
45
80
|
@whitespace_count.should > 0
|
81
|
+
|
82
|
+
line_number += 1
|
46
83
|
end
|
47
84
|
end
|
48
85
|
|
49
86
|
Given /^that file contains lines longer than 80 characters$/ do
|
50
|
-
|
87
|
+
line_number = 1
|
88
|
+
|
89
|
+
file_path = Pathname.new(File.expand_path(@file_list[0]))
|
51
90
|
|
52
|
-
|
53
|
-
source_line = Tailor::FileLine.new
|
91
|
+
check_file do |line|
|
92
|
+
source_line = Tailor::FileLine.new(line, file_path, line_number)
|
54
93
|
|
55
94
|
if source_line.too_long?
|
56
95
|
too_long = true
|
@@ -60,9 +99,34 @@ Given /^that file contains lines longer than 80 characters$/ do
|
|
60
99
|
end
|
61
100
|
|
62
101
|
too_long.should be_true
|
102
|
+
|
103
|
+
line_number += 1
|
63
104
|
end
|
64
105
|
end
|
65
106
|
|
107
|
+
Given /^that file contains a "([^\"]*)" line without spaces after commas$/ do |line_type|
|
108
|
+
check_spacing("no_space_after_comma?", line_type)
|
109
|
+
end
|
110
|
+
|
111
|
+
Given /^that file contains a "([^\"]*)" line with > 1 spaces after commas$/ do |line_type|
|
112
|
+
check_spacing("more_than_one_space_after_comma?", line_type)
|
113
|
+
end
|
114
|
+
|
115
|
+
Given /^that file contains a "([^\"]*)" line with spaces before commas$/ do |line_type|
|
116
|
+
check_spacing("space_before_comma?", line_type)
|
117
|
+
end
|
118
|
+
|
119
|
+
Given /^that file contains a "([^\"]*)" line with spaces after open parentheses$/ do |line_type|
|
120
|
+
check_spacing("space_after_open_parenthesis?", line_type)
|
121
|
+
end
|
122
|
+
|
123
|
+
Given /^that file contains a "([^\"]*)" line with spaces after an open bracket$/ do |line_type|
|
124
|
+
check_spacing("space_after_open_bracket?", line_type)
|
125
|
+
end
|
126
|
+
|
127
|
+
Given /^that file contains a "([^\"]*)" line with spaces after an open parenthesis$/ do |line_type|
|
128
|
+
check_spacing("space_before_closed_parenthesis?", line_type)
|
129
|
+
end
|
66
130
|
|
67
131
|
#-----------------------------------------------------------------------------
|
68
132
|
# "When" statements
|
@@ -75,7 +139,7 @@ end
|
|
75
139
|
# "Then" statements
|
76
140
|
#-----------------------------------------------------------------------------
|
77
141
|
Then /^the checker should tell me each line that has a hard tab$/ do
|
78
|
-
@result.should include("Line
|
142
|
+
@result.should include("Line contains hard tabs")
|
79
143
|
end
|
80
144
|
|
81
145
|
Then "the checker should tell me my indentation is OK" do
|
@@ -83,11 +147,45 @@ Then "the checker should tell me my indentation is OK" do
|
|
83
147
|
end
|
84
148
|
|
85
149
|
Then /^the checker should tell me each line has trailing whitespace$/ do
|
86
|
-
|
87
|
-
@result.should include message
|
150
|
+
@result.should include("Line contains #{@whitespace_count} trailing whitespace(s)")
|
88
151
|
end
|
89
152
|
|
90
153
|
Then /^the checker should tell me each line is too long$/ do
|
91
|
-
|
92
|
-
@result.should include
|
154
|
+
message = "Line is greater than #{Tailor::FileLine::LINE_LENGTH_MAX} characters"
|
155
|
+
@result.should include(message)
|
156
|
+
end
|
157
|
+
|
158
|
+
Then /^the checker should tell me each line has commas without spaces after them$/ do
|
159
|
+
message = "Line has a comma with 0 spaces after it"
|
160
|
+
@result.should include(message)
|
93
161
|
end
|
162
|
+
|
163
|
+
Then /^the checker should tell me each line has commas with spaces before them$/ do
|
164
|
+
message = "Line has at least one space before a comma"
|
165
|
+
@result.should include(message)
|
166
|
+
end
|
167
|
+
|
168
|
+
Then /^the checker should tell me each line has commas with > 1 spaces after them$/ do
|
169
|
+
message = "Line has a comma with > 1 space after it"
|
170
|
+
@result.should include(message)
|
171
|
+
end
|
172
|
+
|
173
|
+
Then /^the checker should tell me each line has open parentheses with spaces before them$/ do
|
174
|
+
message = "Line has an open parenthesis with spaces after it"
|
175
|
+
@result.should include(message)
|
176
|
+
end
|
177
|
+
|
178
|
+
Then /^the checker should tell me each line has open brackets with spaces before them$/ do
|
179
|
+
message = "Line has an open bracket with spaces after it"
|
180
|
+
@result.should include(message)
|
181
|
+
end
|
182
|
+
|
183
|
+
Then /^the checker should tell me each line has closed parentheses with spaces before them$/ do
|
184
|
+
message = "Line has a closed parenthesis with spaces before it"
|
185
|
+
@result.should include(message)
|
186
|
+
end
|
187
|
+
|
188
|
+
Then /^the checker should tell me each line has closed brackets with spaces before them$/ do
|
189
|
+
message = "Line has a closed bracket with spaces before it"
|
190
|
+
@result.should include(message)
|
191
|
+
end
|
data/lib/tailor.rb
CHANGED
@@ -6,7 +6,7 @@ require 'pathname'
|
|
6
6
|
require 'tailor/file_line'
|
7
7
|
|
8
8
|
module Tailor
|
9
|
-
VERSION = '0.0.
|
9
|
+
VERSION = '0.0.3'
|
10
10
|
|
11
11
|
RUBY_KEYWORDS_WITH_END = [
|
12
12
|
'begin',
|
@@ -53,7 +53,7 @@ module Tailor
|
|
53
53
|
|
54
54
|
# Get the .rb files
|
55
55
|
ruby_files_in_project = Dir.glob(File.join('*', '**', '*.rb'))
|
56
|
-
Dir.glob(File.join('*.rb')).each { |
|
56
|
+
Dir.glob(File.join('*.rb')).each { |file| ruby_files_in_project << file }
|
57
57
|
|
58
58
|
# Expand paths to all files in the list
|
59
59
|
list_with_absolute_paths = Array.new
|
@@ -78,51 +78,51 @@ module Tailor
|
|
78
78
|
puts "# \t'#{file_path}'"
|
79
79
|
puts "#-------------------------------------------------------------------"
|
80
80
|
|
81
|
-
problem_count = 0
|
81
|
+
@problem_count = 0
|
82
82
|
line_number = 1
|
83
83
|
source.each_line do |source_line|
|
84
|
-
line = FileLine.new
|
84
|
+
line = FileLine.new(source_line, file_path, line_number)
|
85
85
|
|
86
|
-
# Check for
|
87
|
-
if line.hard_tabbed?
|
88
|
-
puts "Line is hard-tabbed:"
|
89
|
-
puts "\t#{file_path.relative_path_from(Pathname.pwd)}: #{line_number}"
|
90
|
-
problem_count += 1
|
91
|
-
end
|
86
|
+
# Check for indenting by spaces only
|
87
|
+
@problem_count += 1 if line.hard_tabbed?
|
92
88
|
|
93
89
|
# Check for camel-cased methods
|
94
|
-
if line.
|
95
|
-
puts "Method name uses camel case:"
|
96
|
-
puts "\t#{file_path.relative_path_from(Pathname.pwd)}: #{line_number}"
|
97
|
-
problem_count += 1
|
98
|
-
end
|
90
|
+
@problem_count += 1 if line.method_line? and line.camel_case_method?
|
99
91
|
|
100
92
|
# Check for non-camel-cased classes
|
101
|
-
if line.
|
102
|
-
puts "Class name does NOT use camel case:"
|
103
|
-
puts "\t#{file_path.relative_path_from(Pathname.pwd)}: #{line_number}"
|
104
|
-
problem_count += 1
|
105
|
-
end
|
93
|
+
@problem_count += 1 if line.class_line? and line.snake_case_class?
|
106
94
|
|
107
95
|
# Check for trailing whitespace
|
108
|
-
|
109
|
-
if count > 0
|
110
|
-
puts "Line contains #{count} trailing whitespace(s):"
|
111
|
-
puts "\t#{file_path.relative_path_from(Pathname.pwd)}: #{line_number}"
|
112
|
-
problem_count += 1
|
113
|
-
end
|
96
|
+
@problem_count += 1 if line.trailing_whitespace?
|
114
97
|
|
115
98
|
# Check for long lines
|
116
|
-
if line.too_long?
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
99
|
+
@problem_count += 1 if line.too_long?
|
100
|
+
|
101
|
+
# Check for spacing after commas
|
102
|
+
@problem_count += 1 if line.more_than_one_space_after_comma?
|
103
|
+
|
104
|
+
# Check for spacing after commas
|
105
|
+
@problem_count += 1 if line.no_space_after_comma?
|
106
|
+
|
107
|
+
# Check for spacing after commas
|
108
|
+
@problem_count += 1 if line.space_before_comma?
|
109
|
+
|
110
|
+
# Check for spacing after open parentheses
|
111
|
+
@problem_count += 1 if line.space_after_open_parenthesis?
|
112
|
+
|
113
|
+
# Check for spacing after open brackets
|
114
|
+
@problem_count += 1 if line.space_after_open_bracket?
|
115
|
+
|
116
|
+
# Check for spacing after closed parentheses
|
117
|
+
@problem_count += 1 if line.space_before_closed_parenthesis?
|
118
|
+
|
119
|
+
# Check for spacing after closed brackets
|
120
|
+
@problem_count += 1 if line.space_before_closed_bracket?
|
121
121
|
|
122
122
|
line_number += 1
|
123
123
|
end
|
124
124
|
|
125
|
-
problem_count
|
125
|
+
@problem_count
|
126
126
|
end
|
127
127
|
|
128
128
|
# Prints a summary report that shows which files had how many problems.
|
@@ -136,7 +136,8 @@ module Tailor
|
|
136
136
|
files_and_problems.each_pair do |file, problem_count|
|
137
137
|
file_path = Pathname.new(file)
|
138
138
|
unless problem_count == 0
|
139
|
-
|
139
|
+
print "\t#{problem_count} problems in: "
|
140
|
+
puts "#{file_path.relative_path_from(Pathname.pwd)}"
|
140
141
|
end
|
141
142
|
end
|
142
143
|
end
|
data/lib/tailor/file_line.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
1
3
|
module Tailor
|
2
4
|
|
3
5
|
# Calling modules will get the Ruby file to check, then read by line. This
|
4
6
|
# class allows for checking of line-specific style by Represents a single
|
5
7
|
# line of a file of Ruby code. Inherits from String so "self" can be used.
|
8
|
+
#
|
9
|
+
# Methods are named such that they check for bad style conditions, and return
|
10
|
+
# true and print the associated error message when the bad style condition
|
11
|
+
# is discovered in the file line.
|
6
12
|
class FileLine < String
|
7
13
|
|
8
14
|
LINE_LENGTH_MAX = 80
|
@@ -12,10 +18,15 @@ module Tailor
|
|
12
18
|
#
|
13
19
|
# @param [String] line_of_code Line from a Ruby file that will be checked
|
14
20
|
# for styling.
|
21
|
+
# @param [Pathname] file_path Path to the file the line is in.
|
22
|
+
# @param [Number] line_number Line number in the file that contains the
|
23
|
+
# line.
|
15
24
|
# @return [String] Returns a String that includes all of the methods
|
16
25
|
# defined here.
|
17
|
-
def initialize line_of_code
|
26
|
+
def initialize line_of_code, file_path, line_number
|
18
27
|
super line_of_code
|
28
|
+
@file_path = file_path
|
29
|
+
@line_number = line_number
|
19
30
|
end
|
20
31
|
|
21
32
|
# Determines the number of spaces the line is indented.
|
@@ -32,66 +43,67 @@ module Tailor
|
|
32
43
|
end
|
33
44
|
end
|
34
45
|
|
35
|
-
# Checks to see if the source code line
|
46
|
+
# Checks to see if the source code line contains any hard tabs.
|
36
47
|
#
|
37
|
-
# @return [Boolean] Returns true if the file contains
|
38
|
-
#
|
48
|
+
# @return [Boolean] Returns true if the file line contains hard tabs.
|
49
|
+
# false if the line contains only spaces.
|
39
50
|
def hard_tabbed?
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
else false
|
51
|
+
if self.scan(/\t/).empty?
|
52
|
+
return false
|
53
|
+
else
|
54
|
+
print_problem "Line contains hard tabs:"
|
55
|
+
return true
|
46
56
|
end
|
47
57
|
end
|
48
58
|
|
49
|
-
# Checks to see if the method is using camel case.
|
59
|
+
# Checks to see if the method name is using camel case.
|
50
60
|
#
|
51
61
|
# @return [Boolean] Returns true if the method name is camel case.
|
62
|
+
# Returns nil if this line doesn't contain a method definition.
|
52
63
|
def camel_case_method?
|
53
64
|
words = self.split(/ /)
|
54
65
|
|
55
|
-
# If we're dealing with a method,
|
56
|
-
|
66
|
+
# If we're not dealing with a method, get outta here.
|
67
|
+
unless self.method_line?
|
68
|
+
return nil
|
69
|
+
end
|
57
70
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
return false
|
63
|
-
end
|
64
|
-
# If we're dealing with a class, check for an underscore.
|
71
|
+
# The 2nd word is the method name, so evaluate that for caps chars.
|
72
|
+
if words[1] =~ /[A-Z]/
|
73
|
+
print_problem "Method name uses camel case:"
|
74
|
+
return true
|
65
75
|
else
|
66
|
-
return
|
76
|
+
return false
|
67
77
|
end
|
68
78
|
end
|
69
79
|
|
70
|
-
# Checks to see if the class is using
|
80
|
+
# Checks to see if the class name is using snake case.
|
71
81
|
#
|
72
|
-
# @return [Boolean] Returns true if the class name is
|
73
|
-
|
82
|
+
# @return [Boolean] Returns true if the class name is snake case.
|
83
|
+
# Returns nil if this line doesn't contain a class definition.
|
84
|
+
def snake_case_class?
|
74
85
|
words = self.split(/ /)
|
75
86
|
|
76
87
|
# If we're dealing with a class, check for an underscore.
|
77
|
-
|
78
|
-
if words[1] =~ /_/
|
79
|
-
return false
|
80
|
-
else
|
81
|
-
return true
|
82
|
-
end
|
83
|
-
else
|
88
|
+
unless self.class_line?
|
84
89
|
return nil
|
85
90
|
end
|
91
|
+
|
92
|
+
# The 2nd word is the class name, so check that.
|
93
|
+
if words[1] =~ /_/
|
94
|
+
print_problem "Class name does NOT use camel case:"
|
95
|
+
return true
|
96
|
+
else
|
97
|
+
return false
|
98
|
+
end
|
86
99
|
end
|
87
100
|
|
88
101
|
# Checks to see if the line is the start of a method's definition.
|
89
102
|
#
|
90
|
-
# @return [Boolean] Returns true if the line
|
91
|
-
|
92
|
-
def method?
|
103
|
+
# @return [Boolean] Returns true if the line starts with 'def'.
|
104
|
+
def method_line?
|
93
105
|
words = self.split(/ /)
|
94
|
-
if words[0].eql? "def"
|
106
|
+
if words[0].eql? "def"
|
95
107
|
return true
|
96
108
|
else
|
97
109
|
return false
|
@@ -102,7 +114,7 @@ module Tailor
|
|
102
114
|
#
|
103
115
|
# @return [Boolean] Returns true if the line contains 'class' and the
|
104
116
|
# second word begins with a uppercase letter.
|
105
|
-
def
|
117
|
+
def class_line?
|
106
118
|
words = self.split(/ /)
|
107
119
|
if words[0].eql? "class" and starts_with_uppercase?(words[1])
|
108
120
|
return true
|
@@ -111,18 +123,49 @@ module Tailor
|
|
111
123
|
end
|
112
124
|
end
|
113
125
|
|
126
|
+
##
|
127
|
+
# Checks to see if the line is a regular statement (not a class, method, or
|
128
|
+
# comment).
|
129
|
+
#
|
130
|
+
# @return [Boolean] Returns true if the line is not a class, method or
|
131
|
+
# comment.
|
132
|
+
def statement_line?
|
133
|
+
if self.method_line? or self.class_line? or self.comment_line?
|
134
|
+
return false
|
135
|
+
else
|
136
|
+
return true
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
114
140
|
# Checks to see if the whole line is a basic comment line. This doesn't
|
115
141
|
# check for trailing-line comments (@see #trailing_comment?).
|
116
142
|
#
|
117
143
|
# @return [Boolean] Returns true if the line begins with a pound symbol.
|
118
|
-
def
|
119
|
-
if self.scan(/\s
|
144
|
+
def comment_line?
|
145
|
+
if self.scan(/\s*#/).empty?
|
120
146
|
return false
|
121
147
|
else
|
122
148
|
return true
|
123
149
|
end
|
124
150
|
end
|
125
151
|
|
152
|
+
##
|
153
|
+
# Checks to see if there's whitespace at the end of the line. Prints the
|
154
|
+
# number of whitespaces at the end of the line.
|
155
|
+
#
|
156
|
+
# @return [Boolean] Returns true if theres whitespace at the end of the
|
157
|
+
# line.
|
158
|
+
def trailing_whitespace?
|
159
|
+
count = self.trailing_whitespace_count
|
160
|
+
|
161
|
+
if count > 0
|
162
|
+
print_problem "Line contains #{count} trailing whitespace(s):"
|
163
|
+
return true
|
164
|
+
else
|
165
|
+
return false
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
126
169
|
# Checks to see if the line has trailing whitespace at the end of it. Note
|
127
170
|
# that this excludes empty lines that have spaces on them!
|
128
171
|
#
|
@@ -137,55 +180,104 @@ module Tailor
|
|
137
180
|
end
|
138
181
|
end
|
139
182
|
|
140
|
-
|
141
|
-
#
|
142
|
-
# done before calling this method. @see #line_comment?.
|
183
|
+
##
|
184
|
+
# Checks to see if there's more than one one space after a comma.
|
143
185
|
#
|
144
|
-
# @return [Boolean] Returns true if
|
145
|
-
|
146
|
-
|
186
|
+
# @return [Boolean] Returns true if there is more than one space after
|
187
|
+
# a comma.
|
188
|
+
def more_than_one_space_after_comma?
|
189
|
+
if self.scan(/\,\x20{2,}/).first.nil?
|
147
190
|
return false
|
148
|
-
|
191
|
+
elsif self.scan(/\,\x20{2,}/)
|
192
|
+
print_problem "Line has a comma with > 1 space after it:"
|
149
193
|
return true
|
150
194
|
end
|
151
195
|
end
|
152
196
|
|
153
197
|
##
|
154
|
-
# Checks to see if there's no spaces after a comma.
|
198
|
+
# Checks to see if there's no spaces after a comma and the next word.
|
155
199
|
#
|
156
|
-
# @return [Boolean] Returns true if there
|
200
|
+
# @return [Boolean] Returns true if there's no spaces between a comma and
|
201
|
+
# the next word.
|
157
202
|
def no_space_after_comma?
|
158
|
-
if self.scan(/\w
|
203
|
+
if self.scan(/\w\x20?\,\w/).first.nil?
|
159
204
|
return false
|
160
|
-
|
205
|
+
elsif self.scan(/\w\x20?\,\w/)
|
206
|
+
print_problem "Line has a comma with 0 spaces after it:"
|
161
207
|
return true
|
162
208
|
end
|
163
209
|
end
|
164
210
|
|
165
211
|
##
|
166
|
-
# Checks to see if there's
|
212
|
+
# Checks to see if there's spaces before a comma.
|
167
213
|
#
|
168
|
-
# @return [Boolean] Returns true if there's
|
169
|
-
|
170
|
-
|
214
|
+
# @return [Boolean] Returns true if there's any spaces before a comma.
|
215
|
+
# Returns nil if the line doesn't contain a comma.
|
216
|
+
def space_before_comma?
|
217
|
+
if self.scan(/\w\x20+\,/).first.nil?
|
218
|
+
return false
|
219
|
+
elsif self.scan(/\w\x20+\,/)
|
220
|
+
print_problem "Line has at least one space before a comma:"
|
171
221
|
return true
|
172
222
|
else
|
223
|
+
return nil
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
##
|
228
|
+
# Checks to see if there's spaces after an open parenthesis.
|
229
|
+
#
|
230
|
+
# @return [Boolean] Returns true if there's spaces after an open
|
231
|
+
# parenthesis.
|
232
|
+
def space_after_open_parenthesis?
|
233
|
+
if self.scan(/\(\x20+/).first.nil?
|
173
234
|
return false
|
235
|
+
elsif self.scan(/\(\x20+/)
|
236
|
+
print_problem "Line has an open parenthesis with spaces after it:"
|
237
|
+
return true
|
174
238
|
end
|
175
239
|
end
|
176
240
|
|
177
|
-
|
178
|
-
#
|
179
|
-
#
|
180
|
-
# @return [
|
181
|
-
#
|
182
|
-
def
|
183
|
-
|
241
|
+
##
|
242
|
+
# Checks to see if there's spaces after an open bracket.
|
243
|
+
#
|
244
|
+
# @return [Boolean] Returns true if there's spaces after an open
|
245
|
+
# bracket.
|
246
|
+
def space_after_open_bracket?
|
247
|
+
if self.scan(/\[\x20+/).first.nil?
|
248
|
+
return false
|
249
|
+
elsif self.scan(/\[\x20+/)
|
250
|
+
print_problem "Line has an open bracket with spaces after it:"
|
251
|
+
return true
|
252
|
+
end
|
253
|
+
end
|
184
254
|
|
185
|
-
|
186
|
-
|
255
|
+
##
|
256
|
+
# Checks to see if there's spaces before a closed parenthesis.
|
257
|
+
#
|
258
|
+
# @return [Boolean] Returns true if there's spaces before a closed
|
259
|
+
# parenthesis.
|
260
|
+
def space_before_closed_parenthesis?
|
261
|
+
if self.scan(/\x20+\)/).first.nil?
|
262
|
+
return false
|
263
|
+
elsif self.scan(/\x20+\)/)
|
264
|
+
print_problem "Line has a closed parenthesis with spaces before it:"
|
265
|
+
return true
|
266
|
+
end
|
267
|
+
end
|
187
268
|
|
188
|
-
|
269
|
+
##
|
270
|
+
# Checks to see if there's spaces before a closed brackets.
|
271
|
+
#
|
272
|
+
# @return [Boolean] Returns true if there's spaces before a closed
|
273
|
+
# bracket.
|
274
|
+
def space_before_closed_bracket?
|
275
|
+
if self.scan(/\x20+\]/).first.nil?
|
276
|
+
return false
|
277
|
+
elsif self.scan(/\x20+\]/)
|
278
|
+
print_problem "Line has a closed bracket with spaces before it:"
|
279
|
+
return true
|
280
|
+
end
|
189
281
|
end
|
190
282
|
|
191
283
|
##
|
@@ -195,7 +287,12 @@ module Tailor
|
|
195
287
|
# @return [Boolean] Returns true if the line length exceeds the allowed
|
196
288
|
# length.
|
197
289
|
def too_long?
|
198
|
-
self.length > LINE_LENGTH_MAX
|
290
|
+
if self.length > LINE_LENGTH_MAX
|
291
|
+
print_problem "Line is greater than #{LINE_LENGTH_MAX} characters:"
|
292
|
+
return true
|
293
|
+
else
|
294
|
+
return false
|
295
|
+
end
|
199
296
|
end
|
200
297
|
|
201
298
|
#-----------------------------------------------------------------
|
@@ -203,6 +300,15 @@ module Tailor
|
|
203
300
|
#-----------------------------------------------------------------
|
204
301
|
private
|
205
302
|
|
303
|
+
##
|
304
|
+
# Prints the file name and line number that the problem occured on.
|
305
|
+
#
|
306
|
+
# @param [String] Error message to print.
|
307
|
+
def print_problem message
|
308
|
+
puts message
|
309
|
+
puts "\t#{@file_path.relative_path_from(Pathname.pwd)}: #{@line_number}"
|
310
|
+
end
|
311
|
+
|
206
312
|
# Checks to see if a word begins with a lowercase letter.
|
207
313
|
#
|
208
314
|
# @param [String] word The word to check case on.
|
@@ -12,9 +12,9 @@ module Tailor
|
|
12
12
|
line = FileLine.new(line_of_code)
|
13
13
|
|
14
14
|
# Make sure the line isn't hard-tabbed
|
15
|
-
if line.
|
16
|
-
|
17
|
-
end
|
15
|
+
#if line.soft_tabbed?
|
16
|
+
# results << "Line #{line_number} is hard-tabbed."
|
17
|
+
#end
|
18
18
|
|
19
19
|
# Check for indentation
|
20
20
|
#spaces = line.indented_spaces
|
data/spec/file_line_spec.rb
CHANGED
@@ -1,135 +1,244 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
2
|
require 'tailor/file_line'
|
3
|
+
require 'pathname'
|
3
4
|
|
4
5
|
include Tailor
|
5
6
|
|
6
7
|
describe Tailor::FileLine do
|
7
8
|
context "should return the number of leading spaces in a line" do
|
8
9
|
it "when the line is not indented" do
|
9
|
-
line = FileLine.new
|
10
|
+
line = FileLine.new("def do_something", Pathname.new(__FILE__), __LINE__)
|
10
11
|
line.indented_spaces.should == 0
|
11
12
|
end
|
12
13
|
|
13
14
|
it "when the line is indented 1 space" do
|
14
|
-
line = FileLine.new
|
15
|
+
line = FileLine.new(" def do_something", Pathname.new(__FILE__),
|
16
|
+
__LINE__)
|
15
17
|
line.indented_spaces.should == 1
|
16
18
|
end
|
17
19
|
|
18
20
|
it "when the line is indented 1 space and a hard tab" do
|
19
|
-
line = FileLine.new
|
21
|
+
line = FileLine.new(" \tdef do_something", Pathname.new(__FILE__),
|
22
|
+
__LINE__)
|
20
23
|
line.indented_spaces.should == 1
|
21
24
|
end
|
22
25
|
end
|
23
26
|
|
24
|
-
context "should check
|
27
|
+
context "should check indenting by spaces" do
|
25
28
|
it "when the line is indented 1 hard tab" do
|
26
|
-
line = FileLine.new
|
29
|
+
line = FileLine.new("\tdef do_something", Pathname.new(__FILE__),
|
30
|
+
__LINE__)
|
27
31
|
line.hard_tabbed?.should be_true
|
28
32
|
end
|
29
33
|
|
30
34
|
it "when the line is indented with a space and 1 hard tab" do
|
31
|
-
line = FileLine.new
|
35
|
+
line = FileLine.new(" \tdef do_something", Pathname.new(__FILE__),
|
36
|
+
__LINE__)
|
32
37
|
line.hard_tabbed?.should be_true
|
33
38
|
end
|
34
39
|
|
35
40
|
it "when the line is indented with a space" do
|
36
|
-
line = FileLine.new
|
41
|
+
line = FileLine.new(" def do_something", Pathname.new(__FILE__),
|
42
|
+
__LINE__)
|
37
43
|
line.hard_tabbed?.should be_false
|
38
44
|
end
|
39
45
|
|
40
46
|
it "when the line is not indented" do
|
41
|
-
line = FileLine.new
|
47
|
+
line = FileLine.new("def do_something", Pathname.new(__FILE__), __LINE__)
|
42
48
|
line.hard_tabbed?.should be_false
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
46
|
-
context "should check for camel case when" do
|
47
|
-
it "
|
48
|
-
line = FileLine.new
|
52
|
+
context "should check for camel case methods when" do
|
53
|
+
it "the method name is camel case" do
|
54
|
+
line = FileLine.new("def doSomething", Pathname.new(__FILE__), __LINE__)
|
49
55
|
line.camel_case_method?.should be_true
|
50
56
|
end
|
51
57
|
|
52
|
-
it "
|
53
|
-
line = FileLine.new
|
58
|
+
it "the method name is snake case" do
|
59
|
+
line = FileLine.new("def do_something", Pathname.new(__FILE__), __LINE__)
|
54
60
|
line.camel_case_method?.should be_false
|
55
61
|
end
|
62
|
+
end
|
56
63
|
|
57
|
-
|
58
|
-
|
59
|
-
line.
|
64
|
+
context "should check for snake case classes when" do
|
65
|
+
it "the class name is camel case" do
|
66
|
+
line = FileLine.new("class AClass", Pathname.new(__FILE__), __LINE__)
|
67
|
+
line.snake_case_class?.should be_false
|
60
68
|
end
|
61
69
|
|
62
|
-
it "
|
63
|
-
line = FileLine.new
|
64
|
-
line.
|
70
|
+
it "the class name is snake case" do
|
71
|
+
line = FileLine.new("class A_Class", Pathname.new(__FILE__), __LINE__)
|
72
|
+
line.snake_case_class?.should be_true
|
65
73
|
end
|
66
74
|
end
|
67
75
|
|
68
76
|
it "should detect the number of trailing whitespace(s)" do
|
69
|
-
line = FileLine.new
|
77
|
+
line = FileLine.new(" puts 'This is a line.' \n",
|
78
|
+
Pathname.new(__FILE__), __LINE__)
|
70
79
|
line.trailing_whitespace_count.should == 2
|
71
80
|
end
|
72
81
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
82
|
+
context "comma spacing" do
|
83
|
+
context "after the comma" do
|
84
|
+
it "should detect 2 spaces after a comma" do
|
85
|
+
line = FileLine.new(" def do_something this, that",
|
86
|
+
Pathname.new(__FILE__), __LINE__)
|
87
|
+
line.more_than_one_space_after_comma?.should be_true
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should detect 2 spaces after a comma when at the end of a line" do
|
91
|
+
line = FileLine.new(" # This is a comment that, \n",
|
92
|
+
Pathname.new(__FILE__), __LINE__)
|
93
|
+
line.more_than_one_space_after_comma?.should be_true
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should be OK when 1 space after a comma" do
|
97
|
+
line = FileLine.new(" def do_something this, that",
|
98
|
+
Pathname.new(__FILE__), __LINE__)
|
99
|
+
line.more_than_one_space_after_comma?.should be_false
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should be OK when no commas" do
|
103
|
+
line = FileLine.new(" def do_something this", Pathname.new(__FILE__),
|
104
|
+
__LINE__)
|
105
|
+
line.more_than_one_space_after_comma?.should be_false
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should detect 0 spaces after a comma" do
|
109
|
+
line = FileLine.new(" def do_something this,that",
|
110
|
+
Pathname.new(__FILE__), __LINE__)
|
111
|
+
line.no_space_after_comma?.should be_true
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should be OK when 1 space after a comma" do
|
115
|
+
line = FileLine.new(" def do_something this, that",
|
116
|
+
Pathname.new(__FILE__), __LINE__)
|
117
|
+
line.no_space_after_comma?.should be_false
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should be OK when 0 spaces after a comma, but end of the line" do
|
121
|
+
line = FileLine.new(" # This is a comment that,\n",
|
122
|
+
Pathname.new(__FILE__), __LINE__)
|
123
|
+
line.no_space_after_comma?.should be_false
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context "before the comma" do
|
128
|
+
it "should detect 1 space before a comma" do
|
129
|
+
line = FileLine.new(" def do_something this , that",
|
130
|
+
Pathname.new(__FILE__), __LINE__)
|
131
|
+
line.space_before_comma?.should be_true
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should be OK when 0 spaces before a comma" do
|
135
|
+
line = FileLine.new(" def do_something this, that",
|
136
|
+
Pathname.new(__FILE__), __LINE__)
|
137
|
+
line.space_before_comma?.should be_false
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should be OK when no commas" do
|
141
|
+
line = FileLine.new(" def do_something that", Pathname.new(__FILE__),
|
142
|
+
__LINE__)
|
143
|
+
line.space_before_comma?.should be_false
|
144
|
+
end
|
91
145
|
end
|
146
|
+
end
|
92
147
|
|
93
|
-
|
94
|
-
|
95
|
-
|
148
|
+
context "parenthesis/bracket spacing" do
|
149
|
+
context "open parenthesis" do
|
150
|
+
it "should detect a space after" do
|
151
|
+
line = FileLine.new(" def do_something( that, this)",
|
152
|
+
Pathname.new(__FILE__), __LINE__)
|
153
|
+
line.space_after_open_parenthesis?.should be_true
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should be OK with no space after" do
|
157
|
+
line = FileLine.new(" def do_something(that, this)",
|
158
|
+
Pathname.new(__FILE__), __LINE__)
|
159
|
+
line.space_after_open_parenthesis?.should be_false
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
context "closed parenthesis" do
|
164
|
+
it "should detect a space before" do
|
165
|
+
line = FileLine.new(" def do_something(that, this )",
|
166
|
+
Pathname.new(__FILE__), __LINE__)
|
167
|
+
line.space_before_closed_parenthesis?.should be_true
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should be OK with no space after" do
|
171
|
+
line = FileLine.new(" def do_something(that, this)",
|
172
|
+
Pathname.new(__FILE__), __LINE__)
|
173
|
+
line.space_before_closed_parenthesis?.should be_false
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context "open bracket" do
|
178
|
+
it "should detect a space after" do
|
179
|
+
line = FileLine.new("[ that, this]",
|
180
|
+
Pathname.new(__FILE__), __LINE__)
|
181
|
+
line.space_after_open_bracket?.should be_true
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should be OK with no space after" do
|
185
|
+
line = FileLine.new("[that, this]",
|
186
|
+
Pathname.new(__FILE__), __LINE__)
|
187
|
+
line.space_after_open_bracket?.should be_false
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context "closed parenthesis" do
|
192
|
+
it "should detect a space before" do
|
193
|
+
line = FileLine.new(" def do_something(that, this )",
|
194
|
+
Pathname.new(__FILE__), __LINE__)
|
195
|
+
line.space_before_closed_parenthesis?.should be_true
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should be OK with no space after" do
|
199
|
+
line = FileLine.new(" def do_something(that, this)",
|
200
|
+
Pathname.new(__FILE__), __LINE__)
|
201
|
+
line.space_before_closed_parenthesis?.should be_false
|
202
|
+
end
|
96
203
|
end
|
97
204
|
end
|
98
205
|
|
99
206
|
context "comments" do
|
100
207
|
it "should detect a regular full line comment" do
|
101
|
-
line = FileLine.new
|
102
|
-
|
208
|
+
line = FileLine.new(" # This is a comment.", Pathname.new(__FILE__),
|
209
|
+
__LINE__)
|
210
|
+
line.comment_line?.should be_true
|
103
211
|
end
|
104
212
|
|
105
213
|
it "should skip code that's not a full line comment" do
|
106
|
-
line = FileLine.new
|
107
|
-
|
214
|
+
line = FileLine.new(" puts 'this is some code.'",
|
215
|
+
Pathname.new(__FILE__), __LINE__)
|
216
|
+
line.comment_line?.should be_false
|
108
217
|
end
|
109
218
|
end
|
110
219
|
|
111
220
|
context "line length" do
|
112
221
|
it "should detect greater than 80 characters" do
|
113
222
|
string_81_chars = '#' * 81
|
114
|
-
line = FileLine.new
|
223
|
+
line = FileLine.new(string_81_chars, Pathname.new(__FILE__), __LINE__)
|
115
224
|
line.too_long?.should be_true
|
116
225
|
end
|
117
226
|
|
118
227
|
it "should detect greater than 80 spaces" do
|
119
228
|
string_81_spaces = ' ' * 81
|
120
|
-
line = FileLine.new
|
229
|
+
line = FileLine.new(string_81_spaces, Pathname.new(__FILE__), __LINE__)
|
121
230
|
line.too_long?.should be_true
|
122
231
|
end
|
123
232
|
|
124
233
|
it "should be OK with 80 chars" do
|
125
234
|
string_80_chars = '#' * 80
|
126
|
-
line = FileLine.new
|
235
|
+
line = FileLine.new(string_80_chars, Pathname.new(__FILE__), __LINE__)
|
127
236
|
line.too_long?.should be_false
|
128
237
|
end
|
129
238
|
|
130
239
|
it "should be OK with 80 spaces" do
|
131
240
|
string_80_spaces = ' ' * 80
|
132
|
-
line = FileLine.new
|
241
|
+
line = FileLine.new(string_80_spaces, Pathname.new(__FILE__), __LINE__)
|
133
242
|
line.too_long?.should be_false
|
134
243
|
end
|
135
244
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Steve Loveless
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-26 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -114,7 +114,10 @@ dependencies:
|
|
114
114
|
type: :development
|
115
115
|
version_requirements: *id007
|
116
116
|
description: |+
|
117
|
-
|
117
|
+
tailor is an executable that recursively parses Ruby files in a
|
118
|
+
directory and checks them for bad style. Rules for judging style are based on
|
119
|
+
a number of style guides that are popular in the Ruby community. More on this
|
120
|
+
here http://wiki.github.com/turboladen/tailor.
|
118
121
|
|
119
122
|
email:
|
120
123
|
- steve.loveless@gmail.com
|
@@ -127,6 +130,7 @@ extra_rdoc_files:
|
|
127
130
|
- Manifest.txt
|
128
131
|
- PostInstall.txt
|
129
132
|
files:
|
133
|
+
- .autotest
|
130
134
|
- History.txt
|
131
135
|
- Manifest.txt
|
132
136
|
- PostInstall.txt
|
@@ -139,6 +143,8 @@ files:
|
|
139
143
|
- features/step_definitions/case_checking_steps.rb
|
140
144
|
- features/step_definitions/common_steps.rb
|
141
145
|
- features/step_definitions/spacing_steps.rb
|
146
|
+
- features/support/1_file_with_bad_comma_spacing/bad_comma_spacing.rb
|
147
|
+
- features/support/1_file_with_bad_parenthesis/bad_parenthesis.rb
|
142
148
|
- features/support/1_file_with_camel_case_class/camel_case_class.rb
|
143
149
|
- features/support/1_file_with_camel_case_method/camel_case_method.rb
|
144
150
|
- features/support/1_file_with_hard_tabs/hard_tab.rb
|
@@ -186,7 +192,7 @@ rdoc_options:
|
|
186
192
|
- - Manifest.txt
|
187
193
|
- History.txt
|
188
194
|
- --title
|
189
|
-
- tailor Documentation (0.0.
|
195
|
+
- tailor Documentation (0.0.3)
|
190
196
|
- --markup
|
191
197
|
- :rdoc
|
192
198
|
require_paths:
|