rubomatic-html 1.1.0.pre.rc.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +25 -1
- data/config/default.yml +28 -0
- data/docs/cops/style/README.adoc +9 -0
- data/docs/cops/style/no_fields_for/README.adoc +28 -0
- data/docs/cops/style/no_form_for/README.adoc +28 -0
- data/docs/cops/style/no_form_tag/README.adoc +28 -0
- data/docs/cops/style/no_on_before_unload/README.adoc +29 -0
- data/docs/cops/style/no_on_click/README.adoc +29 -0
- data/docs/cops/style/no_on_drag/README.adoc +29 -0
- data/docs/cops/style/no_on_load/README.adoc +29 -0
- data/docs/cops/style/no_on_unload/README.adoc +29 -0
- data/docs/cops/style/no_on_wheel/README.adoc +29 -0
- data/exe/rubomatic-html +1 -1
- data/lib/rubomatic-html/cop/base.rb +58 -0
- data/lib/rubomatic-html/cop/cops.rb +19 -0
- data/lib/rubomatic-html/cop/layout/base.rb +17 -0
- data/lib/rubomatic-html/cop/layout/line_length.rb +28 -0
- data/lib/rubomatic-html/cop/layout/multiple_line_breaks.rb +42 -0
- data/lib/rubomatic-html/cop/layout/trailing_whitespace.rb +28 -0
- data/lib/rubomatic-html/cop/style/base.rb +17 -0
- data/lib/rubomatic-html/cop/style/no_fields_for.rb +28 -0
- data/lib/rubomatic-html/cop/style/no_form_for.rb +28 -0
- data/lib/rubomatic-html/cop/style/no_form_tag.rb +28 -0
- data/lib/rubomatic-html/cop/style/no_on_attribute.rb +31 -0
- data/lib/rubomatic-html/cop/style/no_on_before_unload.rb +27 -0
- data/lib/rubomatic-html/cop/style/no_on_click.rb +27 -0
- data/lib/rubomatic-html/cop/style/no_on_drag.rb +27 -0
- data/lib/rubomatic-html/cop/style/no_on_load.rb +27 -0
- data/lib/rubomatic-html/cop/style/no_on_unload.rb +27 -0
- data/lib/rubomatic-html/cop/style/no_on_wheel.rb +27 -0
- data/lib/rubomatic-html/cop/style/partial_instance_variable.rb +44 -0
- data/lib/rubomatic-html/generator/cop_readme_injector.rb +48 -0
- data/lib/rubomatic-html/generator/dept_readme_injector.rb +111 -0
- data/lib/rubomatic-html/generator.rb +330 -0
- data/lib/rubomatic-html/inject.rb +19 -0
- data/lib/rubomatic-html/runner.rb +129 -0
- data/lib/rubomatic-html/version.rb +5 -0
- data/lib/rubomatic-html.rb +11 -1
- metadata +49 -20
- data/lib/rubomatic/html/cop/base.rb +0 -42
- data/lib/rubomatic/html/cop/cops.rb +0 -9
- data/lib/rubomatic/html/cop/layout/base.rb +0 -19
- data/lib/rubomatic/html/cop/layout/line_length.rb +0 -26
- data/lib/rubomatic/html/cop/layout/multiple_line_breaks.rb +0 -40
- data/lib/rubomatic/html/cop/layout/trailing_whitespace.rb +0 -26
- data/lib/rubomatic/html/cop/style/base.rb +0 -19
- data/lib/rubomatic/html/cop/style/partial_instance_variable.rb +0 -28
- data/lib/rubomatic/html/version.rb +0 -7
- data/lib/rubomatic/html.rb +0 -115
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rubomatic
|
4
|
-
module Html
|
5
|
-
module Cop
|
6
|
-
module Layout
|
7
|
-
class LineLength < Rubomatic::Html::Cop::Layout::Base
|
8
|
-
# Name for the cop
|
9
|
-
#
|
10
|
-
# @return [String]
|
11
|
-
#
|
12
|
-
def self.name
|
13
|
-
[department, 'LineLength'].join('/')
|
14
|
-
end
|
15
|
-
|
16
|
-
# @see super
|
17
|
-
def run_for_line(line, index)
|
18
|
-
return if line.size <= 120
|
19
|
-
|
20
|
-
puts("#{file}:#{index}: is over 120 characters")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rubomatic
|
4
|
-
module Html
|
5
|
-
module Cop
|
6
|
-
module Layout
|
7
|
-
class MultipleLineBreaks < Rubomatic::Html::Cop::Layout::Base
|
8
|
-
# @return [Boolean] tracks multiple consecutive line breaks
|
9
|
-
attr_accessor :prev_break
|
10
|
-
|
11
|
-
# Name for the cop
|
12
|
-
#
|
13
|
-
# @return [String]
|
14
|
-
#
|
15
|
-
def self.name
|
16
|
-
[department, 'MultipleLineBreaks'].join('/')
|
17
|
-
end
|
18
|
-
|
19
|
-
# :nodoc:
|
20
|
-
def initialize(file)
|
21
|
-
super
|
22
|
-
|
23
|
-
@prev_break = false
|
24
|
-
end
|
25
|
-
|
26
|
-
# @see super
|
27
|
-
def run_for_line(line, index)
|
28
|
-
if prev_break && line.empty?
|
29
|
-
puts("#{file}:#{index}: has multiple line breaks")
|
30
|
-
elsif line.empty?
|
31
|
-
@prev_break = true
|
32
|
-
else
|
33
|
-
@prev_break = false
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rubomatic
|
4
|
-
module Html
|
5
|
-
module Cop
|
6
|
-
module Layout
|
7
|
-
class TrailingWhitespace < Rubomatic::Html::Cop::Layout::Base
|
8
|
-
# Name for the cop
|
9
|
-
#
|
10
|
-
# @return [String]
|
11
|
-
#
|
12
|
-
def self.name
|
13
|
-
[department, 'TrailingWhitespace'].join('/')
|
14
|
-
end
|
15
|
-
|
16
|
-
# @see super
|
17
|
-
def run_for_line(line, index)
|
18
|
-
return unless line.match?(/\s\z/i)
|
19
|
-
|
20
|
-
puts("#{file}:#{index}: has trailing whitespace")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rubomatic
|
4
|
-
module Html
|
5
|
-
module Cop
|
6
|
-
module Style
|
7
|
-
class Base < Rubomatic::Html::Cop::Base
|
8
|
-
# Department for cop
|
9
|
-
#
|
10
|
-
# @return [String]
|
11
|
-
#
|
12
|
-
def self.department
|
13
|
-
'Style'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rubomatic
|
4
|
-
module Html
|
5
|
-
module Cop
|
6
|
-
module Style
|
7
|
-
class PartialInstanceVariable < Rubomatic::Html::Cop::Style::Base
|
8
|
-
# Name for the cop
|
9
|
-
#
|
10
|
-
# @return [String]
|
11
|
-
#
|
12
|
-
def self.name
|
13
|
-
[department, 'PartialInstanceVariable'].join('/')
|
14
|
-
end
|
15
|
-
|
16
|
-
# @see super
|
17
|
-
def run_for_line(line, index)
|
18
|
-
return unless File.basename(file).match?(/^_/i)
|
19
|
-
|
20
|
-
return unless line.match?(/@/i)
|
21
|
-
|
22
|
-
puts("#{file}:#{index}: might use an instance variable")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/lib/rubomatic/html.rb
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'pathname'
|
4
|
-
require_relative 'html/cop/cops'
|
5
|
-
require_relative 'html/version'
|
6
|
-
require 'yaml'
|
7
|
-
|
8
|
-
module Rubomatic
|
9
|
-
module Html
|
10
|
-
class Runner
|
11
|
-
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
|
12
|
-
CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze
|
13
|
-
CONFIG = ::YAML.safe_load(CONFIG_DEFAULT.read).freeze
|
14
|
-
|
15
|
-
# @return [Array<String>]
|
16
|
-
attr_accessor :files_to_lint
|
17
|
-
# @return [Hash]
|
18
|
-
attr_accessor :config
|
19
|
-
|
20
|
-
# @param linted_files [Array<String>]
|
21
|
-
#
|
22
|
-
def initialize(linted_files)
|
23
|
-
files_to_lint = Array(linted_files)
|
24
|
-
|
25
|
-
if files_to_lint.empty?
|
26
|
-
files_to_lint = Dir[File.join('app', 'views', '**', '*')]
|
27
|
-
end
|
28
|
-
|
29
|
-
@files_to_lint = files_to_lint
|
30
|
-
|
31
|
-
custom_config = ::YAML.safe_load(Pathname.new('.rubomatic-html.yml').read).freeze
|
32
|
-
|
33
|
-
config = {}
|
34
|
-
|
35
|
-
CONFIG.each do |cop, cop_config|
|
36
|
-
config[cop] = {}
|
37
|
-
config[cop][:enabled] = cop_config['Enabled']
|
38
|
-
config[cop][:exclude] = Array(cop_config['Exclude'])
|
39
|
-
|
40
|
-
if custom_config.fetch(cop, {}).has_key?('Enabled')
|
41
|
-
config[cop][:enabled] = custom_config[cop]['Enabled']
|
42
|
-
end
|
43
|
-
|
44
|
-
if custom_config.fetch(cop, {}).has_key?('Exclude')
|
45
|
-
config[cop][:exclude] = Array(custom_config[cop]['Exclude'])
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
@config = config
|
50
|
-
end
|
51
|
-
|
52
|
-
# Runs all cops against all files
|
53
|
-
#
|
54
|
-
# @return [void]
|
55
|
-
#
|
56
|
-
def run
|
57
|
-
all_config = config.fetch('AllCops')
|
58
|
-
|
59
|
-
files_to_lint.each do |file|
|
60
|
-
next if all_config.fetch(:exclude).any? { |ignored| file.end_with?(ignored) }
|
61
|
-
|
62
|
-
ext = File.extname(file)
|
63
|
-
|
64
|
-
next if ext.match?(/haml/i)
|
65
|
-
|
66
|
-
check_it = ext.match?(/html/i)
|
67
|
-
check_it ||= ext.match?(/erb\z/i)
|
68
|
-
|
69
|
-
next unless check_it
|
70
|
-
|
71
|
-
run_file(file)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
private
|
76
|
-
|
77
|
-
# List of all cops available
|
78
|
-
#
|
79
|
-
# @return [Array<*>]
|
80
|
-
#
|
81
|
-
def all_cops
|
82
|
-
@all_cops ||= [
|
83
|
-
Rubomatic::Html::Cop::Layout::LineLength,
|
84
|
-
Rubomatic::Html::Cop::Layout::MultipleLineBreaks,
|
85
|
-
Rubomatic::Html::Cop::Layout::TrailingWhitespace,
|
86
|
-
Rubomatic::Html::Cop::Style::PartialInstanceVariable
|
87
|
-
]
|
88
|
-
end
|
89
|
-
|
90
|
-
# Runs all cops against a given file
|
91
|
-
#
|
92
|
-
# @param file [String]
|
93
|
-
#
|
94
|
-
# @return [void]
|
95
|
-
#
|
96
|
-
def run_file(file)
|
97
|
-
cops = all_cops.filter_map do |cop|
|
98
|
-
next unless config.dig(cop.name, :enabled)
|
99
|
-
|
100
|
-
cop.new(file)
|
101
|
-
end
|
102
|
-
|
103
|
-
return if cops.empty?
|
104
|
-
|
105
|
-
File.open(file).each_line(chomp: true).with_index(1) do |line, index|
|
106
|
-
cops.each do |cop|
|
107
|
-
next if config.dig(cop.class.name).fetch(:exclude, []).any? { |ignored| file.end_with?(ignored) }
|
108
|
-
|
109
|
-
cop.run_for_line(line, index)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|