Class: A11y::Lint::CallNode

Inherits:
Object
  • Object
show all
Defined in:
lib/a11y/lint/call_node.rb

Overview

Wraps a Prism::CallNode with a rule-friendly query API.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(prism_node) ⇒ CallNode

Returns a new instance of CallNode.



11
12
13
# File 'lib/a11y/lint/call_node.rb', line 11

def initialize(prism_node)
  @prism_node = prism_node
end

Instance Attribute Details

#prism_nodeObject (readonly)

Returns the value of attribute prism_node.



9
10
11
# File 'lib/a11y/lint/call_node.rb', line 9

def prism_node
  @prism_node
end

Instance Method Details

#block?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/a11y/lint/call_node.rb', line 46

def block?
  !@prism_node.block.nil?
end

#find(name) ⇒ Object

Finds a receiverless call by method name in this node’s subtree (including self). Returns a CallNode or nil.



52
53
54
55
# File 'lib/a11y/lint/call_node.rb', line 52

def find(name)
  found = search_for_call(@prism_node, name)
  found ? self.class.new(found) : nil
end

#first_positional_arg_empty_string?Boolean

Returns:

  • (Boolean)


41
42
43
44
# File 'lib/a11y/lint/call_node.rb', line 41

def first_positional_arg_empty_string?
  first = positional_args.first
  first.is_a?(Prism::StringNode) && first.unescaped.empty?
end

#keyword?(*keys) ⇒ Boolean

Checks for a keyword argument by name.

keyword?(:alt)          => alt: or "alt" =>
keyword?(:aria, :label) => aria: { label: ... }
keyword?(:"aria-label") => "aria-label" =>

Returns:

  • (Boolean)


23
24
25
26
27
28
29
30
31
# File 'lib/a11y/lint/call_node.rb', line 23

def keyword?(*keys)
  return false unless (kw_hash = find_keyword_hash)

  if keys.length == 1
    flat_keyword?(kw_hash, keys[0])
  else
    nested_keyword?(kw_hash, keys[0], keys[1])
  end
end

#method_nameObject



15
16
17
# File 'lib/a11y/lint/call_node.rb', line 15

def method_name
  @prism_node.name.to_s
end

#positional_argsObject



33
34
35
36
37
38
39
# File 'lib/a11y/lint/call_node.rb', line 33

def positional_args
  return [] unless @prism_node.arguments

  @prism_node.arguments.arguments.reject do |a|
    a.is_a?(Prism::KeywordHashNode)
  end
end