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



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

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.



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

def config
  @config
end

#offensesObject (readonly)

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



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

def count
  @offenses.count
end

#eachArray

Delegate each to offenses

Returns:

  • (Array)

    offenses



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

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

#empty?Boolean

Check if there are no offenses

Returns:

  • (Boolean)

    true if no offenses



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

def empty?
  @offenses.empty?
end

#mapArray

Delegate array methods to offenses for convenience

Returns:

  • (Array)

    mapped offenses



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

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



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

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