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.



57
58
59
60
61
62
# File 'lib/ibex/racc_migration/report.rb', line 57

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?



53
54
55
# File 'lib/ibex/racc_migration/report.rb', line 53

def class_name
  @class_name
end

#fileObject (readonly)

: String



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

def file
  @file
end

#findingsObject (readonly)

: Array



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

def findings
  @findings
end

Instance Method Details

#compatible?Boolean

Returns:

  • (Boolean)


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

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

#to_hObject



68
69
70
71
72
73
74
75
76
77
# File 'lib/ibex/racc_migration/report.rb', line 68

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



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

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

#to_textObject



83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/ibex/racc_migration/report.rb', line 83

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