RMagick 使うと Unresolved Ruby reference の warning が RubyMine で出まくるのをなんとかしたい、けどできない


このドキュメントについて

Ruby開発環境にRubyMine使おうととりあえず入れてみていろいろ確認中、 「Code > Inspect Code」 から静的解析を実行したら "Unresolved Ruby reference" がたくさん出て困った時のメモ

原因と解決方法

  • 対象のメソッドがRubyの拡張ライブラリで実装されているので警告出ちゃう
  • 解決できない。。。

現象

rmagick 使っててその関係のオブジェクトのメソッド等は全部出てる感じ。以下のコードの font pointsize get_multiline_type_metrics の全部に警告出る。なんで?

test.rb
    draw = Magick::Draw.new
    draw.font = font
    draw.pointsize = size
    metrics = draw.get_multiline_type_metrics(message)

調査中

RMagickの実装をみる

実装を確認↓したけど get_multiline_type_metrics が定義されてない。拡張ライブラリとして実装されているっぽい。

magick_internal.rb
  class Draw
    # Thse hashes are used to map Magick constant
    # values to the strings used in the primitives.
    ALIGN_TYPE_NAMES = {
      LeftAlign.to_i => 'left',
      RightAlign.to_i => 'right',
      CenterAlign.to_i => 'center'
    }.freeze

.... 省略

確かに実装されてた。

rmmain.c
rb_define_method(Class_Draw, "get_type_metrics", Draw_get_type_metrics, -1);
rb_define_method(Class_Draw, "get_multiline_type_metrics", Draw_get_multiline_type_metrics, -1);