Class: Yard::Lint::Results::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/yard/lint/results/base.rb

Overview

Base class for validator-specific result objects Each validator should subclass this and set class attributes

Examples:

Creating a validator result class

class MyValidator::Result < Results::Base
  self.default_severity = "warning"
  self.offense_type = "method"
  self.offense_name = "MyOffense"

  def build_message(offense)
    "Found issue in #{offense[:location]}"
  end
end

Class Attribute Summary collapse

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parsed_data, config = nil) ⇒ Base

Initialize a result object with parsed validator data

Parameters:

  • parsed_data (Array<Hash>)

    Array of offense hashes from validator parser

  • config (Config, nil) (defaults to: nil)

    Configuration object for severity lookup



64
65
66
67
68
# File 'lib/yard/lint/results/base.rb', line 64

def initialize(parsed_data, config = nil)
  @parsed_data = Array(parsed_data)
  @config = config
  @offenses = build_offenses
end

Class Attribute Details

.default_severityString

Get the default severity level for this validator

Returns:

  • (String)

    ‘error’, ‘warning’, or ‘convention’



27
28
29
30
# File 'lib/yard/lint/results/base.rb', line 27

def default_severity
  @default_severity ||
    (superclass.respond_to?(:default_severity) ? superclass.default_severity : nil)
end

.offense_nameString

Get the offense name for this validator

Returns:

  • (String)

    offense name



49
50
51
52
# File 'lib/yard/lint/results/base.rb', line 49

def offense_name
  @offense_name ||
    (superclass.respond_to?(:offense_name) ? superclass.offense_name : nil)
end

.offense_typeString

Get the offense type for this validator

Returns:

  • (String)

    ‘line’ or ‘method’



38
39
40
41
# File 'lib/yard/lint/results/base.rb', line 38

def offense_type
  @offense_type ||
    (superclass.respond_to?(:offense_type) ? superclass.offense_type : nil)
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



59
60
61
# File 'lib/yard/lint/results/base.rb', line 59

def config
  @config
end

#offensesObject

Returns the value of attribute offenses.



58
59
60
# File 'lib/yard/lint/results/base.rb', line 58

def offenses
  @offenses
end

Instance Method Details

#countInteger

Count of offenses

Returns:

  • (Integer)

    number of offenses



72
73
74
# File 'lib/yard/lint/results/base.rb', line 72

def count
  @offenses.count
end

#eachArray

Delegate each to offenses

Returns:

  • (Array)

    offenses



90
91
92
# File 'lib/yard/lint/results/base.rb', line 90

def each(&)
  @offenses.each(&)
end

#empty?Boolean

Check if there are no offenses

Returns:

  • (Boolean)

    true if no offenses



78
79
80
# File 'lib/yard/lint/results/base.rb', line 78

def empty?
  @offenses.empty?
end

#mapArray

Delegate array methods to offenses for convenience

Returns:

  • (Array)

    mapped offenses



84
85
86
# File 'lib/yard/lint/results/base.rb', line 84

def map(&)
  @offenses.map(&)
end

#validator_nameString

Full validator name in format ‘Category/ValidatorName’ Extracted from the class path

Returns:

  • (String)

    validator name for config lookup



97
98
99
100
101
102
103
104
105
106
# File 'lib/yard/lint/results/base.rb', line 97

def validator_name
  # Extract from class path: Validators::Tags::Order::Result => 'Tags/Order'
  parts = self.class.name.split('::')
  validators_index = parts.index('Validators')
  return '' unless validators_index

  category = parts[validators_index + 1]
  name = parts[validators_index + 2]
  "#{category}/#{name}"
end