rubomatic-html 1.0.0 → 1.1.0.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b7c76016bb1d33526a70bf322a25f55569c3d93a50bf3795bd7d4ded5c99fd7
4
- data.tar.gz: c7e5015c673fab3d8c42cbafc3b3355a660c0786d1a5775a1797d838fd2f324d
3
+ metadata.gz: 3d985a291d36eb06963475488bcad31d4ef42b5287f39d8c471b51ac364d19fa
4
+ data.tar.gz: e940e2f30fa3c4d11ddb100838063b1e4d5ac34e27659e594d19ab82adc5e2c3
5
5
  SHA512:
6
- metadata.gz: 305f5ad46e7711590c445f3b60edfa27960cfd985012b9929901c94b5137af2d1a9e70c173439420302dd29f3b72a1f3dddce3f8c8cbdbe02117bfaf6a0ed6ea
7
- data.tar.gz: dd716790e59ac5c9fdca784ddddeb3d9231b6022862cd7ebd02887a5636a3646cf137521d7b6e509fdb58ce9e236fb605c4ff4f9bbb9f29b6f43107fb006e976
6
+ metadata.gz: 4452adb9001087bf0d0c7aa7d4faee2992fdb827b3267bf9159cb3f5b218405b437200d832b2915c249f2c23f61a7f29005fb6d38b0f5b0f4b24a3528d16ff8f
7
+ data.tar.gz: 74e8d74a3aeddc5e00123a080718eb8d63df37d77a2eac0f6bbe1d581a977eec0cd9915e43824ef5e95e1bdec0f0624176de63099bb43eb5163131185a217ad1
data/exe/rubomatic-html CHANGED
@@ -19,4 +19,4 @@ end
19
19
 
20
20
  parsed.parse!(into: options)
21
21
 
22
- RubomaticHtml::Runner.new(options[:'linting-files']).run
22
+ Rubomatic::Html::Runner.new(options[:'linting-files']).run
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubomatic
4
+ module Html
5
+ module Cop
6
+ class Base
7
+ # @return [String]
8
+ attr_accessor :file
9
+
10
+ # Name for cop
11
+ #
12
+ # @return [String]
13
+ #
14
+ def self.name
15
+ 'Base'
16
+ end
17
+
18
+ # :nodoc:
19
+ def initialize(file)
20
+ @file = file
21
+ end
22
+
23
+ private
24
+
25
+ # Outputs filename:line_number locations of HTML files that trigger the cop
26
+ #
27
+ # @param _line [String] the line in the html
28
+ # @param _index [Integer] the 1-index of the line
29
+ #
30
+ # @return [void]
31
+ #
32
+ def run_for_line(_line, _index)
33
+ error_message = <<~TEXT
34
+ Warning: Method `run_for_line` needs overridden! Some cops may not display failing messages.
35
+ TEXT
36
+
37
+ puts("\e[33m#{error_message}\e[0m")
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubomatic
4
+ module Html
5
+ module Cop
6
+ module Layout
7
+ class Base < Rubomatic::Html::Cop::Base
8
+ # Department for cop
9
+ #
10
+ # @return [String]
11
+ #
12
+ def self.department
13
+ 'Layout'
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
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
@@ -0,0 +1,40 @@
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
@@ -0,0 +1,26 @@
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
@@ -0,0 +1,19 @@
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
@@ -0,0 +1,28 @@
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
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rubomatic
4
+ module Html
5
+ VERSION = '1.1.0-rc.1'
6
+ end
7
+ end
@@ -0,0 +1,115 @@
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.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
@@ -1,113 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pathname'
4
- require_relative 'rubomatic-html/cop/cops'
5
- require_relative 'rubomatic-html/version'
6
- require 'yaml'
7
-
8
- module RubomaticHtml
9
- class Runner
10
- PROJECT_ROOT = Pathname.new(__dir__).parent.expand_path.freeze
11
- CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze
12
- CONFIG = ::YAML.safe_load(CONFIG_DEFAULT.read).freeze
13
-
14
- # @return [Array<String>]
15
- attr_accessor :files_to_lint
16
- # @return [Hash]
17
- attr_accessor :config
18
-
19
- # @param linted_files [Array<String>]
20
- #
21
- def initialize(linted_files)
22
- files_to_lint = Array(linted_files)
23
-
24
- if files_to_lint.empty?
25
- files_to_lint = Dir[File.join('app', 'views', '**', '*')]
26
- end
27
-
28
- @files_to_lint = files_to_lint
29
-
30
- custom_config = ::YAML.safe_load(Pathname.new('.rubomatic-html.yml').read).freeze
31
-
32
- config = {}
33
-
34
- CONFIG.each do |cop, cop_config|
35
- config[cop] = {}
36
- config[cop][:enabled] = cop_config['Enabled']
37
- config[cop][:exclude] = Array(cop_config['Exclude'])
38
-
39
- if custom_config.fetch(cop, {}).has_key?('Enabled')
40
- config[cop][:enabled] = custom_config[cop]['Enabled']
41
- end
42
-
43
- if custom_config.fetch(cop, {}).has_key?('Exclude')
44
- config[cop][:exclude] = Array(custom_config[cop]['Exclude'])
45
- end
46
- end
47
-
48
- @config = config
49
- end
50
-
51
- # Runs all cops against all files
52
- #
53
- # @return [void]
54
- #
55
- def run
56
- all_config = config.fetch('AllCops')
57
-
58
- files_to_lint.each do |file|
59
- next if all_config.fetch(:exclude).any? { |ignored| file.end_with?(ignored) }
60
-
61
- ext = File.extname(file)
62
-
63
- next if ext.match?(/haml/i)
64
-
65
- check_it = ext.match?(/html/i)
66
- check_it ||= ext.match?(/erb\z/i)
67
-
68
- next unless check_it
69
-
70
- run_file(file)
71
- end
72
- end
73
-
74
- private
75
-
76
- # List of all cops available
77
- #
78
- # @return [Array<*>]
79
- #
80
- def all_cops
81
- @all_cops ||= [
82
- RubomaticHtml::Cop::Layout::LineLength,
83
- RubomaticHtml::Cop::Layout::MultipleLineBreaks,
84
- RubomaticHtml::Cop::Layout::TrailingWhitespace,
85
- RubomaticHtml::Cop::Style::PartialInstanceVariable
86
- ]
87
- end
88
-
89
- # Runs all cops against a given file
90
- #
91
- # @param file [String]
92
- #
93
- # @return [void]
94
- #
95
- def run_file(file)
96
- cops = all_cops.filter_map do |cop|
97
- next unless config.dig(cop.name, :enabled)
98
-
99
- cop.new(file)
100
- end
101
-
102
- return if cops.empty?
103
-
104
- File.open(file).each_line(chomp: true).with_index(1) do |line, index|
105
- cops.each do |cop|
106
- next if config.dig(cop.class.name).fetch(:exclude, []).any? { |ignored| file.end_with?(ignored) }
107
-
108
- cop.run_for_line(line, index)
109
- end
110
- end
111
- end
112
- end
113
- end
3
+ require_relative 'rubomatic/html'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubomatic-html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0.pre.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brands Insurance
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-03 00:00:00.000000000 Z
11
+ date: 2023-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubomatic
@@ -44,15 +44,16 @@ files:
44
44
  - docs/cops/style/partial_instance_variable/README.adoc
45
45
  - exe/rubomatic-html
46
46
  - lib/rubomatic-html.rb
47
- - lib/rubomatic-html/cop/base.rb
48
- - lib/rubomatic-html/cop/cops.rb
49
- - lib/rubomatic-html/cop/layout/base.rb
50
- - lib/rubomatic-html/cop/layout/line_length.rb
51
- - lib/rubomatic-html/cop/layout/multiple_line_breaks.rb
52
- - lib/rubomatic-html/cop/layout/trailing_whitespace.rb
53
- - lib/rubomatic-html/cop/style/base.rb
54
- - lib/rubomatic-html/cop/style/partial_instance_variable.rb
55
- - lib/rubomatic-html/version.rb
47
+ - lib/rubomatic/html.rb
48
+ - lib/rubomatic/html/cop/base.rb
49
+ - lib/rubomatic/html/cop/cops.rb
50
+ - lib/rubomatic/html/cop/layout/base.rb
51
+ - lib/rubomatic/html/cop/layout/line_length.rb
52
+ - lib/rubomatic/html/cop/layout/multiple_line_breaks.rb
53
+ - lib/rubomatic/html/cop/layout/trailing_whitespace.rb
54
+ - lib/rubomatic/html/cop/style/base.rb
55
+ - lib/rubomatic/html/cop/style/partial_instance_variable.rb
56
+ - lib/rubomatic/html/version.rb
56
57
  homepage: https://github.com/BrandsInsurance/expert-chainsaw/
57
58
  licenses:
58
59
  - MIT
@@ -72,9 +73,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
73
  version: 3.0.1
73
74
  required_rubygems_version: !ruby/object:Gem::Requirement
74
75
  requirements:
75
- - - ">="
76
+ - - ">"
76
77
  - !ruby/object:Gem::Version
77
- version: '0'
78
+ version: 1.3.1
78
79
  requirements: []
79
80
  rubygems_version: 3.2.15
80
81
  signing_key:
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- module Cop
5
- class Base
6
- # @return [String]
7
- attr_accessor :file
8
-
9
- # Name for cop
10
- #
11
- # @return [String]
12
- #
13
- def self.name
14
- 'Base'
15
- end
16
-
17
- # :nodoc:
18
- def initialize(file)
19
- @file = file
20
- end
21
-
22
- private
23
-
24
- # Outputs filename:line_number locations of HTML files that trigger the cop
25
- #
26
- # @param _line [String] the line in the html
27
- # @param _index [Integer] the 1-index of the line
28
- #
29
- # @return [void]
30
- #
31
- def run_for_line(_line, _index)
32
- error_message = <<~TEXT
33
- Warning: Method `run_for_line` needs overridden! Some cops may not display failing messages.
34
- TEXT
35
-
36
- puts("\e[33m#{error_message}\e[0m")
37
- end
38
- end
39
- end
40
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- module Cop
5
- module Layout
6
- class Base < RubomaticHtml::Cop::Base
7
- # Department for cop
8
- #
9
- # @return [String]
10
- #
11
- def self.department
12
- 'Layout'
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- module Cop
5
- module Layout
6
- class LineLength < RubomaticHtml::Cop::Layout::Base
7
- # Name for the cop
8
- #
9
- # @return [String]
10
- #
11
- def self.name
12
- [department, 'LineLength'].join('/')
13
- end
14
-
15
- # @see super
16
- def run_for_line(line, index)
17
- return if line.size <= 120
18
-
19
- puts("#{file}:#{index}: is over 120 characters")
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- module Cop
5
- module Layout
6
- class MultipleLineBreaks < RubomaticHtml::Cop::Layout::Base
7
- # @return [Boolean] tracks multiple consecutive line breaks
8
- attr_accessor :prev_break
9
-
10
- # Name for the cop
11
- #
12
- # @return [String]
13
- #
14
- def self.name
15
- [department, 'MultipleLineBreaks'].join('/')
16
- end
17
-
18
- # :nodoc:
19
- def initialize(file)
20
- super
21
-
22
- @prev_break = false
23
- end
24
-
25
- # @see super
26
- def run_for_line(line, index)
27
- if prev_break && line.empty?
28
- puts("#{file}:#{index}: has multiple line breaks")
29
- elsif line.empty?
30
- @prev_break = true
31
- else
32
- @prev_break = false
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- module Cop
5
- module Layout
6
- class TrailingWhitespace < RubomaticHtml::Cop::Layout::Base
7
- # Name for the cop
8
- #
9
- # @return [String]
10
- #
11
- def self.name
12
- [department, 'TrailingWhitespace'].join('/')
13
- end
14
-
15
- # @see super
16
- def run_for_line(line, index)
17
- return unless line.match?(/\s\z/i)
18
-
19
- puts("#{file}:#{index}: has trailing whitespace")
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- module Cop
5
- module Style
6
- class Base < RubomaticHtml::Cop::Base
7
- # Department for cop
8
- #
9
- # @return [String]
10
- #
11
- def self.department
12
- 'Style'
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- module Cop
5
- module Style
6
- class PartialInstanceVariable < RubomaticHtml::Cop::Style::Base
7
- # Name for the cop
8
- #
9
- # @return [String]
10
- #
11
- def self.name
12
- [department, 'PartialInstanceVariable'].join('/')
13
- end
14
-
15
- # @see super
16
- def run_for_line(line, index)
17
- return unless File.basename(file).match?(/^_/i)
18
-
19
- return unless line.match?(/@/i)
20
-
21
- puts("#{file}:#{index}: might use an instance variable")
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RubomaticHtml
4
- VERSION = '1.0.0'
5
- end
File without changes