class Referral::ScansTokens
Public Class Methods
new()
click to toggle source
# File lib/referral/scans_tokens.rb, line 7 def initialize @expands_directories = ExpandsDirectories.new @translates_node_to_token = TranslatesNodeToToken.new @tokenizes_identifiers = TokenizesIdentifiers.new end
Public Instance Methods
call(files:, &blk)
click to toggle source
# File lib/referral/scans_tokens.rb, line 13 def call(files:, &blk) @expands_directories.call(files).flat_map { |file| begin root = RubyVM::AbstractSyntaxTree.parse_file(file) find_tokens([root], nil, file) rescue SyntaxError => e warn "ERROR: Failed to parse \"#{file}\": #{e.message} (#{e.class})" rescue SystemCallError => e warn "ERROR: Failed to read \"#{file}\": #{e.message} (#{e.class})" end }.compact end
Private Instance Methods
find_tokens(nodes, parent, file)
click to toggle source
# File lib/referral/scans_tokens.rb, line 28 def find_tokens(nodes, parent, file) nodes.flat_map { |node| next unless node.is_a?(RubyVM::AbstractSyntaxTree::Node) if (token = @translates_node_to_token.call(node, parent, file)) @tokenizes_identifiers.call(node, token) [token, *find_tokens(node.children[1..-1], token, file)] else find_tokens(node.children, parent, file) end }.compact end