このドキュメントについて
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);