Class: RuboCop::Formatter::JSONFormatter Private

Inherits:
BaseFormatter show all
Includes:
PathUtil
Defined in:
lib/rubocop/formatter/json_formatter.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

This formatter formats the report data in JSON format.

Constant Summary

Constants included from PathUtil

PathUtil::HIDDEN_FILE_PATTERN

Instance Attribute Summary collapse

Attributes inherited from BaseFormatter

#options, #output

Instance Method Summary collapse

Methods included from PathUtil

absolute?, glob?, hidden_dir?, hidden_file?, hidden_file_in_not_hidden_dir?, match_path?, maybe_hidden_file?, relative_path, smart_path

Methods inherited from BaseFormatter

#file_started

Constructor Details

#initialize(output, options = {}) ⇒ JSONFormatter

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of JSONFormatter.



14
15
16
17
# File 'lib/rubocop/formatter/json_formatter.rb', line 14

def initialize(output, options = {})
  super
  @output_hash = { metadata: , files: [], summary: { offense_count: 0 } }
end

Instance Attribute Details

#output_hashObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



12
13
14
# File 'lib/rubocop/formatter/json_formatter.rb', line 12

def output_hash
  @output_hash
end

Instance Method Details

#file_finished(file, offenses) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



23
24
25
26
# File 'lib/rubocop/formatter/json_formatter.rb', line 23

def file_finished(file, offenses)
  output_hash[:files] << hash_for_file(file, offenses)
  output_hash[:summary][:offense_count] += offenses.count
end

#finished(inspected_files) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



28
29
30
31
# File 'lib/rubocop/formatter/json_formatter.rb', line 28

def finished(inspected_files)
  output_hash[:summary][:inspected_file_count] = inspected_files.count
  output.write output_hash.to_json
end

#hash_for_file(file, offenses) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



43
44
45
46
47
48
# File 'lib/rubocop/formatter/json_formatter.rb', line 43

def hash_for_file(file, offenses)
  {
    path:     smart_path(file),
    offenses: offenses.map { |o| hash_for_offense(o) }
  }
end

#hash_for_location(offense) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

TODO: Consider better solution for Offense#real_column.

The minimum value of `start_column: real_column` is 1.
So, the minimum value of `last_column` should be 1.
And non-zero value of `last_column` should be used as is.


65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rubocop/formatter/json_formatter.rb', line 65

def hash_for_location(offense)
  {
    start_line:   offense.line,
    start_column: offense.real_column,
    last_line:    offense.last_line,
    last_column:  offense.last_column.zero? ? 1 : offense.last_column,
    length:       offense.location.length,
    # `line` and `column` exist for compatibility.
    # Use `start_line` and `start_column` instead.
    line:         offense.line,
    column:       offense.real_column
  }
end

#hash_for_offense(offense) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



50
51
52
53
54
55
56
57
58
59
# File 'lib/rubocop/formatter/json_formatter.rb', line 50

def hash_for_offense(offense)
  {
    severity:    offense.severity.name,
    message:     offense.message,
    cop_name:    offense.cop_name,
    corrected:   offense.corrected?,
    correctable: offense.correctable?,
    location:    hash_for_location(offense)
  }
end

#metadata_hashObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



33
34
35
36
37
38
39
40
41
# File 'lib/rubocop/formatter/json_formatter.rb', line 33

def 
  {
    rubocop_version: RuboCop::Version::STRING,
    ruby_engine:     RUBY_ENGINE,
    ruby_version:    RUBY_VERSION,
    ruby_patchlevel: RUBY_PATCHLEVEL.to_s,
    ruby_platform:   RUBY_PLATFORM
  }
end

#started(target_files) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



19
20
21
# File 'lib/rubocop/formatter/json_formatter.rb', line 19

def started(target_files)
  output_hash[:summary][:target_file_count] = target_files.count
end