solargraph_test_coverage 0.2.6 → 0.3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 586f281d9b8b4157c5601d0cd94dcb1908a1111c31d931cfc68f3b853822eb08
4
- data.tar.gz: 4b2f7f9d3cf128ca9e86c6f381a57ad53171bce4546ff343a2f43b45f55cb49d
3
+ metadata.gz: dca8ac48cbb879d7410d76d58772620fa7468e60732adda23449bb356b5e492a
4
+ data.tar.gz: f469cbc81df6451f4b9ccc43d33caccdeb9f931ab66f562789cc659719c35907
5
5
  SHA512:
6
- metadata.gz: 4b41851ceba11230c87053d32fd04a09fbc3bd727236e2a065a34e7f49e71c05cab2d2695fc8f1b0d7ff24a13942cacbc5d81a26fdd7a6c501e057c899d67aa5
7
- data.tar.gz: c9c530386fa430a5b0a5252aa1a0950cbd093e20f4983134643d8e2c86cdb5aa21ffa11e8afeca2ff2af7a31dbad0d5cbdd76f427990b5fb8e4e3d94edc2768c
6
+ metadata.gz: aaef9767e530370fd3ccc9a15583e29a8d7d20838efc51a3bc17c2e04d08522121a694e6afae9cbd79a198151d092778b68e0196dffa2e2871cf9fe8e77a8079
7
+ data.tar.gz: c7882927c706580ae3d21e58de450b535258d5455f5e97826a3f59876480624d68ddafabbc4f1da7b5606ae4a7b2d6b8b2f02dccbc0514329be3255be8c464fe
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- solargraph_test_coverage (0.2.5)
4
+ solargraph_test_coverage (0.3.0)
5
5
  solargraph (~> 0.40, > 0.40)
6
6
 
7
7
  GEM
@@ -19,7 +19,7 @@ GEM
19
19
  kramdown (~> 2.0)
20
20
  nokogiri (1.12.4-x86_64-darwin)
21
21
  racc (~> 1.4)
22
- parallel (1.20.1)
22
+ parallel (1.21.0)
23
23
  parser (3.0.2.0)
24
24
  ast (~> 2.4.1)
25
25
  racc (1.5.2)
@@ -29,7 +29,7 @@ GEM
29
29
  reverse_markdown (2.0.0)
30
30
  nokogiri
31
31
  rexml (3.2.5)
32
- rubocop (1.20.0)
32
+ rubocop (1.21.0)
33
33
  parallel (~> 1.10)
34
34
  parser (>= 3.0.0.0)
35
35
  rainbow (>= 2.2.2, < 4.0)
@@ -41,7 +41,7 @@ GEM
41
41
  rubocop-ast (1.11.0)
42
42
  parser (>= 3.0.1.1)
43
43
  ruby-progressbar (1.11.0)
44
- solargraph (0.43.0)
44
+ solargraph (0.43.2)
45
45
  backport (~> 1.2)
46
46
  benchmark
47
47
  bundler (>= 1.17.2)
@@ -58,7 +58,7 @@ GEM
58
58
  yard (~> 0.9, >= 0.9.24)
59
59
  thor (1.1.0)
60
60
  tilt (2.0.10)
61
- unicode-display_width (2.0.0)
61
+ unicode-display_width (2.1.0)
62
62
  yard (0.9.26)
63
63
 
64
64
  PLATFORMS
data/README.md CHANGED
@@ -2,19 +2,22 @@
2
2
 
3
3
  Solargraph Plugin that provides a diagnostic reporter for unit-test coverage.
4
4
 
5
- Currently there are four different diagnostics:
5
+ Currently there are four different diagnostics when viewing an app/unit file:
6
6
  - Line is not covered
7
7
  - Branch is not covered (With a note if it's the 'THEN' or 'ELSE' branch)
8
8
  - Spec is failing (Error message will be on line 1)
9
9
  - Spec cannot be found (Error message will be on line 1)
10
10
 
11
+ There's one diagnostic if you're viewing a spec file:
12
+ - Example Status. Reports if an `it` block is currently failing (rspec only for now)
13
+
11
14
 
12
15
  ## Installation
13
16
 
14
17
  Add this line to your application's Gemfile:
15
18
 
16
19
  ```ruby
17
- gem 'solargraph_test_coverage'
20
+ gem 'solargraph_test_coverage', require: false
18
21
  ```
19
22
 
20
23
  Then add this to your `.solargraph.yml` config:
@@ -24,6 +27,7 @@ plugins:
24
27
  - solargraph_test_coverage
25
28
  reporters:
26
29
  - test_coverage
30
+ - example_status
27
31
  ```
28
32
 
29
33
  Additionally, a `test_coverage` key can be added to `.solargraph.yml`. The default values are shown below:
@@ -37,6 +41,7 @@ test_coverage:
37
41
  - branch
38
42
  - test_failing
39
43
  - test_missing
44
+ - example_failing
40
45
  exclude_paths:
41
46
  - 'app/controller'
42
47
  - 'concerns'
@@ -6,12 +6,14 @@ module SolargraphTestCoverage
6
6
 
7
7
  DEFAULTS = {
8
8
  'preload_rails' => true, # can be true or false - performance optimization
9
+ 'debug' => false, # can be true or false - shows debug messages when ChildFailedError is raised
9
10
  'test_framework' => 'rspec', # can be 'rspec' or 'minitest'
10
11
  'coverage' => [ # All diagnostics are enabled by default
11
12
  'line', # Specifying an array with fewer diagnostics will overwrite this
12
13
  'branch',
13
14
  'test_failing',
14
- 'test_missing'
15
+ 'test_missing',
16
+ 'example_failing'
15
17
  ],
16
18
  'exclude_paths' => [ # don't attempt to find/run a spec for files that match these paths
17
19
  'app/controller',
@@ -19,6 +21,10 @@ module SolargraphTestCoverage
19
21
  ]
20
22
  }.freeze
21
23
 
24
+ def debug?
25
+ plugin_config['debug']
26
+ end
27
+
22
28
  def preload_rails?
23
29
  plugin_config['preload_rails']
24
30
  end
@@ -43,10 +49,18 @@ module SolargraphTestCoverage
43
49
  plugin_config['coverage'].include? 'test_missing'
44
50
  end
45
51
 
52
+ def example_failing_coverage?
53
+ plugin_config['coverage'].include? 'example_failing'
54
+ end
55
+
46
56
  def test_framework
47
57
  plugin_config['test_framework']
48
58
  end
49
59
 
60
+ def full_test_dir
61
+ File.join(Dir.pwd, test_dir)
62
+ end
63
+
50
64
  def test_dir
51
65
  case test_framework
52
66
  when 'rspec'
@@ -92,9 +106,9 @@ module SolargraphTestCoverage
92
106
  def preload_rails!
93
107
  return if defined?(Rails) || !File.file?('spec/rails_helper.rb')
94
108
 
95
- $LOAD_PATH.unshift(test_path) unless $LOAD_PATH.include?(test_path)
109
+ $LOAD_PATH.unshift(full_test_dir) unless $LOAD_PATH.include?(full_test_dir)
96
110
 
97
- require File.join(test_path, 'rails_helper')
111
+ require File.join(full_test_dir, 'rails_helper')
98
112
  Coverage.result(stop: true, clear: true) if Coverage.running?
99
113
 
100
114
  true
@@ -116,9 +130,5 @@ module SolargraphTestCoverage
116
130
  def workspace_config
117
131
  Solargraph::Workspace::Config.new(Dir.pwd).raw_data.fetch('test_coverage', {})
118
132
  end
119
-
120
- def test_path
121
- ReporterHelpers.test_path
122
- end
123
133
  end
124
134
  end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolargraphTestCoverage
4
+ module DiagnosticMessages
5
+ def line_coverage_warning(line)
6
+ return unless Config.line_coverage?
7
+
8
+ {
9
+ range: range(line, 0, line, @source.code.lines[line].length),
10
+ severity: Solargraph::Diagnostics::Severities::WARNING,
11
+ source: 'TestCoverage',
12
+ message: 'Line is missing test coverage'
13
+ }
14
+ end
15
+
16
+ def branch_coverage_warning(report)
17
+ return unless Config.branch_coverage?
18
+
19
+ {
20
+ range: range(report[:line] - 1, 0, report[:line] - 1, @source.code.lines[report[:line] - 1].length),
21
+ severity: Solargraph::Diagnostics::Severities::WARNING,
22
+ source: 'TestCoverage',
23
+ message: "'#{report[:type].upcase}' branch is missing test coverage"
24
+ }
25
+ end
26
+
27
+ def test_failing_error
28
+ return unless Config.test_failing_coverage?
29
+
30
+ {
31
+ range: range(0, 0, 0, @source.code.lines[0].length),
32
+ severity: Solargraph::Diagnostics::Severities::ERROR,
33
+ source: 'TestCoverage',
34
+ message: 'Unit Test is currently failing.'
35
+ }
36
+ end
37
+
38
+ def test_missing_error
39
+ return unless Config.test_missing_coverage?
40
+
41
+ {
42
+ range: range(0, 0, 0, @source.code.lines[0].length),
43
+ severity: Solargraph::Diagnostics::Severities::HINT,
44
+ source: 'TestCoverage',
45
+ message: "No test file found at '#{FileHelpers.relative_test_file(@filename)}'"
46
+ }
47
+ end
48
+
49
+ def example_failing_error(example)
50
+ return unless Config.example_failing_coverage?
51
+
52
+ {
53
+ range: range(example[:line_number], 0, example[:line_number], @source.code.lines[example[:line_number]].length),
54
+ severity: Solargraph::Diagnostics::Severities::ERROR,
55
+ source: 'ExampleStatus',
56
+ message: example[:message]
57
+ }
58
+ end
59
+
60
+ def debug_message(exception)
61
+ {
62
+ range: range(0, 0, 0, @source.code.lines[0].length),
63
+ severity: Solargraph::Diagnostics::Severities::ERROR,
64
+ source: 'SolargraphTestCoverage Plugin',
65
+ message: "DEBUG: (ChildFailedError) #{exception.message}"
66
+ }
67
+ end
68
+
69
+ private
70
+
71
+ def range(start_line, start_column, end_line, end_column)
72
+ Solargraph::Range.from_to(start_line, start_column, end_line, end_column).to_hash
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # example_status reporter for Solargraph
4
+ module SolargraphTestCoverage
5
+ class ExampleStatusReporter < Solargraph::Diagnostics::Base
6
+ include ReporterHelpers
7
+ include ReporterGuards
8
+ include DiagnosticMessages
9
+
10
+ def diagnose(source, _api_map)
11
+ @source = source
12
+ @filename = source.location.filename
13
+
14
+ return [] if source.code.empty? || using_debugger? || !in_test_dir? || test_support_file?
15
+
16
+ @results = run_test(@filename)
17
+
18
+ example_failing_errors.compact
19
+ rescue ChildFailedError => e
20
+ Config.debug? ? [debug_message(e)] : []
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolargraphTestCoverage
4
+ module FileHelpers
5
+ extend self
6
+
7
+ def test_file(filename)
8
+ return filename if test_file?(filename)
9
+
10
+ path = relative_path(filename).split('/')
11
+ path[0] = Config.test_dir
12
+ path[-1] = path.last.sub(/\.rb$/, Config.test_file_suffix)
13
+
14
+ File.join(Dir.pwd, path.join('/'))
15
+ end
16
+
17
+ def relative_path(path)
18
+ path.sub("#{Dir.pwd}/", '')
19
+ end
20
+
21
+ def relative_test_file(filename)
22
+ relative_path test_file(filename)
23
+ end
24
+
25
+ def test_file?(filename)
26
+ filename.start_with?(Config.full_test_dir) &&
27
+ filename.end_with?(Config.test_file_suffix)
28
+ end
29
+ end
30
+ end
@@ -5,25 +5,39 @@ module SolargraphTestCoverage
5
5
  # When called with a block, runs the content of said block in a new (forked) process
6
6
  # the return value of the process/block can be captured and used in parent process
7
7
  class ForkProcess
8
- # Executes block in forked process, and captures returned value of that block
9
- # Returns result of block
10
- #
11
- def self.run
12
- read, write = IO.pipe
8
+ def self.call(&block)
9
+ new.run(&block)
10
+ end
11
+
12
+ def initialize
13
+ @read, @write = IO.pipe
14
+ end
13
15
 
16
+ def run(&block)
14
17
  pid = fork do
15
- read.close
16
- result = yield
17
- Marshal.dump(result, write)
18
+ @read.close
19
+ Marshal.dump(run_block_with_timeout(&block), @write)
18
20
  exit!(0) # skips exit handlers.
19
21
  end
20
22
 
21
- write.close
22
- result = read.read
23
+ @write.close
24
+ result = @read.read
25
+
23
26
  Process.wait(pid)
24
- raise ChildFailedError if result.nil? || result.empty?
27
+ raise ChildFailedError, "Couldn't read pipe" if result.nil?
28
+
29
+ Marshal.load(result).tap do |r|
30
+ raise ChildFailedError, "Marshal.load(result) returned nil" if r.nil?
31
+ raise ChildFailedError, r.message if r.is_a? Exception
32
+ end
33
+ end
34
+
35
+ private
25
36
 
26
- Marshal.load(result)
37
+ def run_block_with_timeout(&block)
38
+ Timeout.timeout(30000, &block)
39
+ rescue StandardError => e
40
+ e
27
41
  end
28
42
  end
29
43
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolargraphTestCoverage
4
+ # Some guard functions for the diagnostics
5
+ module ReporterGuards
6
+ def test_file_exists?
7
+ File.file? FileHelpers.test_file(@filename)
8
+ end
9
+
10
+ def in_test_dir?
11
+ @filename.start_with? Config.full_test_dir
12
+ end
13
+
14
+ def test_support_file?
15
+ in_test_dir? && !@filename.end_with?(Config.test_file_suffix)
16
+ end
17
+
18
+ def exclude_file?
19
+ Config.exclude_paths.any? { |path| FileHelpers.relative_path(@filename).include? path }
20
+ end
21
+
22
+ def using_debugger?
23
+ @source.code.match?(/(binding\.pry|byebug|debugger)/)
24
+ end
25
+ end
26
+ end
@@ -3,54 +3,34 @@
3
3
  module SolargraphTestCoverage
4
4
  # Some helper functions for the diagnostics
5
5
  module ReporterHelpers
6
- def exclude_file?(source_filename)
7
- return true if source_filename.start_with? test_path
8
-
9
- Config.exclude_paths.any? { |path| source_filename.sub(Dir.pwd, '').include? path }
10
- end
11
-
12
- def using_debugger?(source)
13
- source.code.include?('binding.pry') ||
14
- source.code.include?('byebug') ||
15
- source.code.include?('debugger')
16
- end
17
-
18
- def test_file(source)
19
- relative_filepath = source.location.filename.sub(Dir.pwd, '').split('/').reject(&:empty?)
20
- relative_filepath[0] = Config.test_dir
21
-
22
- File.join(Dir.pwd, relative_filepath.join('/')).sub('.rb', Config.test_file_suffix)
23
- end
24
-
25
6
  # @return [Hash]
26
- def run_test(source)
27
- ForkProcess.run do
7
+ def run_test(test_file)
8
+ ForkProcess.call do
28
9
  Coverage.start(lines: true, branches: true)
29
- runner = TestRunner.with(test_file(source)).run!
30
- Coverage.result.fetch(source.location.filename, {}).merge({ test_status: runner.passed? })
10
+ runner = TestRunner.with(test_file).run!
11
+ extra = { test_status: runner.passed?, failed_examples: runner.failed_examples }
12
+
13
+ Coverage.result.fetch(@filename, {}).merge(extra)
31
14
  end
32
15
  end
33
16
 
34
- def messages(source, results)
35
- messages = [
36
- line_warnings(source, results),
37
- branch_warnings(source, results),
38
- test_passing_error(source, results)
39
- ]
40
-
41
- messages.flatten.compact
17
+ def branch_warnings
18
+ Branch.build_from(@results)
19
+ .reject(&:covered?)
20
+ .map { |branch| branch_coverage_warning(branch.report) }
42
21
  end
43
22
 
44
- def line_warnings(source, results)
45
- uncovered_lines(results).map { |line| line_coverage_warning(source, line) }
23
+ def test_passing_error
24
+ @results[:test_status] ? [] : [test_failing_error]
46
25
  end
47
26
 
48
- def branch_warnings(source, results)
49
- uncovered_branches(results).map { |branch| branch_coverage_warning(source, branch.report) }
27
+ def example_failing_errors
28
+ @results.fetch(:failed_examples, [])
29
+ .map { |example| example_failing_error(example) }
50
30
  end
51
31
 
52
- def test_passing_error(source, results)
53
- results[:test_status] ? [] : [test_failing_error(source)]
32
+ def line_warnings
33
+ uncovered_lines.map { |line| line_coverage_warning(line) }
54
34
  end
55
35
 
56
36
  # Adapted from SingleCov
@@ -59,29 +39,13 @@ module SolargraphTestCoverage
59
39
  #
60
40
  # [nil, 1, 0, 1, 0] -> [3, 5]
61
41
  # Returns array of line numbers with 0 coverage
62
- def uncovered_lines(results)
63
- return [] unless results[:lines]
64
-
65
- results[:lines].each_with_index
66
- .select { |c, _| c&.zero? }
67
- .map { |_, i| i }
68
- .compact
69
- end
70
-
71
- def uncovered_branches(results)
72
- Branch.build_from(results).reject(&:covered?)
73
- end
74
-
75
- def range(start_line, start_column, end_line, end_column)
76
- Solargraph::Range.from_to(start_line, start_column, end_line, end_column).to_hash
77
- end
78
-
79
- def self.test_path
80
- File.join(Dir.pwd, Config.test_dir)
81
- end
42
+ def uncovered_lines
43
+ return [] unless @results[:lines]
82
44
 
83
- def test_path
84
- ReporterHelpers.test_path
45
+ @results[:lines].each_with_index
46
+ .select { |c, _| c&.zero? }
47
+ .map { |_, i| i }
48
+ .compact
85
49
  end
86
50
  end
87
51
  end
@@ -4,61 +4,21 @@
4
4
  module SolargraphTestCoverage
5
5
  class TestCoverageReporter < Solargraph::Diagnostics::Base
6
6
  include ReporterHelpers
7
+ include ReporterGuards
8
+ include DiagnosticMessages
7
9
 
8
10
  def diagnose(source, _api_map)
9
- return [] if source.code.empty? || using_debugger?(source) || exclude_file?(source.location.filename)
10
- return [test_missing_error(source)] unless File.file?(test_file(source))
11
+ @source = source
12
+ @filename = source.location.filename
11
13
 
12
- results = run_test(source)
13
- messages(source, results)
14
- rescue ChildFailedError
15
- []
16
- end
17
-
18
- private
19
-
20
- def line_coverage_warning(source, line)
21
- return unless Config.line_coverage?
22
-
23
- {
24
- range: range(line, 0, line, source.code.lines[line].length),
25
- severity: Solargraph::Diagnostics::Severities::WARNING,
26
- source: 'TestCoverage',
27
- message: 'Line is missing test coverage'
28
- }
29
- end
30
-
31
- def branch_coverage_warning(source, report)
32
- return unless Config.branch_coverage?
33
-
34
- {
35
- range: range(report[:line] - 1, 0, report[:line] - 1, source.code.lines[report[:line] - 1].length),
36
- severity: Solargraph::Diagnostics::Severities::WARNING,
37
- source: 'TestCoverage',
38
- message: "'#{report[:type].upcase}' branch is missing test coverage"
39
- }
40
- end
41
-
42
- def test_failing_error(source)
43
- return unless Config.test_failing_coverage?
44
-
45
- {
46
- range: range(0, 0, 0, source.code.lines[0].length),
47
- severity: Solargraph::Diagnostics::Severities::ERROR,
48
- source: 'TestCoverage',
49
- message: 'Unit Test is currently failing.'
50
- }
51
- end
14
+ return [] if source.code.empty? || using_debugger? || exclude_file? || in_test_dir?
15
+ return [test_missing_error] unless test_file_exists?
52
16
 
53
- def test_missing_error(source)
54
- return unless Config.test_missing_coverage?
17
+ @results = run_test(FileHelpers.test_file(@filename))
55
18
 
56
- {
57
- range: range(0, 0, 0, source.code.lines[0].length),
58
- severity: Solargraph::Diagnostics::Severities::HINT,
59
- source: 'TestCoverage',
60
- message: "No test file found at '#{test_file(source).sub("#{Dir.pwd}/", '')}'"
61
- }
19
+ [line_warnings, branch_warnings, test_passing_error].flatten.compact
20
+ rescue ChildFailedError => e
21
+ Config.debug? ? [debug_message(e)] : []
62
22
  end
63
23
  end
64
24
  end
@@ -15,14 +15,15 @@ module SolargraphTestCoverage
15
15
  def initialize(test_file)
16
16
  @test_file = test_file
17
17
  @result = nil
18
+ @output = StringIO.new
18
19
  end
19
20
 
20
21
  def run!
21
- @result = test_framework_runner.run(test_options)
22
+ @result = test_framework_runner.run(test_options, $stderr, @output)
22
23
  self
23
24
  end
24
25
 
25
- def test_options
26
+ def failed_examples
26
27
  raise NotImplementedError
27
28
  end
28
29
 
@@ -30,21 +31,43 @@ module SolargraphTestCoverage
30
31
  raise NotImplementedError
31
32
  end
32
33
 
34
+ private
35
+
36
+ def test_options
37
+ raise NotImplementedError
38
+ end
39
+
33
40
  def test_framework_runner
34
41
  raise NotImplementedError
35
42
  end
43
+
44
+ def output
45
+ return if @output.string.empty?
46
+
47
+ JSON.parse @output.string
48
+ end
36
49
  end
37
50
 
38
51
  # Test Runner Subclass for RSpec
39
52
  class RSpecRunner < TestRunner
40
- def test_options
41
- [@test_file, '-o', '/dev/null']
53
+ def failed_examples
54
+ return unless output
55
+
56
+ output['examples']
57
+ .select { |example| example['status'] == 'failed' }
58
+ .map { |example| { line_number: example['line_number'] - 1, message: example.dig('exception', 'message') } }
42
59
  end
43
60
 
44
61
  def passed?
45
62
  @result&.zero?
46
63
  end
47
64
 
65
+ private
66
+
67
+ def test_options
68
+ [@test_file, '--format', 'json']
69
+ end
70
+
48
71
  def test_framework_runner
49
72
  RSpec::Core::Runner
50
73
  end
@@ -52,14 +75,21 @@ module SolargraphTestCoverage
52
75
 
53
76
  # Test Runner Subclass for Minitest
54
77
  class MinitestRunner < TestRunner
55
- def test_options
56
- [@test_file]
78
+ # TODO
79
+ def failed_examples
80
+ []
57
81
  end
58
82
 
59
83
  def passed?
60
84
  @result
61
85
  end
62
86
 
87
+ private
88
+
89
+ def test_options
90
+ [@test_file]
91
+ end
92
+
63
93
  def test_framework_runner
64
94
  Minitest
65
95
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolargraphTestCoverage
4
- VERSION = '0.2.6'
4
+ VERSION = '0.3.1.1'
5
5
  end
@@ -4,12 +4,17 @@ require 'solargraph_test_coverage/version'
4
4
  require 'solargraph_test_coverage/branch'
5
5
  require 'solargraph_test_coverage/fork_process'
6
6
  require 'solargraph_test_coverage/reporter_helpers'
7
+ require 'solargraph_test_coverage/reporter_guards'
8
+ require 'solargraph_test_coverage/file_helpers'
7
9
  require 'solargraph_test_coverage/config'
8
10
  require 'solargraph_test_coverage/test_runner'
11
+ require 'solargraph_test_coverage/diagnostic_messages'
9
12
  require 'solargraph_test_coverage/test_coverage_reporter'
13
+ require 'solargraph_test_coverage/example_status_reporter'
10
14
 
11
15
  require 'solargraph'
12
16
  require 'coverage'
17
+ require 'timeout'
13
18
 
14
19
  module SolargraphTestCoverage
15
20
  class ChildFailedError < StandardError; end
@@ -20,4 +25,5 @@ module SolargraphTestCoverage
20
25
  Config.preload_rails! if Config.preload_rails?
21
26
 
22
27
  Solargraph::Diagnostics.register 'test_coverage', TestCoverageReporter
28
+ Solargraph::Diagnostics.register 'example_status', ExampleStatusReporter
23
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solargraph_test_coverage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Kolkey
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-15 00:00:00.000000000 Z
11
+ date: 2021-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solargraph
@@ -47,7 +47,11 @@ files:
47
47
  - lib/solargraph_test_coverage.rb
48
48
  - lib/solargraph_test_coverage/branch.rb
49
49
  - lib/solargraph_test_coverage/config.rb
50
+ - lib/solargraph_test_coverage/diagnostic_messages.rb
51
+ - lib/solargraph_test_coverage/example_status_reporter.rb
52
+ - lib/solargraph_test_coverage/file_helpers.rb
50
53
  - lib/solargraph_test_coverage/fork_process.rb
54
+ - lib/solargraph_test_coverage/reporter_guards.rb
51
55
  - lib/solargraph_test_coverage/reporter_helpers.rb
52
56
  - lib/solargraph_test_coverage/test_coverage_reporter.rb
53
57
  - lib/solargraph_test_coverage/test_runner.rb