Sha256: a4b7688957beb68826f55972a035c3ffd2dc7ab4e4463e956622d8456d205f50

Contents?: true

Size: 1.89 KB

Versions: 2

Compression:

Stored size: 1.89 KB

Contents

# frozen_string_literal: true

# test_coverage reporter for Solargraph
module SolargraphTestCoverage
  class TestCoverageReporter < Solargraph::Diagnostics::Base
    include ReporterHelpers

    def diagnose(source, _api_map)
      return [] if source.code.empty? || using_debugger?(source) || exclude_file?(source.location.filename)
      return [test_missing_error(source)] unless File.file?(test_file(source))

      results = run_test(source)
      messages(source, results)
    rescue ChildFailedError
      []
    end

    private

    def line_coverage_warning(source, line)
      return unless Config.line_coverage?

      {
        range: range(line, 0, line, source.code.lines[line].length),
        severity: Solargraph::Diagnostics::Severities::WARNING,
        source: 'TestCoverage',
        message: 'Line is missing test coverage'
      }
    end

    def branch_coverage_warning(source, report)
      return unless Config.branch_coverage?

      {
        range: range(report[:line] - 1, 0, report[:line] - 1, source.code.lines[report[:line] - 1].length),
        severity: Solargraph::Diagnostics::Severities::WARNING,
        source: 'TestCoverage',
        message: "'#{report[:type].upcase}' branch is missing test coverage"
      }
    end

    def test_failing_error(source)
      return unless Config.test_failing_coverage?

      {
        range: range(0, 0, 0, source.code.lines[0].length),
        severity: Solargraph::Diagnostics::Severities::ERROR,
        source: 'TestCoverage',
        message: 'Unit Test is currently failing.'
      }
    end

    def test_missing_error(source)
      return unless Config.test_missing_coverage?

      {
        range: range(0, 0, 0, source.code.lines[0].length),
        severity: Solargraph::Diagnostics::Severities::HINT,
        source: 'TestCoverage',
        message: "No test file found at '#{test_file(source).sub("#{Dir.pwd}/", '')}'"
      }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
solargraph_test_coverage-0.2.7 lib/solargraph_test_coverage/test_coverage_reporter.rb
solargraph_test_coverage-0.2.6 lib/solargraph_test_coverage/test_coverage_reporter.rb