class Rubydex::Linter::Rule
Base class for semantic lint rules. @abstract
Attributes
diagnostics
[R]
Array[Diagnostic]
Public Class Methods
(Graph, config: LinterConfig) → void
Source
# File lib/rubydex/linter/rule.rb, line 26 def initialize(graph, config:) @graph = graph @config = config @diagnostics = [] #: Array[Diagnostic] @verified_severity = nil #: singleton(Severity::Base)? end
() → String
Source
# File lib/rubydex/linter/rule.rb, line 10 def rule_name name #: as !nil .split("::").last #: as !nil end
Public Instance Methods
(String) → Enumerable[Rubydex::Class]
Source
# File lib/rubydex/linter/rule.rb, line 58 def child_classes(base_name) required_namespace(base_name).descendants.lazy.filter_map do |child_declaration| next unless child_declaration.is_a?(Rubydex::Class) next if child_declaration.name == base_name child_declaration end end
Returns every class inheriting from base_name, excluding the base class itself.
Source
# File lib/rubydex/linter/rule.rb, line 52 def diagnostic_location(definition) definition.name_location || definition.location end
Anchors a diagnostic on a definition’s name token, falling back to its full range when no name location exists.
() → void
Source
# File lib/rubydex/linter/rule.rb, line 46 def lint raise NotImplementedError, "Subclasses must implement the lint method" end
@abstract
Source
# File lib/rubydex/linter/rule.rb, line 76 def required_method(namespace, method_name) method = namespace.find_member(method_name) return method if method.is_a?(Rubydex::Method) raise MissingGraphDependencyError.new(rule_name, "`#{namespace.name}##{method_name}`") end
(String) → Namespace
Source
# File lib/rubydex/linter/rule.rb, line 68 def required_namespace(name) declaration = graph[name] return declaration if declaration.is_a?(Namespace) raise MissingGraphDependencyError.new(rule_name, "`#{name}`") end
() → String
Source
# File lib/rubydex/linter/rule.rb, line 84 def rule_name self.class.rule_name end
() → singleton(Severity::Base)
Source
# File lib/rubydex/linter/rule.rb, line 35 def severity raise NotImplementedError, "Subclasses must implement the severity method" end
@abstract
() → singleton(Severity::Base)
Source
# File lib/rubydex/linter/rule.rb, line 40 def verified_severity @verified_severity ||= config.severity_for(self.class, default: severity) end
Protected Instance Methods
# File lib/rubydex/linter/rule.rb, line 95 def add_diagnostic(message, location, related_information: []) @diagnostics << Diagnostic.new( rule: self.class.rule_name, message: message, location: location, severity: verified_severity, related_information: related_information, ) end