Ceedling命令执行时总是输出废弃提示信息的原因与解决办法
通过Msys2执行pacman -S mingw-w64-x86_64-ruby安装Ruby 3.1.3-2,再在cmd中运行gem install ceedling完成Ceedling首次安装。但执行任何Ceedling命令时,都会先输出以下弃用警告:
Welcome to Ceedling!
CallingDidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please callDidYouMean.correct_error(error_name, spell_checker)' instead.
警告输出后才会显示命令的正确结果,例如执行ceedling version时,输出会包含上述提示和版本信息。
该警告是因为当前安装的Ceedling版本使用了DidYouMean库的旧API,而Ruby 3.1.x对DidYouMean库的API进行了更新,废弃了SPELL_CHECKERS.merge!的调用方式,要求改用DidYouMean.correct_error方法。两者API不兼容,因此触发了弃用警告。
升级Ceedling到兼容Ruby 3.1的版本
在cmd中执行以下命令升级Ceedling:gem update ceedling新版本的Ceedling已修复该API兼容问题,升级后警告会自动消失。
降级Ruby至与当前Ceedling版本兼容的版本
若暂时不想升级Ceedling,可通过Msys2安装Ruby 3.0.x系列版本(该版本的DidYouMean库仍支持旧API),示例命令:pacman -S mingw-w64-x86_64-ruby3.0安装完成后切换到该Ruby环境,重新安装Ceedling即可避免警告。
临时屏蔽弃用警告(不推荐)
若仅需临时隐藏警告,可在执行Ceedling命令时添加Ruby的警告屏蔽参数,示例:RUBYOPT="-W:no-deprecated" ceedling version此方法仅隐藏警告,未从根本解决API兼容问题,不建议长期使用。
内容的提问来源于stack exchange,提问作者Eyal Gerber

