Class: RokuBuilder::Analyzer

Inherits:
Util
  • Object
show all
Extended by:
Plugin
Defined in:
lib/roku_builder/plugins/analyzer.rb

Overview

Collects information on a package for submission

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Plugin

commands, dependencies, parse_options, validate

Methods inherited from Util

#initialize

Constructor Details

This class inherits a constructor from RokuBuilder::Util

Class Method Details

.commandsObject



9
10
11
12
13
# File 'lib/roku_builder/plugins/analyzer.rb', line 9

def self.commands
  {
    analyze: {source: true, stage: true},
  }
end

.dependenciesObject



29
30
31
# File 'lib/roku_builder/plugins/analyzer.rb', line 29

def self.dependencies
  [Loader]
end

.parse_options(parser:, options:) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/roku_builder/plugins/analyzer.rb', line 15

def self.parse_options(parser:, options:)
  parser.separator "Commands:"
  parser.on("--analyze", "Run a static analysis on a given stage") do
    options[:analyze] = true
  end
  parser.separator "Options:"
  parser.on("--inclide-libraries", "Include libraries in analyze") do
    options[:include_libraries] = true
  end
  parser.on("--sca-precommand COMMAND", "Include libraries in analyze") do |command|
    options[:sca_precommand] = command
  end
end

Instance Method Details

#analyze(options:, quiet: false) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/roku_builder/plugins/analyzer.rb', line 33

def analyze(options:, quiet: false)
  @options = options
  @warnings = []
  @sca_warning = {}
  performance_config = get_config("performance_config.json")
  linter_config = get_config(".roku_builder_linter.json", true)
  linter_config ||= {is_ssai: false}
  loader = Loader.new(config: @config)
  Dir.mktmpdir do |dir|
    loader.copy(options: options, path: dir)
    run_sca_tool(path: dir, ssai: linter_config[:is_ssai])
    libraries = @config.project[:libraries]
    libraries ||= []
    Dir.glob(File.join(dir, "**", "*")).each do |file_path|
      file = file_path.dup; file.slice!(dir)
      unless libraries.any_is_start?(file) and not @options[:include_libraries]
        if File.file?(file_path) and file_path.end_with?(".brs", ".xml")
          line_inspector_config = performance_config
          line_inspector_config += linter_config[:rules] if linter_config[:rules]
          line_inspector = LineInspector.new(inspector_config: line_inspector_config, indent_config: linter_config[:indentation])
          @warnings.concat(line_inspector.run(file_path))
        end
      end
    end
    format_messages(dir)
    print_warnings unless quiet
  end
  @warnings
end