Module: JRuby::Lint::Checkers::CheckGemNode
Class Method Summary collapse
Instance Method Summary collapse
- #check_gem(collector, call_node) ⇒ Object
- #gem_name(node) ⇒ Object
- #jruby_gem_entry?(node) ⇒ Boolean
Class Method Details
.add_wiki_link_finding(collector) ⇒ Object
3 4 5 6 7 8 9 10 11 12 |
# File 'lib/jruby/lint/checkers/gem.rb', line 3 def self.add_wiki_link_finding(collector) unless @added_wiki_link collector.add_finding("For more on gem compatibility see http://wiki.jruby.org/C-Extension-Alternatives", [:gems, :info]).tap do |f| def f.to_s end end @added_wiki_link = true end end |
Instance Method Details
#check_gem(collector, call_node) ⇒ Object
41 42 43 44 45 46 47 48 49 |
# 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) ⇒ Object
14 15 16 17 |
# 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) ⇒ Boolean
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# 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 |