class Suspiciouss::Linter
Constants
- KNOWN_FILETYPES
- SUGGESTIONS
Public Class Methods
new()
click to toggle source
# File lib/suspiciouss/linter.rb, line 18 def initialize @result = Hash.new { |hash, key| hash[key] = [] } end
Public Instance Methods
process(input = nil)
click to toggle source
Process a diff file and return the result. It will read the input sequentially from a string or standard input.
# File lib/suspiciouss/linter.rb, line 24 def process(input = nil) if input.nil? input = STDIN end input.each_line do |line| detect_filename_in line parse line if @filename end if input.is_a? IO puts result_as(Suspiciouss::Result::PlainText) else result_as(Suspiciouss::Result::Markdown) end end
suggestions_to_use()
click to toggle source
# File lib/suspiciouss/linter.rb, line 41 def suggestions_to_use included_suggestions.reject { |s| excluded_suggestions.include?(s) } end
Private Instance Methods
config()
click to toggle source
# File lib/suspiciouss/linter.rb, line 104 def config return {} unless has_config? @config ||= YAML::load(File.open(config_file)) end
config_file()
click to toggle source
# File lib/suspiciouss/linter.rb, line 114 def config_file '.suspiciouss.yml' end
detect_filename_in(full_line)
click to toggle source
Detects if the diff block references a known file type
# File lib/suspiciouss/linter.rb, line 48 def detect_filename_in(full_line) line_might_contain_filename = full_line.scan(/^\+\+\+ b(.+)$/) return if line_might_contain_filename.empty? @filename = line_might_contain_filename.first.first if @filename !~ KNOWN_FILETYPES @filename = nil end end
excluded_suggestions()
click to toggle source
# File lib/suspiciouss/linter.rb, line 99 def excluded_suggestions return [] unless config.has_key?(:exclude) SUGGESTIONS.constants.select { |s| config[:exclude].include?(s.to_s) } end
has_config?()
click to toggle source
# File lib/suspiciouss/linter.rb, line 110 def has_config? File.exists?(config_file) end
included_suggestions()
click to toggle source
# File lib/suspiciouss/linter.rb, line 94 def included_suggestions return SUGGESTIONS.constants unless config.has_key?(:include) SUGGESTIONS.constants.select { |s| config[:include].include?(s.to_s) } end
known_suggestions()
click to toggle source
# File lib/suspiciouss/linter.rb, line 88 def known_suggestions @known_suggestions ||= suggestions_to_use.map do |suggestion_class| SUGGESTIONS.const_get(suggestion_class).new end end
parse(full_line)
click to toggle source
Parses a line with each of the known suggestions and adds the result to the final output.
# File lib/suspiciouss/linter.rb, line 61 def parse(full_line) line = strip_diff_syntax(remove_line_comments(full_line)) return unless full_line =~ /^\+ / known_suggestions.each do |suggestion| if result = suggestion.parse(line) @result[@filename] << "#{result}: #{line}" end end end
remove_line_comments(line)
click to toggle source
Returns a line without comments
# File lib/suspiciouss/linter.rb, line 84 def remove_line_comments(line) line.gsub /\/\/.*$/, '' end
result_as(formatter)
click to toggle source
Renders the result using the specified formatter
# File lib/suspiciouss/linter.rb, line 74 def result_as(formatter) formatter.new(@result).format end
strip_diff_syntax(line)
click to toggle source
Returns a line without the “+ ” added by diff
# File lib/suspiciouss/linter.rb, line 79 def strip_diff_syntax(line) line[2..-1] end