Module: ArchSpec::Analyzer

Extended by:
Analyzer
Included in:
Analyzer
Defined in:
lib/archspec/analyzer.rb

Defined Under Namespace

Modules: SuppressionParser Classes: SyntaxOverlay

Instance Method Summary collapse

Instance Method Details

#analyze(definition, root:) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/archspec/analyzer.rb', line 10

def analyze(definition, root:)
  root = File.expand_path(root)
  graph = Graph.new(root)
  paths = ruby_files(definition, root)
  syntax = SyntaxOverlay.new

  paths.each do |path|
    result = Prism.parse_file(path)
    graph.add_file(
      path: path,
      parse_errors: parse_errors_for(path, result.errors),
      suppressions: suppressions_for(result.comments)
    )
    syntax.scan(path, result.value) if result.value
  end

  method_names = definition.rules.grep(Rules::CannotCallRule).flat_map(&:method_names)
  index = RubydexIndex.new(paths, syntax: syntax, method_names: method_names)
  index.populate(graph)
  syntax.apply(graph, call_resolutions: index.call_resolutions)
  graph.assign_components(definition.component_specs.values)
  graph
end