Class: RuboCop::Formatter::ExtensionReviewFormatter::ERBContext
- Inherits:
-
Object
- Object
- RuboCop::Formatter::ExtensionReviewFormatter::ERBContext
- Includes:
- PathUtil, TextUtil
- Defined in:
- lib/rubocop/sketchup/formatter/extension_review.rb
Overview
This class provides helper methods used in the ERB template.
Constant Summary collapse
- SEVERITY_COLORS =
{ refactor: Color.new(0xED, 0x9C, 0x28, 1.0), convention: Color.new(0xED, 0x9C, 0x28, 1.0), warning: Color.new(0x96, 0x28, 0xEF, 1.0), error: Color.new(0xD2, 0x32, 0x2D, 1.0), fatal: Color.new(0xD2, 0x32, 0x2D, 1.0) }.freeze
- LOGO_IMAGE_PATH =
File.('../../../../../assets/logo.png', __FILE__)
- SORT_ORDER =
%w[ SketchupRequirements SketchupDeprecations SketchupPerformance SketchupSuggestions ]- DEPARTMENT_DESCRIPTIONS =
{ 'SketchupRequirements' => " This is the most important set of checks. They represent a large\n part of the technical requirements an extension must pass in order\n to be hosted on Extension Warehouse.\n\n They have been designed to prevent extensions from conflicting with\n each other as well as avoiding bad side-effects for the end user.\n\n Please address these as soon as possible.\n DESCRIPTION\n 'SketchupDeprecations' => <<-DESCRIPTION,\n This department checks for usage of deprecated features. It's\n recommended that you migrate your code away from deprecated features\n of the SketchUp API.\n\n This department is not a requirement for submission to\n Extension Warehouse.\n DESCRIPTION\n 'SketchupPerformance' => <<-DESCRIPTION,\n This department looks for known patterns that have noticeable\n performance impact on SketchUp and/or your extension. It's worth\n looking into these warnings and investigate whether performance\n can be improved.\n\n This department is not a requirement for submission to\n Extension Warehouse.\n DESCRIPTION\n 'SketchupSuggestions' => <<-DESCRIPTION,\n This department is a collection of suggestions for best practices\n that aim to improve the general quality of your extension. Some of\n these might be more noisy than the rest of the cops. Disable as\n needed after reviewing the suggestions.\n\n This department is not a requirement for submission to\n Extension Warehouse.\n DESCRIPTION\n}\n",
Instance Attribute Summary collapse
-
#categories ⇒ Object
readonly
Returns the value of attribute categories.
-
#files ⇒ Object
readonly
Returns the value of attribute files.
-
#summary ⇒ Object
readonly
Returns the value of attribute summary.
Instance Method Summary collapse
- #base64_encoded_logo_image ⇒ Object
-
#binding ⇒ Object
Make Kernel#binding public.
- #cop_anchor(cop_name) ⇒ Object
- #decorated_message(offense) ⇒ Object
- #department(cop_name) ⇒ Object
- #department_description(cop_name) ⇒ Object
- #department_offense_count(cop_name) ⇒ Object
- #escape(s) ⇒ Object
- #format_plain_text(text) ⇒ Object
- #highlighted_source_line(offense) ⇒ Object
- #hightlight_source_tag(offense) ⇒ Object
-
#initialize(categories, files, summary) ⇒ ERBContext
constructor
A new instance of ERBContext.
- #new_department?(cop_name) ⇒ Boolean
- #possible_ellipses(location) ⇒ Object
- #sort_categories(categories) ⇒ Object
- #source_after_highlight(offense) ⇒ Object
- #source_before_highlight(offense) ⇒ Object
Constructor Details
#initialize(categories, files, summary) ⇒ ERBContext
Returns a new instance of ERBContext.
132 133 134 135 136 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 132 def initialize(categories, files, summary) @categories = sort_categories(categories) @files = files.sort @summary = summary end |
Instance Attribute Details
#categories ⇒ Object (readonly)
Returns the value of attribute categories.
130 131 132 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 130 def categories @categories end |
#files ⇒ Object (readonly)
Returns the value of attribute files.
130 131 132 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 130 def files @files end |
#summary ⇒ Object (readonly)
Returns the value of attribute summary.
130 131 132 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 130 def summary @summary end |
Instance Method Details
#base64_encoded_logo_image ⇒ Object
232 233 234 235 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 232 def base64_encoded_logo_image image = File.read(LOGO_IMAGE_PATH, binmode: true) Base64.encode64(image) end |
#binding ⇒ Object
Make Kernel#binding public.
185 186 187 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 185 def binding super end |
#cop_anchor(cop_name) ⇒ Object
222 223 224 225 226 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 222 def cop_anchor(cop_name) title = cop_name.downcase title.tr!('/', '_') "offense_#{title}" end |
#decorated_message(offense) ⇒ Object
189 190 191 192 193 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 189 def (offense) offense..gsub(/`(.+?)`/) do "<code>#{Regexp.last_match(1)}</code>" end end |
#department(cop_name) ⇒ Object
138 139 140 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 138 def department(cop_name) cop_name.split('/').first end |
#department_description(cop_name) ⇒ Object
142 143 144 145 146 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 142 def department_description(cop_name) dep = department(cop_name) text = DEPARTMENT_DESCRIPTIONS[dep] || 'MISSING DESCRIPTION' format_plain_text(text) end |
#department_offense_count(cop_name) ⇒ Object
148 149 150 151 152 153 154 155 156 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 148 def department_offense_count(cop_name) dep = department(cop_name) count = 0 categories.each { |category, offenses| next unless department(category) == dep count += offenses.size } count end |
#escape(s) ⇒ Object
228 229 230 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 228 def escape(s) CGI.escapeHTML(s) end |
#format_plain_text(text) ⇒ Object
168 169 170 171 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 168 def format_plain_text(text) paragraphs = text.split(/(\n\r|\r\n|\r|\n){2,}/m) "<p>#{paragraphs.join('</p><p>')}</p>" end |
#highlighted_source_line(offense) ⇒ Object
195 196 197 198 199 200 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 195 def highlighted_source_line(offense) source_before_highlight(offense) + hightlight_source_tag(offense) + source_after_highlight(offense) + possible_ellipses(offense.location) end |
#hightlight_source_tag(offense) ⇒ Object
202 203 204 205 206 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 202 def hightlight_source_tag(offense) "<span class=\"highlight #{offense.severity}\">" \ "#{escape(offense.highlighted_area.source)}" \ '</span>' end |
#new_department?(cop_name) ⇒ Boolean
158 159 160 161 162 163 164 165 166 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 158 def new_department?(cop_name) @processed_departments ||= Set.new dep = department(cop_name) unless @processed_departments.include?(dep) @processed_departments << dep return true end false end |
#possible_ellipses(location) ⇒ Object
218 219 220 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 218 def possible_ellipses(location) location.first_line == location.last_line ? '' : " #{ELLIPSES}" end |
#sort_categories(categories) ⇒ Object
173 174 175 176 177 178 179 180 181 182 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 173 def sort_categories(categories) categories.sort { |a, b| # First sort departments by custom ordering (of importance). # Then sort by cop name. a_department, a_name = a[0].split('/') b_department, b_name = b[0].split('/') n = SORT_ORDER.index(a_department) <=> SORT_ORDER.index(b_department) n == 0 ? a_name <=> b_name : n }.to_h end |
#source_after_highlight(offense) ⇒ Object
213 214 215 216 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 213 def source_after_highlight(offense) source_line = offense.location.source_line escape(source_line[offense.highlighted_area.end_pos..-1]) end |
#source_before_highlight(offense) ⇒ Object
208 209 210 211 |
# File 'lib/rubocop/sketchup/formatter/extension_review.rb', line 208 def source_before_highlight(offense) source_line = offense.location.source_line escape(source_line[0...offense.highlighted_area.begin_pos]) end |