Class: Yard::Lint::Validators::Semantic::AbstractMethods::Validator
- Defined in:
- lib/yard/lint/validators/semantic/abstract_methods/validator.rb
Overview
Validator to check @abstract methods have proper implementation
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#in_process_query(object, collector) ⇒ void
Execute query for a single object during in-process execution.
Methods inherited from Base
in_process, in_process?, in_process_visibility, #initialize, validator_name
Constructor Details
This class inherits a constructor from Yard::Lint::Validators::Base
Instance Method Details
#in_process_query(object, collector) ⇒ void
This method returns an undefined value.
Execute query for a single object during in-process execution. Checks if @abstract methods have implementation.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/yard/lint/validators/semantic/abstract_methods/validator.rb', line 18 def in_process_query(object, collector) return unless object.has_tag?(:abstract) return unless object.is_a?(YARD::CodeObjects::MethodObject) # Check if method has actual implementation (not just NotImplementedError) source = begin object.source rescue StandardError nil end return unless source && !source.empty? # Simple heuristic: abstract methods should be empty or raise NotImplementedError lines = source.split("\n").map(&:strip).reject(&:empty?) # Skip def line and end body_lines = lines[1...-1] || [] has_real_implementation = body_lines.any? do |line| !line.start_with?('#') && !line.include?('NotImplementedError') && !line.include?('raise') && line != 'end' end return unless has_real_implementation collector.puts "#{object.file}:#{object.line}: #{object.title}" collector.puts 'has_implementation' end |