module JRuby::Lint::Checkers::CheckGemNode

Public Class Methods

Public Instance Methods

check_gem(collector, call_node) click to toggle source
# File lib/jruby/lint/checkers/gem.rb, line 41
def check_gem(collector, call_node)
  @gems ||= collector.project.libraries.gems
  gem_name = gem_name(call_node)
  if gem_name && jruby_gem_entry?(call_node) && instructions = @gems[gem_name]
    CheckGemNode.add_wiki_link_finding(collector)
    msg = "Found gem '#{gem_name}' which is reported to have some issues:\n#{instructions}"
    collector.add_finding(msg, [:gems, :warning], call_node.line+1)
  end
end
gem_name(node) click to toggle source
# File lib/jruby/lint/checkers/gem.rb, line 14
def gem_name(node)
  first_arg = node&.args_node&.child_nodes[0]
  first_arg.value.to_s if first_arg&.node_type&.to_s == "STRNODE"
end
jruby_gem_entry?(node) click to toggle source
# File lib/jruby/lint/checkers/gem.rb, line 19
def jruby_gem_entry?(node)
  node&.args_node&.child_nodes.each do |child|
    if child&.node_type&.to_s == "HASHNODE"
      child.pairs.each do |pair|
        return false if pair.key.name == :platform &&
                        pair.value.name != :jruby
      end
    end
  end

  # platform(:mri, ...) { gem 'rdiscount' }
  # FIXME: Esoteric use of platform(...) { group(...) {} } is still broken
  if grand_parent.kind_of?(org::jruby::ast::CallNode) &&
     grand_parent.name == :platforms
    grand_parent.args_node.child_nodes.each do |child|
      return false if child&.name != :jruby
    end
  end

  true  
end