Class: Ibex::RaccMigration::Report

Inherits:
Object
  • Object
show all
Defined in:
lib/ibex/racc_migration/report.rb

Overview

Versioned result of checking one grammar without executing its code.

Constant Summary collapse

SCHEMA_VERSION =

: Integer

1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file:, class_name:, findings:) ⇒ Report

Returns a new instance of Report.



54
55
56
57
58
59
# File 'lib/ibex/racc_migration/report.rb', line 54

def initialize(file:, class_name:, findings:)
  @file = file.dup.freeze
  @class_name = class_name&.dup&.freeze
  @findings = findings.dup.freeze
  freeze
end

Instance Attribute Details

#class_nameObject (readonly)

: String?



50
51
52
# File 'lib/ibex/racc_migration/report.rb', line 50

def class_name
  @class_name
end

#fileObject (readonly)

: String



49
50
51
# File 'lib/ibex/racc_migration/report.rb', line 49

def file
  @file
end

#findingsObject (readonly)

: Array



51
52
53
# File 'lib/ibex/racc_migration/report.rb', line 51

def findings
  @findings
end

Instance Method Details

#compatible?Boolean

Returns:

  • (Boolean)


62
# File 'lib/ibex/racc_migration/report.rb', line 62

def compatible? = @findings.none? { |finding| finding.severity == :error }

#to_hObject



65
66
67
68
69
70
71
72
73
74
# File 'lib/ibex/racc_migration/report.rb', line 65

def to_h
  {
    "ibex_migration_check" => "racc",
    "schema_version" => SCHEMA_VERSION,
    "compatible" => compatible?,
    "file" => @file,
    "class_name" => @class_name,
    "findings" => @findings.map(&:to_h)
  }
end

#to_jsonObject



77
# File 'lib/ibex/racc_migration/report.rb', line 77

def to_json(*) = JSON.pretty_generate(to_h)

#to_textObject



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/ibex/racc_migration/report.rb', line 80

def to_text
  return "#{@file}: compatible with the checked racc migration surface\n" if @findings.empty?

  lines = @findings.flat_map do |finding|
    prefix = finding.location ? finding.location.to_s : "#{@file}:1:1"
    [
      "#{prefix}: #{finding.severity}: #{finding.message} [#{finding.code}]",
      "  suggestion: #{finding.suggestion}"
    ]
  end
  "#{lines.join("\n")}\n"
end