致命的 #1055
完了設定を開くと落ちる
説明
develop ブランチで設定を開くと落ちます。cobodo 氏が発見しました。
の35行目の
@core/plugin/settings/setting_dsl.rbsuper()
の引数に plugin
を渡していないため落ちているようです。
落ちた際のログは https://gist.github.com/cobodo/32b5a9594d95f122db8c146460db82e5 の cobodo 氏が上げたものを参照してください。
後ほど修正したコミットを上げます。
バックトレース
/Users/ahiru/mikutter/source/core/mui/gtk_form_dsl.rb:10:in `initialize': wrong number of arguments (given 0, expected 1)
from /Users/ahiru/mikutter/source/core/plugin/settings/setting_dsl.rb:35:in `initialize'
from /Users/ahiru/mikutter/source/core/plugin/settings/settings.rb:37:in `new'
from /Users/ahiru/mikutter/source/core/plugin/settings/settings.rb:37:in `block in setting_window'
from /Users/ahiru/mikutter/source/core/plugin/settings/settings.rb:32:in `each'
from /Users/ahiru/mikutter/source/core/plugin/settings/settings.rb:32:in `setting_window'
from /Users/ahiru/mikutter/source/core/plugin/settings/settings.rb:20:in `block (2 levels) in <top (required)>'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/listener.rb:25:in `call'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:97:in `block (2 levels) in call_all_listeners'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:96:in `each'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:96:in `block in call_all_listeners'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:95:in `catch'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:95:in `call_all_listeners'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/pluggaloid-1.1.1/lib/pluggaloid/event.rb:39:in `block in call'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/delayer-0.0.2/lib/delayer/procedure.rb:24:in `run'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/delayer-0.0.2/lib/delayer/extend.rb:58:in `run_once'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/delayer-0.0.2/lib/delayer/extend.rb:30:in `run'
from /Users/ahiru/mikutter/source/vendor/bundle/ruby/2.4.0/gems/delayer-0.0.2/lib/delayer.rb:43:in `method_missing'
from /Users/ahiru/mikutter/source/core/plugin/gtk/delayer.rb:10:in `block in boot'
from /Users/ahiru/mikutter/source/core/plugin/gtk/mainloop.rb:10:in `main'
from /Users/ahiru/mikutter/source/core/plugin/gtk/mainloop.rb:10:in `mainloop'
from mikutter.rb:68:in `boot!'
from mikutter.rb:97:in `<main>'
Osamu Koga さんが7年以上前に更新
setting_dsl.rbとgtk_form_dsl.rbでコードの重複があり、そもそも元から正しくリファクタリングされてなかったように見えます。moduleのコンストラクタが独自に引数を取ると、複数のそういうmoduleをincludeしたときに必ず壊れたりして面倒なので、setting_dsl.rbではDSL関連のことは
def initialize(plugin) @plugin = plugin super() end
だけやっておいて、ブロックの処理とかmethod_missingとかを全部gtk_form_dsl.rbに巻き取らせるのが良いように思います。
あひる 家鴨 さんが7年以上前に更新
動作確認しました。
topic/1055-fix-dsl-initialize-osak の方が適切に修正されてるので、osak ブランチをマージしたいと思ってますが toshi_a 初音 さんどうでしょうか。