Class: Herb::Engine::Validator

Inherits:
Visitor
  • Object
show all
Defined in:
lib/herb/engine/validator.rb,
sig/herb/engine/validator.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Visitor

#visit, #visit_all, #visit_cdata_node, #visit_child_nodes, #visit_document_node, #visit_erb_begin_node, #visit_erb_block_node, #visit_erb_case_match_node, #visit_erb_case_node, #visit_erb_content_node, #visit_erb_else_node, #visit_erb_end_node, #visit_erb_ensure_node, #visit_erb_for_node, #visit_erb_if_node, #visit_erb_in_node, #visit_erb_node, #visit_erb_open_tag_node, #visit_erb_render_node, #visit_erb_rescue_node, #visit_erb_strict_locals_node, #visit_erb_unless_node, #visit_erb_until_node, #visit_erb_when_node, #visit_erb_while_node, #visit_erb_yield_node, #visit_html_attribute_name_node, #visit_html_attribute_node, #visit_html_attribute_value_node, #visit_html_close_tag_node, #visit_html_comment_node, #visit_html_conditional_element_node, #visit_html_conditional_open_tag_node, #visit_html_doctype_node, #visit_html_element_node, #visit_html_omitted_close_tag_node, #visit_html_open_tag_node, #visit_html_text_node, #visit_html_virtual_close_tag_node, #visit_literal_node, #visit_node, #visit_ruby_html_attributes_splat_node, #visit_ruby_literal_node, #visit_ruby_parameter_node, #visit_ruby_render_keywords_node, #visit_ruby_render_local_node, #visit_whitespace_node, #visit_xml_declaration_node

Methods included from AST::Helpers

#erb_comment?, #erb_graphql?, #erb_output?, #erb_outputs?, #inline_ruby_comment?

Constructor Details

#initialize(enabled: true) ⇒ Validator

Returns a new instance of Validator.

Parameters:

  • enabled: (Object) (defaults to: true)


8
9
10
11
12
13
# File 'lib/herb/engine/validator.rb', line 8

def initialize(enabled: true)
  super()

  @enabled = enabled
  @diagnostics = []
end

Instance Attribute Details

#diagnosticsObject (readonly)

Returns the value of attribute diagnostics.

Returns:

  • (Object)


6
7
8
# File 'lib/herb/engine/validator.rb', line 6

def diagnostics
  @diagnostics
end

#enabledObject (readonly)

Returns the value of attribute enabled.

Returns:

  • (Object)


6
7
8
# File 'lib/herb/engine/validator.rb', line 6

def enabled
  @enabled
end

Instance Method Details

#add_diagnostic(message, location, severity, code: nil, source: nil) ⇒ Object

Parameters:

  • message (Object)
  • location (Object)
  • severity (Object)
  • code: (Object) (defaults to: nil)
  • source: (Object) (defaults to: nil)

Returns:

  • (Object)


67
68
69
70
71
72
73
74
75
76
77
# File 'lib/herb/engine/validator.rb', line 67

def add_diagnostic(message, location, severity, code: nil, source: nil)
  diagnostic = {
    message: message,
    location: location,
    severity: severity,
    code: code,
    source: source || self.class.name,
  }

  @diagnostics << diagnostic
end

#clear_diagnosticsObject

Returns:

  • (Object)


55
56
57
# File 'lib/herb/engine/validator.rb', line 55

def clear_diagnostics
  @diagnostics.clear
end

#diagnostic_count(severity = nil) ⇒ Object

Parameters:

  • severity (Object) (defaults to: nil)

Returns:

  • (Object)


59
60
61
62
63
# File 'lib/herb/engine/validator.rb', line 59

def diagnostic_count(severity = nil)
  return @diagnostics.length unless severity

  @diagnostics.count { |diagnostic| diagnostic[:severity] == severity }
end

#enabled?Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/herb/engine/validator.rb', line 15

def enabled?
  @enabled
end

#error(message, location, code: nil, source: nil) ⇒ Object

Parameters:

  • message (Object)
  • location (Object)
  • code: (Object) (defaults to: nil)
  • source: (Object) (defaults to: nil)

Returns:

  • (Object)


23
24
25
# File 'lib/herb/engine/validator.rb', line 23

def error(message, location, code: nil, source: nil)
  add_diagnostic(message, location, :error, code: code, source: source)
end

#errorsObject

Returns:

  • (Object)


47
48
49
# File 'lib/herb/engine/validator.rb', line 47

def errors
  @diagnostics.select { |diagnostic| diagnostic[:severity] == :error }
end

#errors?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/herb/engine/validator.rb', line 39

def errors?
  @diagnostics.any? { |diagnostic| diagnostic[:severity] == :error }
end

#hint(message, location, code: nil, source: nil) ⇒ Object

Parameters:

  • message (Object)
  • location (Object)
  • code: (Object) (defaults to: nil)
  • source: (Object) (defaults to: nil)

Returns:

  • (Object)


35
36
37
# File 'lib/herb/engine/validator.rb', line 35

def hint(message, location, code: nil, source: nil)
  add_diagnostic(message, location, :hint, code: code, source: source)
end

#info(message, location, code: nil, source: nil) ⇒ Object

Parameters:

  • message (Object)
  • location (Object)
  • code: (Object) (defaults to: nil)
  • source: (Object) (defaults to: nil)

Returns:

  • (Object)


31
32
33
# File 'lib/herb/engine/validator.rb', line 31

def info(message, location, code: nil, source: nil)
  add_diagnostic(message, location, :info, code: code, source: source)
end

#validate(node) ⇒ Object

Parameters:

  • node (Object)

Returns:

  • (Object)


19
20
21
# File 'lib/herb/engine/validator.rb', line 19

def validate(node)
  visit(node)
end

#warning(message, location, code: nil, source: nil) ⇒ Object

Parameters:

  • message (Object)
  • location (Object)
  • code: (Object) (defaults to: nil)
  • source: (Object) (defaults to: nil)

Returns:

  • (Object)


27
28
29
# File 'lib/herb/engine/validator.rb', line 27

def warning(message, location, code: nil, source: nil)
  add_diagnostic(message, location, :warning, code: code, source: source)
end

#warningsObject

Returns:

  • (Object)


51
52
53
# File 'lib/herb/engine/validator.rb', line 51

def warnings
  @diagnostics.select { |diagnostic| diagnostic[:severity] == :warning }
end

#warnings?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/herb/engine/validator.rb', line 43

def warnings?
  @diagnostics.any? { |diagnostic| diagnostic[:severity] == :warning }
end