Class: ThemeCheck::Analyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/theme_check/analyzer.rb

Instance Method Summary collapse

Constructor Details

#initialize(theme, checks = Check.all.map(&:new), auto_correct = false) ⇒ Analyzer

Returns a new instance of Analyzer.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/theme_check/analyzer.rb', line 4

def initialize(theme, checks = Check.all.map(&:new), auto_correct = false)
  @theme = theme
  @auto_correct = auto_correct

  @liquid_checks = Checks.new
  @json_checks = Checks.new
  @html_checks = Checks.new

  checks.each do |check|
    check.theme = @theme

    case check
    when LiquidCheck
      @liquid_checks << check
    when JsonCheck
      @json_checks << check
    when HtmlCheck
      @html_checks << check
    end
  end
end

Instance Method Details

#analyze_files(files) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/theme_check/analyzer.rb', line 49

def analyze_files(files)
  reset

  ThemeCheck.with_liquid_c_disabled do
    # Call all checks that run on the whole theme
    liquid_visitor = Visitor.new(@liquid_checks.whole_theme, @disabled_checks)
    html_visitor = HtmlVisitor.new(@html_checks.whole_theme)
    @theme.liquid.each do |template|
      liquid_visitor.visit_template(template)
      html_visitor.visit_template(template)
    end
    @theme.json.each { |json_file| @json_checks.whole_theme.call(:on_file, json_file) }

    # Call checks that run on a single files, only on specified file
    liquid_visitor = Visitor.new(@liquid_checks.single_file, @disabled_checks)
    html_visitor = HtmlVisitor.new(@html_checks.single_file)
    files.each do |file|
      if file.liquid?
        liquid_visitor.visit_template(file)
        html_visitor.visit_template(file)
      elsif file.json?
        @json_checks.single_file.call(:on_file, file)
      end
    end
  end

  finish
end

#analyze_themeObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/theme_check/analyzer.rb', line 32

def analyze_theme
  reset

  liquid_visitor = Visitor.new(@liquid_checks, @disabled_checks)
  html_visitor = HtmlVisitor.new(@html_checks)
  ThemeCheck.with_liquid_c_disabled do
    @theme.liquid.each do |template|
      liquid_visitor.visit_template(template)
      html_visitor.visit_template(template)
    end
  end

  @theme.json.each { |json_file| @json_checks.call(:on_file, json_file) }

  finish
end

#correct_offensesObject



86
87
88
89
90
91
# File 'lib/theme_check/analyzer.rb', line 86

def correct_offenses
  if @auto_correct
    offenses.each(&:correct)
    @theme.liquid.each(&:write)
  end
end

#offensesObject



26
27
28
29
30
# File 'lib/theme_check/analyzer.rb', line 26

def offenses
  @liquid_checks.flat_map(&:offenses) +
    @json_checks.flat_map(&:offenses) +
    @html_checks.flat_map(&:offenses)
end

#uncorrectable_offensesObject



78
79
80
81
82
83
84
# File 'lib/theme_check/analyzer.rb', line 78

def uncorrectable_offenses
  unless @auto_correct
    return offenses
  end

  offenses.select { |offense| !offense.correctable? }
end