Class: Mxrb::Semantic::Analyzer

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

Overview

Static analysis for an opened Mendix project. The result is plain, immutable Ruby data and can be filtered or extended without a query DSL.

Constant Summary collapse

DEFAULT_UNREFERENCED_KINDS =
%i[microflow nanoflow workflow page].freeze

Instance Method Summary collapse

Constructor Details

#initialize(project) ⇒ Analyzer

Returns a new instance of Analyzer.



23
24
25
26
# File 'lib/mxrb/semantic/analyzer.rb', line 23

def initialize(project)
  @project = project
  @index = project.semantic_index
end

Instance Method Details

#analyze(unreferenced_kinds: DEFAULT_UNREFERENCED_KINDS, rules: []) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/mxrb/semantic/analyzer.rb', line 28

def analyze(unreferenced_kinds: DEFAULT_UNREFERENCED_KINDS, rules: [])
  cycles = call_cycles
  unreferenced = unreferenced_artifacts(unreferenced_kinds)
  unresolved = unresolved_references
  diagnostics = cycle_diagnostics(cycles) +
                unresolved_diagnostics(unresolved) +
                unreferenced_diagnostics(unreferenced) +
                quality_diagnostics +
                custom_diagnostics(rules)
  Report.new(
    diagnostics.sort_by { [_1.severity == :error ? 0 : 1, _1.message] }.freeze,
    unreferenced.freeze,
    unresolved.freeze,
    cycles.freeze,
    module_dependencies.freeze
  )
end