rubycritic 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,26 @@
1
- .smelly {
2
- display: inline;
3
- background-color: #FFE7C8;
1
+ .smells {
2
+ margin: 2px 0 22px 0;
3
+ padding-left: 0;
4
+ border: 1px solid #000;
5
+ background-color: #DDD;
6
+ white-space: normal;
7
+ list-style-type: disc;
4
8
  }
5
9
 
6
10
  .smell {
7
- background-color: #FFC8C8;
11
+ margin: 5px 5px 5px 30px;
12
+ font-size: 24px;
13
+ }
14
+
15
+ .smell.new {
16
+ color: #F00;
8
17
  }
9
18
 
10
19
  .smell.old {
11
- background-color: #DFDFDF;
20
+ color: #FA0;
21
+ }
22
+
23
+ .smell .description {
24
+ color: #000;
25
+ font-size: initial;
12
26
  }
@@ -0,0 +1,68 @@
1
+ /* Pretty printing styles. Used with prettify.js. */
2
+
3
+ /* SPAN elements with the classes below are added by prettyprint. */
4
+ .pln { /* plain text */
5
+ color: #000;
6
+ }
7
+
8
+ .str { /* string content */
9
+ color: #690;
10
+ }
11
+
12
+ .kwd { /* a keyword */
13
+ color: #07a;
14
+ }
15
+
16
+ .com { /* a comment */
17
+ color: #800;
18
+ }
19
+
20
+ .typ { /* a type name */
21
+ color: #905;
22
+ }
23
+
24
+ .lit { /* a literal value */
25
+ color: #a67f59;
26
+ }
27
+
28
+ .pun, .opn, .clo { /* punctuation, lisp open bracket, lisp close bracket */
29
+ color: #660;
30
+ }
31
+
32
+ .tag { /* a markup tag name */
33
+ color: #008;
34
+ }
35
+
36
+ .atn { /* a markup attribute name */
37
+ color: #606;
38
+ }
39
+
40
+ .atv { /* a markup attribute value */
41
+ color: #080;
42
+ }
43
+
44
+ .dec, .var { /* a declaration; a variable name */
45
+ color: #a67f59;
46
+ }
47
+
48
+ .fun { /* a function name */
49
+ color: red;
50
+ }
51
+
52
+ /* Put a border around prettyprinted code snippets. */
53
+ .prettyprint {
54
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
55
+ white-space: pre-wrap;
56
+ }
57
+
58
+ /* Specify class=linenums on a pre to get line numbering */
59
+ .prettyprint ol.linenums {
60
+ margin-top: 0;
61
+ margin-bottom: 0;
62
+ background-color: #EEEBE9;
63
+ padding-left: 66px;
64
+ }
65
+
66
+ .prettyprint li {
67
+ color: #999;
68
+ }
@@ -24,8 +24,12 @@ module Rubycritic
24
24
  raise NotImplementedError.new("You must implement the render file_name method.")
25
25
  end
26
26
 
27
- def stylesheet_path
28
- File.join(REPORT_DIR, "assets/stylesheets/application.css")
27
+ def javascript_path(file)
28
+ File.join(REPORT_DIR, "assets/javascripts/#{file}.js")
29
+ end
30
+
31
+ def stylesheet_path(file)
32
+ File.join(REPORT_DIR, "assets/stylesheets/#{file}.css")
29
33
  end
30
34
 
31
35
  def index_path
@@ -23,7 +23,7 @@ module Rubycritic
23
23
  end
24
24
 
25
25
  def analysed_file_name
26
- @pathname.basename.sub_ext('').to_s
26
+ @pathname.basename.sub_ext("").to_s
27
27
  end
28
28
 
29
29
  def render
@@ -31,7 +31,7 @@ module Rubycritic
31
31
  File.readlines(@pathname).each.with_index(LINE_NUMBER_OFFSET) do |line_text, line_number|
32
32
  location = Location.new(@pathname, line_number)
33
33
  line_smells = @smells.select { |smell| smell.located_in?(location) }
34
- file_code << LineGenerator.new(line_text, line_number, line_smells).render
34
+ file_code << LineGenerator.new(line_text, line_smells).render
35
35
  end
36
36
 
37
37
  file_body = FILE_TEMPLATE.result(self.get_binding { file_code })
@@ -5,13 +5,11 @@ require "cgi"
5
5
  module Rubycritic
6
6
 
7
7
  class LineGenerator < BaseGenerator
8
- LINE_NUMBER_PADDING = 3
9
8
  NORMAL_TEMPLATE = ERB.new(File.read(File.join(TEMPLATES_DIR, "line.html.erb")))
10
9
  SMELLY_TEMPLATE = ERB.new(File.read(File.join(TEMPLATES_DIR, "smelly_line.html.erb")))
11
10
 
12
- def initialize(text, number, smells)
11
+ def initialize(text, smells)
13
12
  @text = CGI::escapeHTML(text.chomp)
14
- @number = number.to_s.rjust(LINE_NUMBER_PADDING)
15
13
  @smells = smells
16
14
  @template =
17
15
  if @smells.empty?
@@ -1 +1,3 @@
1
- <pre><code><%= yield %></code></pre>
1
+ <button id="js-toggle-smells">Toggle Smells</button>
2
+
3
+ <code class="prettyprint linenums lang-ruby file-code js-file-code"><%= yield %></code>
@@ -4,13 +4,16 @@
4
4
  <meta charset="utf-8">
5
5
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
6
  <title>RubyCritic</title>
7
- <link href="<%= stylesheet_path %>" media="screen, projection, print" rel="stylesheet" type="text/css">
7
+ <link href="<%= stylesheet_path(:application) %>" media="screen, projection, print" rel="stylesheet" type="text/css">
8
+ <link href="<%= stylesheet_path(:'prettify.custom_theme') %>" media="screen, projection, print" rel="stylesheet" type="text/css">
8
9
  <meta name="description" content="">
9
10
  <meta name="viewport" content="width=device-width, initial-scale=1">
10
11
  </head>
11
12
  <body>
12
13
  <h1><a href="<%= index_path %>">RubyCritic</a></h1>
13
-
14
14
  <%= yield %>
15
+ <script src="<%= javascript_path(:'jquery-2.1.0') %>"></script>
16
+ <script src="<%= javascript_path(:prettify) %>"></script>
17
+ <script src="<%= javascript_path(:application) %>"></script>
15
18
  </body>
16
19
  </html>
@@ -1 +1 @@
1
- <%= @number %>. <%= @text %>
1
+ <%= @text %>
@@ -1 +1,7 @@
1
- <div class='smelly'><%= @number %>. <%= @text %><% @smells.each { |smell| %><span class="smell <%= smell.status %>"> # <%= smell %><span><% } %></div>
1
+ <%= @text %>
2
+
3
+ <ul class="nocode smells js-smells">
4
+ <% @smells.each do |smell| %>
5
+ <li class="smell <%= smell.status %>"><span class="description"><%= smell %></span></li>
6
+ <% end %>
7
+ </ul>
@@ -32,7 +32,7 @@ module Rubycritic
32
32
 
33
33
  def method_location(context)
34
34
  line = @flog.method_locations[context]
35
- file_path, file_line = line.split(':')
35
+ file_path, file_line = line.split(":")
36
36
  Location.new(file_path, file_line)
37
37
  end
38
38
  end
@@ -15,17 +15,17 @@ module Rubycritic
15
15
  head_reference && $?.success?
16
16
  end
17
17
 
18
+ def head_reference
19
+ `git rev-parse --verify HEAD`.chomp
20
+ end
21
+
18
22
  def travel_to_head
19
23
  if uncommited_changes?
20
- stashed_changes = `git stash` && $?.success?
24
+ stash_successful = stash_changes
21
25
  end
22
26
  yield
23
27
  ensure
24
- `git stash pop` if stashed_changes
25
- end
26
-
27
- def head_reference
28
- `git rev-parse --verify HEAD`.chomp
28
+ `git stash pop` if stash_successful
29
29
  end
30
30
 
31
31
  private
@@ -33,6 +33,17 @@ module Rubycritic
33
33
  def uncommited_changes?
34
34
  !`git status --porcelain`.empty?
35
35
  end
36
+
37
+ def stash_changes
38
+ stashes_count_before = stashes_count
39
+ `git stash`
40
+ stashes_count_after = stashes_count
41
+ stashes_count_after > stashes_count_before
42
+ end
43
+
44
+ def stashes_count
45
+ `git stash list`.split("\n").length
46
+ end
36
47
  end
37
48
 
38
49
  end
@@ -28,13 +28,13 @@ module Rubycritic
28
28
  raise NotImplementedError.new("You must implement the has_revision? method.")
29
29
  end
30
30
 
31
- def travel_to_head
32
- raise NotImplementedError.new("You must implement the travel_to_head method.")
33
- end
34
-
35
31
  def head_reference
36
32
  raise NotImplementedError.new("You must implement the head_reference method.")
37
33
  end
34
+
35
+ def travel_to_head
36
+ raise NotImplementedError.new("You must implement the travel_to_head method.")
37
+ end
38
38
  end
39
39
 
40
40
  end
@@ -1,11 +1,13 @@
1
+ require "pathname"
2
+
1
3
  module Rubycritic
2
4
 
3
5
  class SourceLocator
4
6
  RUBY_EXTENSION = ".rb"
5
7
  RUBY_FILES = File.join("**", "*#{RUBY_EXTENSION}")
6
8
 
7
- def initialize(dirs)
8
- @dirs = dirs
9
+ def initialize(paths)
10
+ @user_paths = paths
9
11
  end
10
12
 
11
13
  def pathnames
@@ -19,14 +21,18 @@ module Rubycritic
19
21
  private
20
22
 
21
23
  def expand_paths
22
- @dirs.map do |path|
24
+ @user_paths.map do |path|
23
25
  if File.directory?(path)
24
- Pathname.glob(RUBY_FILES)
26
+ Pathname.glob(files_contained_in(path))
25
27
  elsif File.exists?(path) && File.extname(path) == RUBY_EXTENSION
26
28
  Pathname.new(path)
27
29
  end
28
30
  end.flatten.compact.sort
29
31
  end
32
+
33
+ def files_contained_in(path)
34
+ (path == ".") ? RUBY_FILES : File.join(path, RUBY_FILES)
35
+ end
30
36
  end
31
37
 
32
38
  end
@@ -1,3 +1,3 @@
1
1
  module Rubycritic
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/rubycritic.rb CHANGED
@@ -12,8 +12,8 @@ module Rubycritic
12
12
  @source_control_system = SourceControlSystem.create
13
13
  end
14
14
 
15
- def critique(dirs)
16
- source = SourceLocator.new(dirs)
15
+ def critique(paths)
16
+ source = SourceLocator.new(paths)
17
17
  if @source_control_system.has_revision?
18
18
  smelly_pathnames = RevisionComparator.new(source.paths, @source_control_system).compare
19
19
  else
data/rubycritic.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  Ruby Critic is a tool that detects and reports smells in Ruby classes, modules and methods.
13
13
  EOF
14
14
  spec.summary = "Ruby code smell detector"
15
- spec.homepage = "https://github.com/GuilhermeSimoes/rubycritic"
15
+ spec.homepage = "https://github.com/whitesmith/rubycritic"
16
16
  spec.license = "MIT"
17
17
 
18
18
  spec.files = `git ls-files`.split("\n")
@@ -1,6 +1,5 @@
1
1
  require "test_helper"
2
2
  require "rubycritic/source_locator"
3
- require "pathname"
4
3
 
5
4
  describe Rubycritic::SourceLocator do
6
5
  before do
@@ -14,7 +13,7 @@ describe Rubycritic::SourceLocator do
14
13
  Rubycritic::SourceLocator.new(paths).paths.must_equal paths
15
14
  end
16
15
 
17
- it "finds multiple paths" do
16
+ it "finds files through multiple paths" do
18
17
  paths = ["dir1/file1.rb", "file0.rb"]
19
18
  Rubycritic::SourceLocator.new(paths).paths.must_equal paths
20
19
  end
@@ -24,12 +23,17 @@ describe Rubycritic::SourceLocator do
24
23
  Rubycritic::SourceLocator.new(["."]).paths.must_equal paths
25
24
  end
26
25
 
27
- it "ignores non-existent paths" do
26
+ it "finds all the files inside a given directory" do
27
+ paths = ["dir1/file1.rb"]
28
+ Rubycritic::SourceLocator.new(["dir1"]).paths.must_equal paths
29
+ end
30
+
31
+ it "ignores paths to non-existent files" do
28
32
  paths = ["non_existent_dir1/non_existent_file1.rb", "non_existent_file0.rb"]
29
33
  Rubycritic::SourceLocator.new(paths).paths.must_equal []
30
34
  end
31
35
 
32
- it "ignores existent paths that do not match the Ruby extension" do
36
+ it "ignores paths to files that do not match the Ruby extension" do
33
37
  paths = ["file_with_no_extension", "file_with_different_extension.py"]
34
38
  Rubycritic::SourceLocator.new(paths).paths.must_equal []
35
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubycritic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Simoes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-28 00:00:00.000000000 Z
11
+ date: 2014-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -132,7 +132,11 @@ files:
132
132
  - lib/rubycritic/analysers_runner.rb
133
133
  - lib/rubycritic/cli.rb
134
134
  - lib/rubycritic/location.rb
135
+ - lib/rubycritic/report_generators/assets/javascripts/application.js
136
+ - lib/rubycritic/report_generators/assets/javascripts/jquery-2.1.0.js
137
+ - lib/rubycritic/report_generators/assets/javascripts/prettify.js
135
138
  - lib/rubycritic/report_generators/assets/stylesheets/application.css
139
+ - lib/rubycritic/report_generators/assets/stylesheets/prettify.custom_theme.css
136
140
  - lib/rubycritic/report_generators/base_generator.rb
137
141
  - lib/rubycritic/report_generators/file_generator.rb
138
142
  - lib/rubycritic/report_generators/index_generator.rb
@@ -173,7 +177,7 @@ files:
173
177
  - test/samples/reek/not_smelly.rb
174
178
  - test/samples/reek/smelly.rb
175
179
  - test/test_helper.rb
176
- homepage: https://github.com/GuilhermeSimoes/rubycritic
180
+ homepage: https://github.com/whitesmith/rubycritic
177
181
  licenses:
178
182
  - MIT
179
183
  metadata: {}