Class: SimpleCov::Formatter::AIFormatter::MarkdownBuilder::DeficitCompiler

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/simplecov-ai/markdown_builder/deficit_compiler.rb

Overview

Selects the files with coverage deficits, orders them lowest-coverage first and writes each one's semantic-node fragments through the budget. A file whose coverage data SimpleCov cannot decode counts as a deficit file: it is listed first of all, and its only entry is the error line the decode guard produces.

Constant Summary collapse

HEADING =

Header for the coverage deficits section

T.let("## Coverage Deficits\n\n", String)
UNDECODABLE_COVERAGE =

Sort figure of a file whose coverage SimpleCov cannot decode: below any real percentage, so the file precedes every decodable deficit file.

T.let(-1.0, Float)

Instance Method Summary collapse

Constructor Details

#initialize(coverage_metrics, config, builder) ⇒ DeficitCompiler



22
23
24
25
26
27
28
29
30
31
# File 'lib/simplecov-ai/markdown_builder/deficit_compiler.rb', line 22

def initialize(coverage_metrics, config, builder)
  @coverage_metrics = coverage_metrics
  @config = config
  @builder = builder
  # When the aggregate cannot be decoded the answer is unknowable; the header then shows
  # an N/A method line, matched here by listing the method deficits of every file that
  # still decodes.
  measured = DecodeGuard.attempt(true) { MethodDeficit.measured?(coverage_metrics) }
  @method_coverage_measured = T.let(measured, T::Boolean)
end

Instance Method Details

#write_deficits(budget) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/simplecov-ai/markdown_builder/deficit_compiler.rb', line 39

def write_deficits(budget)
  writer = SectionWriter.new(budget, HEADING)
  deficit_files = find_deficit_files
  deficit_files.each do |file|
    break if writer.closed?

    writer.write_file_block(SectionWriter.file_heading(file), render_file(file))
  end
  deficit_files.size - writer.written_blocks
end