class YARDSorbet::Handlers::SigHandler

A YARD Handler for Sorbet type declarations

Constants

ATTR_NODE_TYPES

These node types attached to sigs represent attr_* declarations

Public Instance Methods

process() click to toggle source
# File lib/yard-sorbet/handlers/sig_handler.rb, line 20
def process
  method_node = NodeUtils.get_method_node(NodeUtils.sibling_node(statement))
  docstring, directives = Directives.extract_directives(statement.docstring)
  parse_sig(method_node, docstring)
  method_node.docstring = docstring.to_raw
  Directives.add_directives(method_node.docstring, directives)
  statement.docstring = nil
end

Private Instance Methods

parse_params(method_node, node, docstring) click to toggle source
# File lib/yard-sorbet/handlers/sig_handler.rb, line 52
def parse_params(method_node, node, docstring)
  return if ATTR_NODE_TYPES.include?(method_node.type)

  sibling = NodeUtils.sibling_node(node)
  sibling[0][0].each do |p|
    param_name = p[0][0]
    types = SigToYARD.convert(p.last)
    TagUtils.upsert_tag(docstring, 'param', types, param_name)
  end
end
parse_return(node, docstring) click to toggle source
# File lib/yard-sorbet/handlers/sig_handler.rb, line 64
def parse_return(node, docstring)
  type = node.source == 'void' ? ['void'] : SigToYARD.convert(NodeUtils.sibling_node(node))
  TagUtils.upsert_tag(docstring, 'return', type)
end
parse_sig(method_node, docstring) click to toggle source
# File lib/yard-sorbet/handlers/sig_handler.rb, line 32
def parse_sig(method_node, docstring)
  NodeUtils.bfs_traverse(statement) do |n|
    case n.source
    when 'abstract'
      YARDSorbet::TagUtils.upsert_tag(docstring, 'abstract')
    when 'params'
      parse_params(method_node, n, docstring)
    when 'returns', 'void'
      parse_return(n, docstring)
    end
  end
end